创建托管节点组 - Amazon EKS

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

创建托管节点组

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

如果这是您首次启动 Amazon EKS 托管节点组,建议您按照我们的Amazon EKS 入门指南。本指南提供了创建带节点的 Amazon EKS 集群的演练。

重要

Prerequisite

使用现有 集群。如果您没有现有群集,建议您按照Amazon EKS 入门指南以创建集群和节点组。

您可以使用创建托管节点组eksctl或AWS Management Console。

eksctl

使用创建托管节点组eksctl

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

eksctl version

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

您可以使用或不使用启动模板创建节点组。启动模板允许更好地自定义节点组,包括部署自定义 AMI。如果您计划使用窗格的安全组,然后确保指定支持的 Amazon EC2 实例类型。有关更多信息,请参阅 Amazon EC2 支持的实例和分支网络接口。如果指定了 Arm Amazon EC2 实例类型,请查看亚马逊 EKS 优化臂亚马逊 Linux AMI部署前。

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

  2. 使用或不使用自定义启动模板创建托管节点组。有关所有可用选项和默认设置的完整列表,请输入以下命令。

    eksctl create nodegroup --help

    <example values>(包括<>)与您自己的值。

    • 没有启动模板eksctl在您的账户中创建默认 Amazon EC2 启动模板,并使用它根据您指定的选项创建的启动模板来部署节点组。有关支持值的完整列表--node-type,请参阅amazon-eks-nodegroup.yaml(位于 GitHub 上)。Replace<my-key>替换为 Amazon EC2 key pair 或公有密钥的名称。此密钥用于在节点启动后 SSH 进入节点。如果您还没有 Amazon EC2 key pair,可以在AWS Management Console。有关更多信息,请参阅 。Amazon EC2 密钥对中的适用于 Linux 实例的 Amazon EC2 用户指南

      如果您计划将 IAM 角色分配给您的所有 Kubernetes 服务账户,以便容器只具有所需的最低权限,并且集群中没有容器因其他原因(如检索当前区域)而需要访问 Amazon EC2 实例元数据服务 (IMDS),我们建议您使用阻止对 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-key> \ --managed
    • 使用启动模板— 启动模板必须已存在,并且必须满足启动模板配置基本知识。如果您计划将 IAM 角色分配给您的所有 Kubernetes 服务账户,以便容器只具有所需的最低权限,并且集群中没有容器因其他原因(如检索当前区域)而需要访问 Amazon EC2 实例元数据服务 (IMDS),我们建议您使用阻止对 IMDS 的容器访问。有关更多信息,请参阅 服务账户的 IAM 角色限制对 IMDS 和 Amazon EC2 实例配置文件证书的访问权限。如果要阻止容器访问 IMDS,请在启动模板中指定必要的设置。

      1. 使用以下内容创建名为 eks-nodegroup.yaml 的文件。在没有启动模板的情况下进行部署时指定的多个设置将移动到启动模板中。如果您未指定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>"

        有关eksctl配置文件设置,请参阅Config 文件架构中的eksctl文档中)。

      2. 使用以下命令部署节点组。

        eksctl create nodegroup --config-file eks-nodegroup.yaml
AWS Management Console

要使用创建托管节点组AWS Management Console

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

  2. 从打开 Amazon EKS 控制台https://console.aws.amazon.com/eks/home#/clusters

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

  4. 选择配置选项卡。

  5. 在存储库的配置选项卡上,选择计算选项卡,然后选择Add 节点组

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

    • 名称— 为托管节点组输入唯一名称。

    • 节点 IAM 角色名称— 选择要与节点组一起使用的节点实例角色。有关更多信息,请参阅 亚马逊 EKS 节点 IAM 角色

      重要

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

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

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

    • Kubernetes 污点—(可选)您可以选择应用 Kubernetes 污点,效果为No_SchedulePrefer_No_Schedule,或者No_Execute添加到托管节点组中的节点。

    • 标签—(可选)您可以选择为 Amazon EKS 托管节点组添加标签。这些标签不会传播到节点组中的其他资源,例如 Auto Scaling 组或实例。有关更多信息,请参阅 为您的亚马逊 EKS 资源添加标签

    • 节点组更新配置—(可选)您可以选择要并行更新的节点的数量或百分比。选择数字或者百分比输入值。在更新过程中,这些节点将不可用。

  7. 在存储库的设置计算和扩展配置页面上,相应填写参数,然后选择下一步

    节点组计算配置

    • AMI 类型— 选择Amazon Linux 2对于非 GPU 实例,已启用亚马逊 Linux 2 GPU(GPU)对于 GPU 实例,或亚马逊 Linux 2 (AL2_ARM_64)用于的 Arm。

      如果要部署 Arm 实例,请务必查看亚马逊 EKS 优化臂亚马逊 Linux AMI部署前。

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

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

    • 实例类型— 默认情况下指定一个或多个实例类型。要删除默认实例类型,请选择X实例类型右侧。选择托管节点组中要使用的实例类型。控制台显示一组常用的实例类型。有关所支持实例类型的完整集,请参阅amazon-eks-nodegroup.yaml(位于 GitHub 上)。如果您需要使用未显示的实例类型创建托管节点组,请使用eksctl,AWS CLI、AWS CloudFormation或 SDK 来创建节点组。如果在上一页上指定了启动模板,则无法选择一个值,因为它必须在启动模板中指定。将显示启动模板中的值。如果您选择Spot 实例对于 来说为容量类型,那么我们建议指定多个实例类型以增强可用性。有关选择实例类型的更多信息,请参阅。注意事项托管节点组容量类型

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

      如果您计划使用窗格的安全组,然后确保指定支持的 Amazon EC2 实例类型。有关更多信息,请参阅 Amazon EC2 支持的实例和分支网络接口。如果指定了 Arm Amazon EC2 实例类型,请查看亚马逊 EKS 优化臂亚马逊 Linux AMI部署前。

    • 磁盘大小— 输入要用于节点根卷的磁盘大小(单位为 GiB)。

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

    节点组扩展配置

    注意

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

    • 最小容量— 指定托管节点数量的最小节点数。

    • 最大容量— 指定托管节点数量的最大节点数。

    • 所需容量— 指定托管节点数量在启动时托管节点数。

    注意

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

    节点组更新配置

    选择数字或者百分比

    • 数字— 选择并指定节点组中可并行更新的节点数。这些节点在更新过程中将不可用。

    • 百分比— 选择并指定节点组中可并行更新的节点的百分比。这些节点在更新过程中将不可用。如果您的节点组中有大量节点,这将非常有用。

  8. 在存储库的指定网络页面上,相应填写参数,然后选择下一步

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

      重要

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

      重要
      • 如果选择公有子网,并且您的集群仅启用了公有 API 服务器终端节点,则子网必须具有MapPublicIPOnLaunch设置为true,以便实例成功加入集群。如果子网是使用eksctlAmazon EKS 投资AWS CloudFormation模板,则此设置已设置为true。如果子网创建时使用eksctl或AWS CloudFormation模板,则需要手动更改设置。有关更多信息,请参阅修改子网的公有 IPv4 寻址属性

      • 如果您使用启动模板并指定多个网络接口,Amazon EC2 将不会自动分配公有 IPv4 地址,即使MapPublicIpOnLaunch设置为true。对于在此方案中加入群集的节点,您必须启用群集的专用 API 服务器终端节点,或者通过其他方法(如 NAT 网关)提供的出站 Internet 访问启动私有子网中的节点。有关更多信息,请参阅 。Amazon EC2 实例 IP 寻址适用于 Linux 实例的 Amazon EC2 用户指南中的。

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

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

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

    • 适用于允许远程访问,如果要限制对特定实例的访问,请选择与这些实例关联的安全组。如果您未选择特定的安全组,则允许从 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 设备插件使用以下命令将其作为集群上的守护程序集。

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.8.0/nvidia-device-plugin.yml
  12. (可选)将 Linux 工作线程节点添加到集群后,请按照 Windows 支持中的过程向集群添加 Windows 支持并添加 Windows 工作线程节点。所有 Amazon EKS 集群必须至少包含一个 Linux 工作线程节点,即使您只想在集群中运行 Windows 工作负载也是如此。

现在,您已有使用节点运行的 Amazon EKS 集群,那么就可以准备开始安装 Kubernetes 插件并将应用程序部署到集群。以下文档主题可帮助您扩展集群的此功能。

  • 创建集群的 IAM 实体(用户或角色)将添加到 Kubernetes RBAC 授权表作为管理员(使用system:masters权限)。最初,仅该 IAM 用户可以使用调用 Kubernetes API 服务器。kubectl。如果您希望其他用户有权访问您的集群,则必须将其添加到aws-auth ConfigMap。有关更多信息,请参阅 管理集群的用户或 IAM 角色

  • 限制对 IMDS 的访问— 如果您计划将 IAM 角色分配给所有 Kubernetes 服务账户,以便容器只具有所需的最低权限,并且集群中没有容器因其他原因(如检索当前区域)需要访问 Amazon EC2 实例元数据服务 (IMDS),那么我们建议您使用阻止对 IMDS 的容器访问。有关更多信息,请参阅 服务账户的 IAM 角色限制对 IMDS 和 Amazon EC2 实例配置文件证书的访问权限

  • Cluster Autoscaler— 配置 Kubernetes Cluster Autoscaler 自动调整节点数量。

  • 部署示例 Linux 工作负载示例— 部署示例 Linux 应用程序以测试您的集群和 Linux 节点。

  • 集群管理— 了解如何使用重要工具来管理集群。