k8s

k8s cluster default namespace 자원 삭제

자바바라 2025. 3. 10. 19:55

Kubernetes 클러스터의 default 네임스페이스에 있는 리소스를 삭제하는 과정은 신중하게 접근해야 합니다. default 네임스페이스는 사용자가 명시적으로 네임스페이스를 지정하지 않았을 때 기본적으로 사용되는 공간이기 때문에, 의도치 않게 중요한 리소스를 삭제할 위험이 있습니다.

주의:

  • 삭제 전 반드시 백업: 삭제 작업 전에는 반드시 중요한 데이터를 백업해야 합니다.
  • 영향 범위 확인: default 네임스페이스에 어떤 리소스가 있는지, 삭제 시 어떤 영향을 미치는지 충분히 검토해야 합니다. 프로덕션 환경이라면 더욱 신중해야 합니다.
  • 불필요한 리소스만: 꼭 필요한 리소스는 삭제하지 않도록 주의합니다.

삭제 과정 개요 및 단계별 명령어:

  1. default 네임스페이스의 리소스 목록 확인:
    • 어떤 리소스가 있는지 확인하여 삭제할 대상을 정확히 파악합니다.
    • 명령어: kubectl get all -n defult
      이 명령어는 네임스페이스가 지정된 모든 리소스 종류를 가져와서 
      각 종류별로 default 네임스페이스의 리소스 목록을 출력함.
      # 또는 좀 더 자세하게 보려면
      kubectl api-resources --namespaced=true | awk '{print $1}' | xargs -I {} sh -c 'echo "===== {} ====="; kubectl get {} -n default --no-headers'
  2. (선택 사항) 특정 종류의 리소스 목록 확인:
    • 특정 종류(예: deployments, services)의 리소스만 확인하려면:
      kubectl get deployments -n default  # Deployments 확인
      kubectl get services -n default     # Services 확인
      kubectl get pods -n default          # Pods 확인
  3. 리소스 삭제:
    • 개별 리소스 삭제:
      • 특정 리소스를 삭제하려면 kubectl delete 명령어와 리소스 종류, 이름을 지정합니다.
        kubectl delete deployment <deployment-name> -n default
        kubectl delete service <service-name> -n default
        kubectl delete pod <pod-name> -n default
      • deployment, service, pod 등은 삭제할 리소스 종류에 맞게 변경합니다.
      • <deployment-name>, <service-name>, <pod-name> 등은 삭제할 리소스의 실제 이름으로 변경합니다.
    • 레이블(Label)을 사용하여 여러 리소스 삭제:
      • 동일한 레이블을 가진 여러 리소스를 한 번에 삭제할 수 있습니다.app=my-app 레이블을 가진 모든 리소스를 삭제합니다. all 대신 특정 리소스 종류(e.g., deployments, pods)를 지정할 수도 있습니다.
        kubectl delete all -l app=my-app -n default
    • default 네임스페이스의 모든 리소스 삭제 (매우 주의!):
      • 다음 명령어는 default 네임스페이스의 모든 리소스를 삭제합니다. 매우 주의해서 사용해야 합니다.또는default 네임스페이스를 삭제 하고 다시 생성. 이 방법은 default namespace에 설정된 기본값들(limit range, resource quota 등)도 함께 초기화됨.
        kubectl delete namespace default
        kubectl create namespace default
        kubectl delete all --all -n default
  4. 삭제 확인:
    • 삭제 명령 실행 후, 리소스 목록을 다시 확인하여 의도한 대로 삭제되었는지 확인합니다.
      kubectl get all -n default

예시 시나리오 (Deployment와 Service 삭제):

  1. default 네임스페이스에 my-app-deployment라는 Deployment와 my-app-service라는 Service가 있다고 가정합니다.
  2. 현재 리소스 확인:
    kubectl get all -n default
  3. Deployment 삭제:
    kubectl delete deployment my-app-deployment -n default
  4. Service 삭제:
    kubectl delete service my-app-service -n default
  5. 삭제 결과 확인:my-app-deploymentmy-app-service가 목록에 없어야 합니다.
    kubectl get all -n default

스크립트 (주의해서 사용):

#!/bin/bash

# default 네임스페이스 설정
NAMESPACE=default

# 삭제할 리소스 종류 (필요에 따라 수정)
RESOURCES="deployments services pods"

# 리소스 삭제 함수
delete_resources() {
  local resource_type=$1
  echo "Deleting $resource_type in namespace $NAMESPACE..."
  kubectl delete $resource_type --all -n $NAMESPACE
  # 또는, 특정 레이블을 사용하려면:
  # kubectl delete $resource_type -l app=my-app -n $NAMESPACE
}

# 각 리소스 종류별로 삭제 함수 호출
for resource in $RESOURCES; do
  delete_resources $resource
done

echo "Deletion complete. Please verify."

이 스크립트는 deployments, services, podsdefault 네임스페이스에서 모두 삭제합니다. RESOURCES 변수를 수정하여 삭제할 리소스 종류를 변경할 수 있습니다. 반드시 삭제 전 백업하고, 신중하게 사용하세요.

다시 한번 강조하지만, default 네임스페이스의 리소스를 삭제하는 것은 신중하게 진행해야 하며, 프로덕션 환경에서는 더욱 주의가 필요합니다. 삭제 전에 반드시 백업하고, 영향 범위를 충분히 검토하세요.