启动自管理 Windows 节点 - Amazon EKS

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

启动自管理 Windows 节点

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

重要

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

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

您可以使用 eksctl 或 启动自行管理的 Windows 节点AWS 管理控制台。

eksctl

使用 启动自管理 Windows 节点 eksctl

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

eksctl version

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

注意

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

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

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

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

    重要

    如果要将节点组部署到 AWS Outposts、 AWS Wavelength或AWS本地扩展区子网,则 AWS Outposts、 AWS Wavelength或AWS本地扩展区子网在创建集群时不得已传入。您必须使用配置文件创建节点组,并指定 AWS Outposts、 AWS Wavelength或AWS本地扩展区子网。有关更多信息,请参阅 文档中的从配置文件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 服务账户,以便 Pod 只拥有所需的最低权限,并且集群中没有 Pod 出于其他原因(例如,检索当前区域)需要访问 Amazon EC2 实例元数据服务 (IMDS),那么我们建议阻止 Pod 访问 IMDS。有关更多信息,请参阅 IAM服务账户的 角色限制对 IMDS 和 Amazon EC2 实例配置文件凭证的访问

AWS 管理控制台

Prerequisites

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

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

  • 使用符合 Amazon EKS 集群要求的 VPC 和安全组的现有Amazon EKS集群。有关更多信息,请参阅创建 Amazon EKS 集群。如果您在启用了 AWS、 AWS Outposts或 AWS Wavelength 本地扩展区的AWS区域中有子网,则这些子网一定不能在创建集群时已传入。

使用 启动自管理 Windows 节点 AWS 管理控制台

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

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

  3. 选择创建堆栈

  4. 对于 Specify template (指定模板),选择 Amazon S3 URL,复制以下 URL,将其粘贴到 Amazon S3 URL 中,然后选择 Next (下一步) 两次。

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

    • 堆栈名称:为 AWS CloudFormation 堆栈选择堆栈名称。例如,您可以将其称为 <cluster-name>-nodes。

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

      重要

      此名称必须与您在 中使用的名称完全匹配步骤 1:创建 Amazon EKS 集群;否则,您的节点将无法加入集群。

    • ClusterControlPlaneSecurityGroup从创建 VPC 时生成的AWS CloudFormation输出中选择 SecurityGroups 值。

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

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

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

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

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

      注意

      最新版本的 Kubernetes 的 Amazon VPC CNI 插件支持的实例类型在此处显示。您可能需要更新 CNI 版本来利用最新的受支持的实例类型。有关更多信息,请参阅Amazon VPC适用于 Kubernetes 的 CNI 插件升级

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

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

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

    • KeyName输入 Amazon EC2 SSH 密钥对的名称,您可以使用该密钥对在节点启动后使用 SSH 连接到节点。如果还没有 Amazon EC2 密钥对,可以在 AWS 管理控制台中创建一个。有关更多信息,请参阅 Amazon EC2 中的 Amazon EC2 用户指南(适用于 Windows 实例) 密钥对

      注意

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

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

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

    • VpcId选择您创建的 VPC 的 ID。

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

    • Subnets (子网):选择您创建的子网。如果您使用中所述的步骤创建 为 Amazon EKS 集群创建 VPCVPC,则仅指定 VPC 内的私有子网,以便节点启动到其中。

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

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

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

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

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

      • 如果您选择 AWS Outposts、 AWS Wavelength或 AWS 本地扩展区子网,则您在创建集群时就不能已传入子网。

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

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

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

允许节点加入您的集群

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

    1. 下载配置映射:

      curl -o aws-auth-cm-windows.yaml https://s3.us-west-2.amazonaws.com/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> 带有您为 Linux 和 Windows 节点记录的 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 策略附加到您的 Amazon EKS 节点IAM角色,我们建议您将其分配给与 Kubernetes aws-node 服务账户关联的 IAM 角色。有关更多信息,请参阅 配置 VPC CNI 插件以使用服务账户的 IAM 角色

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