

 **協助改進此頁面** 

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

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

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

# 在 AWS Outpost 上建立 Amazon Linux 節點
<a name="eks-outposts-self-managed-nodes"></a>

**重要**  
Outposts 上的 Amazon EKS 本機叢集僅支援從下列 Amazon EKS 最佳化 Amazon Linux 2023 AMIs 建立的節點：  
標準 Amazon Linux 2023 (`amazon-linux-2023/x86_64/standard`)
加速 Nvidia Amazon Linux 2023 (`amazon-linux-2023/x86_64/nvidia`)
加速 Neuron Amazon Linux 2023 (`amazon-linux-2023/x86_64/neuron`)
 AWS 已於 2025 年 11 月 26 日終止對 EKS AL2-optimized和 AL2-accelerated AMIs 的支援。雖然您可以在終止支援 (EOS) 日期 (2025 年 11 月 26 日) 之後繼續使用 EKS AL2 AMI，但 EKS 將不再發布任何新的 Kubernetes 版本或對 AL2 AMI 的更新，包括此日期之後的次要版本、修補程式和錯誤修正。如需 AL2 棄用的詳細資訊，請參閱[此處](https://docs.aws.amazon.com/eks/latest/userguide/eks-ami-deprecation-faqs.html)。

本主題會說明如何啟動 Outpost 上已向 Amazon EKS 叢集註冊的 Amazon Linux 節點的 Auto Scaling 群組。叢集可以在 AWS 雲端或 Outpost 上。
+ 現有的 Outpost。如需詳細資訊，請參閱[什麼是 AWS Outpost。](https://docs.aws.amazon.com/outposts/latest/userguide/what-is-outposts.html)
+ 現有 Amazon EKS 叢集。若要在 AWS 雲端部署叢集，請參閱 [建立 Amazon EKS 叢集](create-cluster.md)。若要在 Outpost 上部署叢集，請參閱[建立 AWS Outposts 上的本機 Amazon EKS 叢集，以實現高可用性](eks-outposts-local-cluster-overview.md)。
+ 假設您正在 AWS 雲端的叢集中建立節點，並在已啟用 AWS Outposts、 AWS Wavelength 或 AWS Local Zones 的 AWS 區域中擁有子網路。然後，在您建立叢集時，不得傳入這些子網路。如果您要在 Outpost 上的叢集中建立節點，則必須在建立叢集時便已傳入 Outpost 子網路。
+ （建議用於 AWS 雲端上的叢集） 適用於 Kubernetes 附加元件的 Amazon VPC CNI 外掛程式，其設定為具有連接必要 IAM 政策的自有 IAM 角色。如需詳細資訊，請參閱[設定 Amazon VPC CNI 外掛程式以使用 IRSA](cni-iam-role.md)。本機叢集不支援服務帳戶的 IAM 角色。

您可以使用 `eksctl`或 AWS 管理主控台 （使用 AWS CloudFormation 範本） 建立自我管理的 Amazon Linux 節點群組。您也可使用 Terraform。

您可以使用此頁面中所述的下列工具，為本機叢集建立自我管理節點群組：
+  [`eksctl`](#eksctl_create_nodes_outpost) 
+  [AWS 管理主控台](#console_create_nodes_outpost) 

**重要**  
自我管理節點群組包含您帳戶的 Amazon EC2 執行個體。當您或 Amazon EKS 代您更新控制平面版本時，這些執行個體不會自動升級。自我管理節點群組在主控台中沒有任何需要更新的指示。您可以檢視安裝在節點上的 `kubelet` 版本，方法是選取您叢集的 **Overview** (概觀) 標籤上的 **Nodes** (節點) 清單上的節點，以判斷哪些節點需要更新。您必須手動更新節點。如需詳細資訊，請參閱[更新您的叢集的自我管理節點](update-workers.md)。
您自我管理節點上的 kubelet 使用的憑證已核發，一年過期。預設**不會**啟用憑證輪換 （請參閱：https：//https://kubernetes.io/docs/reference/config-api/kubelet-config.v1beta1/\$1kubelet-config-k8s-io-v1beta1-KubeletConfiguration)，這表示如果您的自我管理節點執行超過一年，就無法再向 Kubernetes API 進行身分驗證。
基於最佳實務，建議客戶定期更新其自我管理節點群組，以從最新的 Amazon EKS 最佳化 AMI 接收 CVE 和安全性修補程式。更新自我管理節點群組中使用的 AMI 也會觸發節點的重新建立，並確保它們不會因為過期的 kubelet 憑證而發生問題。
或者，您也可以在建立自我管理節點群組時啟用用戶端憑證輪換 (請參閱：https://kubernetes.io/docs/tasks/tls/certificate-rotation/)，以確保在 kubelet 憑證在目前的憑證即將過期時及時更新。

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

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

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

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

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

   使用您 Outpost 上可用的執行個體類型來取代 *instance-type* 。

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

   使用下列命令來建立您的節點群組。

   ```
   eksctl create nodegroup --cluster my-cluster --name al-nodes --node-type instance-type \
       --nodes 3 --nodes-min 1 --nodes-max 4 --managed=false \
       --node-volume-type gp2 --subnet-ids subnet-id \
       --node-ami-family AmazonLinux2023
   ```

   如果您的叢集部署在 AWS 雲端：
   + 您部署的節點群組可以從與執行個體不同的 CIDR 區塊將 `IPv4` 地址指派給 Pod。如需詳細資訊，請參閱[使用自訂聯網在替代子網路中部署 Pod](cni-custom-network.md)。
   + 您部署的節點群組不需要傳出網際網路存取。如需詳細資訊，請參閱[部署網際網路存取受到限制的私有叢集](private-clusters.md)。

   如需所有可用選項和預設值的完整清單，請參閱 `eksctl` 文件中的 [AWS Outposts 支援](https://eksctl.io/usage/outposts/)。
   + 如果節點無法加入叢集，請參閱[節點無法加入叢集](troubleshooting.md#worker-node-fail)[針對 Amazon EKS 叢集和節點問題進行故障診斷](troubleshooting.md)[無法將節點加入叢集](eks-outposts-troubleshooting.md#outposts-troubleshooting-unable-to-join-nodes-to-a-cluster)，以及針對 [AWS Outposts 上的本機 Amazon EKS 叢集進行故障診斷](eks-outposts-troubleshooting.md)。
   + 範例輸出如下。建立節點時，會有數行輸出。輸出的最後幾行之一類似於以下的範例行。

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

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

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

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

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

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

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** (選擇檔案)。選取在上一步驟中下載的 `amazon-eks-nodegroup.yaml` 檔案，然後選取 **Next** (下一步)。

1. 在 **Specify stack details** (指定堆疊詳細資訊) 頁面上，據此填寫下列參數，然後選擇 **Next** (下一步)：
   +  **堆疊名稱**：為您的 AWS CloudFormation 堆疊選擇堆疊名稱。例如，您可以稱它為 *al-nodes*。此名稱僅能使用英數字元 (區分大小寫) 和連字號。必須以英數字元開頭，且長度不可超過 100 個字元。名稱在您要建立叢集 AWS 的區域和 AWS 帳戶中必須是唯一的。
   +  **ApiServerEndpoint**：輸入 Kubernetes API 伺服器端點，在 EKS 主控台中或透過 DescribeCluster API 顯示。
   +  **ClusterName**：請輸入您叢集的名稱。若此名稱與您叢集的名稱不相符，則您的節點便無法加入叢集。
   +  **ClusterId**：輸入由 EKS 服務指派給叢集的 ID。透過 DescribeCluster API 可見。如果此 ID 與您的叢集 ID 不符，您的節點將無法加入叢集。
   +  **CertificateAuthority**：輸入 Kubernetes Certificate Authority 的 base64 編碼字串。在 EKS 主控台中或透過 DescribeCluster API 顯示。
   +  **ServiceCidr**：輸入 Kubernetes Services CIDR。在 EKS 主控台中或透過 DescribeCluster API 顯示。
   +  **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** (其他安全群組) 值作為參考。
   +  **NodeGroupName**：輸入節點群組的名稱。此名稱稍後可用於識別為您節點建立的 Auto Scaling 節點群組。
   +  **NodeAutoScalingGroupMinSize**：輸入節點 Auto Scaling 群組可以縮減的最低節點數。
   +  **NodeAutoScalingGroupDesiredCapacity**：堆疊建立時，輸入欲擴展的所需節點數量。
   +  **NodeAutoScalingGroupMaxSize**：輸入節點 Auto Scaling 群組可以擴增的最大節點數。
   +  **NodeInstanceType**：選擇節點的執行個體類型。如果您的叢集在 AWS 雲端上執行，如需詳細資訊，請參閱 [選擇最佳的 Amazon EC2 節點執行個體類型](choosing-instance-type.md)。若您的叢集正於 Outpost 上執行，則您僅可選取 Outpost 上可用的執行個體類型。
   +  **NodeImageIdSSMParam**：為變數 Kubernetes 版本預先填入了最近 Amazon EKS 最佳化 AMI 的 Amazon EC2 Systems Manager 參數。若要使用 Amazon EKS 支援不同的 Kubernetes 次要版本，請將 *1.XX* 取代為不同的[支援的版本](https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions.html)。建議指定與叢集相同的 Kubernetes 版本。

     若要使用 Amazon EKS 最佳化加速 AMI，請將 *NodeImageIdSSMParam* 值更新為所需的 SSM 參數。在此處了解如何從 SSM 擷取 EKS AMI IDs[https://docs.aws.amazon.com/eks/latest/userguide/retrieve-ami-id.html](https://docs.aws.amazon.com/eks/latest/userguide/retrieve-ami-id.html)。
**注意**  
Amazon EKS 節點 AMI 以 Amazon Linux 為基礎。您可以透過選擇所需版本的標籤，在 [Amazon Linux 安全中心](https://alas.aws.amazon.com/)追蹤 Amazon Linux 的安全或隱私權事件。您也可以訂閱適用的 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)。
**注意**  
如果您未在此處提供金鑰對， AWS CloudFormation 堆疊建立會失敗。
   +  **DisableIMDSv1**：預設情況下，每個節點都支援執行個體中繼資料服務版本 1 (IMDSv1) 和 IMDSv2。您可以停用 IMDSv1。若要防止節點群組中的未來節點和 Pod 使用 IMDSv1，請將 **DisableIMDSv1** 設定為 **true**。如需 IMDS 的詳細資訊，請參閱[設定執行個體中繼資料服務](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)。如需在節點上限制存取的詳細資訊，請參閱[限制存取指派給工作節點的執行個體設定檔](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node)。
   +  **VpcId**：輸入您建立的 [VPC](creating-a-vpc.md) ID。在選擇子網路之前，請先檢閱 [VPC 要求和考量事項](eks-outposts-vpc-subnet-requirements.md#outposts-vpc-requirements)。
   +  **子網路**：如果叢集位於 Outpost 上，則請至少在 VPC 中選擇一個私有子網路。在選擇子網路之前，請先檢閱[子網路需求和注意事項](eks-outposts-vpc-subnet-requirements.md#outposts-subnet-requirements)。您可以看到哪些子網是私有子網，方法是從叢集的 **Networking** (聯網) 標籤打開每一個子網連結。

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

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

1. 當當堆疊已完成建立時，從主控台將其選取，然後選擇 **Outputs (輸出)**。

1. 為已建立的節點群組記錄 **NodeInstanceRole**。當您設定 Amazon EKS 節點時會需要此值。

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

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)[針對 Amazon EKS 叢集和節點問題進行故障診斷](troubleshooting.md)[無法將節點加入叢集](eks-outposts-troubleshooting.md#outposts-troubleshooting-unable-to-join-nodes-to-a-cluster)，以及針對 [AWS Outposts 上的本機 Amazon EKS 叢集進行故障診斷](eks-outposts-troubleshooting.md)。

1. 安裝 Amazon EBS CSI 驅動程式。如需詳細資訊，請參閱 GitHub 上的 [Installation](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/install.md) (安裝)。在 **Set up driver permission** (設定驅動程式權限) 區段中，請務必依照 **Using IAM instance profile** (使用 IAM 執行個體設定檔) 選項指示操作。您必須使用 `gp2` 儲存類別。不支援 `gp3` 儲存類別。

   若要在叢集上建立 `gp2` 儲存類別，請完成以下步驟。

   1. 執行下列命令以建立 `gp2-storage-class.yaml` 檔案。

      ```
      cat >gp2-storage-class.yaml <<EOF
      apiVersion: storage.k8s.io/v1
      kind: StorageClass
      metadata:
        annotations:
          storageclass.kubernetes.io/is-default-class: "true"
        name: ebs-sc
      provisioner: ebs.csi.aws.com
      volumeBindingMode: WaitForFirstConsumer
      parameters:
        type: gp2
        encrypted: "true"
      allowVolumeExpansion: true
      EOF
      ```

   1. 將清單檔案套用至叢集。

      ```
      kubectl apply -f gp2-storage-class.yaml
      ```

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. 若您的叢集部署在 Outpost 上，請跳過此步驟。如果您的叢集部署在 AWS 雲端上，則下列資訊為選用。如果 **AmazonEKS\$1CNI\$1Policy** 受管 IAM 政策已連接至您的 [Amazon EKS 節點 IAM 角色](create-node-role.md)，建議您改為將其指派給您與 Kubernetes `aws-node` 服務帳戶相關聯的 IAM 角色。如需詳細資訊，請參閱[設定 Amazon VPC CNI 外掛程式以使用 IRSA](cni-iam-role.md)。