帮助改进此页面
想为本用户指南做出贡献? 选择位于每个页面右侧窗格中的在 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 安装。有效选项为none
、distro
、和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 使用 |
ISO_URL |
字符串 |
要使用的 ISO URL。这可以是从服务器下载的 Web 链接,也可以是本地文件的绝对路径 |
ISO_CHECKSUM |
字符串 |
所提供 ISO 的相关校验和。 |
CREDENTIAL_PROVIDER |
字符串 |
混合节点的凭证提供者。SSM 混合激活的有效值为 |
K8S_VERSION |
字符串 |
适用于混合节点的 Kubernetes 版本(例如 |
NODEADM_ARCH |
字符串 |
适用于 |
RHEL
如果使用 RHEL,则必须设置以下环境变量。
环境变量 | 类型 | 描述 |
---|---|---|
RH_USERNAME |
字符串 |
RHEL 订阅管理员用户名 |
RH_PASSWORD |
字符串 |
RHEL 订阅管理器密码 |
RHEL_VERSION |
字符串 |
使用的 Rhel iso 版本。有效值为 |
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 生成器的输出格式。有效值为 |
验证模版
在运行生成的版本之前,请在设置环境变量后使用以下命令验证模板。如果您的模板使用其他名称,请相应替换 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 的名称结合使用。
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 作为混合节点的基础设施时实现这一点。
-
按照 GitHub 上 govc readme
中的说明安装 govc
CLI。 -
运行上一节中的 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"
-
在为每个新 VM 克隆该模板后,为您的 VM 创建一个
userdata.yaml
和metadata.yaml
。VM 可以共享同一userdata.yaml
和metadata.yaml
,并且您将在以下步骤中为每个 VM 填充这些参数。nodeadm
配置是在userdata.yaml
的write_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
-
使用以下命令将
userdata.yaml
和metadata.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
-
将新 VM 开机,这时应会自动连接到您配置的 EKS 集群。
govc vm.power -on "${NODE_NAME}"