如何将 Worker 节点加入 Amazon EKS 集群?

上次更新日期:2022 年 7 月 29 日

我的 Worker 节点无法加入 Amazon Elastic Kubernetes Service (Amazon EKS) 集群。

简短描述

要将 Worker 节点加入 Amazon EKS 集群,您必须完成以下步骤:

  • 确认您的 Amazon Virtual Private Cloud (Amazon VPC) 支持 DNS。
  • 获取 Worker 节点实例配置文件的相应权限。
  • 配置 Worker 节点的用户数据。
  • 验证 Worker 节点是否在与 EKS 集群关联的子网中。
  • 使用 Worker 节点的 NodeInstanceRole 更新 aws-auth ConfigMap。
  • 满足 Worker 节点的安全组要求。
  • 为您的 Worker 节点设置标签。
  • 确认您的 Worker 节点可以到达 EKS 集群的 API 服务器端点。
  • 对于支持 AWS Security Token Service (AWS STS) 端点的 AWS 区域,请确认区域 AWS STS 端点已激活。
  • 使用 SSH 连接到 Worker 节点的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,然后在 kubelet 代理日志中搜索错误。

重要提示:以下步骤不包括在不满足以下条件的环境中,在集群中注册 Worker 节点所需的配置:

  • 在集群的 VPC 中,配置参数 domain-name-servers 设置为 AmazonProvidedDNS。有关更多信息,请参阅 DHCP 选项集
  • 您正在使用经过 Amazon EKS 优化的 Linux Amazon 系统映像 (AMI) 来启动工作线程节点。
    注意:经过 Amazon EKS 优化的 Linux AMI 提供了所有必要的配置,包括用于将工作线程节点注册到您的集群的 /etc/eks/bootstrap.sh 引导脚本。

解决方案

使用 AWS Systems Manager Automation 运行手册确定常见问题

使用 AWSSupport-TroubleshootEKSWorkerNode 运行手册查找导致 Worker 节点无法加入集群的常见问题。

重要提示:要使自动化正常运行,您的 Worker 节点必须具有访问和运行 System Manager 的权限。要授予权限,请将 AmazonSSMManagedInstanceCore AWS 托管式策略附加到与您的 EC2 实例配置文件对应的 AWS Identity and Access Management (IAM) 角色。这是通过 eksctl 创建的 EKS 托管式节点组的默认配置。

  1. 打开运行手册
  2. 检查 AWS 管理控制台中的 AWS 区域是否设置为与集群相同的区域。
    注意:有关运行手册的详细信息,请查看其文档详细信息部分。
  3. Input parameters(输入参数)部分中,在 ClusterName 字段中指定集群的名称,在 WorkerID 字段中指定 EC2 实例 ID。
  4. (可选)AutomationAssumeRole 字段中,指定允许 Systems Manager 执行操作的 IAM 角色。如果未指定此角色,则使用您当前 IAM 实体的 IAM 权限来执行运行手册中的操作。
  5. 选择 Execute(执行)。
  6. 查看 Outputs(输出)部分,了解您的 Worker 节点未加入集群的原因以及解决该问题的步骤。

确认您的 Amazon VPC 支持 DNS

确认您的 EKS 集群的 Amazon VPC 支持 DNS 主机名和 DNS 解析。

如果需要,请查看和更新您的 VPC 的 DNS 支持属性

获取工作线程节点实例配置文件的相应权限

将以下 AWS 管理策略附加到与您的工作线程节点实例配置文件关联的角色:

  • AmazonEKSWorkerNodePolicy
  • AmazonEKS_CNI_Policy
  • AmazonEC2ContainerRegistryReadOnly

要将策略附加到角色,请参阅添加 IAM 身份权限(控制台)

配置 Worker 节点的用户数据

注意:如果您使用 AWS CloudFormation 启动 Worker 节点,则不必为 Worker 节点配置用户数据。相反,请按照启动自我托管式 Amazon Linux 节点的说明,使用 AWS 管理控制台进行操作。

如果使用托管式节点组启动 Worker 节点,则无需使用 Amazon EKS 优化的 Amazon Linux AMI 配置任何用户数据。只有在使用自定义 AMI 通过托管式节点组启动 Worker 节点时,才能配置用户数据。

要为 Worker 节点配置用户数据,请在启动 Amazon EC2 实例时指定用户数据

例如,如果您使用的是 Terraform 等第三方工具,请更新用户数据字段以使用以下命令启动您的 EKS Worker 节点:

#!/bin/bash
set -o xtrace
/etc/eks/bootstrap.sh ${ClusterName} ${BootstrapArguments}

重要提示:${ClusterName} 替换为您的 EKS 集群的名称。将 ${BootstrapArguments} 替换为其他 Bootstrap 框架值,或将该属性留空。

验证 Worker 节点是否与 EKS 集群位于同一 Amazon VPC 中

  1. 打开 Amazon EKS 控制台
  2. 选择 Clusters(集群),然后选择您的集群。
  3. Networking(联网)部分中,确认与集群关联的子网。

注意:您可以配置不同的子网以在其中启动 Worker 节点。这些子网必须存在于同一 Amazon VPC 中,并进行适当标记。Amazon EKS 仅自动管理在集群创建期间配置的子网标签。因此,请确保正确标记子网。

使用 Worker 节点的 NodeInstanceRole 更新 aws-auth ConfigMap

验证是否使用 Worker 节点的 IAM 角色(而不是实例配置文件)正确配置了 aws-auth ConfigMap。

满足 Worker 节点的安全组要求

确认已为控制面板安全组和 Worker 节点安全组配置了入站和出站流量的建议设置。此外,请确认您的自定义网络 ACL 规则已配置为允许进出端口 80,443 和 1025-65535 的“0.0.0.0/0”的流量。

为您的 Worker 节点设置标签

对于 Worker 节点的 Tag(标签)属性,请将 Key(密钥)设置为 kubernetes.io/cluster/clusterName,并将 Value(值)设置为 owned(已拥有)。

如需更多信息,请参阅集群 VPC 注意事项

确认您的 Worker 节点可以到达 Amazon EKS 集群的 API 服务器端点

请考虑以下事项:

  • 您可以在与路由表关联的子网中启动 Worker 节点,该路由表具有通过 NAT 或互联网网关到 API 端点的路由。
  • 如果您在受限制的私有网络中启动 Worker 节点,请确认您的 Worker 节点可以到达 EKS API 服务器端点。
  • 如果您将 Worker 节点作为使用自定义 DNS 而不是 AmazonProvidedDNS 的 Amazon VPC 的一部分启动,则可能无法解析端点。当停用对端点的公有访问并且仅激活私有访问时,会发生端点未解析的问题。有关更多信息,请参阅启用 Amazon EKS 集群端点的 DNS 解析
  • 对于私有集群,必须包含专用于私有集群的 VPC 终端节点。确保自我托管式和托管式节点可以访问 Amazon VPC 终端节点。对于托管式节点组,Amazon VPC 终端节点安全组必须允许子网或集群安全组的 CIDR。

确认区域 STS 端点已激活

如果集群位于支持 STS 端点的区域中,则激活区域 STS 端点以对 kubelet 进行身份验证。然后,kubelet 可以创建节点对象。

使用 SSH 连接到您的 EKS Worker 节点实例并检查 kubelet 代理日志

kubelet 代理已配置为 systemd 服务。

1.FSP 要验证 kubelet 日志,请运行以下命令:

journalctl -f -u kubelet

2. FSP 要解决任何问题,请查看 Amazon EKS 故障排除指南以了解常见错误。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?