

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 建立自我管理的 Amazon Linux 節點
<a name="launch-workers"></a>

本主題會說明如何啟動已向 Amazon EKS 叢集註冊的 Linux 節點的 Auto Scaling 群組。節點加入叢集後，您就可以將 Kubernetes 應用程式部署至其中。您也可以使用 `eksctl`或 啟動自我管理的 Amazon Linux 節點 AWS 管理主控台。如果您需要在 AWS Outposts 上啟動節點，請參閱 [在 AWS Outpost 上建立 Amazon Linux 節點](eks-outposts-self-managed-nodes.md)。
+ 現有 Amazon EKS 叢集。若要部署叢集，請參閱 [建立 Amazon EKS 叢集](create-cluster.md)。如果您在已啟用 AWS Outposts、 AWS Wavelength 或 AWS Local Zones AWS 的區域中有子網路，則這些子網路不得在您建立叢集時傳入。
+ 供節點使用的現有 IAM 角色。若要建立服務角色，請參閱[Amazon EKS 節點 IAM 角色](create-node-role.md)。如果此角色沒有任何 VPC CNI 的政策，則 VPC CNI Pod 需要以下個別角色。
+ (選用，但建議) Kubernetes 專用 Amazon VPC CNI 外掛程式的附加元件設定有自己的 IAM 角色，該角色已連接必要的 IAM 政策。如需詳細資訊，請參閱[設定 Amazon VPC CNI 外掛程式以使用 IRSA](cni-iam-role.md)。
+ 熟悉[選擇最佳 Amazon EC2 節點執行個體類型](choosing-instance-type.md)中所列的考量事項。取決於您選擇的執行個體類型，您的叢集和 VPC 可能還有其他先決條件。

您可以使用下列任意一項啟動自我管理的 Linux 節點：
+  [`eksctl`](#eksctl_create_managed_amazon_linux) 
+  [AWS 管理主控台](#console_create_managed_amazon_linux) 

## `eksctl`
<a name="eksctl_create_managed_amazon_linux"></a>

 **使用 `eksctl` 啟動自我管理的 Linux 節點** 

1. 在您的裝置或 AWS CloudShell 上安裝版本 `0.215.0`或更新版本的`eksctl`命令列工具。如需有關安裝或更新 `eksctl` 的指示，請參閱 `eksctl` 文件中的[安裝](https://eksctl.io/installation)一節。

1. (選用) 如果 **AmazonEKS\$1CNI\$1Policy** 受管 IAM 政策已連接至您的 [Amazon EKS 節點 IAM 角色](create-node-role.md)，建議您改為將其指派給您與 Kubernetes `aws-node` 服務帳戶相關聯的 IAM 角色。如需詳細資訊，請參閱[設定 Amazon VPC CNI 外掛程式以使用 IRSA](cni-iam-role.md)。

1. 以下命令會在現有的叢集建立節點群組。將 *al-nodes* 取代為您的節點群組名稱。節點群組名稱不可超過 63 個字元。它必須以字母或數字開頭，但剩餘字元也可以包含連字符和底線。使用您叢集的名稱取代 *my-cluster*。此名稱僅能使用英數字元 (區分大小寫) 和連字號。必須以英數字元開頭，且長度不可超過 100 個字元。名稱在您要建立叢集 AWS 的區域和 AWS 帳戶中必須是唯一的。使用您自己的值取代其餘*範例值*。依預設，系統會使用與控制平面相同的 Kubernetes 版本來建立節點。

   選擇 `--node-type` 的值之前，請檢閱[選擇最佳 Amazon EC2 節點執行個體類型](choosing-instance-type.md)。

   使用 Amazon EC2 金鑰對或公有金鑰的名稱取代 *my-key*。此金鑰會在節點啟動後用於將 SSH 套用至節點。如果您還沒有 Amazon EC2 金鑰對，可以在 AWS 管理主控台中建立一個。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的 [Amazon EC2 金鑰對](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。

   使用下列命令來建立您的節點群組。
**重要**  
如果您想要將節點群組部署至 AWS Outposts、Wavelength 或 Local Zone 子網路，還有其他考量：  
在建立叢集時，不得傳入子網路。
您必須使用指定子網路和 ` [volumeType](https://eksctl.io/usage/schema/#nodeGroups-volumeType): gp2` 的組態檔案來建立節點群組。如需詳細資訊，請參閱 `eksctl` 文件中的[從組態檔案建立節點群組](https://eksctl.io/usage/nodegroups/#creating-a-nodegroup-from-a-config-file)和[組態檔案結構描述](https://eksctl.io/usage/schema/)。

   ```
   eksctl create nodegroup \
     --cluster my-cluster \
     --name al-nodes \
     --node-type t3.medium \
     --nodes 3 \
     --nodes-min 1 \
     --nodes-max 4 \
     --ssh-access \
     --managed=false \
     --ssh-public-key my-key
   ```

   若要部署節點群組：
   + 其可以將比預設組態更大量的 IP 位址指派給 Pod，請參閱 [將更多 IP 位址指派給具有字首的 Amazon EKS 節點](cni-increase-ip-addresses.md)。
   + 其可以從與執行個體不同的 CIDR 區塊將 `IPv4` 地址指派給 Pod，請參閱 [使用自訂聯網在替代子網路中部署 Pod](cni-custom-network.md)。
   + 其可以將 `IPv6` 地址指派給 Pod 和服務，請參閱 [了解叢集、Pod 與服務的 IPv6 位址](cni-ipv6.md)。
   + 沒有傳入網際網路存取，請參閱 [部署網際網路存取受到限制的私有叢集](private-clusters.md)。

     如需所有可用選項和預設值的完整清單，請輸入以下命令。

     ```
     eksctl create nodegroup --help
     ```

     如果節點無法加入叢集，請參閱「故障診斷」章節中的 [節點無法加入叢集](troubleshooting.md#worker-node-fail)。

     範例輸出如下。建立節點時，會有數行輸出。輸出的最後幾行之一類似於以下的範例行。

     ```
     [✔]  created 1 nodegroup(s) in cluster "my-cluster"
     ```

1. (選用) 部署[範例應用程式](sample-deployment.md)以測試您的叢集和 Linux 節點。

1. 如果下列條件為真，我們建議封鎖 Pod 對 IMDS 的存取：
   + 您計劃將 IAM 角色指派給您的所有 Kubernetes 服務帳戶，以便 Pod 僅具有所需的最低許可。
   + 叢集中沒有任何 Pod 因其他原因需要存取 Amazon EC2 執行個體中繼資料服務 (IMDS)，例如擷取目前 AWS 區域。

   如需詳細資訊，請參閱[‬限制存取指派給工作節點的執行個體設定檔‭](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node)。

## AWS 管理主控台
<a name="console_create_managed_amazon_linux"></a>

 **步驟 1：使用 AWS 管理主控台 啟動自我管理的 Linux 節點** 

1. 下載最新版本的 AWS CloudFormation 範本。

   ```
   curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2025-11-26/amazon-eks-nodegroup.yaml
   ```

1. 等待您的叢集狀態顯示為 `ACTIVE`。如果在叢集處於作用中狀態之前啟動節點，則節點向叢集註冊將會失敗，導致必須再次啟動。

1. 開啟 [AWS CloudFormation 主控台](https://console.aws.amazon.com/cloudformation/)。

1. 選擇 **Create stack** (建立堆疊)，然後選取 **With new resources (standard)** (使用新資源 (標準))。

1. 針對 **Specify template** (指定範本)，選取 **Upload a template file** (上傳範本檔案)，然後選取 **Choose file** (選擇檔案)。

1. 選取您下載的 `amazon-eks-nodegroup.yaml` 檔案。

1. 選取**下一步**。

1. 在 **Specify stack details** (指定堆疊詳細資訊) 頁面上，據此填寫下列參數，然後選擇 **Next** (下一步)：
   +  **堆疊名稱**：為您的 AWS CloudFormation 堆疊選擇堆疊名稱。例如，您可以稱它為 *my-cluster-nodes*。此名稱僅能使用英數字元 (區分大小寫) 和連字號。必須以英數字元開頭，且長度不可超過 100 個字元。名稱在您要建立叢集 AWS 的區域和 AWS 帳戶中必須是唯一的。
   +  **ClusterName**：輸入建立 Amazon EKS 叢集時使用的名稱。此名稱必須與叢集名稱相同，否則節點無法加入叢集。
   +  **ClusterControlPlaneSecurityGroup**：從您在建立 [VPC](creating-a-vpc.md) 時產生的 AWS CloudFormation 輸出中選擇 **SecurityGroups** 值。

     下列步驟顯示擷取適用群組的一種操作。

     1. 開啟 [Amazon EKS 主控台](https://console.aws.amazon.com/eks/home#/clusters)。

     1. 選擇叢集的名稱。

     1. 選擇 **Networking (網路)** 索引標籤。

     1. 從 **ClusterControlPlaneSecurityGroup** 下拉式清單中選取時，請使用 **Additional Security Group** (其他安全群組) 值作為參考。
   +  **ApiServerEndpoint**：輸入 EKS 叢集的 API 伺服器端點。這可在 EKS 叢集主控台的詳細資訊區段中找到
   +  **CertificateAuthorityData**：輸入 base64 編碼的憑證授權機構資料，也可以在 EKS 叢集主控台的 Deatils 區段中找到。
   +  **ServiceCidr**：輸入用於將 IP 地址配置到叢集內 Kubernetes 服務的 CIDR 範圍。這可在 EKS 叢集主控台的聯網索引標籤中找到。
   +  **AuthenticationMode**：透過檢閱 EKS 叢集主控台中的存取索引標籤，選取 EKS 叢集中使用的身分驗證模式。
   +  **NodeGroupName**：輸入節點群組的名稱。此名稱稍後可用於識別為您節點建立的 Auto Scaling 節點群組。節點群組名稱不可超過 63 個字元。它必須以字母或數字開頭，但剩餘字元也可以包含連字符和底線。
   +  **NodeAutoScalingGroupMinSize**：輸入節點 Auto Scaling 群組可以縮減的最低節點數。
   +  **NodeAutoScalingGroupDesiredCapacity**：堆疊建立時，輸入欲擴展的所需節點數量。
   +  **NodeAutoScalingGroupMaxSize**：輸入節點 Auto Scaling 群組可以擴增的最大節點數。
   +  **NodeInstanceType**：選擇節點的執行個體類型。如需詳細資訊，請參閱[選擇最佳的 Amazon EC2 節點執行個體類型](choosing-instance-type.md)。
   +  **NodeImageIdSSMParam**：預先填入變數 Kubernetes 版本的最新 Amazon EKS 最佳化 Amazon Linux 2023 AMI 的 Amazon EC2 Systems Manager 參數。若要使用 Amazon EKS 支援不同的 Kubernetes 次要版本，請將 *1.XX* 取代為不同的[支援的版本](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)。建議指定與叢集相同的 Kubernetes 版本。

     您也可以將 *amazon-linux-2023* 取代為不同的 AMI 類型。如需詳細資訊，請參閱[擷取建議的 Amazon Linux AMI ID](retrieve-ami-id.md)。
**注意**  
Amazon EKS 節點 AMI 以 Amazon Linux 為基礎。您可以在 Amazon Linux 安全[中心追蹤 Amazon Linux](https://alas.aws.amazon.com/alas2023.html) 2023 的安全或隱私權事件，或訂閱相關聯的 [RSS 摘要](https://alas.aws.amazon.com/AL2023/alas.rss)。安全與隱私權事件包含問題的概觀、哪些套件受到影響，以及如何更新您的執行個體以修正問題。
   +  **NodeImageId**：（選用） 如果您使用自己的自訂 AMI （而非 Amazon EKS 最佳化 AMI)，請輸入您 AWS 區域的節點 AMI ID。如果您在此指定值，則會覆寫 **NodeImageIdSSMParam** 欄位中的任何值。
   +  **NodeVolumeSize**：為您的節點指定根磁碟區大小 (以 GiB 為單位)。
   +  **NodeVolumeType**：為您的節點指定根磁碟區類型。
   +  **KeyName**：輸入 Amazon EC2 SSH 金鑰對的名稱，您可以在節點啟動後使用該金鑰對來透過 SSH 連接至節點。如果您還沒有 Amazon EC2 金鑰對，可以在 AWS 管理主控台中建立一個。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的 [Amazon EC2 金鑰對](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。
   +  **VpcId**：輸入您建立的 [VPC](creating-a-vpc.md) ID。
   +  **子網路**：選擇您為 VPC 建立的子網路。如果您已依照[為您的 Amazon EKS 叢集建立 Amazon VPC](creating-a-vpc.md) 中所述的步驟建立 VPC，則只需指定要啟動節點的 VPC 中的私有子網路。您可以看到哪些子網是私有子網，方法是從叢集的 **Networking** (聯網) 標籤打開每一個子網連結。
**重要**  
如有任何子網路是公有子網路，則必須啟用自動公有 IP 地址指派設定。如果未針對公有子網路啟用設定，則您部署至該公有子網路的任何節點都不會指派公有 IP 地址，也無法與叢集或其他 AWS 服務通訊。如果子網路是在 2020 年 3 月 26 日之前使用任一 [Amazon EKS AWS CloudFormation VPC 範本](creating-a-vpc.md)或使用 部署，`eksctl`則公有子網路的自動公有 IP 地址指派會停用。如需如何啟用子網路的公有 IP 地址指派的相關資訊，請參閱[修改您子網路的公有 IPv4 定址屬性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip)。如果節點部署到私有子網路，則可以透過 NAT 閘道與叢集和其他 AWS 服務通訊。
如果子網路無法存取網際網路，請確保您已知悉[部署網際網路存取受到限制的私有叢集](private-clusters.md)中的考量事項和額外步驟。
如果您選取 AWS Outposts、Wavelength 或 Local Zone 子網路，則建立叢集時不得傳入子網路。

1. 請在 **Configure stack options** (設定堆疊選項) 頁面上選取所需的選項，然後選擇 **Next** (下一頁)。

1. 選取**我確認 AWS CloudFormation 可能會建立 IAM 資源**的左側核取方塊，然後選擇**建立堆疊**。

1. 當當堆疊已完成建立時，從主控台將其選取，然後選擇 **Outputs (輸出)**。如果您使用的是 `EKS API`或 `EKS API and ConfigMap` 身分驗證模式，這是最後一個步驟。

1. 如果您使用`ConfigMap`身分驗證模式，請記錄已建立節點群組的 **NodeInstanceRole**。

 **步驟 2：讓節點加入叢集** 

**注意**  
只有在 EKS 叢集中使用 Configmap 身分驗證模式時，才需要下列兩個步驟。此外，如果您在沒有傳出網際網路存取的情況下在私有 VPC 內啟動節點，請務必讓節點從 VPC 內加入您的叢集。

1. 檢查以瞭解是否有 `aws-auth` `ConfigMap`。

   ```
   kubectl describe configmap -n kube-system aws-auth
   ```

1. 如果您看到 `aws-auth` `ConfigMap`，請視需要更新之。

   1. 開啟 `ConfigMap` 進行編輯。

      ```
      kubectl edit -n kube-system configmap/aws-auth
      ```

   1. 視需要新增 `mapRoles` 個項目。將 `rolearn` 值設定為您在先前程序中記錄的 **NodeInstanceRole** 值。

      ```
      [...]
      data:
        mapRoles: |
          - rolearn: <ARN of instance role (not instance profile)>
            username: system:node:{{EC2PrivateDNSName}}
            groups:
              - system:bootstrappers
              - system:nodes
      [...]
      ```

   1. 儲存檔案並結束您的文字編輯器。

1. 如果您收到一個錯誤，說明 "`Error from server (NotFound): configmaps "aws-auth" not found`，那麼請套用股票 `ConfigMap`。

   1. 下載組態對應。

      ```
      curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
      ```

   1. 在 `aws-auth-cm.yaml` 檔案中，將 `rolearn` 值設定為您在先前程序中紀錄的 **NodeInstanceRole** 值。您可以使用文字編輯器來完成此操作，或者透過取代 *my-node-instance-role* 並執行下列命令：

      ```
      sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
      ```

   1. 套用組態。此命令可能需要幾分鐘的時間來完成。

      ```
      kubectl apply -f aws-auth-cm.yaml
      ```

1. 查看節點的狀態，並等待他們到達 `Ready` 狀態。

   ```
   kubectl get nodes --watch
   ```

   輸入 `Ctrl`\$1`C` 傳回 Shell 提示。
**注意**  
如果您收到任何授權或資源類型錯誤，請參閱故障診斷主題中的[未經授權或存取遭拒 (`kubectl`)](troubleshooting.md#unauthorized)。

   如果節點無法加入叢集，請參閱「故障診斷」章節中的 [節點無法加入叢集](troubleshooting.md#worker-node-fail)。

1. (僅限 GPU 節點) 若您選擇了 GPU 執行個體類型和 Amazon EKS 最佳化加速 AMI，則必須套用 [Kubernetes 專用 NVIDIA 裝置外掛程式](https://github.com/NVIDIA/k8s-device-plugin)作為叢集上的 DaemonSet。請先以您想要的 [NVIDIA/k8s-device-plugin](https://github.com/NVIDIA/k8s-device-plugin/releases) 版本來取代 *vX.X.X*，然後再執行下列命令。

   ```
   kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/deployments/static/nvidia-device-plugin.yml
   ```

 **步驟 3：其他動作** 

1. (選用) 部署[範例應用程式](sample-deployment.md)以測試您的叢集和 Linux 節點。

1. (選用) 如果 **AmazonEKS\$1CNI\$1Policy** 受管 IAM 政策 (如果您有 `IPv4` 叢集) 或 *AmazonEKS\$1CNI\$1IPv6\$1Policy* (您[自我建立的政策](cni-iam-role.md#cni-iam-role-create-ipv6-policy)，前提是如果您有 `IPv6` 叢集) 連接至 [Amazon EKS 節點 IAM 角色](create-node-role.md)，建議改為將其指派給您與 Kubernetes `aws-node` 服務帳戶相關聯的 IAM 角色。如需詳細資訊，請參閱[設定 Amazon VPC CNI 外掛程式以使用 IRSA](cni-iam-role.md)。

1. 如果下列條件為真，我們建議封鎖 Pod 對 IMDS 的存取：
   + 您計劃將 IAM 角色指派給您的所有 Kubernetes 服務帳戶，以便 Pod 僅具有所需的最低許可。
   + 叢集中沒有任何 Pod 因其他原因需要存取 Amazon EC2 執行個體中繼資料服務 (IMDS)，例如擷取目前 AWS 區域。

   如需詳細資訊，請參閱[‬限制存取指派給工作節點的執行個體設定檔‭](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node)。