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

在 Outpost 上启动自行管理的 Amazon Linux 节点

本主题介绍如何在向您的 Amazon EKS 集群的 Outpost 上启动 Amazon Linux 节点的自动扩缩组。集群可以位于 Amazon Web Services 云 上,也可以位于 Outpost 上。

先决条件

  • 一个现有的 Outpost。有关更多信息,请参阅什么是 Amazon Outposts

  • 现有 版 Amazon EKS 集群。要在 Amazon Web Services 云 上部署集群,请参阅 创建 Amazon EKS 集群。要在 Outpost 上部署集群,请参阅 Amazon Outposts 上的 Amazon EKS 的本地集群

  • 如果您要在 Amazon Web Services 云 上的集群中创建节点,并且您在已启用 Amazon Outposts、Amazon Wavelength 或 Amazon Local Zones 的 Amazon Web Services 区域 中拥有子网,则这些子网不得在您创建集群时就已传入。如果您要在 Outpost 上的集群中创建节点,则在创建集群时必须已传入 Outpost 子网。

  • 可选,但建议用于 Amazon Web Services 云 上的集群 – Amazon VPC CNI plugin for Kubernetes 附加组件已配置自己的 IAM 角色,并附加了必要的 IAM policy。有关更多信息,请参阅配置 Amazon VPC CNI plugin for Kubernetes 将 IAM 角色用于服务账户。本地集群不支持服务账户的 IAM 角色。

您可以使用 eksctl 或 Amazon Web Services Management Console(带有 Amazon CloudFormation 模板)创建自行管理的 Amazon Linux 节点组。您还可以使用 Terraform

eksctl

先决条件

您的设备或 Amazon CloudShell 上安装了 0.114.0 版或更高版本的 eksctl 命令行工具。要安装或更新 eksctl,请参阅 安装或更新 eksctl

要使用 eksctl 启动自行管理的 Linux 节点

  1. 如果您的集群位于 Amazon Web Services 云 上,并且 AmazonEKS_CNI_Policy 托管 IAM policy 附加到您的 Amazon EKS 节点 IAM 角色,我们建议将其分配给您与 Kubernetes aws-node 服务账户关联的 IAM 角色。有关更多信息,请参阅配置 Amazon VPC CNI plugin for Kubernetes 将 IAM 角色用于服务账户。如果您的集群位于 Outpost 上,则必须将该策略附加到您的节点角色。

  2. 以下命令在现有集群中创建节点组。必须已经使用 eksctl 创建了集群。将 al-nodes 替换为您的节点组名称。名称只能包含字母数字字符(区分大小写)和连字符。该名称必须以字母字符开头,且不得超过 100 个字符。将 my-cluster 替换为您集群的名称。名称只能包含字母数字字符(区分大小写)和连字符。该名称必须以字母字符开头,且不得超过 100 个字符。如果您的集群存在于 Outpost 上,则将 id 替换为 Outpost 子网的 ID。如果您的集群存在于 Amazon Web Services 云 上,则将 id 替换为您在创建集群时未指定的子网的 ID。将 instance-type 替换为您的 Outpost 支持的实例类型。将剩余的 example values 替换为您自己的值。预设情况下,将使用与控制面板相同的 Kubernetes 版本创建节点。

    instance-type 替换为您的 Outpost 上可用的实例类型。

    my-key 替换为您的 Amazon EC2 密钥对或公有密钥的名称。此密钥用于在节点启动后通过 SSH 进入节点。如果还没有 Amazon EC2 密钥对,可以在 Amazon Web Services Management Console 中创建一个。有关更多信息,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 Amazon EC2 密钥对

    使用以下命令创建您的节点组。

    eksctl create nodegroup --cluster my-cluster --name al-nodes --node-type instance-type \ --nodes 3 --nodes-min 1 --nodes-max 4 --managed=false --node-volume-type gp2 subnet-ids subnet-id

    如果您的集群部署在 Amazon Web Services 云 上,并且您希望部署符合以下条件的节点组:

    有关所有可用选项和默认设置的完整列表,请参阅 eksctl 文档中的 Amazon Outposts 支持

    如果节点无法加入集群,请参阅 Amazon EKS 故障排除 中的 节点未能加入集群对 Amazon Outposts 上的 Amazon EKS 的本地集群进行故障排除 中的 无法将节点加入集群

    输出示例如下。创建节点时会输出几行。输出的最后几行类似于以下示例行。

    [✔] created 1 nodegroup(s) in cluster "my-cluster"
Amazon Web Services Management Console

步骤 1:使用 Amazon Web Services Management Console 启动自行管理的 Amazon Linux 节点

  1. 下载最新版本的 Amazon CloudFormation 模板。

    curl -o amazon-eks-nodegroup.yaml https://s3.cn-north-1.amazonaws.com.cn/amazon-eks/cloudformation/2020-10-29/amazon-eks-nodegroup.yaml
  2. 打开 Amazon CloudFormation 控制台,地址:https://console.aws.amazon.com/cloudformation

  3. 选择 Create stack(创建堆栈),然后选择 With new resources (standard)(使用新资源(标准))

  4. 对于 Specify template(指定模板),选择 Upload a template file(上传模板文件),然后选择Choose file(选择文件) 。选择您在上一步中下载的 amazon-eks-nodegroup.yaml 文件,然后选择 Next(下一步)。

  5. Specify stack details(指定堆栈详细信息)页面上,相应填写以下参数,然后选择 Next(下一步):

    • 堆栈名称:为 Amazon CloudFormation 堆栈选择堆栈名称。例如,您可以将其命名为 al-nodes。名称只能包含字母数字字符(区分大小写)和连字符。该名称必须以字母字符开头,且不得超过 100 个字符。

    • ClusterName:输入您的集群的名称。如果此名称与您的集群名称不匹配,则您的节点将无法加入该集群。

    • ClusterControlPlaneSecurityGroup:从您在创建 VPC 时生成的 Amazon CloudFormation 输出中,选择 SecurityGroups 值。

      以下步骤显示了检索适用组的一种操作。

      1. 从以下位置打开 Amazon EKS 控制台:https://console.aws.amazon.com/eks/home#/clusters

      2. 选择集群的名称。

      3. 选择 Networking(联网)选项卡。

      4. ClusterControlPlaneSecurityGroup 下拉列表中选择时使用 Additional security groups(其他安全组)值作为参考。

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

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

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

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

    • NodeInstanceType:选择节点的实例类型。如果您的集群在 Amazon Web Services 云 上运行,则有关更多信息,请参阅 选择 Amazon EC2 实例类型。如果您的集群在 Outpost 上运行,则您只能选择您的 Outpost 上可用的实例类型。

    • NodeImageIdSSMParam:使用用于某个 Kubernetes 版本的最近的 Amazon EKS 优化版 Amazon Linux AMI ID 的 Amazon EC2 Systems Manager 参数进行预填充。要使用 Amazon EKS 支持的其他 Kubernetes 次要版本,请将 1.x 替换为不同的支持版本。我们建议您指定与您的集群相同的 Kubernetes 版本。

      要使用 Amazon EKS 优化版加速型 AMI,请将 amazon-linux-2 替换为 amazon-linux-2-gpu。要使用 Amazon EKS 优化版 Arm AMI,请将 amazon-linux-2 替换为 amazon-linux-2-arm64

      注意

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

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

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

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

      注意

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

    • BootstrapArguments:有几个可选参数可以传递给您的节点。有关更多信息,请查看 GitHub 上的引导脚本使用信息

    • DisableIMDSv1:预设情况下,每个节点支持实例元数据服务版本 1 (IMDSv1) 和 IMDSv2。您可以禁用 IMDSv1。要防止节点组中的未来节点和 pods 使用 IMDSv1,请将 DisableIMDSv1 设置为 true(真)。有关 IMDS 的更多信息,请参阅配置实例元数据服务。有关限制在节点上访问的更多信息,请参阅限制对分配给工作节点的实例配置文件的访问.

    • VpcId:输入您创建的 VPC 的 ID。在选择 VPC 之前,请查看 VPC 要求和注意事项

    • 子网:如果您的集群位于 Outpost 上,则请在您的 VPC 中选择至少一个私有子网。在选择子网之前,请查看 子网要求和注意事项。您可以通过从集群的 Networking(联网)选项卡中打开每个子网链接来查看哪些子网是私有的。

      重要
      • 确保您了解中的注意事项和 私有集群要求 中的额外步骤。

      • 如果您的集群位于 Amazon Web Services 云 上,并且您选择 Amazon Outposts、Wavelength 或 Local Zone 子网,则这些子网不得在您创建集群时就已传入。

  6. Configure stack options(配置堆栈选项)页面上选择所需选项,然后选择 Next(下一步)。

  7. 选择 I acknowledge that Amazon CloudFormation might create IAM resources.(我了解可能会创建 IAM 资源。)左侧的复选框,然后选择 Create stack(创建堆栈)。

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

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

步骤 2:使节点能够加入集群

注意

如果您在没有出站 Internet 访问的情况下在私有 VPC 内启动了节点,请确保使节点能够从 VPC 中加入您的集群。

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

    1. 使用下面的命令下载配置映射。

      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. aws-auth-cm.yaml 文件中,将 rolearn 设置为您在上一个步骤中记录的值。您可以使用文本编辑器或者通过替换 my-node-instance-role 和运行以下命令来执行此操作:

      sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
    3. 应用配置。此命令可能需要几分钟才能完成。

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

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

      如果节点无法加入集群,请参阅 Amazon EKS 故障排除 中的 节点未能加入集群对 Amazon Outposts 上的 Amazon EKS 的本地集群进行故障排除 中的 无法将节点加入集群

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

    kubectl get nodes --watch

    输入 Ctrl+C 以返回到 Shell 提示符。

  3. 安装 Amazon EBS CSI 驱动程序。有关更多信息,请参阅 GitHub 上的安装。在设置驱动程序权限部分中,确保按照 Using IAM instance profile(使用 IAM 实例配置文件)选项的说明进行操作。您必须使用 gp2 存储类。不支持 gp3 存储类。

    要在您的集群上创建 gp2 存储类,请完成以下步骤。

    1. 运行以下命令以创建 gp2-storage-class.yaml 文件。

      cat >gp2-storage-class.yaml <<EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" name: ebs-sc provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp2 encrypted: "true" allowVolumeExpansion: true EOF
    2. 将清单应用于集群。

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

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

  6. 如果您的集群部署在 Outpost 上,则请跳过此步骤。如果您的集群部署在 Amazon Web Services 云 上,以下信息是可选的。如果 AmazonEKS_CNI_Policy 托管 IAM policy 附加到您的 Amazon EKS 节点 IAM 角色,我们建议将其分配给您与 Kubernetes aws-node 服务账户关联的 IAM 角色。有关更多信息,请参阅配置 Amazon VPC CNI plugin for Kubernetes 将 IAM 角色用于服务账户