전공영역 공부 기록

기존 리소스가 있는 상태에서 helm release하면?

악분 2023. 3. 12. 19:32
반응형

주제

기존 쿠버네티스 리소스가 있는 상태에서 똑같은 이름(.metatdata.name)으로 helm release를 하면 에러가 발생합니다. 에러 메세지는 아래와 같습니다. 왜 이 에러가 발생할까요?

 

예제코드: https://github.com/sungwook-practice/helm-release-error-case
helm install helm-test ./charts

 

  • 에러 메세지 키워드
exists and cannot be imported into the current release: invalid ownership metadata; label validation error: missing key "app.kubernetes.io/managed-by": must be set to "Helm"; annotation validation error: missing key "meta.helm.sh/release-name"

 

에러 원인

helm 공식문서에서 답을 찾을 수 있습니다. helm은 자기가 배포했다는 식별을 labels과 annotations으로 구분합니다.

출처:  https://helm.sh/docs/chart_best_practices/labels/

 

helm으로 배포된 리소스를 describe하면, 공식문서에 언급한거처럼 labels, annotations에 helm식별자가 존재합니다.

 

이제 다시 에러메세지를 봐보면 왜 에러가 발생했는지 눈에 보일겁니다. helm식별자가 labels과 annotations에 없다고 되어있죠? 기존 리소스가 helm으로 release되지 않았다고 판단하여 에러가 발생한겁니다.

 

해결방법

가장 깔끔한 방법은 데이터를 백업한 후 기존 리소스를 제거하고, helm으로 배포하는 것입니다. 이 방법을 적용할 수 없다고 판단되면, 수동으로 labels와 annotations에 helm 식별자를 추가해야 합니다. Helm으로 배포하고자 하는 모든 리소스에 대해 Helm 식별자를 추가해야 합니다.

 

아래 예제는 기존에 실행된 deployment에 helm 식별자를 추가했습니다. 이제 helm install명령어를 사용하여 차트를 release해보세요!

NAME=helm-test-nginx
RELEASE=helm-test
NAMESPACE=default

kubectl annotate deployment $NAME meta.helm.sh/release-name=$RELEASE
kubectl annotate deployment $NAME meta.helm.sh/release-namespace=$NAMESPACE
kubectl label deployment $NAME app.kubernetes.io/managed-by=Helm

 

참고자료

반응형