kubernetes 네임스페이스 종료 중 상태를 삭제할 수 없는 문제 해결


1. 현상

주문하다

Kubectl get ns

네임스페이스는 항상 종료 중 상태입니다.
여기에 이미지 설명을 삽입하세요.
kubectl delete ns test --force=true를 사용하세요. # 프롬프트를 삭제할 수 없습니다.
여기에 이미지 설명을 삽입하세요.
원인 분석: k8s는 현재 네임스페이스에 아직 출시되지 않은 리소스가 있다고 생각합니다.

2. 솔루션

1. 네임스페이스 아래의 모든 리소스 보기(이 단계는 매우 중요함)

kubectl api-resources -o name --verbs=list --namespaced | xargs -n 1 kubectl get --show-kind --ignore-not-found -n test

注意:确保test命名空间下全部资源都是No Resources,才可以执行以下的步骤。

2. 네임스페이스를 json 파일로 내보내기

테스트 네임스페이스를 json 파일로 내보내기

다음 코드를 실행하면 현재 디렉터리 에 test.json 파일이 생성 됩니다.

kubectl get namespace test -o json > test.json

3. 네임스페이스 파일 편집

사양에 따라 콘텐츠를 삭제합니다. 이 단계의 목적은 콘텐츠를 지우고 원본 ns를 빈 콘텐츠 ns로 덮어써 k8s-api에 삭제할 ns 콘텐츠가 비어 있으며 삭제된 명령을 차단할 수 없음을 알리는 것입니다.

여기에 이미지 설명을 삽입하세요.

4. api-server 인터페이스를 통해 k8s 클러스터에 빈 콘텐츠가 포함된 ns의 네임스페이스를 포함합니다.

다음 명령을 사용하십시오

curl -k \
-H "Content-Type: application/json" \
-X PUT \
--data-binary @test.json \
http://127.0.0.1:8001/api/v1/namespaces/test/finalize

여기에서 실행해보면 k8s 마스터 노드가 인증을 사용하기 때문에 명령어를 직접 사용하면 연결이 거부되는 것을 알 수 있는데,
여기에 이미지 설명을 삽입하세요.
여기서는 프록시로 kube-proxy를 사용해야 합니다.

5. 프록시에 kube-proxy를 사용하세요

注意:这里需要新开一个控制台,执行命令

kubectl proxy --port=8081 

그런 다음 4단계의 작업을 수행하고 아래 그림과 같은 결과를 확인하면 실행이 성공했음을 의미합니다.
여기에 이미지 설명을 삽입하세요.

3. 다시 확인

명령을 실행하면 테스트 네임스페이스가 삭제된 것을 확인할 수 있습니다.

kubectl get ns

여기에 이미지 설명을 삽입하세요.
끝났습니다. 하루만 기다리세요.

추천

출처blog.csdn.net/bacawa/article/details/130864714