启动自行管理的 Windows 节点节点 - Amazon EKS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

启动自行管理的 Windows 节点节点

本主题帮助您启动向 Amazon EKS 集群注册的 Windows 节点的 Auto Scaling 组。在这些节点加入集群后,您可以向其部署 Kubernetes 应用程序。

重要

Amazon EKS 节点是标准的 Amazon EC2 实例,您需要基于常规的 Amazon EC2 实例价格为其付费。有关更多信息,请参阅Amazon EC2定价

您必须为集群启用 Windows 支持,我们建议您在启动 Windows 节点组之前查看重要的注意事项。有关更多信息,请参阅 启用 Windows 支持

您可以启动自我管理的 Windows 节点eksctl或Amazon Web Services Management Console。

eksctl

要启动自我管理的 Windows 节点,请使用eksctl

此过程要求您安装了eksctl,并且您的eksctl版本至少为0.51.0。可以使用以下命令来查看您的 版本:

eksctl version

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

注意

此过程仅适用于使用 eksctl 创建的集群。

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

  2. 此过程假设您有一个名为my-cluster中的us-west-2区域。对于不同的现有集群,请更改值。如果您还没有 Amazon EKS 集群和要向其中添加 Windows 节点组的 Amazon Linux 2 节点组,则建议您遵循Amazon EKS 入门eksctl引导。本指南提供了使用 Amazon Linux 节点创建 Amazon EKS 集群的完整的端到端演练。

    使用以下命令创建节点组。将替换为<example values>(包括<>)与您自己的值。

    重要

    如果您想将节点组部署到AmazonOutpostsAmazonWavelengthAmazonLocal Zones 子网,然后AmazonOutpostsAmazonWavelengthAmazon创建群集时,Local Zones 子网不得传入。您必须使用配置文件创建节点组,指定AmazonOutpostsAmazonWavelengthAmazonLocal Zones 子网。有关更多信息,请参阅 。从配置文件创建节点组Config 文件架构中的eksctl文档中)。

    eksctl create nodegroup \ --region <us-west-2> \ --cluster <my-cluster> \ --name <ng-windows> \ --node-type <t2.large> \ --nodes <3> \ --nodes-min <1> \ --nodes-max <4> \ --node-ami-family <WindowsServer2019FullContainer>
    注意
    • 如果节点未能加入集群,请参阅节点未能加入集群在故障排除指南中。

    • 有关可用选项的更多信息eksctl命令中,输入以下命令。

      eksctl <command> -help

    输出:

    创建节点时,您将看到几行输出。输出的最后一行是以下示例行。

    [✔] created 1 nodegroup(s) in cluster "<my-cluster>"
  3. (可选)部署示例应用程序测试您的集群和 Windows 节点。

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

Amazon Web Services Management Console

Prerequisites

  • 现有 Amazon EKS 群集和 Linux 节点组。如果您没有这些资源,我们建议您按照我们的Amazon EKS 入门指南之一创建它们。这些指南提供了使用 Linux 节点创建 Amazon EKS 集群的完整的端到端演练。

  • 符合 Amazon EKS 集群要求的现有 VPC 和安全组。有关更多信息,请参阅 集群 VPC 注意事项Amazon EKS 安全组注意事项Amazon EKS 入门指南创建符合要求的 VPC,您也可以按照为 Amazon EKS 集群创建 VPC来手动创建 VPC。

  • 现有 Amazon EKS 集群,它使用符合 Amazon EKS 集群要求的 VPC 和安全组。有关更多信息,请参阅 创建 Amazon EKS 群集。如果您在Amazon您拥有的地区AmazonOutpostsAmazonWavelengthAmazon启用了 Local Zones,则在创建群集时不能传入这些子网。

若要启动自我管理的 Windows 节点,请使用Amazon Web Services Management Console

  1. 等待集群状态显示为 ACTIVE。如果您在集群处于活动状态之前启动节点,则节点将无法向集群注册,您必须重新启动节点。

  2. 打开Amazon CloudFormation控制台https://console.aws.amazon.com/cloudformation

  3. 选择创建堆栈

  4. 适用于指定模板,选择Amazon S3 URL,复制以下 URL,将其粘贴到Amazon S3 URL,然后选择下一步两次。

    https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/cloudformation/2020-10-29/amazon-eks-windows-nodegroup.yaml
  5. Quick create stack (快速创建堆栈) 页面上,相应地填写以下参数:

    • 堆栈名称:为您的Amazon CloudFormation堆栈。例如,您可以将其称为<cluster-name>-节点

    • ClusterName:输入您在创建 Amazon EKS 集群时使用的名称。

      重要

      此名称必须与您在第 1 步:创建 Amazon EKS 群集;否则,您的节点将无法加入集群。

    • ClusterControlPlaneSecurityGroup:选择SecurityGroups值Amazon CloudFormation输出时生成的VPC

    • NodeGroupName:输入节点组的名称。稍后您可以使用此名称来标识为节点创建的 Auto Scaling 节点组。

    • NodeAutoScalingGroupMinSize:输入您的节点 Auto Scaling 组可缩减到的最小节点数。

    • NodeAutoScalingGroupDesiredCapacity:输入创建堆栈时要扩展到的所需节点数目。

    • NodeAutoScalingGroupMaxSize:输入您的节点 Auto Scaling 组可扩展到的最大节点数。

    • NodeInstanceType:为节点选择实例类型。

      注意

      支持的实例类型适用于最新版本的适用于 Kubernetes 的 Amazon VPC CNI 插件已显示此处。您可能需要更新 CNI 版本来利用最新的受支持的实例类型。有关更多信息,请参阅 手动更新亚马逊 VPC CNI 加载项

    • NodeImageIdSSMParam:预先填充了当前推荐的 Amazon EKS 优化 Windows Core AMI ID 的 Amazon EC2 系统管理器参数。如果要使用完整版本的 Windows,请将替换 <Core> 为Full

    • NodeImageId:(可选)如果您使用自定义 AMI(而不是亚马逊 EKS 优化的 AMI),则输入您区域的节点 AMI ID。如果您在此处指定值,它会覆盖 NodeImageIdSSMParam 字段中的任意值。

    • NodeVolumeSize:指定节点的根卷大小(以 GiB 为单位)。

    • KeyName:输入 Amazon EC2 SSH key pair 的名称,您可使用该密钥对在节点启动后使用 SSH 连接到这些节点。如果还没有 Amazon EC2 key pair,可以在Amazon Web Services Management Console。有关更多信息,请参阅 。Amazon EC2 密钥对中的适用于 Windows 实例的 Amazon EC2 实例的用户指南

      注意

      如果此处不提供密钥对,Amazon CloudFormation 堆栈创建将失败。

    • BootstrapArguments:指定要传递给节点引导脚本的所有可选参数,如额外的kubelet参数使用-KubeletExtraArgs

    • 禁用数据库:默认情况下,每个节点支持实例元数据服务版本 1 (IMDSv1) 和 IMDSv2,但您可以禁用 IMDSv1。Selecttrue如果您不希望节点组中的任何节点或节点组中节点上计划的任何窗格使用 IMDSv1。有关 IMDS 的更多信息,请参阅配置实例元数据服务

    • VpcId:选择VPC(您创建的)。

    • NodeSecurityGroups:选择您在创建您的 Linux 节点组时创建的安全组。VPC。如果您的 Linux 节点附加了多个安全组(例如,如果 Linux 节点组是使用eksctl),请在此指定所有它们。

    • Subnets:选择您创建的子网。如 VPC 您使用为 Amazon EKS 集群创建 VPC,然后仅指定 VPC 中的私有子网以供节点启动到其中。

      重要
      • 如果其中的任何子网是公有子网,则其必须启用自动公有 IP 地址分配设置。如果没有为该公有子网启用该设置,则您部署到该公有子网的任何节点都不会被分配到公有 IP 地址,也无法与集群或其他Amazon服务。如果子网是在 2020 年 3 月 26 日之前使用Amazon EKSAmazon CloudFormationVPC 模板,或者通过使用eksctl,则会为这些公有子网禁用自动公有 IP 地址分配。有关如何为子网启用公有 IP 地址分配的信息,请参阅修改子网的公有 IPv4 寻址属性。如果节点部署到私有子网,则它可以与集群和其他Amazon服务。

      • 如果子网没有 Internet 访问权限,请确保您了解私有集群中的注意事项和额外步骤。

      • 如果要在 1.18 或更早版本的群集中部署节点,请确保您选择的子网标记为群集名称。Replacemy-cluster(包括<>),然后运行以下命令以查看当前使用您的群集名称标记的子网的列表。

        aws ec2 describe-subnets --filters Name=tag:kubernetes.io/cluster/<my-cluster>,Values=shared | grep SubnetId

        如果要选择的子网未在上一个命令的输出中返回,则必须手动将标记添加到子网。有关更多信息,请参阅 子网添加标签

      • 如果您选择AmazonOutpostsAmazonWavelengthAmazonLocal Zones 子网,则在创建群集时不能传入子网。

  6. 确认堆栈可创建 IAM 资源,然后选择创建堆栈

  7. 完成创建堆栈后,在控制台中选中它,然后选择 Outputs (输出)

  8. 记录已创建的节点组的 NodeInstanceRole。您在配置 Amazon EKS Windows 节点时需要此值。

启用节点以加入集群的步骤

  1. 下载、编辑和应用 Amazon IAM 身份验证器配置映射。

    1. 下载配置映射:

      curl -o aws-auth-cm-windows.yaml https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/cloudformation/2020-10-29/aws-auth-cm-windows.yaml
    2. 使用您常用的文本编辑器打开文件。将替换为<ARN of instance role (not instance profile) of **Linux** node><ARN of instance role (not instance profile) of **Windows** node>代码段NodeInstanceRole值,然后保存文件。

      重要

      请勿修改此文件中的任何其他行。

      apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn: <ARN of instance role (not instance profile) of **Linux** node> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - rolearn: <ARN of instance role (not instance profile) of **Windows** node> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - eks:kube-proxy-windows
    3. 应用配置。此命令可能需要几分钟才能完成。

      kubectl apply -f aws-auth-cm-windows.yaml
      注意

      如果您收到任何授权或资源类型错误,请参阅故障排除部分中的未经授权或访问被拒绝 (kubectl)

      如果节点无法加入集群,请参阅节点未能加入集群在故障排除指南中。

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

    kubectl get nodes --watch
  3. (可选)部署示例应用程序测试您的集群和 Windows 节点。

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

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