

 **協助改進此頁面** 

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

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

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

# 建立自我管理的 Bottlerocket 節點
<a name="launch-node-bottlerocket"></a>

**注意**  
受管節點群組可能會為您的使用案例提供一些優勢。如需詳細資訊，請參閱[透過受管節點群組來簡化節點生命週期](managed-node-groups.md)。

本主題會說明如何啟動向 Amazon EKS 叢集註冊的 [Bottlerocket](https://aws.amazon.com/bottlerocket/) 節點的 Auto Scaling 群組。Bottlerocket 是以 Linux 為基礎的開放原始碼作業系統 AWS ，可用於在虛擬機器或裸機主機上執行容器。節點加入叢集後，您就可以將 Kubernetes 應用程式部署至其中。如需 Bottlerocket 的詳細資訊，請參閱 GitHub 上的[搭配 Amazon EKS 使用 Bottlerocket AMI](https://github.com/bottlerocket-os/bottlerocket/blob/develop/QUICKSTART-EKS.md) 和 `eksctl` 文件上的[自訂 AMI 支援](https://eksctl.io/usage/custom-ami-support/)。

如需就地升級的資訊，請參閱 GitHub 上的 [Bottlerocket 更新運算子](https://github.com/bottlerocket-os/bottlerocket-update-operator)。

**重要**  
Amazon EKS 節點為標準 Amazon EC2 執行個體，會根據一般 Amazon EC2 執行個體價格向您收取這些節點的費用。如需詳細資訊，請參閱 [Amazon EC2 定價](https://aws.amazon.com/ec2/pricing/)。
您可以在 AWS Outposts 上的 Amazon EKS 擴充叢集中啟動 Bottlerocket 節點，但無法在 AWS Outposts 的本機叢集中啟動它們。如需詳細資訊，請參閱[使用 AWS Outposts 在內部部署 Amazon EKS](eks-outposts.md)。
您可以使用 `x86` 或 Arm 處理器部署至 Amazon EC2 執行個體。不過，您無法部署至具有 Inferentia 晶片的執行個體。
Bottlerocket 與 AWS CloudFormation 相容。但是，沒有可複製的官方 CloudFormation 範本來部署 Amazon EKS 的 Bottlerocket 節點。
Bottlerocket 映像不會隨附 SSH 伺服器或 Shell。您可以使用頻外存取方法來允許 SSH 啟用管理員容器，並傳遞一些引導組態步驟與使用者資料。如需詳細資訊，請參閱 GitHub 上 [bottlerocket README.md](https://github.com/bottlerocket-os/bottlerocket) 中的這些部分：  
 [探勘](https://github.com/bottlerocket-os/bottlerocket#exploration) 
 [管理員容器](https://github.com/bottlerocket-os/bottlerocket#admin-container) 
 [Kubernetes 設定](https://github.com/bottlerocket-os/bottlerocket#kubernetes-settings) 

此程序需要 `eksctl` 版本 `0.215.0` 或更新版本。您可使用以下命令檢查您的版本：

```
eksctl version
```

如需如何安裝或升級 `eksctl` 的指示，請參閱 `eksctl` 文件中的[安裝](https://eksctl.io/installation)。注意：此程序僅適用於使用 `eksctl` 建立的叢集。

1. 將以下內容複製到您的裝置。使用您叢集的名稱取代 *my-cluster*。此名稱僅能使用英數字元 (區分大小寫) 和連字號。必須以英數字元開頭，且長度不可超過 100 個字元。名稱在您要建立叢集 AWS 的區域和 AWS 帳戶中必須是唯一的。使用您的節點群組名稱取代 *ng-bottlerocket*。節點群組名稱不可超過 63 個字元。它必須以字母或數字開頭，但剩餘字元也可以包含連字符和底線。若要在 Arm 執行個體上部署，請使用 Arm 執行個體類型取代 *m5.large*。使用 Amazon EC2 SSH 金鑰對名稱取代 *my-ec2-keypair-name*，您可以在節點啟動後使用該金鑰對來透過 SSH 連接至節點。如果您還沒有 Amazon EC2 金鑰對，可以在 AWS 管理主控台中建立一個。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的 [Amazon EC2 金鑰對](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。使用您自己的值取代其餘所有範例值。完成取代後，請執行修改後的命令以建立 `bottlerocket.yaml` 檔案。

   如果指定 Arm Amazon EC2 執行個體類型，則請在部署前檢閱 [Amazon EKS 最佳化 Arm Amazon Linux AMI](eks-optimized-ami.md#arm-ami) 的考量事項。如需了解如何使用自訂 AMI 部署，請參閱 GitHub 上的[建置 Bottlerocket](https://github.com/bottlerocket-os/bottlerocket/blob/develop/BUILDING.md) 和 `eksctl` 文件中的[自訂 AMI 支援](https://eksctl.io/usage/custom-ami-support/)。若要部署受管節點群組，請使用啟動範本部署自訂 AMI。如需詳細資訊，請參閱[使用啟動範本自訂受管節點](launch-templates.md)。
**重要**  
若要將節點群組部署至 AWS Outposts、 AWS Wavelength 或 AWS Local Zone 子網路，請勿在建立叢集時傳遞 AWS Outposts、 AWS Wavelength 或 AWS Local Zone 子網路。您必須在下列範例中指定子網路。如需詳細資訊，請參閱 `eksctl` 文件中的[從組態檔案建立節點群組](https://eksctl.io/usage/nodegroups/#creating-a-nodegroup-from-a-config-file)和[組態檔案結構描述](https://eksctl.io/usage/schema/)。將 *region-code* 取代為您的叢集所在的 AWS 區域。

   ```
   cat >bottlerocket.yaml <<EOF
   ---
   apiVersion: eksctl.io/v1alpha5
   kind: ClusterConfig
   
   metadata:
     name: my-cluster
     region: region-code
     version: '1.35'
   
   iam:
     withOIDC: true
   
   nodeGroups:
     - name: ng-bottlerocket
       instanceType: m5.large
       desiredCapacity: 3
       amiFamily: Bottlerocket
       ami: auto-ssm
       iam:
          attachPolicyARNs:
             - arn:aws: iam::aws:policy/AmazonEKSWorkerNodePolicy
             - arn:aws: iam::aws:policy/AmazonEC2ContainerRegistryReadOnly
             - arn:aws: iam::aws:policy/AmazonSSMManagedInstanceCore
             - arn:aws: iam::aws:policy/AmazonEKS_CNI_Policy
       ssh:
           allow: true
           publicKeyName: my-ec2-keypair-name
   EOF
   ```

1. 使用下列命令部署節點。

   ```
   eksctl create nodegroup --config-file=bottlerocket.yaml
   ```

   範例輸出如下。

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

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

1. (選用) 使用 [Amazon EBS CSI 外掛程式](https://github.com/kubernetes-sigs/aws-ebs-csi-driver)在 Bottlerocket 節點上建立 Kubernetes [持續性磁碟區](https://kubernetes.io/docs/concepts/storage/persistent-volumes/)。預設 Amazon EBS 驅動程式依賴於未包含 Bottlerocket 的檔案系統工具。如需使用驅動程式建立儲存類別的詳細資訊，請參閱 [透過 Amazon EBS 使用 Kubernetes 磁碟區儲存](ebs-csi.md)。

1. (選用) 依預設 `kube-proxy` 會將 `nf_conntrack_max` 核心參數設定為預設值，此值可能與開機時 Bottlerocket 原先設定的不同。若要保留 Bottlerocket 的[預設設定](https://github.com/bottlerocket-os/bottlerocket-core-kit/blob/develop/packages/release/release-sysctl.conf)，請使用以下命令編輯 `kube-proxy` 組態。

   ```
   kubectl edit -n kube-system daemonset kube-proxy
   ```

   新增 `--conntrack-max-per-core` 和 `--conntrack-min` 到 `kube-proxy` 引數，這些引數位於以下範例中。`0` 設定意味著沒有改變。

   ```
         containers:
         - command:
           - kube-proxy
           - --v=2
           - --config=/var/lib/kube-proxy-config/config
           - --conntrack-max-per-core=0
           - --conntrack-min=0
   ```

1. (選用) 部署[範例應用程式](sample-deployment.md)來測試您的 Bottlerocket 節點。

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)。