选择您的 Cookie 首选项

我们使用必要 Cookie 和类似工具提供我们的网站和服务。我们使用性能 Cookie 收集匿名统计数据,以便我们可以了解客户如何使用我们的网站并进行改进。必要 Cookie 无法停用,但您可以单击“自定义”或“拒绝”来拒绝性能 Cookie。

如果您同意,AWS 和经批准的第三方还将使用 Cookie 提供有用的网站功能、记住您的首选项并显示相关内容,包括相关广告。要接受或拒绝所有非必要 Cookie,请单击“接受”或“拒绝”。要做出更详细的选择,请单击“自定义”。

为混合节点准备操作系统

聚焦模式
为混合节点准备操作系统 - Amazon EKS

帮助改进此页面

想为本用户指南做出贡献? 选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

帮助改进此页面

想为本用户指南做出贡献? 选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

经持续验证,Amazon Linux 2023(AL2023)、Ubuntu 和 Red Hat Enterprise Linux(RHEL)是可用于混合节点的节点操作系统。AWS 为将混合节点功能与这些操作系统的集成提供支持,但不提供有关操作系统的支持。在 Amazon EC2 之外运行时,AL2023 不属于 AWS Support 计划的范围。AL2023 只能在本地虚拟化环境中使用,有关更多信息,请参阅 Amazon Linux 2023 用户指南

操作系统的预置和管理由您负责。首次测试混合节点时,最简单的方法是在一台已预置好的主机上运行 Amazon EKS 混合节点功能 CLI (nodeadm)。对于生产部署,建议在操作系统映像中包含 nodeadm 并将其配置为作为 systemd 服务运行,从而在主机启动时自动将主机加入 Amazon EKS 集群。

版本兼容性

下表列举了经过验证可用作混合节点节点操作系统的兼容操作系统版本。如果使用此表中未包含的其他操作系统变体或版本,则混合节点与相关操作系统变体或版本的兼容性不属于 AWS Support 的范围。混合节点与底层基础设施无关,x86 和 ARM 架构均受支持。

操作系统 版本

Amazon Linux

Amazon Linux 2023(AL2023)

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 参考

  • 如果您使用本地环境的代理来访问互联网,则安装和升级过程需要完成额外的操作系统配置,才能将软件包管理器配置为使用该代理。有关说明,请参阅为混合节点功能配置代理

Containerd

  • Containerd 是标准的 Kubernetes 容器运行时,也是混合节点以及所有 Amazon EKS 节点计算类型的一个依赖项。Amazon EKS 混合节点功能 CLI (nodeadm) 会尝试在 nodeadm install 进程中安装 containerd。您可以使用 --containerd-source 命令行选项在 nodeadm install 运行时中配置 containerd 安装。有效选项为 nonedistro、和 docker。如果使用 RHEL,则 distro 不是有效选项,并且您可以将 nodeadm 配置为按照 Docker 存储库中的 containerd 版本,也可以手动安装 containerd。使用 AL2023 或 Ubuntu 时,nodeadm 默认为安装操作系统发行版中的 containerd。如果不希望 nodeadm 安装 containerd,请使用 --containerd-source none 选项。

Ubuntu

  • 如果使用 Ubuntu 20.04,则凭证提供者必须为 AWS Systems Manager 混合激活。AWSUbuntu 20.04 不支持 IAM Roles Anywhere。

  • 如果您使用的是 Ubuntu 24.04,则可能需要更新 containerd 版本或更改 AppArmor 配置,以采用一个可让容器组(pod)正确终止的修复程序,请参阅 Ubuntu #2065423。需要重启后才能将更改应用于 AppArmor 配置文件。最新版本 Ubuntu 24.04 的包管理器中包含更新的 containerd 版本,其中具有该修复程序(containerd 版本 1.7.19+)。

RHEL

  • 如果使用 RHEL 8,则凭证提供者必须为 AWS Systems Manager 混合激活。AWSRHEL 8 不支持 IAM Roles Anywhere。

生成操作系统映像

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 文档中的 Install Packer

  • 如果生成 OVA,则必须已安装 VMware vSphere 插件 1.4.0 或更高版本

  • 如果生成 Qcow2 或原始映像,则必须已安装 QEMU 插件版本 1.x

设置环境变量

在运行此 Packer 生成版本之前,请在运行 Packer 的计算机上设置以下环境变量。

一般性问题

要生成各种操作系统和输出格式的映像,必须设置以下环境变量。

环境变量 类型 描述

PKR_SSH_PASSWORD

字符串

Packer 使用 ssh_usernamessh_password 变量以在预置时通过 SSH 连接到创建的计算机。这需要与在相应操作系统的 kickstart 文件或 user-data 文件中创建初始用户时使用的密码一致。默认设置为“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 版本,请参阅了解 EKS 上的 Kubernetes 版本生命周期

NODEADM_ARCH

字符串

适用于 nodeadm install 的架构。选择 amdarm

RHEL

如果使用 RHEL,则必须设置以下环境变量。

环境变量 类型 描述

RH_USERNAME

字符串

RHEL 订阅管理员用户名

RH_PASSWORD

字符串

RHEL 订阅管理器密码

RHEL_VERSION

字符串

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

Ubuntu

没有特定于 Ubuntu 的环境变量。

vSphere

如果构建 VMware vSphere OVA,则必须设置以下环境变量。

环境变量 类型 描述

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

环境变量 类型 描述

PACKER_OUTPUT_FORMAT

字符串

QEMU 生成器的输出格式。有效值为 qcow2raw

验证模版

在运行生成的版本之前,请在设置环境变量后使用以下命令验证模板。如果您的模板使用其他名称,请相应替换 template.pkr.hcl

packer validate template.pkr.hcl

生成映像

使用以下命令生成映像,并使用 -only 标志来指定映像的目标和操作系统。如果您的模板使用其他名称,请相应替换 template.pkr.hcl

vSphere OVA

注意

如果将 RHEL 与 vSphere 结合使用,则需要将 kickstart 文件转换为 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

通过 user-data 传递 nodeadm 配置

您可以通过 cloud-init 在 user-data 中传递 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_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. 将新 VM 开机,这时应会自动连接到您配置的 EKS 集群。

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

本页内容

下一主题:

准备凭证

上一主题:

准备联网
隐私网站条款Cookie 首选项
© 2025, Amazon Web Services, Inc. 或其附属公司。保留所有权利。