효과적인 애플리케이션 구성 및 관리
애플리케이션에 컨피그맵(ConfigMap)을 이용해 추가 설정 넣기
ConfigMap 활용 방법
ConfigMap
오브젝트를 생성하여 컨테이너에서 envFrom.configMapRef
로 사용할 수 있음
- 다음과 같이
ConfigMap
이 변경되면 같은 애플리케이션이 다른 내용을 출력함
env.name
을 설정하고 valueFrom.configMapKeyRef
를 사용할 수도 있음
configMap
자체를 볼륨으로 마운트할 수도 있음- 소프트 링크로
ConfigMap
의 데이터가 연결됨
애플리케이션에 시크릿(Secret)을 이용해 추가 설정을 암호화해서 넣기
secrets.yaml
kubectl create secret
명령어로 추가 설정 암호화- 노출되는 순간 쉽게 디코딩이 가능하므로 보안에 유의
deploy-secretKeyRef-w-pvc.yaml
secretKeyRef
name
: 생성한 Secret
이름key
: Secret
에 저장한 추가 설정
변경할 수 없는(immutable) 시크릿과 컨피그맵
애플리케이션 롤링 업데이트
롤링 업데이트 과정
set image
명령어로 롤링 업데이트 요청- 업데이트를 요청받은 디플로이먼트는 레플리카셋을 하나 생성
- 새 레플리카셋에서 파드가 하나 준비되면 기존 레플리카셋에서 파드를 하나 제거
롤링 업데이트 예시
k set image deployment deploy-rollout nginx-nginx-1.21.0
deploy-rollout
의 Nginx를 1.21.0으로 업데이트k set image deployment deploy-rollout nginx-nginx-1.21.21
잘못된 버전의 이미지를 사용하여 디플로이먼트가 ErrImagePull
상태가 됨k rollout undo deployment deploy-rollout
2에서 실행한 명령어를 취소하고 2번 상태로 되돌림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)
- 위와 같이 다수의 오브젝트를 배포하는 경우 이미지의 버전을 일괄적으로 변경할 필요가 있음
kustomize create
명령어로 yaml 파일을 동적으로 변경 및 통합kustomize build | kubectl apply -f -
명령어로 빌드 및 배포 가능-
는 앞의 명령어에서 생성된 결과를 입력으로 사용하겠다는 의미
애플리케이션을 더욱더 쉽게 배포하기 (helm)
kubectl
, kustomize
에 비하여 더욱 더 쉽게 동적인 배포 가능
헬름 동작 환경
- 사용자는 저장소 등록, 릴리즈 설치 방법만 알면 helm을 사용 가능
helm repo add
명렁어로 저장소를 등록- 저장소 등록 이후 관습적으로
helm repo update
실행 - IP 설정이 필요하므로
values.yaml
작성
헬름으로 NFS Provisioner를 간편하게 설치
헬름 차트를 하드포크해서 k8s-edu 레포로
- 헬름으로 설치한 프로그램을 삭제할 경우
helm uninstall
사용 권장
애플리케이션의 자원 사용량 확인하기 (메트릭 서버 / Metrics-server)
- 워커 노드는 계측값(CPU, 메모리 사용량)을 수집해서 메트릭 서버로 보냄
kubectl top resource name
명령어로 자원 사용량을 확인할 수 있음
자원 상태에 따라 애플리케이션을 자동으로 조절하기(HPA)
- Horizontal Pod Autoscaler (HPA)를 사용하여 자원이 더 필요할 경우 동적인 scaling 수행
kubectl autoscale deployment deployment-name
명령어- yaml 파일로 직접 HorizontalPodAutoscaler 배포
애플리케이션을 웹UI에서 관리하기(kube dashboard)
- kube dashboard는 모니터링, 리소스 조작 기능을 지원
- 실무에서는 잘 사용하지 않음