協助改善此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要提供此使用者指南,請選擇位於每個頁面右窗格中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
準備混合節點的作業系統
Bottlerocket、Amazon Linux 2023 (AL2023)、Ubuntu 和 RHEL 會持續經過驗證,以用作混合節點的節點作業系統。Bottlerocket 僅支援 VMware vSphere AWS環境。在 Amazon EC2 外部執行時, AWS 支援計劃不涵蓋 AL2023。 Amazon EC2 AL2023 只能在內部部署虛擬化環境中使用,如需詳細資訊,請參閱 Amazon Linux 2023 使用者指南。 AWS 支援與 Ubuntu 和 RHEL 作業系統整合的混合節點,但不支援作業系統本身。
您負責作業系統佈建和管理。當您第一次測試混合節點時,在已佈建的主機上執行 Amazon EKS 混合節點 CLI (nodeadm
) 最簡單。對於生產部署,我們建議您在作業系統映像nodeadm
中包含 ,並將它設定為執行為系統化服務,以在主機啟動時自動將主機加入 Amazon EKS 叢集。如果您在 vSphere 上使用 Bottlerocket 做為節點作業系統,則不需要使用 ,nodeadm
因為 Bottlerocket 已包含混合節點所需的相依性,並在主機啟動時自動連線到您設定的叢集。
版本相容性
下表代表相容且經過驗證可用作混合節點節點之節點作業系統的作業系統版本。如果您使用的是不包含在此資料表中的其他作業系統變體或版本,則 AWS Support 不會涵蓋混合節點與作業系統變體或版本的相容性。混合節點與基礎基礎設施無關,並支援 x86 和 ARM 架構。
作業系統 | 版本 |
---|---|
Amazon Linux |
Amazon Linux 2023 (AL2023) |
Bottlerocket |
v1.37.0 及更高版本執行 Kubernetes v1.28 及更高版本的 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-source
命令列選項,在nodeadm install
執行時間設定容器安裝。有效選項為none
、distro
和docker
。如果您使用的是 RHEL,distro
不是有效的選項,您可以nodeadm
設定 從 Docker 的儲存庫安裝容器化建置,也可以手動安裝容器化。使用 AL2023 或 Ubuntu 時,nodeadm
預設為從作業系統分佈安裝容器。如果您不希望 nodeadm 安裝 containerd,請使用--containerd-source none
選項。
Ubuntu
-
如果您使用的是 Ubuntu 20.04,則必須使用 AWS Systems Manager 混合啟用做為登入資料提供者。Ubuntu 20.04 不支援 AWS IAM Roles Anywhere。
-
如果您使用的是 Ubuntu 24.04,您可能需要更新容器版本,或變更 AppArmor 組態以採用允許 Pod 正確終止的修正,請參閱 Ubuntu #2065423
。需要重新開機才能將變更套用至 AppArmor 設定檔。最新版本的 Ubuntu 24.04 在其套件管理員中具有更新的容器版本,並具有修正 (容器版本 1.7.19+)。
RHEL
-
如果您使用的是 RHEL 8,則必須使用 AWS Systems Manager 混合啟用做為登入資料提供者。RHEL 8 不支援 AWS IAM Roles Anywhere。
ARM
-
如果您使用的是 ARM 硬體,則需要具有密碼編譯延伸 (ARMv8.2+crypto) 的 ARMv8.2 相容處理器,才能執行 EKS kube-proxy 附加元件的 1.31 版和更新版本。ARMv8.2+crypto) Raspberry Pi 5 之前的所有 Raspberry Pi 系統,以及 Cortex-A72 型處理器都不符合此需求。作為解決方法,您可以繼續使用 EKS kube-proxy 附加元件的 1.30 版,直到 2026 年 7 月擴展支援結束為止,請參閱 Amazon EKS 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
並將其設定為在主機啟動時執行。建議此程序以避免在每個主機上個別提取混合節點相依性,並自動化混合節點引導程序。您可以使用範例 Packer 範本搭配 Ubuntu 22.04、Ubuntu 24.04、RHEL 8 或 RHEL 9 ISO 映像,並可使用這些格式輸出映像:OVA、Qcow2 或 raw。
先決條件
使用範例 Packer 範本之前,您必須在執行 Packer 的機器上安裝下列項目。
-
Packer 1.11.0 版或更新版本。如需安裝 Packer 的說明,請參閱 Packer 文件中的安裝
Packer。 -
如果建置 OVAs,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 混合啟用和 IAM Roles Anywhere 的有效值為 |
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 OVAs
注意
如果您將 RHEL 與 vSphere 搭配使用,則需要將啟動檔案轉換為 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 / 原始
packer build -only=general-build.qemu.ubuntu22 template.pkr.hcl
Ubuntu 24.04 Qcow2 / 原始
packer build -only=general-build.qemu.ubuntu24 template.pkr.hcl
RHEL 8 Qcow2/原始
packer build -only=general-build.qemu.rhel8 template.pkr.hcl
RHEL 9 Qcow2/原始
packer build -only=general-build.qemu.rhel9 template.pkr.hcl
透過使用者資料傳遞 nodeadm 組態
您可以透過 cloud-init 傳遞使用者資料nodeadm
中的 組態,以在主機啟動時設定混合節點並自動連線至 EKS 叢集。以下是使用 VMware vSphere 做為混合節點基礎設施時,如何達成此目的的範例。
-
遵循 GitHub 上 govc readme
中的指示安裝 govc
CLI。 -
在上一節中執行 Packer 建置並佈建範本後,您可以使用下列項目複製範本以建立多個不同的節點。您必須複製要建立且將用於混合節點之每個新 VM 的範本。將以下命令中的變數取代為您環境的值。當您透過
metadata.yaml
檔案插入 VMs 的名稱NODE_NAME
時,以下命令VM_NAME
中的 會做為您的 。govc vm.clone -vm "/PATH/TO/TEMPLATE" -ds="YOUR_DATASTORE" \ -on=false -template=false -folder=/FOLDER/TO/SAVE/VM "VM_NAME"
-
複製每個新 VMs 的範本後,
metadata.yaml
請為您的 VMs 建立userdata.yaml
和 。您的 VMs 可以共用相同的userdata.yaml
metadata.yaml
,而且您將在以下步驟中以每個 VM 為基礎填入這些 VM。nodeadm
組態會在 的write_files
區段中建立和定義userdata.yaml
。以下範例使用 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>&1
metadata.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
字串。應該為您建立的每個 VMs 執行下列命令。VM_NAME
將 取代為您更新之 VM 的名稱。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
-
開啟新 VMs的電源,這應該會自動連接到您設定的 EKS 叢集。
govc vm.power -on "${NODE_NAME}"