為什麼 Amazon EKS Pod 停留在 ContainerCreating 狀態,並顯示錯誤 "failed to create pod sandbox"?

3 分的閱讀內容
0

我的 Amazon Elastic Kubernetes Service (Amazon EKS) Pod 停留在 ContainerCreating 狀態中,並顯示錯誤 "failed to create pod sandbox"。

解決方法

當網路問題或系統資源限制設定不正確時,您就會看到此錯誤。

如果您收到此錯誤並且您的 Pod 處於 ContainerCreating 狀態,請檢查 Pod 的狀態。然後,執行以下命令以取得更多詳細資料。用您的 Pod 名稱取代 podname

 kubectl describe pod podname

根據輸出,請參閱下列各節,了解疑難排解步驟。

"Resource temporarily unavailable" 錯誤回應

錯誤: "Error response from daemon: failed to start shim: fork/exec /usr/bin/containerd-shim: resource temporarily unavailable: unknown"

當最大 PID 或最大檔案數量的定義核心設定造成作業系統限制時,就會發生此錯誤回應。

範例輸出:

kubelet, ip-xx-xx-xx-xx.xx-xxxxx-x.compute.internal  Failed to create pod sandbox: rpc error: code = Unknown desc = failed to start sandbox container for pod "example\_pod": Error response from daemon: failed to start shim: fork/exec /usr/bin/containerd-shim: resource temporarily unavailable: unknown

若要暫時解決此問題,請重新啟動節點。

若要對此問題進行疑難排解,請完成下列工作:

  • 收集節點日誌。

  • 檢閱 Docker 日誌的 "dockerd[4597]: runtime/cgo: pthread_create failed: Resource temporarily unavailable" 錯誤回應。

  • 檢閱 Kubelet 日誌是否有下列錯誤回應:

  • "kubelet[5267]: runtime: failed to create new OS thread (have 2 already; errno=11)"

  • "kubelet[5267]: runtime: may need to increase max user processes (ulimit -u)".

  • 執行 ps 命令以識別殭屍程序。輸出中以 Z 狀態列出的所有程序都是殭屍程序。

"Network plugin cni failed to set up pod network" 錯誤回應

錯誤: "Network plugin cni failed to set up pod network: add cmd: failed to assign an IP address to container"

此錯誤回應表示容器網路介面 (CNI) 無法將 IP 位址指派給新建的 Pod。

使用最大允許的彈性網路介面和 IP 位址的執行個體可能會導致此錯誤回應。當 Amazon Virtual Private Cloud (Amazon VPC) 子網路的 IP 位址計數為零時,您也會收到此錯誤回應。

以下是最大網路介面 IP 位址的範例:

Instance type    Maximum network interfaces    Private IPv4 addresses per interface    IPv6 addresses per interfacet3.medium        3                             6                                       6

在上述範例中,t3.medium 執行個體最多有三個網路介面,每個網路介面最多有六個 IP 位址。第一個 IP 位址用於節點,您無法指定此位址。然後,該網路介面有 17 個 IP 位址,它會加以分配。

當網路介面 IP 位址用完時,本機 IP 位址管理常駐程式 (iPAMD) 日誌會顯示下列訊息:

"ipamd/ipamd.go:1285","msg":"Total number of interfaces found: 3 ""AssignIPv4Address: IP address pool stats: total: 17, assigned 17" "AssignPodIPv4Address: ENI eni-abc123 does not have available addresses"

範例輸出:

Warning FailedCreatePodSandBox 23m (x2203 over 113m) kubelet, ip-xx-xx-xx-xx.xx-xxxxx-x.compute.internal (combined from similar events): Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "provisioning-XXXXXXXXXXXXXXX": networkPlugin cni failed to set up pod "provisioning-XXXXXXXXXXXXXXX" network: add cmd: failed to assign an IP address to container

檢閱子網路以判斷子網路是否用盡了可用 IP 位址。您可以在 Amazon VPC 主控台子網路區段下中檢視每個子網路的可用 IP 位址。

Subnet: XXXXXXXXXXIPv4 CIDR Block 10.2.1.0/24   Number of allocated ips 254   Free address count 0

若要解決此問題,請使用下列解決方法:

"Error while dialing" 錯誤回應

錯誤: "Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused"

此錯誤表示 aws-node Pod 無法與 IPAM 通訊,因為 aws-node Pod 無法在節點上執行。

若要對此問題進行疑難排解,請確定您正為叢集版本執行 VPC CNI 外掛程式的正確版本

由於活躍度和準備度探查錯誤,這些 Pod 可能處於擱置中狀態。請確定您擁有最新的 VPC CNI 附加元件版本。

由於 Dockershim (最新的 EKS 1.23 版) 掛載點無法掛載,因此也可能發生此問題。下列範例訊息指出 Pod 並未掛載 var/run/dockershim.sock

Getting running pod sandboxes from \"unix:///var/run/dockershim.sock\Not able to get local pod sandboxes yet (attempt 1/5): rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or director

若要解決此問題,請完成下列步驟:

  • 重新啟動 aws-node Pod 以重新對應掛載點。
  • 包圍節點,並擴展節點群組中的節點。
  • 將 Amazon VPC 網路介面升級至支援的最新叢集版本。

如果您將 CNI 新增為 AWS 管理主控台中的受管理外掛程式,則 aws-node 將無法探查。受管理的外掛程式會覆寫服務帳戶。但是,服務帳戶並未設定為選取的角色。若要解決此問題,請從 AWS 管理主控台關閉外掛程式,並使用資訊清單檔案建立服務帳戶。或者,編輯目前的 aws-node 服務帳戶,以新增在受管理附加元件上使用的角色。

"Pod does not have label" 錯誤回應

錯誤 "Failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address" 或 "Pod does not have label vpc.amazonaws.com/PrivateIPv4Address"

當 Pod 在視窗節點上沒有排程的 NodeSelector 時,就會發生此問題。

若要解決此問題,請務必在 NodeSelectorPodSpec 中包含下列標籤:

kubernetes.io/os: windows  

kubernetes.io/arch: amd64

安全性群組錯誤

錯誤:Plugin type="aws-cni" name="aws-cni" failed (add): add cmd: failed to assign an IP address to container
Vpc-resource-controller failed to allocate branch ENI to pod: creating network interface, NoCredentialProviders: no valid providers in chain.Deprecated."

此錯誤回應可以指出 health.kubernetes 控制平面出現的問題。若要解決此問題,請聯絡 AWS 支援部門

AWS 官方
AWS 官方已更新 7 個月前