helm install
중에 자원이 아직 완전히 생성되지 않았거나 초기화 중일 때, helm uninstall
을 바로 실행하면 삭제가 실패하거나 멈춰버리는 현상이 발생할 수 있습니다. 이건 Helm과 Kubernetes 리소스의 상태 비일관성, finalizer, hook, 그리고 네트워크 지연 등 다양한 요인 때문입니다. 이번 글에서는 그 원인과 구체적인 메커니즘을 체계적으로 정리해 드립니다.
목 차
1. 헬름 설치 도중 uninstall이 실패할 수 있는 주요 원인
(1) 일부 리소스가 아직 Kubernetes API에 반영되지 않은 상태
helm install
은 Helm chart를 렌더링하여 리소스를 생성하는 명령을 Kubernetes에 보낸 후 바로 종료합니다.- 하지만 Kubernetes 내부에서 실제 리소스가 생성되기까지는 약간의 지연이 존재합니다.
helm uninstall
이 실행될 당시, Helm이 설치한 일부 리소스가 아직 생성되지 않았기 때문에, Helm은 삭제하려는 리소스를 찾지 못하고 internal error 또는 partial uninstall 상태에 빠질 수 있습니다.- 예:
helm uninstall
이 특정 deployment를 삭제하려고 시도했지만, 아직 해당 deployment가 실제로 존재하지 않음
(2) Hook 리소스 (pre-install
, post-install
)가 설치되기 전에 삭제됨
- Helm chart에
post-install
,pre-delete
같은 hook 리소스가 정의되어 있을 경우, helm install
도중 hook이 실행되기 전에uninstall
을 하면, hook이 완전히 등록되지 않아서 uninstall 중 오류 발생 가능
예: hook이 실행되기 전, uninstall 시점에 hook 리소스를 삭제하려다 실패
annotations:
"helm.sh/hook": post-install
(3) 일부 리소스가 생성되었으나 초기화되지 않아 finalizer에 의해 삭제 지연
helm install
도중 생성된 리소스가finalizers
를 가지고 있을 경우,helm uninstall
시 해당 리소스의 삭제가 Kubernetes에 의해 막힘- 대표적인 예: PVC, CRD 리소스, ValidatingWebhook, MutatingWebhook 등
(4) Helm release metadata 상태가 중간 상태 (pending-install
)에 머무름
- Helm은 설치 도중 릴리스 메타데이터를 Kubernetes Secret 또는 ConfigMap으로 저장합니다.
helm uninstall
이 이 메타데이터의 상태를 보고 동작하는데, 상태가pending-install
이면 uninstall 자체가 거부되거나 무한 대기 상태에 빠질 수 있음
확인:
helm list --all --all-namespaces
→ 상태가 pending-install
, pending-upgrade
, pending-uninstall
등으로 남아 있을 수 있음
2. Helm 내부 처리 흐름 (간략 요약)
helm install:
1. 릴리스 메타데이터 생성 (secret)
2. 리소스 템플릿 렌더링
3. Kubernetes API 서버에 리소스 생성 요청
4. hooks 실행
5. 상태 업데이트
helm uninstall:
1. 릴리스 메타데이터 조회
2. 모든 리소스 목록을 추적
3. 리소스에 대한 삭제 요청
4. hook (pre-delete/post-delete) 실행
5. 릴리스 메타데이터 삭제
→ 이 중 2~3단계 중 충돌이 발생하면 uninstall 실패
3. 해결 및 회피 방법
(1) helm install
후 일정 시간 대기
helm install mychart ./mychart -n test-ns
sleep 5
helm uninstall mychart -n test-ns
- 최소한의 리소스 생성/등록 시간이 필요
(2) --no-hooks
옵션 사용해 uninstall 수행
helm uninstall mychart -n test-ns --no-hooks
- hook 리소스 삭제 충돌을 피할 수 있음
(3) stuck 된 경우 Helm release 강제 삭제
kubectl -n test-ns delete secret -l "owner=helm,name=mychart"
→ Helm이 관리하던 릴리스 메타데이터를 제거하여 상태를 초기화
(4) hook이나 finalizer 리소스 직접 삭제
kubectl get all -n test-ns -l "release=mychart"
kubectl patch <리소스> -p '{"metadata":{"finalizers":[]}}' --type=merge
kubectl delete <리소스> --force --grace-period=0
요약 정리
helm uninstall 수행 시, 일부 리소스가 삭제 되지 않고 남아 있는 현상을 요약하면 다음과 같습니다.
원인 | 설명 | 해결 방법 |
리소스 생성 중 | API반영 전 uninstall 시도 | 리소스 생성 완료 후 uninstall |
hook 충돌 | post-install hook 등록 중 uninstall 시도 | --no-hooks 옵션 사용 |
finalizer로 삭제 지연 | 리로스에 finalizer 설정 | finalizer제거 후 강제 삭제 |
불완전한 release metadata | Helm release 상태가 pending | Helm secret 강제 삭제 |
'쿠버네티스' 카테고리의 다른 글
Kubernetes Multi Cluster (0) | 2025.03.24 |
---|---|
curl: (35) OpenSSL SSL_connect: Connection reset by peer (0) | 2025.03.22 |
helm Chart로 생성한 object 수동 삭제하기 (0) | 2025.03.15 |
PV, PVC, StorageClass 실습 (0) | 2025.03.13 |
Storage 3대장 이해하기 (4/4) - Object Storage (0) | 2025.03.07 |