協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
使用 Bottlerocket 連接混合節點
本主題會說明如何將執行 Bottlerocket 的混合節點連接至 Amazon EKS 叢集。Bottlerocket
EKS 混合節點僅支援 Bottlerocket 版本 1.37.0 及更新版本的 VMware 變體。Bottlerocket 的 VMware 變體適用於 Kubernetes 版本 1.28 及更新版本。這些變體的作業系統映像包括 kubelet、containerd、aws-iam-authenticator 和 EKS 混合節點的其他軟體先決條件。您可以使用 Bottlerocket 設定kubectl) 中顯示為「Not Ready」狀態。完成此頁面上的步驟後,請繼續 設定混合節點的 CNI,以讓您的混合節點準備好執行應用程式。
先決條件
將混合節點連接至 Amazon EKS 叢集之前,請確保您已完成先決條件步驟。
-
您的內部部署環境與託管您的 Amazon EKS 叢集的 AWS 區域之間已建立網路連線。如需詳細資訊,請參閱「準備混合節點的聯網」。
-
您已建立混合節點 IAM 角色,並設定內部部署憑證提供者 (AWS Systems Manager 混合啟用或 AWS IAM Roles Anywhere)。如需詳細資訊,請參閱「準備混合節點的憑證」。
-
您已建立了已啟用混合節點的 Amazon EKS 叢集。如需詳細資訊,請參閱「建立具有混合節點的 Amazon EKS 叢集」。
-
您已將混合節點 IAM 角色與 Kubernetes 角色型存取控制 (RBAC) 許可建立關聯。如需詳細資訊,請參閱「準備混合節點的叢集存取」。
步驟 1:建立 Bottlerocket 設定 TOML 檔案
若要為混合節點設定 Bottlerocket,您需要建立具有必要組態的 settings.toml 檔案。TOML 檔案的內容會根據您使用的憑證提供者 (SSM 或 IAM Roles Anywhere) 而有所不同。佈建 Bottlerocket 執行個體時,此檔案將會作為使用者資料傳遞。
SSM
如果您使用 AWS Systems Manager 作為憑證提供者,請使用下列內容建立 settings.toml 檔案:
[settings.kubernetes] cluster-name = "<cluster-name>" api-server = "<api-server-endpoint>" cluster-certificate = "<cluster-certificate-authority>" hostname-override = "<hostname>" provider-id = "eks-hybrid:///<region>/<cluster-name>/<hostname>" authentication-mode = "aws" [settings.network] hostname = "<hostname>" [settings.aws] region = "<region>" [settings.kubernetes.node-labels] "eks.amazonaws.com/compute-type" = "hybrid" "eks.amazonaws.com/hybrid-credential-provider" = "ssm" [settings.host-containers.admin] enabled = true user-data = "<base64-encoded-admin-container-userdata>" [settings.bootstrap-containers.eks-hybrid-setup] mode = "always" user-data = "<base64-encoded-bootstrap-container-userdata>" [settings.host-containers.control] enabled = true
使用下列值取代預留位置:
-
<cluster-name>:Amazon EKS 叢集的名稱。 -
<api-server-endpoint>:叢集的 API 伺服器端點。 -
<cluster-certificate-authority>:叢集的 base64 編碼 CA 套件。 -
<region>:託管叢集的 AWS 區域,例如 "us-east-1"。 -
<hostname>:Bottlerocket 執行個體的主機名稱,其也會設定為節點名稱。這可以是您選擇的任何唯一值,不過必須遵循 Kubernetes 物件命名慣例。此外,您使用的主機名稱不可超過 64 個字元。注意:使用 SSM 提供商時,在向 SSM 註冊執行個體之後,此主機名稱和節點名稱將會取代為受管執行個體 ID (例如 mi-*ID)。 -
<base64-encoded-admin-container-userdata>:Bottlerocket 管理員容器組態的 base64 編碼內容。啟用管理員容器可讓您使用 SSH 連接至 Bottlerocket 執行個體,以進行系統勘探和偵錯。雖然這並非必要的設定,但我們建議您將其啟用,以便進行故障診斷。如需使用管理員容器進行身分驗證的詳細資訊,請參閱 Bottlerocket 管理員容器文件。管理員容器採用 JSON 格式的 SSH 使用者和金鑰輸入,例如:
{ "user": "<ssh-user>", "ssh": { "authorized-keys": [ "<ssh-authorized-key>" ] } }
-
<base64-encoded-bootstrap-container-userdata>:Bottlerocket 引導容器組態的 base64 編碼內容。如需其組態的詳細資訊,請參閱 Bottlerocket 引導容器文件。引導容器負責將執行個體註冊為 AWS SSM 受管執行個體,並將其聯結為 Amazon EKS 叢集上的 Kubernetes 節點。傳遞至引導容器的使用者資料採用命令調用的形式,而其接受您先前建立的 SSM 混合啟用代碼和 ID 作為輸入:
eks-hybrid-ssm-setup --activation-id=<activation-id> --activation-code=<activation-code> --region=<region>
IAM Roles Anywhere
如果您使用 AWS IAM Roles Anywhere 作為憑證提供者,請使用下列內容建立 settings.toml 檔案:
[settings.kubernetes] cluster-name = "<cluster-name>" api-server = "<api-server-endpoint>" cluster-certificate = "<cluster-certificate-authority>" hostname-override = "<hostname>" provider-id = "eks-hybrid:///<region>/<cluster-name>/<hostname>" authentication-mode = "aws" [settings.network] hostname = "<hostname>" [settings.aws] region = "<region>" config = "<base64-encoded-aws-config-file>" [settings.kubernetes.node-labels] "eks.amazonaws.com/compute-type" = "hybrid" "eks.amazonaws.com/hybrid-credential-provider" = "iam-ra" [settings.host-containers.admin] enabled = true user-data = "<base64-encoded-admin-container-userdata>" [settings.bootstrap-containers.eks-hybrid-setup] mode = "always" user-data = "<base64-encoded-bootstrap-container-userdata>"
使用下列值取代預留位置:
-
<cluster-name>:Amazon EKS 叢集的名稱。 -
<api-server-endpoint>:叢集的 API 伺服器端點。 -
<cluster-certificate-authority>:叢集的 base64 編碼 CA 套件。 -
<region>:託管叢集的 AWS 區域,例如 "us-east-1" -
<hostname>:Bottlerocket 執行個體的主機名稱,其也會設定為節點名稱。這可以是您選擇的任何唯一值,不過必須遵循 Kubernetes 物件命名慣例。此外,您使用的主機名稱不可超過 64 個字元。注意:使用 IAM-RA 提供商時,如果您已使用 "sts:RoleSessionName": "${aws:PrincipalTag/x509Subject/CN}"資源條件設定混合節點 IAM 角色的信任政策,則節點名稱必須與主機上的憑證的 CN 相符。 -
<base64-encoded-aws-config-file>:AWS 組態檔案的 base64 編碼內容。檔案的內容應如下所示:
[default] credential_process = aws_signing_helper credential-process --certificate /root/.aws/node.crt --private-key /root/.aws/node.key --profile-arn <profile-arn> --role-arn <role-arn> --trust-anchor-arn <trust-anchor-arn> --role-session-name <role-session-name>
-
<base64-encoded-admin-container-userdata>:Bottlerocket 管理員容器組態的 base64 編碼內容。啟用管理員容器可讓您使用 SSH 連接至 Bottlerocket 執行個體,以進行系統勘探和偵錯。雖然這並非必要的設定,但我們建議您將其啟用,以便進行故障診斷。如需使用管理員容器進行身分驗證的詳細資訊,請參閱 Bottlerocket 管理員容器文件。管理員容器採用 JSON 格式的 SSH 使用者和金鑰輸入,例如:
{ "user": "<ssh-user>", "ssh": { "authorized-keys": [ "<ssh-authorized-key>" ] } }
-
<base64-encoded-bootstrap-container-userdata>:Bottlerocket 引導容器組態的 base64 編碼內容。如需其組態的詳細資訊,請參閱 Bottlerocket 引導容器文件。引導容器負責在執行個體上建立 IAM Roles Anywhere 主機憑證和憑證私有金鑰檔案。然後, aws_signing_helper會使用這些憑證來取得臨時憑證,以便與您的 Amazon EKS 叢集進行身分驗證。傳遞至引導容器的使用者資料採用命令調用的形式,而其接受您先前建立的憑證和私有金鑰的內容作為輸入:
eks-hybrid-iam-ra-setup --certificate=<certificate> --key=<private-key>
步驟 2:使用使用者資料佈建 Bottlerocket vSphere VM
建構 TOML 檔案後,請在 vSphere VM 建立期間將其作為使用者資料進行傳遞。請記住,必須在 VM 第一次開機之前設定使用者資料。因此,您需要在建立執行個體時提供它,或者如果您想要提前建立 VM,則 VM 必須處於關機狀態,直到您為其設定使用者資料為止。例如,如果使用 govc CLI:
第一次建立 VM
govc vm.create \ -on=true \ -c=2 \ -m=4096 \ -net.adapter=<network-adapter> \ -net=<network-name> \ -e guestinfo.userdata.encoding="base64" \ -e guestinfo.userdata="$(base64 -w0 settings.toml)" \ -template=<template-name> \ <vm-name>
更新現有 VM 的使用者資料
govc vm.create \ -on=false \ -c=2 \ -m=4096 \ -net.adapter=<network-adapter> \ -net=<network-name> \ -template=<template-name> \ <vm-name> govc vm.change -vm <vm-name> \ -e guestinfo.userdata="$(base64 -w0 settings.toml)" \ -e guestinfo.userdata.encoding="base64" govc vm.power -on <vm-name>
在上述區段中,-e guestinfo.userdata.encoding="base64" 選項會指定使用者資料採用 base64 編碼。-e guestinfo.userdata 選項會將 settings.toml 檔案的 base64 編碼內容作為使用者資料傳遞至 Bottlerocket 執行個體。使用特定值取代預留位置,例如 Bottlerocket OVA 範本和聯網詳細資訊。
步驟 3:驗證混合節點連線
Bottlerocket 執行個體啟動後,其會嘗試加入您的 Amazon EKS 叢集。您可以導覽至叢集的「運算」索引標籤,或執行下列命令,以在 Amazon EKS 主控台中驗證連線:
kubectl get nodes
重要
您的節點將處於 Not Ready 狀態,這在意料之中,因為您的混合節點上並未執行 CNI。如果您的節點未加入叢集,請參閱 故障診斷混合節點。
步驟 4:設定混合節點的 CNI
要讓您的混合節點準備好執行應用程式,請繼續執行 設定混合節點的 CNI 上的步驟。