본문 바로가기
개발/Docker&kubernetes

helm upgrade configmap, secret 변경 시 pod 자동 재시작

by 궁즉변 변즉통 통즉구 2023. 3. 20.
반응형

쿠버네티스에서 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

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

 

반응형

댓글