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

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

启动自管理 Amazon Linux 节点

本主题帮助您启动向 Auto Scaling 集群注册的 Linux 节点的 Amazon EKS 组。在这些节点加入集群后,您可以向其部署 Kubernetes 应用程序。您可以使用 Amazon Linux 2 或 eksctl 启动自管理 AWS 管理控制台 节点。

使用 eksctl 启动自管理 Linux 节点

此过程仅适用于使用 创建的集群。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 节点

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

  2. 以下命令假定您在 my-cluster 区域中有一个名为 us-west-2 的现有集群。对于其他现有集群,请更改这些值。如果您没有现有集群,则必须先创建集群。如果要在 Amazon EC2 Arm 实例上部署,请将 t3.medium 替换为 Arm 实例类型。如果指定了 Arm Amazon EC2 实例类型,请在部署之前查看 Amazon EKS 优化的 Arm Amazon Linux AMIs中的注意事项。

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

    eksctl create nodegroup \ --cluster <my-cluster> \ --version auto \ --name <al-nodes> \ --node-type <t3.medium> \ --node-ami auto \ --nodes <3> \ --nodes-min <1> \ --nodes-max <4>

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

    输出:

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

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

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

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

此过程具有以下先决条件:

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

  2. 从 AWS CloudFormation 打开 https://console.amazonaws.cn/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-nodegroup.yaml
    • 中国(北京) 和 中国 (宁夏)

      https://s3.cn-north-1.amazonaws.com.cn/amazon-eks//cloudformation/2020-10-29/amazon-eks-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:为节点选择实例类型。在选择 Arm 实例类型之前,请确保查看Amazon EKS 优化的 Arm Amazon Linux AMIs中的注意事项。

      注意

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

      重要

      某些实例类型可能并非在所有区域都可用。

    • NodeImageIdSSMParam:为 Kubernetes 版本预填充当前推荐的经 Amazon EC2 Systems Manager 优化的 Amazon EKS AMI ID 的 Amazon Linux 参数。如果要使用经 Amazon EKS 优化的加速 AMI,请将 amazon-linux-2 替换为 amazon-linux-2-gpu。如果要使用经 Amazon EKS 优化的 Arm AMI,请将 amazon-linux-2 替换为 amazon-linux-2-arm64。如果要使用 Amazon EKS 支持的其他 Kubernetes 次要版本,您可以将 1.x 替换为其他支持的版本。我们建议指定与集群相同的 Kubernetes 版本。

      注意

      Amazon EKS 节点 AMI 基于 Amazon Linux 2。您可以在 Amazon Linux 安全中心跟踪 Amazon Linux 2 的安全或隐私事件,也可以订阅关联的 RSS 源。安全和隐私事件包括问题的概述、受影响的程序包以及如何更新实例以解决问题。

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

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

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

      注意

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

    • BootstrapArguments:指定要传递给节点引导脚本的任何可选参数,例如额外的 kubelet 参数。有关更多信息,请查看 GitHub 上的引导脚本使用信息

      注意
      • 如果您要在没有出站 Internet 访问的私有 VPC 中启动节点,则需要包含以下参数。

        --apiserver-endpoint <cluster-endpoint> --b64-cluster-ca <cluster-certificate-authority>
      • 如果要将 IP 地址分配给来自包含节点 IP 地址的块之外的其他 CIDR 块的 Pod,则可能需要向 VPC 添加 CIDR 块并指定参数以支持该功能。有关更多信息,请参阅 CNI 自定义网络.

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

    • VpcId:输入您创建的 VPC 的 ID。

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

      重要

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

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

      • 确保已使用集群名称标记所选子网。有关更多信息,请参阅 子网添加标签要求。如果您在 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区中拥有子网,它们可能当前未标记。

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

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

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

启用节点以加入集群

注意

如果您在没有出站 Internet 访问的私有 VPC 中启动了节点,则必须允许节点从 VPC 中加入集群。

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

    1. 使用与集群所在的区域对应的命令下载配置映射:

      • 和 中国(北京) 之外的所有区域中国 (宁夏)

        curl -o aws-auth-cm.yaml https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm.yaml
      • 中国(北京) 和 中国 (宁夏)

        curl -o aws-auth-cm.yaml https://s3.cn-north-1.amazonaws.com.cn/amazon-eks//cloudformation/2020-10-29/aws-auth-cm.yaml
    2. 使用文本编辑器打开文件。将 <ARN of instance role (not instance profile)> 代码段替换为您在上一过程中记录的 NodeInstanceRole 值,并保存该文件。

      重要

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

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

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

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

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

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

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

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

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

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