如何排查 Amazon EKS 的 kubelet 或 CNI 插件問題?
上次更新時間:2020 年 9 月 11 日
我想要解決 Amazon Elastic Kubernetes Service (Amazon EKS) 的 kubelet 或 CNI 插件存在問題。
簡短描述
要使用您的 CNI 插件運作 IP 位址并将其配置設定到您工作線程節點上的 pod,您必須具備以下條件:
AWS Identity and Access Management (IAM) 權限,包括附加到您工作線程節點的 IAM 角色或通過 服務賬戶的 IAM 角色 提供的 Amazon EKS CNI 政策
可從工作線程節點通路的 Amazon EKS API 伺服器終端節點
對 Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Elastic Container Registry (Amazon ECR) 和 Amazon Simple Storage Service (Amazon S3) 的 API 終端節點的網絡通路
您的子網中有足夠的 IP 位址可用
解決方法
驗證 aws-node pod 在每個工作線程節點處于正在運作狀态
要驗證 aws-node pod 在工作線程節點處于正在運作狀态,請運作以下指令:
kubectl get pods -n kube-system -l k8s-app=aws-node -o wide
如果指令輸出顯示 RESTARTS 計數為 0,則 aws-node pod 處于正在運作狀态。嘗試驗證您的子網具有足夠的免費 IP 位址可用部分中的問題排查步驟。
如果指令輸出顯示 RESTARTS 計數為任何大于 0 的值,則嘗試以下步驟:
要驗證工作線程節點可通路您的 Amazon EKS 叢集的 API 伺服器終端節點,請運作以下指令:
curl -vk https://eks-api-server-endpoint-url
如果您無法連接配接到您的 Amazon EKS 叢集,則嘗試以下步驟:
1. 驗證您工作線程節點的 Amazon EKS 安全組設定已正确配置。
2. 驗證您的工作線程節點針對子網的網絡通路控制清單(網絡 ACL)規則允許與 Amazon EKS API 伺服器終端節點通信。
重要提示:允許端口 443 入站和出站流量。
3. 要驗證 kube-proxy pod 在每個工作線程節點處于正在運作狀态,請運作以下指令:
kubectl get pods -n kube-system -l k8s-app=kube-proxy -o wide
4. 驗證您的工作線程節點可通路 Amazon EC2 的 API 終端節點、Amazon ECR 和 Amazon S3。
驗證您的子網具有足夠的免費 IP 位址可用
要在 Amazon Virtual Private Cloud (Amazon VPC) ID 中列出每個子網中的可用 IP 位址,請運作以下指令:
aws ec2 describe-subnets --filters "Name=vpc-id,Values=" | jq '.Subnets[] | .SubnetId + "=" + "\(.AvailableIpAddressCount)"'
對于啟動 pod 的子網,available-ip-address-count 應大于 0。
檢查是否已達到您的安全組限制數量
如果您已達到每個彈性網絡接口的安全組限制數量,則您的 pod 聯網可能會失敗。
驗證您工作線程節點所用的執行個體類型由 CNI 插件提供支援
有關更多資訊,請參閱 CNI 插件的支援的執行個體類型清單。
驗證您正在運作的是 CNI 插件的最新穩定版本
有關問題排查的更多資訊,請參閱 AWS GitHub 問題頁面和 CNI 插件的釋出說明。
這篇文章對您有幫助嗎?
您是否需要賬單或技術支援?