如何疑難排解 Amazon EKS 受管節點群組建立失敗的問題?

2 分的閱讀內容
0

我的 Amazon Elastic Kubernetes Service (Amazon EKS) 受管節點群組無法建立。節點無法加入叢集,且我收到類似下列內容的錯誤訊息: "Instances failed to join the kubernetes cluster."(執行個體無法加入 Kubernetes 叢集。)

解決方法

使用自動化執行手冊識別常見問題

使用 AWSSupport-TroubleshootEKSWorkerNode 執行手冊來尋找常見問題。

**重要:**若要讓自動化功能正常運作,您的工作節點必須具有存取 AWS Systems Manager 的權限,並且 Systems Manager 正常執行。若要授與權限,請將 AmazonSSMManagedInstanceCore AWS 受管政策附加至與您的 Amazon Elastic Compute Cloud (EC2) 執行個體設定檔對應的 AWS Identity and Access Management (IAM) 角色。這是透過 eksctl 建立之 Amazon EKS 受管節點群組的預設組態。

完成下列步驟:

  1. 開啟執行手冊
  2. 檢查 AWS 管理主控台中的 AWS 區域是否設定為與叢集相同的區域。
    **注意:**檢閱執行手冊的 Runbook details (執行手冊詳細資訊) 區段,以取得有關執行手冊的詳細資訊。
  3. Input parameters (輸入參數) 區段,在 ClusterName 欄位指定叢集的名稱,並在 WorkerID 欄位指定執行個體 ID。
  4. (選擇性) 在 AutomationAssumeRole 欄位指定 IAM 角色,以允許 Systems Manager 執行動作。如果未指定,系統則會使用目前 IAM 實體的 IAM 權限,以執行執行手冊中的動作。
  5. 選擇 Execute (執行)。
  6. 檢查 Outputs (輸出) 區段,了解為什麼您的工作節點未加入您的叢集,以及您可以解決該錯誤的步驟。

確認工作節點安全群組流量需求

確認控制平面的安全群組和工作節點安全群組已設訂傳入和傳出流量的要求。預設情況下,Amazon EKS 會將叢集安全群組套用至節點群組的執行個體,以加速節點與控制平面間的通訊。如果您在受管節點群組的啟動範本中指定自訂安全群組,Amazon EKS 不會新增叢集安全群組。

驗證工作節點 IAM 權限

確定與工作節點相關聯的 IAM 執行個體角色已附加 AmazonEKSWorkerNodePolicyAmazonEC2ContainerRegistryReadOnly 政策。

**注意:**您必須將 Amazon 受管政策 AmazonEKS_CNI_Policy 附加到 IAM 角色。您可以附加到節點執行個體角色。不過,最佳做法是將政策附加至與 kube-system 命名空間中 aws-node Kubernetes 服務帳戶相關聯的角色。如需詳細資訊,請參閱設定 Amazon VPC CNI 外掛程式以使用 IRSA

確認叢集的 Amazon VPC 支援 DNS 主機名稱和解析

設定 EKS 叢集端點的私有存取權後,您必須為 Amazon Virtual Private Cloud (Amazon VPC) 開啟 DNS 主機名稱和 DNS 解析。在啟動端點私有存取權時,Amazon EKS 會為您建立 Amazon Route 53 私有託管區域。然後,Amazon EKS 會將其與您的叢集的 Amazon VPC 建立關聯。如需詳細資訊,請參閱控制叢集 API 伺服器端點的網路存取

使用工作節點的 NodeInstanceRole 更新 aws-auth ConfigMap

驗證 aws-auth ConfigMap 是否正確設有工作節點的 IAM 角色,而非執行個體設定檔。

設定工作節點的標籤

針對工作節點的標籤屬性,將索引鍵設定為 kubernetes.io/cluster/clusterName 並設定 已擁有

確認工作節點的 Amazon VPC 子網路有可用的 IP 位址

如果 Amazon VPC 的 IP 地址不足,您可以將次要 CIDR 與現有的 Amazon VPC 相互關聯。如需詳細資訊,請參閱檢視 VPC 和子網路的 Amazon EKS 網路需求

確認您的 Amazon EKS 工作節點可以連線到叢集的 API 伺服器端點

如果有透過下列閘道的網際網路路由,您可以在叢集 VPC 或對等子網路內的任何子網路,啟動工作節點:

  • NAT
  • 網際網路
  • 中轉

如果您的工作節點是在受限的私人網路中啟動,確認您的工作節點可以連線到 Amazon EKS API 伺服器端點。如需詳細資訊,請參閱需求以在無輸出網際網路權限的私有叢集中執行 Amazon EKS。

注意: 最佳做法是針對位於由 NAT 閘道支援的私有子網路的節點,在公用子網路中建立 NAT 閘道。

如果您沒有使用 AWS PrivateLink 端點,請透過 Proxy 伺服器驗證下列 AWS 服務的 API 端點存取權限:

  • Amazon EC2
  • Amazon ECR
  • Amazon S3

若要驗證工作節點是否具有 API 伺服器的存取權,請使用 SSH 連線,然後執行下列 netcat 命令:

nc -vz 9FCF4EA77D81408ED82517B9B7E60D52.yl4.eu-north-1.eks.amazonaws.com 443

**注意:使用您的 API 伺服器端點,取代 ** 9FCF4EA77D81408ED82517B9B7E60D52.yl4.eu-north-1.eks.amazonaws.com

檢查 kubelet 日誌,同時仍然連接到您的執行個體:

journalctl -f -u kubelet

如果 kubelet 日誌未提供問題來源的相關資訊,則檢查工作節點的 kubelet 狀態:

sudo systemctl status kubelet

收集 Amazon EKS 日誌和作業系統日誌,以進一步進行疑難排解。

驗證 API 端點可以觸達您的 AWS 區域

使用 SSH 以連線至其中一個工作節點,然後針對每個服務執行下列命令:

$ nc -vz ec2.region.amazonaws.com 443
$ nc -vz ecr.region.amazonaws.com 443
$ nc -vz s3.region.amazonaws.com 443

注意:使用工作者節點的 AWS 區域,取代區域

設定工作節點的使用者資料

針對有指定 AMI 的受管節點群組啟動範本,您必須為工作節點提供啟動程序命令,才能加入叢集。Amazon EKS 不會將預設啟動程序命令合併到您的使用者資料中。如需詳細資訊,請參閱在 Amazon EKS 託管節點群組中導入啟動範本和自訂 AMI 支援指定 AMI

帶啟動程序命令的範例啟動範本:

#!/bin/bashset -o xtrace/etc/eks/bootstrap.sh
${ClusterName} ${BootstrapArguments}

**注意:**使用 Amazon EKS 叢集的名稱,取代 ${ClusterName}。如果需要,使用其他啟動程序值,取代 ${BootstrapArguments}

相關資訊

疑難排解 Amazon EKS 叢集和節點的問題

如何讓我的工作節點加入我的 Amazon EKS 叢集?

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