Link Search Menu Expand Document

효과적인 애플리케이션 구성 및 관리

애플리케이션에 컨피그맵(ConfigMap)을 이용해 추가 설정 넣기

ConfigMap 활용 방법

효과적인 애플리케이션 구성 및 관리 - 01 컨피그맵

  • ConfigMap 오브젝트를 생성하여 컨테이너에서 envFrom.configMapRef로 사용할 수 있음

효과적인 애플리케이션 구성 및 관리 - 04 컨피그맵

  • 다음과 같이 ConfigMap이 변경되면 같은 애플리케이션이 다른 내용을 출력함

효과적인 애플리케이션 구성 및 관리 - 02 컨피그맵

  • env.name을 설정하고 valueFrom.configMapKeyRef를 사용할 수도 있음

효과적인 애플리케이션 구성 및 관리 - 03 컨피그맵

  • configMap 자체를 볼륨으로 마운트할 수도 있음
  • 소프트 링크로 ConfigMap의 데이터가 연결됨

애플리케이션에 시크릿(Secret)을 이용해 추가 설정을 암호화해서 넣기

secrets.yaml

효과적인 애플리케이션 구성 및 관리 - 05 시크릿

  • kubectl create secret 명령어로 추가 설정 암호화
  • 노출되는 순간 쉽게 디코딩이 가능하므로 보안에 유의

deploy-secretKeyRef-w-pvc.yaml

효과적인 애플리케이션 구성 및 관리 - 06 시크릿

  • secretKeyRef
    • name: 생성한 Secret 이름
    • key: Secret에 저장한 추가 설정

변경할 수 없는(immutable) 시크릿과 컨피그맵

효과적인 애플리케이션 구성 및 관리 - 07 시크릿

애플리케이션 롤링 업데이트

롤링 업데이트 과정

효과적인 애플리케이션 구성 및 관리 - 08 롤링 업데이트

  1. set image 명령어로 롤링 업데이트 요청
  2. 업데이트를 요청받은 디플로이먼트는 레플리카셋을 하나 생성
  3. 새 레플리카셋에서 파드가 하나 준비되면 기존 레플리카셋에서 파드를 하나 제거

롤링 업데이트 예시

효과적인 애플리케이션 구성 및 관리 - 09 롤링 업데이트

  1. k set image deployment deploy-rollout nginx-nginx-1.21.0 deploy-rollout의 Nginx를 1.21.0으로 업데이트
  2. k set image deployment deploy-rollout nginx-nginx-1.21.21 잘못된 버전의 이미지를 사용하여 디플로이먼트가 ErrImagePull 상태가 됨
  3. k rollout undo deployment deploy-rollout 2에서 실행한 명령어를 취소하고 2번 상태로 되돌림
  4. k rollout undo deployment deploy-rollout --to-revision=1 1번 상태로 되돌림

--record는 사라질 예정 https://kubernetes.io/docs/reference/using-api/deprecation-policy/#rest-resources-aka-api-objects https://github.com/kubernetes/kubernetes/issues/40422

애플리케이션을 동적으로 배포하기 (kustomize)

효과적인 애플리케이션 구성 및 관리 - 10 kustomize

  • 위와 같이 다수의 오브젝트를 배포하는 경우 이미지의 버전을 일괄적으로 변경할 필요가 있음

효과적인 애플리케이션 구성 및 관리 - 11 kustomize

  • kustomize create 명령어로 yaml 파일을 동적으로 변경 및 통합
  • kustomize build | kubectl apply -f - 명령어로 빌드 및 배포 가능
    • -는 앞의 명령어에서 생성된 결과를 입력으로 사용하겠다는 의미

애플리케이션을 더욱더 쉽게 배포하기 (helm)

  • kubectl, kustomize에 비하여 더욱 더 쉽게 동적인 배포 가능

헬름 동작 환경

효과적인 애플리케이션 구성 및 관리 - 12 helm

  • 사용자는 저장소 등록, 릴리즈 설치 방법만 알면 helm을 사용 가능

헬름으로 MetalLB를 간편하게 설치

효과적인 애플리케이션 구성 및 관리 - 13 helm

  • helm repo add 명렁어로 저장소를 등록
  • 저장소 등록 이후 관습적으로 helm repo update 실행
  • IP 설정이 필요하므로 values.yaml 작성

헬름으로 NFS Provisioner를 간편하게 설치

효과적인 애플리케이션 구성 및 관리 - 14 helm

헬름 차트를 하드포크해서 k8s-edu 레포로

효과적인 애플리케이션 구성 및 관리 - 15 helm

  • 헬름으로 설치한 프로그램을 삭제할 경우 helm uninstall 사용 권장

애플리케이션의 자원 사용량 확인하기 (메트릭 서버 / Metrics-server)

효과적인 애플리케이션 구성 및 관리 - 16 Metrics-server

  • 워커 노드는 계측값(CPU, 메모리 사용량)을 수집해서 메트릭 서버로 보냄
  • kubectl top resource name 명령어로 자원 사용량을 확인할 수 있음

자원 상태에 따라 애플리케이션을 자동으로 조절하기(HPA)

효과적인 애플리케이션 구성 및 관리 - 17 HPA

  • Horizontal Pod Autoscaler (HPA)를 사용하여 자원이 더 필요할 경우 동적인 scaling 수행
    1. kubectl autoscale deployment deployment-name 명령어
    2. yaml 파일로 직접 HorizontalPodAutoscaler 배포

애플리케이션을 웹UI에서 관리하기(kube dashboard)

효과적인 애플리케이션 구성 및 관리 - 18 kube dashboard

  • kube dashboard는 모니터링, 리소스 조작 기능을 지원
  • 실무에서는 잘 사용하지 않음