Get Hands-on with Amazon EKS - Workshop Event Series
Whether you're taking your first steps with Kubernetes or you're an experienced practitioner looking to sharpen your skills, our Amazon EKS workshop series delivers practical, real-world experience that moves you forward. Learn directly from AWS solutions architects and EKS specialists through hands-on sessions designed to build your confidence with Kubernetes. Register now and start building with Amazon EKS!
如何疑難排解 AWS Fargate 上停滯於「擱置中」狀態的 Amazon EKS Pod?
我在 AWS Fargate 執行個體上執行的 Amazon Elastic Kubernetes Service (Amazon EKS) Pod 會停滯於「擱置中」狀態。
簡短說明
使用 AWS Fargate 的 Amazon EKS Pod 可能會停滯於「擱置中」狀態有下列幾種原因:
- 因為無法使用特定的 vCPU 和記憶體組合,發生容量錯誤。
- 您已使用預設註釋建立 CoreDNS Pod,將其對應至 Amazon Elastic Compute Cloud (Amazon EC2) 運算類型。若要在 Fargate 節點上對其進行排程,請移除 Amazon EC2 運算類型。
- 您建立 Pod 並將其指派給 fargate-scheduler 時,Pod 未與任何 Fargate 設定檔相符。如果建立 Pod 時不相符,則不會自動重新排定至 Fargate 節點。即使您建立了稍後相符的設定檔,也是如此。在此情況下,系統會將 Pod 指派給 default-scheduler。
- 如果系統將 Pod 指派給 fargate-scheduler,但仍處於「擱置中」狀態,則 Pod 可能需要其他疑難排解。
解決方法
先決條件
- 設定名稱空間並 (選用項目) 指定 Kubernetes 標籤,以與 Pod 選取器的標籤相符。僅限兩項條件都符合 Pod 規格時,Fargate 工作流程才會將 Pod 與 Fargate 設定檔相符。
- 如果您在單一 Fargate 設定檔中指定多個 Pod 選取器,則 fargate-scheduler 會在與任何選取器相符時排定 Pod。
- 如果 Pod 規格與多個 Fargate 設定檔相符,則會根據隨機 Fargate 設定檔來排定 Pod。若要避免這種情況,您可以在 Pod 規格中使用註釋 eks.amazonaws.com/fargate-profile:fp_name。將 fp_name 取代為您的 Fargate 設定檔名稱。
重要事項: 下列步驟僅適用於使用 AWS Fargate 啟動的 Pod。如需在 Amazon EC2 執行個體上啟動之 Pod 的資訊,請參閱如何疑難排解 Amazon EKS 中的 Pod 狀態?
查看 Pod 的狀態
1.若要檢查您的 Pod 狀態,請執行下列命令:
kubectl get pods -n <namespace>
2.若要取得 Pod 的相關錯誤資訊,請執行下列 describe 命令:
kubectl describe pod YOUR\_POD\_NAME -n <namespace>
請參閱 describe 命令的輸出,以評估要完成的解決方法步驟。
解決容量錯誤
如果您的 Pod 發生容量問題,則 describe 輸出會類似下列訊息:
「目前無法使用 Fargate 容量。請稍後重試,或在不同的可用區域中嘗試。」
此訊息指出 Fargate 無法根據您選取的 vCPU 和記憶體組合來佈建運算容量。
若要解決該錯誤,請完成下列步驟:
- 嘗試在 20 分鐘後再次建立 Pod。由於錯誤與容量問題相關,因此確切的時間量可能會有所差異。
- 變更 Pod 規格內的要求 (CPU 和記憶體)。如需 Pod 規格的相關資訊,請參閱 Kubernetes 網站上的「Kubernetes 如何套用資源要求和限制」。然後,Fargate 工作流程會佈建 vCPU 和記憶體的新組合。
**注意事項:**根據您的其中一種組合對您收取費用。如需如何根據您的 Pod 規格完成組合的詳細資訊,請參閱「Pod CPU 和記憶體」。從終端機或整合式開發環境 (IDE) 執行 kubectl describe node 命令,以取得更高的 vCPU 和記憶體組合值。Fargate 並非一律根據您的要求提供可用容量。Fargate 會以最佳方式從容量集區佈建資源。您僅需支付 Pod 使用量以及等值的 vCPU 和記憶體組合的費用。
解決處於擱置中狀態的 CoreDNS Pod
如果 CoreDNS Pod 處於「擱置中」狀態,則您的輸出會類似於下列訊息:
kubectl get pods -n kube-system NAME READY STATUS RESTARTS AGE coredns-6548845887-qk9vf 0/1 Pending 0 157m
這可能是因為 CoreDNS 部署的預設註釋如下:eks.amazonaws.com/compute-type : ec2。
若要解決此問題並將 Pod 重新指派給 Fargate 排程器,請參閱更新 CoreDNS。
疑難排解指派給 fargate-scheduler 的 Pod
指派給 fargate-scheduler 的 Pod 可能會停滯於「擱置中」狀態有多種原因。如果您的 Pod 仍處於「擱置中」狀態,則 describe 輸出會類似於下列訊息:
Events: Type Reason Age From ---- ------ ---- ---- Warning FailedScheduling 2m25s (x301 over 5h3m) fargate-scheduler
若要解決該錯誤,請完成下列任務:
- 刪除並重新建立 Pod。
- 確認 Pod 規格 YAML 中未設定的下列規格。這些規格可能會導致 fargate-scheduler 略過 Pod:
節點選取器
<>節點名稱
schedulerName - 確認在 Fargate 設定檔中選取的子網路有足夠的可用 IP 地址以建立新的 Pod。每個 Fargate 節點會耗用子網路的一個 IP 地址。
- 確認 NAT 閘道已設為公有子網路,並且已連接彈性 IP 地址。
- 確認與您的虛擬私有雲端 (VPC) 相關聯的 DHCP 選項集的 domain-name-servers有 AmazonProvidedDNS 或有效的 DNS 伺服器主機名稱。
- 確認為您的 VPC 已開啟 DNS 主機名稱和 DNS 解決方法。
- 如果您的 Fargate Pod 使用僅設定用於服務通訊的 VPC 端點的私有子網路,則會允許這些包含 DNS 名稱的端點:
ECR - API
ECR - DKR
S3 閘道端點 - 確認連接到 VPC 端點的安全群組會允許 Fargate 與 API 伺服器之間的通訊。VPC 端點安全群組必須允許來自叢集 VPC CIDR 的連接埠 443 輸入。您還必須開啟叢集的私有端點存取權。
解決指派給 default-scheduler 的 Pod
若要判斷已指派給 Pod 的排程器,請執行下列命令:
kubectl get pods -o yaml -n <namespace> <pod-name> | grep schedulerName.
在輸出中,確認 schedulerName 是 fargate-scheduler。如果列為 default-scheduler,則 fargate-scheduler 會略過此 Pod。若要疑難排解此問題,請檢查您的 Pod 組態是否有運算類型註釋。如需詳細資訊,請參閱 AWS Fargate 考量事項。
- 語言
- 中文 (繁體)

相關內容
- 已提問 2 年前
- 已提問 8 個月前