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

4 分的閱讀內容
0

我的工作節點未加入我的 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集。

簡短說明

要讓工作節點加入 Amazon EKS 叢集,完成下列步驟:

  • 使用 AWS Systems Manager Automation 執行手冊以找出常見問題。
  • 確認您擁有 Amazon Virtual Private Cloud (Amazon VPC) 的 DNS 支援。
  • 確認執行個體設定檔的工作節點有正確的權限。
  • 設定工作節點的使用者資料。
  • 確認您的 Amazon VPC 子網路的網路連線已正確設定。
  • 確認您的工作節點與 EKS 叢集位於相同的 VPC。
  • 使用工作節點的 NodeInstanceRole 以更新 aws-auth ConfigMap。
  • 符合工作節點的安全群組需求。
  • 設定工作節點的標籤。
  • 確認您的工作節點可以連線至 EKS 叢集的 API 伺服器端點。
  • 確認已正確設定 EKS 叢集的叢集角色。
  • 針對支援 AWS Security Token Service (AWS STS) 端點的 AWS 區域,確認區域性 AWS STS 端點已啟動。
  • 確認 AMI 已設定為與 Amazon EKS 搭配使用,並且包含必要的元件。
  • 使用 SSH 以連線到工作節點的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體,然後在 kubelet 代理程式日誌搜尋錯誤。
  • 使用 Amazon EKS 日誌收集程式指令碼,疑難排解錯誤。

**重要事項:**下列步驟不包含在不符合下列條件的環境中註冊工作節點所需的組態:

  • 在叢集的 VPC,組態參數 domain-name-servers 會設定為 AmazonProvidedDNS。如需詳細資訊,請參閱 DHCP 選項集
  • 您正在使用 Amazon EKS-optimized Linux Amazon Machine Image (AMI) 以啟動您的工作節點。
    注意:Amazon EKS-optimized Linux AMI 提供所有必要的組態,包括 /etc/eks/bootstrap.sh 啟動程序指令碼,以將工作節點註冊至叢集。

解決方法

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

使用 AWSSupport-TroubleshootEKSWorkerNode 執行手冊以尋找導致工作節點無法加入叢集的常見問題。

重要事項:要讓自動化作業正常運作,您的工作節點必須具有存取 Systems Manager 的權限,且 Systems Manager 正常執行。要授予此權限,請將 AmazonSSMManagedInstanceCore 政策附加至 AWS Identity and Access Management (IAM) 角色。這是對應至您的 Amazon EC2 執行個體設定檔的 IAM 角色。這是您透過 eksctl 建立之 Amazon EKS 受管節點群組的預設組態。請使用下列格式作為叢集名稱:[-a-zA-Z0-9]{1,100}$

  1. 打開執行手冊
  2. 檢查 AWS 管理主控台的 AWS 區域是否設定為與叢集相同的區域。
    注意:檢閱執行手冊的文件詳細資料一節,以取得有關執行手冊的詳細資訊。
  3. 輸入參數區段,指定 ClusterName 欄位的叢集名稱,並指定 WorkerID 欄位的 Amazon EC2 執行個體 ID。
  4. **(選用) ** 在 AutomationAssumeRole 欄位,指定 IAM 角色,以允許 Systems Manager 執行動作。如果未指定,則會使用目前 IAM 實體的 IAM 權限以執行執行手冊中的動作。
  5. 選擇執行
  6. 檢查輸出區段,了解您的工作節點未加入叢集的原因,以及您解決問題可以採取的步驟。

確認您有適用於您的 Amazon VPC 的 DNS 支援

確認 EKS 叢集的 Amazon VPC 已開啟 DNS 主機名稱DNS 解析

要檢查這些屬性並開啟,完成下列步驟:

  1. 開啟 Amazon VPC 主控台
  2. 在導覽窗格,選擇您的 VPC
  3. 選取您要編輯的 VPC。
  4. 詳細資料索引標籤下,檢查 DNS 主機名稱和 DNS 解析是否已開啟。
  5. 如果這兩個屬性未開啟,選取啟用
  6. 選擇儲存變更

如需更多資訊,請參閱檢視和更新 VPC 的 DNS 屬性

確認執行個體設定檔的工作節點有正確的權限

將下列 AWS 受管政策附加至與執行個體設定檔工作節點相關的角色:

  • AmazonEKSWorkerNodePolicy
  • AmazonEKS_CNI_Policy
  • AmazonEC2ContainerRegistryReadOnly

要將政策附加至角色,請參閱新增 IAM 身分權限 (主控台)

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

**注意:**如果您使用 AWS CloudFormation 以啟動工作節點,則不必為工作節點設定使用者資料。而是要遵循 AWS 管理主控台的啟動自我管理 Amazon Linux 節點指示。

如果您使用受管節點群組以啟動工作節點,則不必透過 Amazon EKS optimized Amazon Linux AMI 以設定任何使用者資料。只有您使用自訂 AMI 透過受管節點群組以啟動工作節點時,才須設定使用者資料。

如果您搭配自訂啟動範本以使用 Amazon 受管節點群組,在啟動範本中指定正確的使用者資料。如果 Amazon EKS 叢集是使用 VPC 端點建立連線的完全私有叢集,在使用者資料指定以下內容:

  • certificate-authority
  • api-server-endpoint
  • DNS 叢集 IP

如有必要,提供使用者資料,以將引數傳遞至 Amazon EKS optimized 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 子網路的網路連線已經正確設定

  • 如果您使用網際網路閘道,確定閘道正確附加至路由表,沒有任何黑洞。
  • 如果您使用 NAT 閘道,確定在公用子網路正確設定。此外,確認路由表不包含任何黑洞。
  • 如果您將 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 的流量輸入規則。如需詳細資訊,請參閱使用安全群組,控制資源的流量
  • 確定附加至 VPC 端點的政策有必要的權限。

**注意:**如果您使用任何其他 AWS 服務,則必須建立這些端點。如需一些常用的服務和端點資訊,請參閱私人叢集要求。另外,您可以根據您的使用案例,建立端點服務

確認您的工作節點與 EKS 叢集位於相同的 Amazon VPC

  1. 開啟 Amazon EKS 主控台
  2. 選擇叢集,然後選取您的叢集。
  3. 網路區段,識別與叢集相關的子網路。

**注意:**您可以設定不同的子網路以在其中啟動工作節點。子網路必須位於相同的 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 的流量,來自連接埠 804431025-65535

設定工作節點的標籤

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

如需詳細資訊,請參閱 VPC 需求與考量事項

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

考慮下列事項:

  • 您可以在子網路啟動工作節點,該子網路與路由表相關,且會透過 NAT 或網際網路閘道路由至 API 端點。
  • 如果您在受限的私人網路啟動工作節點,確認您的工作節點可以連線至 EKS API 伺服器端點。
  • 如果您使用使用自訂 DNS 而非 AmazonProvidedDNS 啟動工作節點,則節點可能無法解析端點。停用端點的公開存取,且僅啟動私人存取時,會發生未解析的端點。如需詳細資訊,請參閱開啟 Amazon EKS 叢集端點的 DNS 解析

確認已正確設定您的叢集的叢集角色

您的叢集必須具備最低 AmazonEKSClusterPolicy 權限的叢集角色。此外,您叢集的信任關係必須允許 sts:AssumeRoleeks.amazonaws.com 服務。

範例:

{
  "Version": "2012-10-17",
  "Statement": \[
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  \]
}

如需詳細資訊,請參閱 Amazon EKS 叢集 IAM 角色

確認已啟動區域性 STS 端點

如果叢集位於支援 STS 端點的區域啟動區域性 STS 端點以驗證 kubelet。然後,kubelet 可以建立節點物件。

確認 AMI 已設定為與 EKS 搭配使用,並且包含必要的元件

如果用於工作節點的 AMI 不是 Amazon EKS optimized Amazon Linux AMI,則確認下列 Kubernetes 元件處於作用中狀態:

  • kubelet
  • AWS IAM Authenticator
  • Docker (Amazon EKS 版本 1.23 與更舊版本)
  • containerd

使用 SSH 連線至您的 EKS 工作節點執行個體,並檢查 kubelet 代理程式日誌

Kubelet 代理程式會設定為系統服務。

1.    要驗證您的 kubelet 日誌,執行下列命令:

journalctl -f -u kubelet

2.    要解決任何問題,請參閱 Amazon EKS 疑難排解指南,瞭解常見錯誤。

使用 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

相關資訊

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

AWS 官方
AWS 官方已更新 1 年前