创建托管节点组 - Amazon EKS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建托管节点组

本主题介绍如何启动注册到 Amazon EKS 集群的 Linux 节点的 Amazon EKS 托管节点组。在这些节点加入集群后,您可以向其部署 Kubernetes 应用程序。

如果这是您首次启动 Amazon EKS 托管节点组,建议您改为遵循我们的Amazon EKS 入门指南之一。这些指南提供了使用节点创建 Amazon EKS 集群的演练。

重要

Amazon EKS 节点是标准 Amazon EC2 实例。将根据常规的 Amazon EC2 价格向您收费。有关更多信息,请参阅 Amazon EC2 定价

您可以使用 eksctlAWS 管理控制台 创建托管节点组。

使用 eksctl 创建托管节点组

此过程需要 eksctl 版本 0.35.0 或更高版本。可以使用以下命令来查看您的版本:

eksctl version

有关安装或升级 eksctl 的更多信息,请参阅安装或升级 eksctl

不要使用 eksctl 在已启用 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区的 AWS 区域中创建集群或节点。改用 Amazon EC2 API 或 AWS CloudFormation 创建集群和自行管理的节点。有关更多信息,请参阅 使用 AWS 管理控制台 启动自管理 Linux 节点使用 AWS 管理控制台 启动自管理 Windows 节点

您可以使用或不使用启动模板创建节点组。启动模板允许节点组进行更大的自定义,以包含部署自定义 AMI。完成以下步骤之一。如果您计划使用Pod 的安全组,请确保指定受支持的 Amazon EC2 实例类型。有关更多信息,请参阅Amazon EC2 支持的实例和分支网络接口。 如果指定了 Arm Amazon EC2 实例类型,请在部署之前查看 Amazon EKS 优化的 Arm Amazon Linux AMIs中的注意事项。

  1. (可选)如果 AmazonEKS_CNI_Policy 托管 IAM 策略附加到您的 Amazon EKS 节点 IAM 角色,我们建议您将其分配给与 Kubernetes aws-node 服务账户关联的 IAM 角色。有关更多信息,请参阅 配置 VPC CNI 插件以使用服务账户的 IAM 角色

  2. 使用以下 命令创建不带eksctl 启动模板的托管节点组,并将 <example values>(包括 <>)替换为您自己的值。如果您未指定自己的启动模板,eksctl 将在您的账户中创建默认 Amazon EC2 启动模板,并使用它基于您指定的选项创建的启动模板部署节点组。

    如果您计划将 IAM 角色分配给所有 Kubernetes 服务账户,以便 Pod 只拥有所需的最低权限,并且集群中没有 Pod 出于其他原因(例如,检索当前区域)需要访问 Amazon EC2 实例元数据服务 (IMDS),那么我们建议阻止 Pod 访问 IMDS。有关更多信息,请参阅 服务账户的 IAM 角色限制对 IMDS 和 Amazon EC2 实例配置文件凭证的访问。 如果要阻止 Pod 对 IMDS 的访问,请将 --disable-pod-imds 选项添加到以下命令。

    eksctl create nodegroup \ --cluster <my-cluster> \ --region <us-west-2> \ --name <my-mng> \ --node-type <m5.large> \ --nodes <3> \ --nodes-min <2> \ --nodes-max <4> \ --ssh-access \ --ssh-public-key <my-public-key.pub> \ --managed
  3. 使用 启动模板创建托管节点组。启动模板必须已存在,并且必须满足启动模板配置基础知识中指定的要求。如果您计划将 IAM 角色分配给所有 Kubernetes 服务账户,以便 Pod 只拥有所需的最低权限,并且集群中没有 Pod 出于其他原因(例如,检索当前区域)需要访问 Amazon EC2 实例元数据服务 (IMDS),那么我们建议阻止 Pod 访问 IMDS。有关更多信息,请参阅 服务账户的 IAM 角色限制对 IMDS 和 Amazon EC2 实例配置文件凭证的访问。如果要阻止 Pod 对 IMDS 的访问,请在启动模板中指定必要的设置。

    1. 创建一个包含以下内容的文件,并将 <example values>(包括 <>)替换为您自己的值。您在没有启动模板的情况下进行部署时指定的几个设置将移至启动模板中。如果未指定 version,则使用模板的默认版本。

      apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: <my-cluster> region: <region-code> managedNodeGroups: - name: <node-group-lt> launchTemplate: id: lt-<id> version: "<1>"
    2. 使用以下命令部署节点组。

      eksctl create nodegroup --config-file <filename-you-used-in-previous-step>

使用 AWS 管理控制台 创建托管节点组

  1. 等待集群状态显示为 ACTIVE。 您无法为尚未处于 ACTIVE 的集群创建托管节点组。

  2. Open the Amazon EKS console at https://console.amazonaws.cn/eks/home#/clusters.

  3. 选择要在其中创建托管节点组的集群的名称。

  4. 选择 Configuration (配置) 选项卡。

  5. Configuration (配置) 选项卡上,选择 Compute (计算) 选项卡,然后选择 Add Node Group (添加节点组)

  6. Configure node group (配置节点组) 页面上,填写相应参数,然后选择 Next (下一步)

    • Name (名称) – 为托管节点组输入唯一名称。

    • Node IAM role name (节点 IAM 角色名称) – 选择要与节点组一起使用的节点实例角色。有关更多信息,请参阅Amazon EKS 节点 IAM 角色

      重要

      我们建议您使用任何自行管理节点组当前未使用的角色,或者使用您计划与新的自行管理节点组配合使用的角色。有关更多信息,请参阅删除托管节点组

    • 使用启动模板 –(可选)如果要使用现有启动模板,请选择启动模板版本(可选)。如果未选择版本,则 Amazon EKS 将使用模板的默认版本。启动模板允许对节点组进行更多自定义,包括允许您部署自定义 AMI。启动模板必须满足 启动模板支持 中的要求。如果您未使用自己的启动模板,Amazon EKS API 将在您的账户中创建默认 Amazon EC2 启动模板,并使用默认启动模板部署节点组。如果您为服务账户实施了 角色IAM,请直接向需要访问 服务的所有 Pod 分配必要的权限,并且集群中的任何 Pod 出于其他原因(如检索当前区域)需要访问 IMDS,那么您也可以为不使用启动模板中的主机联网的 Pod 禁用对 IMDS 的访问。AWS有关更多信息,请参阅限制对 IMDS 和 Amazon EC2 实例配置文件凭证的访问

    • Kubernetes labels (Kubernetes 标签) –(可选)可以选择对托管节点组中的节点应用 Kubernetes 标签。

    • Tags (标签) –(可选)可以选择对 Amazon EKS 托管节点组进行标记。这些标签不会传播到节点组中的其他资源,例如 Auto Scaling 组或实例。有关更多信息,请参阅给您的 Amazon EKS 资源加标签

  7. Set compute and scaling configuration (设置计算和扩展配置) 页面上,填写相应参数,然后选择 Next (下一步)

    节点组计算配置

    • AMI type – 为非 GPU 实例选择 Amazon Linux 2 (AL2_x86_64),为 GPU 实例选择 Amazon Linux 2 GPU Enabled (AL2_x86_64_GPU),或为 Arm 选择 (AL2_ARM_64)Amazon Linux 2。

      如果您要部署 Arm 实例,请确保先查看Amazon EKS 优化的 Arm Amazon Linux AMIs中的注意事项,然后再部署。

      如果您在上一页上指定了启动模板,并在启动模板中指定了 AMI,则无法选择值。模板中的值将会显示。模板中指定的 AMI 必须满足 使用自定义 AMI 中的要求。

    • Capacity type (容量类型) – 选择容量类型。有关选择容量类型的更多信息,请参阅托管节点组容量类型。您不能在同一节点组中混合不同的容量类型。如果要使用两种容量类型,请创建单独的节点组,每个节点组具有自己的容量和实例类型。

    • 实例类型 – 默认情况下指定一个或多个实例类型。要删除默认实例类型,请选择实例类型右侧的 X。选择要在托管节点组中使用的实例类型。控制台显示一组常用的实例类型。如果您需要创建具有未显示实例类型的托管节点组,请使用 eksctl、AWS CLI、AWS CloudFormation 或开发工具包创建节点组。如果您在上一页上指定了启动模板,则无法选择值,因为必须在启动模板中指定该值。这将显示启动模板中的值。如果您为 Capacity type (容量类型) 选择了 Spot,我们建议您指定多个实例类型来增强可用性。有关选择实例类型的更多信息,请参阅 中的注意事项托管节点组容量类型

      每种 Amazon EC2 实例类型支持最大数量的弹性网络接口 (ENI),而每个 ENI 支持最大数量的 IP 地址。由于每个工作线程节点和 Pod 都分配有自己的 IP 地址,因此必须选择一种实例类型,以支持您希望在每个工作线程节点上运行的最大数量的 Pod。有关实例类型支持的 ENI 和 IP 地址数量的列表,请参阅每种实例类型、每个网络接口的 IP 地址。例如,对于工作线程节点和 Pod,m5.large 实例类型最多支持 30 个 IP 地址。某些实例类型可能并非在所有区域都可用。

      如果您计划使用Pod 的安全组,请确保指定受支持的 Amazon EC2 实例类型。有关更多信息,请参阅Amazon EC2 支持的实例和分支网络接口。 如果指定了 Arm Amazon EC2 实例类型,请在部署之前查看 Amazon EKS 优化的 Arm Amazon Linux AMIs中的注意事项。

    • 磁盘大小 – 输入要用于节点的根卷的磁盘大小(在 GiB 中)。

      如果您在上一页上指定了启动模板,则无法选择值,因为必须在启动模板中指定该值。

    节点组扩展配置

    注意

    Amazon EKS 不会自动扩展或缩小节点组。但是,您可以配置 Kubernetes Cluster Autoscaler 以执行此操作。

    • Minimum size (最小大小) – 指定托管节点组可以缩减到的最小节点数。

    • 最大大小 – 指定托管节点组可扩展到的最大节点数。

    • Desired size (所需大小) – 指定托管节点组在启动时应保留的当前节点数。

  8. Specify networking (指定联网) 页面上,相应填写参数,然后选择 Next (下一步)

    • Subnets (子网) – 选择要在其中启动托管节点的子网。

      重要

      如果要使用 Kubernetes Cluster Autoscaler 在由 Amazon EBS 卷支持的多个可用区中运行有状态应用程序,则应该配置多个节点组,每个节点组的范围都限定为一个可用区。此外,您应该启用 --balance-similar-node-groups 功能。

      重要
      • 如果您选择公有子网,则子网必须将 MapPublicIpOnLaunch 设置为 true,这些实例才能成功加入集群。如果子网是在不早于 eksctl 之时使用 或 Amazon EKSAWS CloudFormation 提供的 模板March 26, 2020创建的,则此设置已设置为 true。如果子网是在 March 26, 2020 之前使用 eksctl 或 AWS CloudFormation 模板创建的,则需要手动更改设置。有关更多信息,请参阅修改子网的公有 IPv4 寻址属性

      • 不要在 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区中选择子网。您无法将托管节点部署到 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区中的子网。您只能将自行管理的节点部署到 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区子网。

    • 允许远程访问节点(可选,但默认为)。启用 SSH 后,如果出现问题,您可以连接到实例并收集诊断信息。请完成以下步骤以启用远程访问。我们强烈建议您在创建节点组时启用远程访问。在创建节点组后,将无法启用远程访问。

      如果您选择使用启动模板,则不会显示此选项。要启用对节点的远程访问,请在启动模板中指定密钥对,并确保对启动模板中指定的安全组中的节点开放适当的端口。有关更多信息,请参阅使用自定义安全组

    • 对于 SSH key pair (SSH 密钥对)(可选),选择要使用的 Amazon EC2 SSH 密钥。有关更多信息,请参阅 中的 Amazon EC2 密钥对Amazon EC2 用户指南(适用于 Linux 实例)。如果您选择使用启动模板,则不能选择启动模板。

    • 对于 Allow remote access from (允许从),如果您希望限制对特定实例的访问,请选择与这些实例关联的安全组。如果您未选择特定安全组,则允许从 Internet 上的任何位置进行 SSH 访问 (0.0.0.0/0)。

  9. Review and create (审核并创建) 页面上,审核托管节点组配置并选择 Create (创建)

    如果节点无法加入集群,请参阅《故障排除指南》中的节点无法加入集群

  10. 查看节点的状态并等待它们达到 Ready 状态。

    kubectl get nodes --watch
  11. (仅限 GPU 节点)如果您选择 GPU 实例类型和 Amazon EKS 优化加速 AMI,则必须使用以下命令在集群上将适用于 Kubernetes 的 NVIDIA 设备插件用作 DaemonSet。

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.6.0/nvidia-device-plugin.yml
  12. (可选)部署示例 Linux 工作负载 – 部署示例应用程序以测试您的集群和 Linux 节点。

  13. (可选)将 Linux 工作线程节点添加到集群后,请按照 Windows 支持中的过程向集群添加 Windows 支持并添加 Windows 工作线程节点。所有 Amazon EKS 集群必须至少包含一个 Linux 工作线程节点,即使您只想在集群中运行 Windows 工作负载也是如此。

现在,您有一个带节点的工作 Amazon EKS 集群,您已准备好开始安装 Kubernetes 插件并将应用程序部署到集群。以下文档主题可帮助您扩展集群的此功能。