View a markdown version of this page

準備混合節點的作業系統 - Amazon EKS

協助改進此頁面

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

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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,並將它設定為作為 systemd 服務執行,以便在主機啟動時自動將主機加入 Amazon EKS 叢集。如果您在 vSphere 上使用 Bottlerocket 作為節點作業系統,則不需要使用 nodeadm,因為 Bottlerocket 已包含混合節點所需的相依性,並且會在主機啟動時自動連接至您設定的叢集。

SSM 登入資料提供者所需的 nodeadm 版本

如果您使用 AWS Systems Manager (SSM) 作為混合節點的憑證提供者,則必須使用 nodeadm 版本 1.0.19或更新版本進行新的安裝和升級。舊版 nodeadm包含過期的 SSM 簽署金鑰,並在 nodeadm install期間失敗,並nodeadm upgrade出現下列簽章驗證錯誤:

"msg":"Command failed","error":"failed to install ssm installer: validating ssm-setup-cli signature: Signature Verification Error: No matching signature"

若要解決此錯誤,請在執行 或 之前下載最新版本nodeadm upgradenodeadm nodeadm install

版本相容性

下表所列的作業系統版本代表相容且經過驗證可用作混合節點的節點作業系統。如果您使用的是不包含在此資料表中的其他作業系統變體或版本,則 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 安裝。有效選項為 nonedistrodocker。如果您使用的是 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

String

Packer 會在佈建時使用 ssh_usernamessh_password 變數,將 SSH 傳送至建立的機器。這需要與在個別作業系統的啟動或使用者資料檔案中建立初始使用者的密碼相符。預設值設定為 "builder" 或 "ubuntu",視作業系統而定。設定密碼時,請務必在對應的 ks.cfguser-data 檔案中對其進行變更,以保持相符。

ISO_URL

String

要使用的 ISO 的 URL。可以是從伺服器下載的 Web 連結,也可以是本機檔案的絕對路徑

ISO_CHECKSUM

String

所提供 ISO 的關聯檢查總和。

CREDENTIAL_PROVIDER

String

混合節點的憑證提供者。對於 SSM 混合啟用,有效值為 ssm (預設),而對於 IAM Roles Anywhere,有效值為 iam

K8S_VERSION

String

混合節點的 Kubernetes 版本 (例如 1.31)。如需支援的 Kubernetes 版本,請參閱 Amazon EKS 支援的版本

NODEADM_ARCH

String

nodeadm install 的架構。選取 amdarm

RHEL

如果您使用的是 RHEL,則必須設定下列環境變數。

環境變數 Type 說明

RH_USERNAME

String

RHEL 訂閱管理員使用者名稱

RH_PASSWORD

String

RHEL 訂閱管理員密碼

RHEL_VERSION

String

要使用的 Rhel iso 版本。有效值為 89

Ubuntu

不需要 Ubuntu 專屬環境變數。

vSphere

如果您要建置 VMware vSphere OVA,則必須設定下列環境變數。

環境變數 Type 說明

VSPHERE_SERVER

String

vSphere 伺服器地址

VSPHERE_USER

String

vSphere 使用者名稱

VSPHERE_PASSWORD

String

vSphere 密碼

VSPHERE_DATACENTER

String

vSphere 資料中心名稱

VSPHERE_CLUSTER

String

vSphere 叢集名稱

VSPHERE_DATASTORE

String

vSphere 資料儲存名稱

VSPHERE_NETWORK

String

vSphere 網路名稱

VSPHERE_OUTPUT_FOLDER

String

範本的 vSphere 輸出資料夾

QEMU

環境變數 Type 說明

PACKER_OUTPUT_FORMAT

String

QEMU 建置器的輸出格式。有效值為 qcow2raw

驗證範本

執行建置之前,請設定環境變數,然後使用下列命令驗證範本。如果您對範本使用不同的名稱,請取代 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 相符的名稱,並在執行下列命令時,使用具有主機 CPU 名稱的 -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 作為混合節點的基礎結構時完成此操作。

  1. 依照 GitHub govcgovc readme 中的指示安裝 CLI。

  2. 在上一節中執行 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"
  3. 複製每個新 VM 的範本之後,請為您的 VM 建立 userdata.yamlmetadata.yaml。在以下步驟中,您的 VM 可以共用相同的 userdata.yamlmetadata.yaml,並且您將以每個 VM 為基礎填入。nodeadm 組態可由 userdata.yamlwrite_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>&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
  4. 使用下列命令將 userdata.yamlmetadata.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
  5. 開啟新 VM 的電源,而這應該會自動連接到您設定的 EKS 叢集。

    govc vm.power -on "${NODE_NAME}"