helm 업그레이드 구성 카드, 비밀 변경 시 포드 자동 재시작

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

https://stackoverflow.com/questions/58602311/will-helm-upgrade-restart-pods-even-if-they-are-not-affected-by-upgrade