종료 중 상태에서 멈춘 네임스페이스 문제 해결하기


이 페이지에서는 Terminating 상태에서 중단된 네임스페이스의 문제를 해결하는 방법을 보여줍니다.

네임스페이스는 네임스페이스 내에 하나 이상의 리소스가 존재할 때 Kubernetes 파이널라이저를 사용하여 삭제를 방지합니다. kubectl delete 명령어를 사용하여 네임스페이스를 삭제하면 네임스페이스가 Terminating 상태로 전환됩니다. Kubernetes가 종속 리소스를 삭제하고 모든 파이널라이저를 지울 때까지 네임스페이스는 Terminating 상태로 유지됩니다. 네임스페이스 수명 주기 컨트롤러는 먼저 GKE가 삭제해야 하는 네임스페이스의 모든 리소스를 나열합니다.

GKE가 종속 리소스를 삭제할 수 없거나 네임스페이스 수명 주기 컨트롤러가 네임스페이스가 비어 있는지 확인할 수 없으면 사용자가 문제를 해결할 때까지 네임스페이스가 Terminating 상태로 유지됩니다.

Terminating 상태로 멈춘 네임스페이스를 해결하려면 삭제를 차단하는 비정상 구성요소를 식별하고 이를 삭제합니다. 다음 해결 방법을 차례로 시도해 보세요.

  1. 사용할 수 없는 API 서비스 찾기 및 삭제
  2. 나머지 리소스 찾기 및 삭제
  3. 네임스페이스 강제 삭제

사용할 수 없는 API 서비스 찾기 및 삭제

  1. 사용할 수 없는 API 서비스를 나열합니다.

    kubectl get apiservice | grep False
    
  2. 응답하지 않는 서비스를 문제 해결합니다.

    kubectl describe apiservice API_SERVICE
    

    API_SERVICE를 응답하지 않는 서비스 이름으로 바꿉니다.

  3. 네임스페이스의 상태가 여전히 Terminating인지 확인합니다.

    kubectl get ns | grep Terminating
    

나머지 리소스 찾기 및 삭제

  1. 종료 네임스페이스에 남은 모든 리소스를 나열합니다.

    kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get -n NAMESPACE
    

    NAMESPACE를 삭제하려는 네임스페이스의 이름으로 바꿉니다.

  2. 출력에 표시된 모든 리소스를 삭제합니다.

  3. 네임스페이스의 상태가 여전히 Terminating인지 확인합니다.

    kubectl get ns | grep Terminating
    

네임스페이스 강제 삭제

네임스페이스 삭제를 차단하는 파이널라이저를 삭제하여 네임스페이스를 강제 종료합니다.

  1. 네임스페이스 매니페스트를 YAML 파일로 저장합니다.

    kubectl get ns NAMESPACE -o yaml > ns-terminating.yml
    
  2. 텍스트 편집기에서 매니페스트를 열고 spec.finalizers 필드에서 모든 값을 삭제합니다.

    vi ns-terminating.yml
    
  3. 파이널라이저 필드가 비어 있는지 확인합니다.

    cat ns-terminating.yml
    

    출력은 다음과 비슷하게 표시됩니다.

    apiVersion: v1
    kind: Namespace
    metadata:
      annotations:
      name: NAMESPACE
    spec:
      finalizers:
    status:
      phase: Terminating
    
  4. HTTP 프록시를 시작하여 Kubernetes API에 액세스합니다.

    kubectl proxy
    
  5. curl을 사용하여 네임스페이스 매니페스트를 바꿉니다.

    curl -H "Content-Type: application/yaml" -X PUT --data-binary @ns-terminating.yml http://127.0.0.1:8001/api/v1/namespaces/NAMESPACE/finalize
    
  6. 네임스페이스의 상태가 여전히 Terminating인지 확인합니다.

    kubectl get ns | grep Terminating
    

다음 단계

추가 지원이 필요하면 Cloud Customer Care에 문의하세요.