반응형
쿠버네티스에서 Helm을 사용하여 배포를 관리할 경우 configmap이나 secret을 변경하고 helm upgrade 했을 때 기본적으로 관련 pod들은 재시작하지 않는다. 그래서 실제적으로 configmap, secret의 변경 내용이 pod에 반영이 안된다. 예를 들면 아래와 같은 케이스이다.
# configmap, secret 변경
vi app-configmap.yaml
# helm upgrade로 반영
helm upgrade app -f values.yaml .
# pod 재시작 여부 확인 => (재시작 안됨 = 변경 내용 어플리케이션에 반영 안됨)
kubectl get po
configmap, secret 변경 시 pod 자동 재시작을 위해서 deployment나 pod yaml에 아래 설정을 추가하면 가능해진다.
kind: Deployment
spec:
template:
metadata:
annotations:
checksum/config: {{ include (print $.Template.BasePath "app-configmap.yaml") . | sha256sum }}
checksum/secret: {{ include (print $.Template.BasePath "app-secret.yaml") . | sha256sum }}
... 생략 ...
checksum annotations을 추가하는 방식으로 helmchart template 경로에 있는 "app-configmap.yaml", "app-secret.yaml" 파일이 변경되면 이 annotations 값이 변경되고(= deployment.yaml 파일 변경), helm upgrade 시 pod가 재시작 된다.
다른 방법으로는 randAlphaNum을 사용하는 방법도 있다.
kind: Deployment
spec:
template:
metadata:
annotations:
rollme: {{ randAlphaNum 5 | quote }}
... 생략 ...
매번 랜덤한 문자,숫자를 생성해서 deployment.yaml 파일이 변경되었다고 인식시키는 방법으로 pod를 재시작 시킨다.
위의 checksum 방식은 configmap, secret 2파일을 대상으로 하지만, randAlphaNum 방식은 모든 upgrade 시 pod를 재시작 시킨다는 차이점이 있다.
참고:
https://stackoverflow.com/questions/52658839/helm-chart-restart-pods-when-configmap-changes
반응형
'개발 > Docker&kubernetes' 카테고리의 다른 글
Docker ENV vs RUN Export (0) | 2023.07.22 |
---|---|
Docker 리소스 일괄 삭제(docker system prune)-미사용 Docker 리소스 모두 삭제 (0) | 2023.05.29 |
Distroless 이미지로 안전하고 최적화된 이미지 생성 (0) | 2023.03.13 |
AWS EKS 구성 및 컨테이너 웹 어플리케이션 배포 - 2 (0) | 2023.02.10 |
K3s 인증서 갱신(certificate has expired or is not yet valid) (0) | 2023.01.15 |
댓글