Complete a 3 Question Survey and Earn a re:Post Badge
Help improve AWS Support Official channel in re:Post and share your experience - complete a quick three-question survey to earn a re:Post badge!
如何讓我的工作節點加入我的 Amazon EKS 叢集?
我的工作節點未加入我的 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集。我想對此問題進行疑難排解。
解決方法
若要將工作節點加入 Amazon EKS 叢集,請完成下列步驟。
**重要事項:**下列步驟不包含在不符合下列條件的環境中註冊工作節點所需的組態:
- 在叢集的虛擬私有雲端 (VPC) 中,組態參數 domain-name-servers 會設定為 AmazonProvidedDNS。如需詳細資訊,請參閱 DHCP options sets in Amazon Virtual Private Cloud (Amazon VPC)。
- 您正在使用 Amazon EKS 最佳化 Linux Amazon Machine Image (AMI) 以啟動您的工作節點。Amazon EKS 最佳化 Linux AMI 提供所有必要的組態,包括 /etc/eks/bootstrap.sh 啟動程序指令碼,以將工作節點註冊至叢集。
使用 Systems Manager 自動化執行手冊以找出常見問題
使用 AWSSupport-TroubleshootEKSWorkerNode 執行手冊以尋找導致工作節點無法加入叢集的常見問題。
**重要事項:**為了確保自動化正確運作,AWS Systems Manager 必須為執行中,且您的工作節點必須具有存取 Systems Manager 的許可。若要授予 AWS Systems Manager 的存取許可,請將 AmazonSSMManagedInstanceCore 政策連接至 AWS Identity and Access Management (IAM) 角色。此 IAM 角色對應至您的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體設定檔。此組態也是您透過 eksctl 建立之 Amazon EKS 受管節點群組的預設值。
請為叢集名稱使用下列格式:[-a-zA-Z0-9]{1,100}$。
完成下列步驟:
- 開啟執行手冊。
- 檢查 AWS 管理主控台中的 AWS 區域是否設定為與叢集相同的區域。
注意:檢閱執行手冊的文件詳細資料一節,以取得有關執行手冊的詳細資訊。 - 在輸入參數區段,指定 ClusterName 欄位的叢集名稱,並指定 WorkerID 欄位的 Amazon EC2 執行個體 ID。
- **(選用) ** 在 AutomationAssumeRole 欄位,指定 IAM 角色,以允許 Systems Manager 執行動作。如果未指定,則會使用目前 IAM 實體的 IAM 權限以執行執行手冊中的動作。
- 選擇執行。
- 查看輸出區段,了解為什麼您的工作節點未加入您的叢集,並查看解決問題的步驟。
確認您有適用於您 Amazon VPC 的 DNS 支援
確認 EKS 叢集的 Amazon VPC 已開啟 DNS 主機名稱和 DNS 解析。
要檢查這些屬性並開啟,完成下列步驟:
- 開啟 Amazon VPC 主控台。
- 在導覽窗格,選擇您的 VPC。
- 選取您要編輯的 VPC。
- 在詳細資料索引標籤下,檢查 DNS 主機名稱和 DNS 解析是否已開啟。
- 如果這兩個屬性未開啟,選取啟用。
- 選擇儲存變更。
如需詳細資訊,請參閱 View and update DNS attributes for your VPC。
確認執行個體設定檔的工作節點有正確的權限
將下列 AWS 受管政策附加至與執行個體設定檔工作節點相關的角色:
- AmazonEKSWorkerNodePolicy
- AmazonEKS_CNI_Policy
- AmazonEC2ContainerRegistryReadOnly
要將政策附加至角色,請參閱新增 IAM 身分權限 (主控台)。
設定工作節點的使用者資料
**注意:**如果您使用 AWS CloudFormation 啟動工作節點,則不必為工作節點設定使用者資料。而是要遵循 AWS 管理主控台的啟動自我管理 Amazon Linux 節點指示。
如果您使用受管節點群組來啟動工作節點,則不必透過 Amazon EKS 最佳化 Amazon Linux AMI 設定使用者資料。只有您使用自訂 AMI 透過受管節點群組以啟動工作節點時,才須設定使用者資料。
如果您搭配自訂啟動範本使用 Amazon 受管節點群組,請在啟動範本中指定正確的使用者資料。如果 Amazon EKS 叢集是使用 VPC 端點建立連線的完全私有叢集,請在使用者資料指定以下內容:
- certificate-authority
- api-server-endpoint
- DNS 叢集 IP 位址
如有必要,提供使用者資料,以將引數傳遞至 Amazon EKS 最佳化 Linux/Bottlerocket AMI 隨附的 bootstrap.sh 檔案。
要為工作節點設定使用者資料,啟動 Amazon EC2 執行個體時指定使用者資料。
例如,如果您使用第三方工具,例如 Terraform,更新使用者欄位以啟動 EKS 工作節點:
#!/bin/bash set -o xtrace /etc/eks/bootstrap.sh ${ClusterName} ${BootstrapArguments}
重要事項:
- 使用您的 EKS 叢集名稱,取代 ${ClusterName}。
- 使用其他啟動程序值,取代 ${BootstrapArguments},或將此屬性保留空白。
確認您 Amazon VPC 子網路的網路連線已經正確設定
- 如果您使用網際網路閘道,請確定閘道正確連接至路由表,不會重新導向至 null 路由。
- 如果您使用 NAT 閘道,請確定在公用子網路中正確設定閘道。此外,請確認路由表不包含 null 路由。
- 如果您將 VPC 私人端點用於完全私人叢集,請確定您有下列端點:
com.amazonaws.region.ec2 (介面端點)
com.amazonaws.region.ecr.api (介面端點)
com.amazonaws.region.ecr.dkr (介面端點)
com.amazonaws.region.s3 (閘道端點)
com.amazonaws.region.sts (介面端點) - 您使用服務帳戶的 IAM 角色設定的 Pod,會從 AWS Security Token Service (AWS STS) API 呼叫取得憑證。如果沒有輸出網際網路存取權限,則您必須在 VPC 建立並使用 AWS STS VPC 端點。
- VPC 端點的安全群組必須有輸入規則,允許來自連接埠 443 的流量。如需詳細資訊,請參閱 Control traffic to your AWS resources using security groups。
- 確定連接至 VPC 端點的政策有必要的許可。
**注意:**如果您使用任何其他 AWS 服務,則必須建立這些端點。若要查看一些常用的服務和端點,請參閱 Deploy private clusters with limited internet access。另外,您可以根據您的使用案例,建立端點服務。
確認您的工作節點與 EKS 叢集位於相同的 Amazon VPC
完成下列步驟:
- 開啟 Amazon EKS 主控台。
- 選擇叢集,然後選取您的叢集。
- 在網路區段,識別與叢集相關的子網路。
**注意:**您可以設定不同的子網路以在其中啟動工作節點。子網路必須位於相同的 Amazon VPC,並適當標記。Amazon EKS 只會針對您在叢集建立期間設定的子網路,自動管理標籤。因此,確認您已適當標記子網路。
如需詳細資訊,請參閱子網路需求與考量事項。
使用工作節點的 NodeInstanceRole 更新 aws-auth ConfigMap
驗證 aws-auth ConfigMap 是否使用工作節點的 IAM 角色正確設定,而不是使用執行個體設定檔。
若要檢查 aws-auth ConfigMap 檔案,請執行下列命令:
kubectl describe configmap -n kube-system aws-auth
如果 aws-auth ConfigMap 未正確設定,則會顯示下列錯誤訊息:
571 reflector.go:153] k8s.io/kubernetes/pkg/kubelet/kubelet.go:458 : Failed to list *v1.Node: Unauthorized
符合工作節點的安全群組需求
確認控制平面的安全群組和工作節點安全群組已設定為輸入和輸出流量的最佳實務的設定。此外,確認您的自訂網路 ACL 規則已設定為允許進出0.0.0.0/0 的流量,來自連接埠 80、443 和 1025-65535。
設定工作節點的標籤
針對工作節點的標籤屬性,將 Key 設定為 kubernetes.io/cluster/clusterName,並將值設定為已擁有。
如需詳細資訊,請參閱 VPC 需求與考量事項。
確認您的工作節點可以連線到 EKS 叢集的 API 伺服器端點
確認您可以在與路由表相關聯的子網路中啟動工作節點。路由表必須透過 NAT 或網際網路閘道,路由至 API 端點。
如果您在受限的私人網路啟動工作節點,請確認您的工作節點可以連線至 EKS API 伺服器端點。
如果您透過使用自訂 DNS 而非 AmazonProvidedDNS 的 Amazon VPC 來啟動工作節點,則節點可能無法解析端點。停用端點的公開存取,且僅啟動私人存取時,會發生未解析的端點。如需詳細資訊,請參閱開啟 Amazon EKS 叢集端點的 DNS 解析。
確認已正確設定您的叢集的叢集角色
您的叢集必須具備最低 AmazonEKSClusterPolicy 許可的叢集角色。此外,您叢集的信任關係必須允許 sts:AssumeRole 的 eks.amazonaws.com 服務,如以下範例所示:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
如需詳細資訊,請參閱 Amazon EKS cluster IAM role。
確認已啟動區域性 STS 端點
如果叢集位於支援 STS 端點的區域,請啟動區域性 STS 端點以驗證 kubelet。kubelet 便可建立節點物件。
確認 AMI 已設定為與 EKS 搭配使用,並且包含必要的元件
如果用於工作節點的 AMI 不是 Amazon EKS 最佳化 Amazon Linux AMI,請確認下列 Kubernetes 元件處於作用中狀態:
- kubelet
- AWS IAM Authenticator
- Docker (Amazon EKS 版本 1.23 與更舊版本)
- containerd
使用 SSH 連線至您的 EKS 工作節點執行個體,並檢查 kubelet 代理程式日誌
kubelet 代理程式會設定為 systemd 服務。
若要驗證您的 kubelet 日誌,請執行下列命令:
journalctl -f -u kubelet
若要解決問題,請參閱 Amazon EKS troubleshooting guide,瞭解常見錯誤。
使用 Amazon EKS 日誌收集程式指令碼,疑難排解錯誤
您可以使用日誌檔和作業系統日誌以疑難排解 Amazon EKS 的問題。
您必須使用 SSH 連線至有問題的工作節點,並執行下列指令碼:
curl -O https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/log-collector-script/linux/eks-log-collector.sh sudo bash eks-log-collector.sh
相關資訊
相關內容
- 已提問 7 個月前lg...
- 已提問 6 個月前lg...
- 已提問 2 年前lg...