為什麼我無法刪除 Amazon EKS 叢集資源?
我無法從 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集中刪除資源。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
根據卡在終止狀態的 Amazon EKS 資源,執行下列疑難排解動作。完成項會提醒控制器刪除資源並防止意外刪除。如果您的資源卡在終止狀態,則必須先從資源中移除完成項,然後才能刪除資源。如需完成項的詳細資訊,請參閱 Kubernetes 網站上的完成項。
對命名空間刪除問題進行疑難排解
若要檢查命名空間中是否有資源處於終止狀態,請執行下列命令:
kubectl get all -n namespace-name | grep Terminating
**注意:**將 namespace-name 替換為命名空間。
若要手動刪除資源,請執行下列命令:
kubectl delete resource resource-name -n namespace-name
**注意:**將 resource 替換為資源類型,將 resource-name 替換為資源名稱,將 namespace-name 替換為命名空間。
若要檢查完成項或 API 服務錯誤,請執行下列命令:
kubectl get ns namespace-name -o json
**注意:**將 namespace-name 替換為命名空間。
如果您在命令輸出中收到錯誤,請參閱如何對 Amazon EKS 叢集中處於終止狀態的命名空間問題進行疑難排解?
對入口刪除問題進行疑難排解
刪除與入口資源關聯的負載平衡器或目標群組。
若要從入口資源中移除完成項,請執行下列命令:
kubectl patch ingress ingress-name -n namespace-name -p '{"metadata":{"finalizers":[]}}' --type=merge
**注意:**將 ingress-name 替換為入口名稱,將 namespace-name 替換為命名空間。
然後,執行以下命令刪除入口資源:
kubectl delete ingress ingress-name -n namespace-name
**注意:**將 ingress-name 替換為入口名稱,將 namespace-name 替換為命名空間。
對服務刪除問題進行疑難排解
若要從服務資源中移除完成項,請執行下列命令:
kubectl patch svc service-name -n namespace-name -p '{"metadata":{"finalizers":[]}}' --type=merge
**注意:**將 service-name 替換為您的服務帳戶名稱,將 namespace-name 替換為您的命名空間。
使用 Amazon EC2 主控台停用與該服務關聯之負載平衡器上的刪除保護。或者,使用 service.beta.kubernetes.io/aws-load-balancer-attributes 註解來停用刪除保護。如需詳細資訊,請參閱 Kubernetes 網站上的資源屬性。
然後,執行以下命令刪除該服務:
kubectl delete svc service-name -n namespace-name
**注意:**將 service-name 替換為您的服務帳戶名稱,將 namespace-name 替換為您的命名空間。
對 PV 和 PVC 刪除問題進行疑難排解
如果您無法刪除 PersistentVolume (PV) 或 PersistentVolumeClaim (PVC),請檢查以下問題:
- 確認您是否在移除繫結 PVC 之前就刪除了 PV
- 檢查您是否在 Pod 仍在執行且已附加到 PVC 的情況下就將 PVC 移除
您刪除了 PV
若要解決此問題,請刪除已繫結至 PV 的 PVC。
若要識別與處於終止狀態的 PV 關聯的 PVC,請執行以下命令來描述 PV:
kubectl get pv pv-name
**注意:**將 pv-name 替換為 PV 名稱。此命令會以 NAMESPACE/PVC_NAME 格式顯示 PVC 名稱和命名空間。
輸出範例:
default/ebs-claim
若要刪除 PVC,請執行以下命令:
kubectl delete pvc -n namespace-name pvc-name
**注意:**將 namespace-name 替換為 PVC 命名空間,將 pvc-name 替換為 PVC 名稱。
如果仍然無法刪除 PV,請執行以下命令以移除其完成項:
kubectl patch pv -p '{"metadata":{"finalizers":null}}' pv-name
**注意:**將 pv-name 替換為 PV 名稱。
您移除了 PVC
若要解決此問題,請刪除附加到 PVC 的 Pod。
若要識別與 PVC 相關聯的 Pod,請執行下列命令來描述 PVC:
kubectl describe pvc -n namespace-name pvc-name
注意:將 namespace-name 替換為 PVC 命名空間,將 pvc-name 替換為 PVC 名稱。在輸出中,檢查使用者屬性。
輸出範例:
Name: ebs-claim Namespace: default StorageClass: ebs-sc Status: Bound Volume: pvc-3402cc47-c4d7-42c3-8965-f9e1e08f8b95 Labels: <none> Annotations: pv.kubernetes.io/bind-completed: yes pv.kubernetes.io/bound-by-controller: yes volume.beta.kubernetes.io/storage-provisioner: ebs.csi.aws.com volume.kubernetes.io/selected-node: ip-192-168-33-43.ec2.internal volume.kubernetes.io/storage-provisioner: ebs.csi.aws.com Finalizers: [kubernetes.io/pvc-protection] Capacity: 4Gi Access Modes: RWO VolumeMode: Filesystem Used By: ebs-app-59c74d8d45-z65kj Events: <none>
在上述的範例中,ebs-app-59c74d8d45-z65kj Pod 使用 PVC。
若要刪除 Pod,請執行以下命令:
kubectl delete pod -n namespace-name pod-name
**注意:**將 namespace-name 替換為 PVC 命名空間,將 pod-name 替換為 Pod 名稱。
如果您仍然無法刪除 PVC,請執行下列命令以移除其完成項:
kubectl patch pvc -p '{"metadata":{"finalizers":null}}' -n namespace-name pvc-name
**注意:**將 namespace-name 替換為 PVC 命名空間,將 pvc-name 替換為 PVC 名稱。
對 Pod 刪除問題進行疑難排解
如果無法刪除 Pod,請檢查下列問題:
- 檢查 Pod 是否未能回應終止訊號
- 確認 Pod 是否有尚未完成的關聯完成項
Pod 未能回應終止訊號
**重要:**以下解決方案將立即刪除該 Pod,而不會確認您是否終止了正在執行的 Pod。確認 Pod 並未在執行中。如果您沒有這樣做,Pod 可能會在叢集上無限期地執行。
Pod 通常會在預設的 30 秒寬限期後刪除。如果您的 Pod 在 30 秒後沒有刪除,請執行以下命令強制刪除該 Pod:
kubectl delete pod --force --grace-period=0 -n namespace-name pod-name
**注意:**將 namespace-name 替換為 Pod 命名空間,將 pod-name 替換為 Pod 名稱。您必須將 --grace-period 旗標設為 **0 **才能立即移除該 Pod。
該 Pod 有尚未完成的關聯完成項
若要檢查 Pod 是否具有完成項,請執行下列命令:
kubectl get pod -o yaml -n namespace-name pod-name
**注意:**將 namespace-name 替換為 Pod 命名空間,將 pod-name 替換為 Pod 名稱。在輸出中,檢查 metadata.finalizers 來識別完成項。
輸出範例:
apiVersion: v1 kind: Pod metadata: creationTimestamp: "2024-09-16T19:32:01Z" finalizers: - kubernetes labels: app: nginx pod-template-hash: 7c79c4bf97 namespace: default spec: containers: - image: nginx:latest imagePullPolicy: Always name: nginx ports: - containerPort: 80 protocol: TCP
若要移除完成項,請執行下列命令:
kubectl patch pod -p '{"metadata":{"finalizers":null}}' -n namespace-name pod-name
**注意:**將 namespace-name 替換為 Pod 命名空間,將 pod-name 替換為 Pod 名稱。
對叢集刪除問題進行疑難排解
通常,叢集刪除問題是因為有受管節點群組附加在叢集上。若要解決此問題,請移除受管節點群組。如需詳細資訊,請參閱為什麼我無法刪除 Amazon EKS 叢集?
如果叢集具有關聯的受管抓取工具,那麼您可能也會遇到刪除問題。在這種情況下,您無法刪除抓取工具所使用的虛擬私有網路 (VPC) 或彈性網路介面。
若要辨識抓取工具 ID,請執行下列 list-scrapers AWS CLI 指令:
aws amp list-scrapers
然後,執行以下 delete-scraper 命令來刪除抓取工具:
aws amp delete-scraper --scraper-id scraper-example
**注意:**將 scraper-example 替換為抓取工具 ID。
對 Amazon EKS 受管節點群組刪除問題進行疑難排解
如果無法刪除受管節點群組,請檢查以下問題:
- 確認資源是否有相依物件
- 檢查 Amazon EC2 Auto Scaling 群組終止程序是否已暫停
- 檢查您的節點群組是否有運作狀態錯誤
- 確認 Pod 是否卡在節點中
資源具有相依物件
當受管節點群組建立的資源與 AWS 帳戶中的另一個資源關聯時,就會發生相依性問題。通常,資源是一個安全群組。若要解決此問題,請識別與安全群組關聯的物件。然後,取消安全群組與資源的關聯。如果遇到問題,請參閱為什麼我無法刪除附加至 Amazon VPC 的安全群組?
EC2 Auto Scaling 群組終止程序已暫停
若要解決此問題,請重新啟動「終止」程序。
您的節點群組出現運作狀態錯誤
如需了解受管節點群組中可能發生的運作狀態錯誤類型,請參閱問題。
若要對運作狀態問題進行疑難排解,請參閱如何解決 Amazon EKS 叢集中的受管節點群組錯誤?
Pod 卡在節點中
刪除受管節點群組時,您可能會收到以下錯誤訊息:
「1 個 Pod 無法從節點 ip-192-168-29-140.ec2.internal 中驅逐」
如果叢集中的 Pod 卡在終止狀態,就可能會出現此問題。若要解決此問題,請取得 kubectl 對叢集的存取權,然後執行下列命令:
kubectl get pod -A
Pod 無法驅逐錯誤可能是因為您的 PodDisruptionBudget 設定錯誤,或沒有足夠的中斷可用來允許 Pod 驅逐。若要對此問題進行疑難排解,請參閱如何對 Amazon EKS 的受管節點群組更新問題進行疑難排解?
- 語言
- 中文 (繁體)

相關內容
已提問 3 年前
已提問 2 年前
AWS 官方已更新 3 年前