Helm을 사용하여 Kubernetes에서 배포를 관리하는 경우 configmap 또는 secret을 변경한 다음 Helm을 업그레이드하면 관련 포드가 기본적으로 다시 시작되지 않습니다.
따라서 configmap 및 secret의 변경 사항은 실제로 Pod에 반영되지 않습니다.
예를 들면 다음과 같은 경우입니다.
# configmap, secret 변경
vi app-configmap.yaml
# helm upgrade로 반영
helm upgrade app -f values.yaml .
# pod 재시작 여부 확인 => (재시작 안됨 = 변경 내용 어플리케이션에 반영 안됨)
kubectl get po
configmap 및 secret이 변경될 때 포드를 자동으로 다시 시작하려면 배포 또는 포드 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 }}
... 생략 ...
체크섬 Helmchart 템플릿 경로에 있는 “app-configmap.yaml”, “app-secret.yaml” 파일에 주석을 추가하여 수정하면 주석 값이 변경(=파일 “deployment.yaml”이 수정됨), 러더를 업그레이드할 때 포드가 다시 시작됩니다.
다른 방식으로는 edgeAlphaNum이용하는 방법도 있습니다.
kind: Deployment
spec:
template:
metadata:
annotations:
rollme: {{ randAlphaNum 5 | quote }}
... 생략 ...
매번 임의의 문자와 숫자를 생성하여 deployment.yaml 파일이 변경되었음을 인식하여 Pod가 다시 시작됩니다.
위의 체크섬 방식은 configmap 및 secret 2 파일을 대상으로 하지만 randAlphaNum 방식은 업그레이드할 때마다 포드가 다시 시작된다는 차이점이 있습니다.
참조:
https://stackoverflow.com/questions/52658839/helm-chart-restart-pods-when-configmap-changes