準備混合節點的作業系統 - 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中包含 ,並將它設定為執行為系統化服務,以在主機啟動時自動將主機加入 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執行時間設定容器安裝。有效選項為 nonedistrodocker。如果您使用的是 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 在佈建時使用 ssh_usernamessh_password變數,將 SSH 傳送至建立的機器。這需要符合用於在個別作業系統的開始或使用者資料檔案中建立初始使用者的密碼。預設值會設定為「建置器」或「ubuntu」,視作業系統而定。設定密碼時,請務必在對應的 ks.cfguser-data 檔案中將其變更為相符。

ISO_URL

字串

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

ISO_CHECKSUM

字串

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

CREDENTIAL_PROVIDER

字串

混合節點的登入資料提供者。SSM 混合啟用和 IAM Roles Anywhere 的有效值為 iam ssm(預設值)

K8S_VERSION

字串

混合節點的 Kubernetes 版本 (例如 1.31)。如需支援的 Kubernetes 版本,請參閱 了解 EKS 上的 Kubernetes 版本生命週期

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 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 的名稱,並在執行下列命令時,使用具有主機 CPU 名稱的 -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 做為混合節點基礎設施時,如何達成此目的的範例。

  1. 遵循 GitHub 上 govc readme 中的指示安裝 govc CLI。

  2. 在上一節中執行 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"
  3. 複製每個新 VMs 的範本後,metadata.yaml請為您的 VMs 建立 userdata.yaml和 。您的 VMs 可以共用相同的 userdata.yamlmetadata.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
  4. 使用下列命令將 userdata.yamlmetadata.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
  5. 開啟新 VMs的電源,這應該會自動連接到您設定的 EKS 叢集。

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