본문 바로가기

쿠버네티스

helm Chart로 생성한 object 수동 삭제하기

Kubernetes 환경에서 리소스를 빠르게 배포하고 관리하기 위한 방법으로 Helm Chart를 사용합니다. Helm Chart는 Kubernetes 애플리케이션을 패키징하고 배포하는 템플릿화된 YAML 파일 모음입니다.

 

 

 

 

Helm Chart는 helm install 명령어를 통해 쉽게 배포하며, helm uninstall 명령어를 통해 helm을 통해 생성된 오브젝트들을 손쉽게 삭제할 수 있습니다. 그러나 상황에 따라 helm uninstall 명령어를 통해 생성한 오브젝트들이 정상적으로 삭제되지 않는 경우가 있습니다. 이번 글에서는 helm uninstall 명령어로 삭제되지 않은 오브젝트들을 수동으로 삭제하는 방법에 대해 안내합니다.

 

 

 

helm Chart로 생성한 object 수동 삭제하기

 

 

목 차

1. Helm으로 생성된 오브젝트 이해하기

Helm으로 애플리케이션을 배포하면 여러 Kubernetes 리소스(Deployment, Service, ConfigMap, Secret 등)가 함께 생성됩니다. 이때 Helm은 배포 정보를 클러스터 내의 ConfigMap이나 Secret (Helm 버전 2인 경우 ConfigMap, Helm 3는 기본적으로 Secret)에 저장합니다.

 

수동으로 삭제하는 경우, 두 가지를 고려해야 합니다.

  1. 실제 Kubernetes 오브젝트 삭제
  2. Helm release 메타데이터 삭제

Helm이 관리하는 리소스를 직접 삭제하면 Helm release 정보는 남아 있을 수 있으므로, 이후 헬름 명령어를 사용할 때 혼란이 발생할 수 있습니다. 따라서 두 가지 모두 적절히 처리해야 합니다.

 

 


2. 단계별 삭제 절차

2.1. 1단계: 생성된 리소스 목록 확인

Helm release 이름(예: my-app)이 있다고 가정합니다.
우선, Helm 명령어를 사용하여 배포된 매니페스트를 확인합니다.

helm get manifest my-app > my-app-manifest.yaml

 

이 파일에는 배포 시 생성된 모든 리소스가 YAML 형식으로 기록되어 있습니다. 이를 통해 어떤 리소스가 생성되었는지 확인할 수 있습니다.

2.2. 2단계: 개별 리소스 YAML 파일 분리

Helm 매니페스트 파일은 여러 리소스가 --- 로 구분되어 포함되어 있습니다. 이 파일에서 개별 리소스별 YAML 파일을 분리할 수 있습니다.


예를 들어, 다음과 같은 내용이 있다고 가정해 봅니다.

 

- Deployment YAML (deployment.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-deployment
  labels:
    app: my-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-app:1.0.0
        ports:
        - containerPort: 80

 

- Service YAML (service.yaml)

apiVersion: v1
kind: Service
metadata:
  name: my-app-service
  labels:
    app: my-app
spec:
  type: ClusterIP
  selector:
    app: my-app
  ports:
    - port: 80
      targetPort: 80

 

추가적으로 ConfigMap, Ingress, Secret 등도 존재할 수 있으니, 동일하게 파일로 분리하여 저장합니다.

 

2.3. 3단계: kubectl 명령어를 사용한 오브젝트 삭제

 

분리한 YAML 파일을 이용해, 각 리소스를 삭제합니다.
아래는 kubectl delete -f 명령어를 이용한 예시입니다.

kubectl delete -f deployment.yaml
kubectl delete -f service.yaml
# 필요하다면 다른 리소스들도 삭제
kubectl delete -f configmap.yaml
kubectl delete -f ingress.yaml

 

이 방식은 YAML 파일에 정의된 리소스만 삭제하므로, 실수로 다른 리소스가 삭제되지 않도록 주의해야 합니다.

 

만약 여러 리소스가 하나의 파일에 있다면, 해당 파일을 지정하여 한 번에 삭제할 수도 있습니다.

kubectl delete -f my-app-manifest.yaml

 

2.4. 4단계: Helm release 메타데이터 삭제

 

Helm으로 생성된 리소스는 삭제했더라도 Helm release 메타데이터가 클러스터에 남아 있을 수 있습니다.
Helm 3을 사용하는 경우, release 정보는 Secret에 저장됩니다. 이를 삭제하려면 다음과 같이 helm uninstall 명령어를 사용합니다.

helm uninstall my-app

 

이 명령어는 Helm release 정보(메타데이터)와 함께 관련된 일부 리소스(예: 롤백 기록 등)를 삭제합니다.

 

 

2.5. 5단계: 삭제 여부 확인

 

삭제가 제대로 되었는지 확인하는 방법은 두 가지입니다.

(1) kubectl 명령어로 리소스 확인

배포한 namespace 내에 관련 리소스가 남아있는지 확인합니다.

kubectl get all -l app=my-app

 

또는 namespace 전체를 확인하여, 삭제 대상 리소스가 없는지 점검합니다.

kubectl get deployments,services,ingresses,configmaps,secrets --all-namespaces | grep my-app

 

(2) Helm release 확인

 

Helm release가 삭제되었는지 확인하려면 다음 명령어를 실행합니다.

helm list -A

 

출력 결과에 my-app이 없다면 Helm release 정보가 삭제된 것입니다.

 


3. 추가 고려사항 및 주의사항

  • 리소스 의존성: 여러 리소스 간의 의존성이 있을 수 있으므로, 삭제 순서를 고려해야 합니다. 예를 들어, Deployment가 삭제되면 Pod가 종료되고, 이로 인해 Service가 트래픽을 받지 않게 되는 등 영향이 있으므로, 운영 중인 환경에서는 삭제 전에 충분한 백업 및 확인 절차가 필요합니다.
  • Namespace 사용: 만약 별도의 namespace에 Helm release를 배포한 경우, 해당 namespace를 지정하여 확인 및 삭제 작업을 진행합니다.
    • kubectl delete -f deployment.yaml -n my-namespace
    • helm uninstall my-app -n my-namespace
    • kubectl get all -n my-namespace
  • Helm 기록 삭제 후 재설치: 수동 삭제 후 Helm release 정보가 남아있으면, 재설치 시 문제가 발생할 수 있으므로 반드시 helm uninstall 명령어로 release 정보를 제거한 후 재설치해야 합니다.

 

 

 


4. 요약정리

  1. Helm 매니페스트 확인 및 파일 분리
    • helm get manifest my-app > my-app-manifest.yaml 명령어로 매니페스트 파일을 확인
    • YAML 파일 예시(Deployment, Service 등)를 분리 저장
  2. kubectl을 이용한 리소스 삭제
    • 각 YAML 파일을 kubectl delete -f 명령어로 삭제
  3. Helm release 정보 삭제
    • helm uninstall my-app 명령어를 통해 Helm release 메타데이터 삭제
  4. 삭제 여부 확인
    • kubectl get all -l app=my-app 또는 kubectl get all 명령어로 리소스 상태 확인
    • helm list 명령어로 Helm release 정보 확인

 

이와 같이 단계별로 진행하면 Helm으로 생성된 Kubernetes 오브젝트와 관련된 메타데이터를 모두 삭제할 수 있으며, 이후 재설치나 다른 배포 작업 시 혼선 없이 클린 한 상태에서 작업을 진행할 수 있습니다.