協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
準備混合節點的作業系統
Bottlerocket、Amazon Linux 2023 (AL2023)、Ubuntu 和 RHEL 經過持續驗證,可用作混合節點的節點作業系統。AWS 僅在 VMware vSphere 環境中支援 Bottlerocket。當 AL2023 在 Amazon EC2 外部執行時,其即不在 AWS Support Plans 的涵蓋範圍內。AL2023 僅能在內部部署虛擬化環境中使用,如需詳細資訊,請參閱《Amazon Linux 2023 使用者指南》。AWS 會支援與 Ubuntu 和 RHEL 作業系統整合的混合節點,但不支援作業系統本身。
您負責作業系統佈建和管理。在首次測試混合節點時,最簡單的方式是在已佈建的主機上執行 Amazon EKS 混合節點 CLI (nodeadm)。對於生產部署,建議您在作業系統映像中包含 nodeadm,並將它設定為作為 systemd 服務執行,以便在主機啟動時自動將主機加入 Amazon EKS 叢集。如果您在 vSphere 上使用 Bottlerocket 作為節點作業系統,則不需要使用 nodeadm,因為 Bottlerocket 已包含混合節點所需的相依性,並且會在主機啟動時自動連接至您設定的叢集。
版本相容性
下表所列的作業系統版本代表相容且經過驗證可用作混合節點的節點作業系統。如果您使用的是此表中未包含的其他作業系統變體或版本,則 AWS Support 不會涵蓋混合節點與作業系統變體或版本的相容性。混合節點與底層基礎結構無關,並可支援 x86 和 ARM 架構。
| 作業系統 | 版本 |
|---|---|
|
Amazon Linux |
Amazon Linux 2023 (AL2023) |
|
Bottlerocket |
執行 Kubernetes v1.28 及更新版本的 v1.37.0 及更新版本的 VMware 變體 |
|
Ubuntu |
Ubuntu 20.04、Ubuntu 22.04、Ubuntu 24.04 |
|
Red Hat Enterprise Linux |
RHEL 8、RHEL 9 |
作業系統考量事項
一般問題
-
Amazon EKS 混合節點 CLI (
nodeadm) 可用於簡化混合節點元件和相依性的安裝和組態。在作業系統映像建置管道期間或每個內部部署主機的執行時期,您可以執行nodeadm install程序。如需有關nodeadm安裝的元件的詳細資訊,請參閱 混合節點 nodeadm 參考。 -
如果您在內部部署環境中使用代理連線至網際網路,安裝和升級程序需要額外的作業系統組態,才能將套件管理工具設定為使用代理。如需說明,請參閱 設定混合節點的代理。
Bottlerocket
-
連接 Bottlerocket 節點的步驟和工具與其他作業系統的步驟不同,並會在 使用 Bottlerocket 連接混合節點 中單獨介紹,而不會涵蓋在 連接混合節點 的步驟中。
-
Bottlerocket 的步驟不會使用混合節點 CLI 工具
nodeadm。 -
EKS 混合節點僅支援 Bottlerocket 版本 1.37.0 及更新版本的 VMware 變體。Bottlerocket 的 VMware 變體適用於 Kubernetes 版本 1.28 及更新版本。不支援其他 Bottlerocket 變體
作為混合節點作業系統。注意: Bottlerocket 的 VMware 變體僅適用於 x86_64 架構。
Containerd
-
Containerd 是標準 Kubernetes 容器執行時期,也是混合節點以及所有 Amazon EKS 節點運算類型的相依性。Amazon EKS 混合節點 CLI (
nodeadm) 會嘗試在nodeadm install程序期間安裝 containerd。您可以使用--containerd-source命令列選項,在nodeadm install執行時期設定 containerd 安裝。有效選項為none、distro和docker。如果您使用的是 RHEL,則distro不是有效選項,並且您可以將nodeadm設定為從 Docker 的儲存庫安裝 containerd 建置,也可以手動安裝 containerd。使用 AL2023 或 Ubuntu 時,nodeadm預設為從作業系統分佈中安裝 containerd。如果您不希望 nodeadm 安裝 containerd,則請使用--containerd-source none選項。
Ubuntu
-
如果您使用的是 Ubuntu 24.04,您可能需要更新您的 containerd 版本,或變更 AppArmor 組態以採用允許 Pod 正確終止的修正,請參閱 Ubuntu #2065423
。需要重新啟動才能將變更套用至 AppArmor 設定檔。Ubuntu 24.04 的最新版本在其套件管理工具中具有更新的 containerd 版本,且帶有修正 (containerd 版本 1.7.19+)。
ARM
-
如果您使用的是 ARM 硬體,則需要具有密碼編譯延伸功能的 ARMv8.2 相容處理器 (ARMv8.2+crypto),才能執行 EKS kube-proxy 附加元件的版本 1.31 及更新版本。Raspberry Pi 5 之前的所有 Raspberry Pi 系統,以及 Cortex-A72 型處理器皆不符合此要求。解決方法是:您可以繼續使用 EKS kube-proxy 附加元件的版本 1.30,直到 2026 年 7 月延長支援結束為止,請參閱 Kubernetes 發布行事曆,或使用來自上游的自訂 kube-proxy 映像。
-
kube-proxy 日誌中的下列錯誤訊息會指出這種不相容性:
Fatal glibc error: This version of Amazon Linux requires a newer ARM64 processor compliant with at least ARM architecture 8.2-a with Cryptographic extensions. On EC2 this is Graviton 2 or later.
建置作業系統映像
Amazon EKS 提供範例 Packer 範本nodeadm 的作業系統映像,並將其設定為在主機啟動時執行。建議執行此程序,以避免在每個主機上個別提取混合節點相依性,並自動化混合節點引導程序。您可以搭配 Ubuntu 22.04、Ubuntu 24.04、RHEL 8 或 RHEL 9 ISO 映像使用範例 Packer 範本,並且可以使用這些格式輸出映像:OVA、Qcow2 或 raw。
先決條件
使用範例 Packer 範本之前,您必須在執行 Packer 的機器上安裝下列內容。
-
Packer 版本 1.11.0 或更新版本。如需有關安裝 Packer 的指示,請參閱 Packer 文件中的安裝 Packer
。 -
如果建置 OVA,則為 VMware vSphere 外掛程式 1.4.0 或更新版本
-
如果是建置
Qcow2或原始映像,則為 QEMU 外掛程式版本 1.x
設定環境變數
在執行 Packer 建置之前,請在執行 Packer 的機器上設定下列環境變數。
一般
必須設定下列環境變數,才能運用所有作業系統和輸出格式建置映像。
| 環境變數 | Type | 描述 |
|---|---|---|
|
PKR_SSH_PASSWORD |
字串 |
Packer 會在佈建時使用 |
|
ISO_URL |
字串 |
要使用的 ISO 的 URL。可以是從伺服器下載的 Web 連結,也可以是本機檔案的絕對路徑 |
|
ISO_CHECKSUM |
字串 |
所提供 ISO 的關聯檢查總和。 |
|
CREDENTIAL_PROVIDER |
字串 |
混合節點的憑證提供者。對於 SSM 混合啟用,有效值為 |
|
K8S_VERSION |
字串 |
混合節點的 Kubernetes 版本 (例如 |
|
NODEADM_ARCH |
字串 |
|
RHEL:
如果您使用的是 RHEL,則必須設定下列環境變數。
| 環境變數 | Type | 描述 |
|---|---|---|
|
RH_USERNAME |
字串 |
RHEL 訂閱管理員使用者名稱 |
|
RH_PASSWORD |
字串 |
RHEL 訂閱管理員密碼 |
|
RHEL_VERSION |
字串 |
要使用的 Rhel iso 版本。有效值為 |
Ubuntu
不需要 Ubuntu 專屬環境變數。
vSphere
如果您要建置 VMware vSphere OVA,則必須設定下列環境變數。
| 環境變數 | Type | 描述 |
|---|---|---|
|
VSPHERE_SERVER |
字串 |
vSphere 伺服器地址 |
|
VSPHERE_USER |
字串 |
vSphere 使用者名稱 |
|
VSPHERE_PASSWORD |
字串 |
vSphere 密碼 |
|
VSPHERE_DATACENTER |
字串 |
vSphere 資料中心名稱 |
|
VSPHERE_CLUSTER |
字串 |
vSphere 叢集名稱 |
|
VSPHERE_DATASTORE |
字串 |
vSphere 資料儲存名稱 |
|
VSPHERE_NETWORK |
字串 |
vSphere 網路名稱 |
|
VSPHERE_OUTPUT_FOLDER |
字串 |
範本的 vSphere 輸出資料夾 |
QEMU
| 環境變數 | Type | 描述 |
|---|---|---|
|
PACKER_OUTPUT_FORMAT |
字串 |
QEMU 建置器的輸出格式。有效值為 |
驗證範本
執行建置之前,請設定環境變數,然後使用下列命令驗證範本。如果您對範本使用不同的名稱,請取代 template.pkr.hcl。
packer validate template.pkr.hcl
建置映像
使用下列命令建置映像,並使用 -only 旗標來指定映像的目標和作業系統。如果您對範本使用不同的名稱,請取代 template.pkr.hcl。
vSphere OVA
注意
如果您搭配 vSphere 使用 RHEL,您需要將啟動檔案轉換為 OEMDRV 映像,並將其作為 ISO 傳遞以進行引導。如需詳細資訊,請參閱 EKS 混合節點 GitHub 儲存庫中的 Packer Readme
Ubuntu 22.04 OVA
packer build -only=general-build.vsphere-iso.ubuntu22 template.pkr.hcl
Ubuntu 24.04 OVA
packer build -only=general-build.vsphere-iso.ubuntu24 template.pkr.hcl
RHEL 8 OVA
packer build -only=general-build.vsphere-iso.rhel8 template.pkr.hcl
RHEL 9 OVA
packer build -only=general-build.vsphere-iso.rhel9 template.pkr.hcl
QEMU
注意
如果您要為與建置器主機不相符的特定主機 CPU 建置映像,請參閱 QEMU-cpu 旗標。
Ubuntu 22.04 Qcow2 / Raw
packer build -only=general-build.qemu.ubuntu22 template.pkr.hcl
Ubuntu 24.04 Qcow2 / Raw
packer build -only=general-build.qemu.ubuntu24 template.pkr.hcl
RHEL 8 Qcow2 / Raw
packer build -only=general-build.qemu.rhel8 template.pkr.hcl
RHEL 9 Qcow2 / Raw
packer build -only=general-build.qemu.rhel9 template.pkr.hcl
透過使用者資料傳遞 nodeadm 組態
您可以透過 cloud-init 傳遞使用者資料中 nodeadm 的組態,以在主機啟動時設定混合節點並自動將其連接至 EKS 叢集。以下範例說明如何在使用 VMware vSphere 作為混合節點的基礎結構時完成此操作。
-
遵循 GitHub 上 govc readme
中的指示安裝 govcCLI。 -
在上一節中執行 Packer 建置並佈建範本後,您可以使用下列內容複製範本,進而建立多個不同的節點。對於要建立且將用於混合節點的每個新 VM,您必須複製相應的範本。使用您環境的值取代以下命令中的變數。當您透過
metadata.yaml檔案插入 VM 的名稱時,以下命令中的VM_NAME可用作您的NODE_NAME。govc vm.clone -vm "/PATH/TO/TEMPLATE" -ds="YOUR_DATASTORE" \ -on=false -template=false -folder=/FOLDER/TO/SAVE/VM "VM_NAME" -
複製每個新 VM 的範本之後,請為您的 VM 建立
userdata.yaml和metadata.yaml。在以下步驟中,您的 VM 可以共用相同的userdata.yaml和metadata.yaml,並且您將以每個 VM 為基礎填入。nodeadm組態可由userdata.yaml的write_files區段建立並定義。以下範例會使用 AWS SSM 混合啟用作為混合節點的內部部署憑證提供者。如需有關nodeadm組態的詳細資訊,請參閱 混合節點 nodeadm 參考。userdata.yaml:
#cloud-config users: - name: # username for login. Use 'builder' for RHEL or 'ubuntu' for Ubuntu. passwd: # password to login. Default is 'builder' for RHEL. groups: [adm, cdrom, dip, plugdev, lxd, sudo] lock-passwd: false sudo: ALL=(ALL) NOPASSWD:ALL shell: /bin/bash write_files: - path: /usr/local/bin/nodeConfig.yaml permissions: '0644' content: | apiVersion: node.eks.aws/v1alpha1 kind: NodeConfig spec: cluster: name: # Cluster Name region: # AWS region hybrid: ssm: activationCode: # Your ssm activation code activationId: # Your ssm activation id runcmd: - /usr/local/bin/nodeadm init -c file:///usr/local/bin/nodeConfig.yaml >> /var/log/nodeadm-init.log 2>&1metadata.yaml:
為您的環境建立
metadata.yaml。在檔案中保留"$NODE_NAME"變數格式,因為會在後續步驟中填入這些值。instance-id: "$NODE_NAME" local-hostname: "$NODE_NAME" network: version: 2 ethernets: nics: match: name: ens* dhcp4: yes -
使用下列命令將
userdata.yaml和metadata.yaml檔案新增為gzip+base64字串。應該為您建立的每個 VM 執行下列命令。使用您要更新的 VM 的名稱取代VM_NAME。export NODE_NAME="VM_NAME" export USER_DATA=$(gzip -c9 <userdata.yaml | base64) govc vm.change -dc="YOUR_DATASTORE" -vm "$NODE_NAME" -e guestinfo.userdata="${USER_DATA}" govc vm.change -dc="YOUR_DATASTORE" -vm "$NODE_NAME" -e guestinfo.userdata.encoding=gzip+base64 envsubst '$NODE_NAME' < metadata.yaml > metadata.yaml.tmp export METADATA=$(gzip -c9 <metadata.yaml.tmp | base64) govc vm.change -dc="YOUR_DATASTORE" -vm "$NODE_NAME" -e guestinfo.metadata="${METADATA}" govc vm.change -dc="YOUR_DATASTORE" -vm "$NODE_NAME" -e guestinfo.metadata.encoding=gzip+base64 -
開啟新 VM 的電源,而這應該會自動連接到您設定的 EKS 叢集。
govc vm.power -on "${NODE_NAME}"