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

協助改進此頁面

若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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 安裝。有效選項為 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

字串

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

ISO_URL

字串

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

ISO_CHECKSUM

字串

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

CREDENTIAL_PROVIDER

字串

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

K8S_VERSION

字串

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

NODEADM_ARCH

字串

nodeadm install 的架構。選取 amdarm

RHEL:

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

環境變數 Type 描述

RH_USERNAME

字串

RHEL 訂閱管理員使用者名稱

RH_PASSWORD

字串

RHEL 訂閱管理員密碼

RHEL_VERSION

字串

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

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 建置器的輸出格式。有效值為 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 上 govc readme 中的指示安裝 govc 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}"