帮助改进此页面
想为本用户指南做出贡献? 选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。您的贡献有助于我们的用户指南为每个人提供更充分的参考。
用于混合节点生命周期管理的 Amazon EKS 混合节点功能 CLI (nodeadm
),与用于引导 Amazon EC2 实例以作为 Amazon EKS 集群中节点的 nodeadm
版本不同。请按照相应 nodeadm
版本的文档和参考进行操作。本文档页面针对混合节点 nodeadm
版本,混合节点 nodeadm
版本可在 GitHub 上的 eks-hybrid 存储库nodeadm
版本,请参阅 nodeadm – Amazon EKS AMI 文档
下载 nodeadm
nodeadm
的混合节点版本在 Amazon S3 中托管,由 Amazon CloudFront 分发。要在每台本地主机上安装 nodeadm
,您可以在本地主机上运行以下命令。
x86_64 主机:
curl -OL 'https://hybrid-assets.eks.amazonaws.com/releases/latest/bin/linux/amd64/nodeadm'
ARM 主机
curl -OL 'https://hybrid-assets.eks.amazonaws.com/releases/latest/bin/linux/arm64/nodeadm'
将可执行文件权限添加到每台主机上下载的二进制文件。
chmod +x nodeadm
命令
重要
您必须使用具有 root/sudo 权限的用户运行 nodeadm
。
安装
install
命令用于安装运行和将混合节点加入 Amazon EKS 集群所需的构件和依赖项。install
命令可以在每个混合节点上单独运行,也可以在映像生成管道期间运行,以便在操作系统映像中预装混合节点依赖项。
使用量
nodeadm install [KUBERNETES_VERSION] [flags]
定位参数
(必需)KUBERNETES_VERSION
要安装的 EKS Kubernetes 的主要.次要版本,例如 1.31
Flags
名称 | 必需 | 描述 |
---|---|---|
|
TRUE |
要安装的凭证提供者。支持的值为 |
|
FALSE |
值 |
|
FALSE |
安装命令的最大持续时间。输入遵循持续时间格式。例如 |
|
FALSE |
显示带有可用标志、子命令和位置值参数的帮助消息。 |
示例
安装 Kubernetes 版本 1.31
,并将 AWS Systems Manager(SSM)作为凭证提供者
nodeadm install 1.31 --credential-provider ssm
安装 Kubernetes 版本 1.31
,并将 AWS Systems Manager(SSM)作为凭证提供者,将 Docker 作为 containerd 源,下载超时设置为 20 分钟。
nodeadm install 1.31 --credential-provider ssm --containerd-source docker --timeout 20m
安装 Kubernetes 版本 1.31
,并将 AWS IAM Roles Anywhere 作为凭证提供者
nodeadm install 1.31 --credential-provider iam-ra
安装的文件
Artifact | 路径 |
---|---|
IAM Roles Anywhere CLI |
/usr/local/bin/aws_signing_helper |
Kubelet 二进制包 |
/usr/bin/kubelet |
Kubectl 二进制包 |
usr/local/bin/kubectl |
ECR 凭证提供者 |
/etc/eks/image-credential-provider/ecr-credential-provider |
AWS IAM 身份验证器 |
/usr/local/bin/aws-iam-authenticator |
SSM 安装 CLI |
/opt/ssm/ssm-setup-cli |
SSM Agent |
在 Ubuntu 上:/snap/amazon-ssm-agent/current/amazon-ssm-agent 在 RHEL 和 AL2023 上:/usr/bin/amazon-ssm-agent |
Containerd |
在 Ubuntu 和 AL2023 上:/usr/bin/containerd 在 RHEL 上:/bin/containerd |
Iptables |
在 Ubuntu 和 AL2023 上:/usr/sbin/iptables 在 RHEL 上:/sbin/iptables |
CNI 插件 |
/opt/cni/bin |
安装的构件跟踪器 |
/opt/nodeadm/tracker |
配置检查
config check
命令会检查提供的节点配置是否存在错误。此命令可用于确认和验证混合节点配置文件的正确性。
使用量
nodeadm config check [flags]
Flags
名称 | 必需 | 描述 |
---|---|---|
|
TRUE |
nodeadm 配置的来源。对于混合节点,输入应遵循带文件架构的 URI。 |
|
FALSE |
显示带有可用标志、子命令和位置值参数的帮助消息。 |
示例
nodeadm config check --config-source file:///root/nodeConfig.yaml
init
init
命令会启动混合节点并将其连接到配置的 Amazon EKS 集群。
使用量
nodeadm init [flags]
Flags
名称 | 必需 | 描述 |
---|---|---|
|
TRUE |
|
|
FALSE |
要跳过的 值 |
|
FALSE |
显示带有可用标志、子命令和位置值参数的帮助消息。 |
示例
nodeadm init --config-source file://root/nodeConfig.yaml
安装的文件
名称 | 路径 |
---|---|
Kubelet kubeconfig |
/var/lib/kubelet/kubelet/kubecconfig |
Kubelet config |
/etc/kubernetes/kubelet/config.json |
Kubelet systemd 单元 |
/etc/systemd/system/kubelet.service |
映像凭证提供者配置 |
/etc/eks/image-credential-provider/config.json |
Kubelet 环境文件 |
/etc/eks/kubelet/environment |
Kubelet 证书 |
/etc/kubernetes/pki/ca.crt |
Containerd 配置 |
/etc/containerd/config.toml |
Containerd 内核模块配置 |
/etc/modules-load.d/contianerd.conf |
AWS 配置文件 |
/etc/aws/hybrid/config |
AWS 凭证文件(如果启用了凭证文件) |
/eks-hybrid/.aws/credentials |
AWS 签名助手系统单元 |
/etc/systemd/system/aws_signing_helper_update.service |
Sysctl conf 文件 |
/etc/sysctl.d/99-nodeadm.conf |
docker 存储库的 Apt 管理器文件(如果 containerd 源是 docker) |
|
Ca-certificates |
/etc/ssl/certs/ca-certificates.crt |
Gpg 密钥文件 |
/etc/apt/keyrings/docker.asc |
Docker 存储库源文件 |
/etc/apt/sources.list.d/docker.list |
升级
nodeadm upgrade
命令会将所有已安装的构件升级到最新版本,启动节点以配置升级后的构件并加入 AWS 上的 EKS 集群。对于在节点上运行的工作负载,升级是一个中断性命令。在运行升级之前,请将您的工作负载转移至其他节点。
使用量
nodeadm upgrade [KUBERNETES_VERSION] [flags]
定位参数
(必需)KUBERNETES_VERSION
要安装的 EKS Kubernetes 的主要.次要版本,例如 1.31
Flags
名称 | 必需 | 描述 |
---|---|---|
|
TRUE |
|
|
FALSE |
下载构件超时。输入遵循持续时间格式。例如,1h23m。升级命令的默认下载超时设置为 10 分钟。 |
|
FALSE |
要跳过的升级阶段。除非有助于解决问题,否则不建议跳过任何阶段。 值 |
|
FALSE |
显示带有可用标志、子命令和位置值参数的帮助消息。 |
示例
nodeadm upgrade 1.31 --config-source file:///root/nodeConfig.yaml
nodeadm upgrade 1.31 --config-source file:///root/nodeConfig.yaml --timeout 20m
卸载
nodeadm uninstall
命令会停止并移除在 nodeadm install
期间安装的构件 nodeadm
,包括 kubelet 和 containerd。请注意,卸载命令不会从集群中清空或删除混合节点。您必须分别运行清空和删除操作,有关更多信息,请参阅移除混合节点。默认情况下,如果节点上还有容器组,则 nodeadm uninstall
不会执行。同样,nodeadm uninstall
也不会移除 CNI 依赖项或您在集群上运行的其他 Kubernetes 附加组件的依赖项。要从主机上完全移除 CNI 安装,请参阅为混合节点配置 CNI 中的说明。如果将 AWS SSM 混合激活作为本地凭证提供者,则 nodeadm uninstall
命令将从 AWS SSM 托管式实例中注销您的主机。
使用量
nodeadm uninstall [flags]
Flags
名称 | 必需 | 描述 |
---|---|---|
|
FALSE |
要跳过的升级阶段。除非有助于解决问题,否则不建议跳过任何阶段。 值 |
|
FALSE |
显示带有可用标志、子命令和位置值参数的帮助消息。 |
示例
nodeadm uninstall
nodeadm uninstall --skip node-validation,pod-validation
Debug
nodeadm debug
命令可用于对运行不正常或配置有错误的混合节点进行故障排除。此命令可以验证以下要求是否已经满足。
-
该节点具有必需 AWS API 的网络访问权限以获取凭证,
-
该节点能够获取所配置混合节点 IAM 角色的 AWS 凭证,
-
该节点具有对 EKS Kubernetes API 端点的网络访问权限,并且 EKS Kubernetes API 端点证书的有效,
-
该节点能够通过 EKS 集群身份验证,其在集群中的身份有效,并且该节点可以通过为 EKS 集群配置的 VPC 访问 EKS 集群。
如果发现错误,该命令的输出会提供故障排除步骤建议。某些验证步骤会显示子进程。如果这些子进程失败,则输出将显示在验证错误下的 stderr 部分中。
使用量
nodeadm debug [flags]
Flags
名称 | 必需 | 描述 |
---|---|---|
|
TRUE |
|
|
FALSE |
显示带有可用标志、子命令和位置值参数的帮助消息。 |
示例
nodeadm debug --config-source file://nodeConfig.yaml
节点配置 API 参考
AWS SSM 混合激活
以下是将 AWS SSM 混合激活作为混合节点凭证的示例 nodeConfig.yaml
。
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
cluster:
name: # Name of the EKS cluster
region: # AWS Region where the EKS cluster resides
hybrid:
ssm:
activationCode: # SSM hybrid activation code
activationId: # SSM hybrid activation id
AWS IAM Roles Anywhere
以下是将 AWS IAM Roles Anywhere 作为混合节点凭证的示例 nodeConfig.yaml
。
如果将 AWS IAM Roles Anywhere 作为本地凭证提供者,您在 nodeadm
配置中使用的 nodeName
必须与您为混合节点 IAM 角色设定的权限范围一致。例如,假设混合节点 IAM 角色的权限仅允许 AWS IAM Roles Anywhere 在角色会话名称等于主机证书的 CN 时代入该角色,则 nodeadm
配置中的 nodeName
必须与证书的 CN 相同。您使用的 nodeName
长度不能超过 64 个字符。有关更多信息,请参阅 准备用于混合节点的凭证。
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
cluster:
name: # Name of the EKS cluster
region: # AWS Region where the EKS cluster resides
hybrid:
iamRolesAnywhere:
nodeName: # Name of the node
trustAnchorArn: # ARN of the IAM Roles Anywhere trust anchor
profileArn: # ARN of the IAM Roles Anywhere profile
roleArn: # ARN of the Hybrid Nodes IAM role
certificatePath: # Path to the certificate file to authenticate with the IAM Roles Anywhere trust anchor
privateKeyPath: # Path to the private key file for the certificate
(可选)Kubelet 配置
您可以在 nodeadm
配置中传递 kubelet 配置和标志。有关如何添加额外节点标签 abc.amazonaws.com/test-label
和配置,以将 shutdownGracePeriod
设置为 30 秒的信息,请参阅以下示例。
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
cluster:
name: # Name of the EKS cluster
region: # AWS Region where the EKS cluster resides
kubelet:
config: # Map of kubelet config and values
shutdownGracePeriod: 30s
flags: # List of kubelet flags
- --node-labels=abc.company.com/test-label=true
hybrid:
ssm:
activationCode: # SSM hybrid activation code
activationId: # SSM hybrid activation id
(可选)Containerd 配置
您可以在 nodeadm
配置中传递自定义 containerd 配置。nodeadm
containerd 配置接受内联 TOML。要了解如何配置 containerd 以禁用删除 containerd 内容存储中未打包的映像层,请参阅以下示例。
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
cluster:
name: # Name of the EKS cluster
region: # AWS Region where the EKS cluster resides
containerd:
config: | # Inline TOML containerd additional configuration
[plugins."io.containerd.grpc.v1.cri".containerd]
discard_unpacked_layers = false
hybrid:
ssm:
activationCode: # SSM hybrid activation code
activationId: # SSM hybrid activation id
您还可以使用 containerd 配置来实现 SELinux 支持。在 containerd 上启用 SELinux 后,确保在节点上调度的容器组启用了正确的 securityContext 和 seLinuxOptions。有关配置安全上下文的更多信息,请参阅 Kubernetes 文档
注意
Red Hat Enterprise Linux(RHEL)8 和 RHEL 9 在主机上默认启用了 SELinux 并设置为严格模式。Amazon Linux 2023 默认启用 SELinux 并设置为宽松模式。当主机上的 SELinux 设置为宽容模式时,在 containerd 上启用此功能不会阻止请求,但会根据主机上的 SELinux 配置记录请求。
apiVersion: node.eks.aws/v1alpha1
kind: NodeConfig
spec:
cluster:
name: # Name of the EKS cluster
region: # AWS Region where the EKS cluster resides
containerd:
config: | # Inline TOML containerd additional configuration
[plugins."io.containerd.grpc.v1.cri"]
enable_selinux = true
hybrid:
ssm:
activationCode: # SSM hybrid activation code
activationId: # SSM hybrid activation id