建立自我管理的 Bottlerocket 節點 - Amazon EKS

協助改進此頁面

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

建立自我管理的 Bottlerocket 節點

注意

受管節點群組可能會為您的使用案例提供一些優勢。如需詳細資訊,請參閱 透過受管節點群組來簡化節點生命週期

本主題會說明如何啟動向 Amazon EKS 叢集註冊的 Bottlerocket 節點的 Auto Scaling 群組。Bottlerocket 是以 Linux 為基礎的 AWS 開放原始碼作業系統,用於在虛擬機器或裸機主機上執行容器。節點加入叢集後,您就可以將 Kubernetes 應用程式部署至其中。如需 Bottlerocket 的詳細資訊,請參閱 GitHub 上的搭配 Amazon EKS 使用 Bottlerocket AMIeksctl 文件上的自訂 AMI 支援

如需就地升級的資訊,請參閱 GitHub 上的 Bottlerocket 更新運算子

重要
  • Amazon EKS 節點為標準 Amazon EC2 執行個體,會根據一般 Amazon EC2 執行個體價格向您收取這些節點的費用。如需詳細資訊,請參閱 Amazon EC2 定價

  • 您可在 AWS Outposts 的 Amazon EKS 擴充叢集中啟動 Bottlerocket 節點,但無法在 AWS Outposts 的本機叢集中啟動這些節點。如需詳細資訊,請參閱 使用 AWS Outposts 在內部部署 Amazon EKS

  • 您可以使用 x86 或 Arm 處理器部署至 Amazon EC2 執行個體。不過,您無法部署至具有 Inferentia 晶片的執行個體。

  • Bottlerocket 與 AWS CloudFormation 相容。但是,沒有可複製的官方 CloudFormation 範本來部署 Amazon EKS 的 Bottlerocket 節點。

  • Bottlerocket 映像不會隨附 SSH 伺服器或 Shell。您可以使用頻外存取方法來允許 SSH 啟用管理員容器,並傳遞一些引導組態步驟與使用者資料。如需詳細資訊,請參閱 GitHub 上 bottlerocket README.md 中的這些部分:

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

eksctl version

如需如何安裝或升級 eksctl 的指示,請參閱 eksctl 文件中的安裝。注意:此程序僅適用於使用 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 金鑰對。使用您自己的值取代其餘所有範例值。完成取代後,請執行修改後的命令以建立 bottlerocket.yaml 檔案。

    如果指定 Arm Amazon EC2 執行個體類型,則請在部署前檢閱 Amazon EKS 最佳化 Arm Amazon Linux AMI 的考量事項。如需了解如何使用自訂 AMI 部署,請參閱 GitHub 上的建置 Bottlerocketeksctl 文件中的自訂 AMI 支援。若要部署受管節點群組,請使用啟動範本部署自訂 AMI。如需詳細資訊,請參閱 使用啟動範本自訂受管節點

    重要

    若想將節點群組部署至 AWS Outposts、AWS Wavelength 或 AWS Local Zone 子網路,則不得在建立叢集時傳入 AWS Outposts、AWS Wavelength 或 AWS Local Zone 子網路。您必須在下列範例中指定子網路。如需詳細資訊,請參閱 eksctl 文件中的從組態檔案建立節點群組組態檔案結構描述。使用叢集所在的 AWS 區域取代 region-code

    cat >bottlerocket.yaml <<EOF --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code version: '1.33' 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
  2. 使用下列命令部署節點。

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

    範例輸出如下。

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

    [✔] created 1 nodegroup(s) in cluster "my-cluster"
  3. (選用) 使用 Amazon EBS CSI 外掛程式在 Bottlerocket 節點上建立 Kubernetes 持續性磁碟區。預設 Amazon EBS 驅動程式依賴於未包含 Bottlerocket 的檔案系統工具。如需使用驅動程式建立儲存類別的詳細資訊,請參閱 透過 Amazon EBS 使用 Kubernetes 磁碟區儲存

  4. (選用) 依預設 kube-proxy 會將 nf_conntrack_max 核心參數設定為預設值,此值可能與開機時 Bottlerocket 原先設定的不同。若要保留 Bottlerocket 的預設設定,請使用以下命令編輯 kube-proxy 組態。

    kubectl edit -n kube-system daemonset kube-proxy

    新增 --conntrack-max-per-core--conntrack-minkube-proxy 引數,這些引數位於以下範例中。0 設定意味著沒有改變。

    containers: - command: - kube-proxy - --v=2 - --config=/var/lib/kube-proxy-config/config - --conntrack-max-per-core=0 - --conntrack-min=0
  5. (選用) 部署範例應用程式來測試您的 Bottlerocket 節點。

  6. 如果下列條件為真,我們建議封鎖 Pod 對 IMDS 的存取:

    • 您計劃將 IAM 角色指派給您的所有 Kubernetes 服務帳戶,以便 Pod 僅具有所需的最低許可。

    • 叢集中沒有 Pod 出於其他原因 (例如擷取當前的 AWS 區域) 需要存取 Amazon EC2 執行個體中繼資料服務 (IMDS)。

    如需詳細資訊,請參閱‬限制存取指派給工作節點的執行個體設定檔‭