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

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

启动自行管理的 Tottlerocket 节点

本主题帮助您启动向 Auto Scaling 集群注册的 Bottlerocket 节点的 Amazon EKS 组。Tottlerocket 是一个基于 Linux 的开源操作系统,由 AWS 专门构建,用于在虚拟机或裸机主机上运行容器。在这些节点加入集群后,您可以向其部署 Kubernetes 应用程序。有关 Tottlerocket 的更多信息,请参阅 上的文档GitHub。

重要

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

重要

注意事项

  • 您可以部署到采用 x86 或 Arm 处理器的 Amazon EC2 实例,但不能部署到具有 GPU 或 Inferentia 芯片的实例。

  • 您不能部署到以下区域:中国(北京) (cn-north-1)、中国 (宁夏) (cn-northwest-1)、AWS GovCloud(美国东部) (us-gov-east-1) 或 AWS GovCloud (US-West) (us-gov-west-1)。

  • 没有可用于部署节点的 AWS CloudFormation 模板。

重要

不要使用 eksctl 在已启用 AWS Outposts、AWS Wavelength 或 AWS 本地扩展区的 AWS 区域中创建集群或节点。改用 Amazon EC2 API 或 AWS CloudFormation 创建集群和自行管理的节点。有关更多信息,请参阅 使用 AWS 管理控制台 启动自管理 Linux 节点使用 AWS 管理控制台 启动自管理 Windows 节点

使用 eksctl 启动 Bottlerocket 节点

此过程需要 eksctl 版本 0.35.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 的现有集群。对于其他现有集群,请更改这些值。如果您没有现有集群,则必须先创建集群

    使用以下内容创建 文件。将 <example values>(包括 <>)替换为您自己的值。如果更改 1.18,则只能将其更改为 1.15 或更高版本。如果要在 Arm 实例上部署,请将 m5.large 替换为 Arm 实例类型。如果指定了 Arm Amazon EC2 实例类型,请在部署之前查看 Amazon EKS 优化的 Arm Amazon Linux AMIs中的注意事项。如果要使用自定义 AMI 进行部署,请参阅 文档中的在 GitHub 上构建 Tottlerocket自定义 AMI 支持eksctl。如果您要部署托管节点组,则必须使用启动模板部署自定义 AMI。有关更多信息,请参阅启动模板支持

    有关在 eksctl 中使用配置文件配置文件架构配置文件示例的更多信息,请参阅 eksctl 文档。

    --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: <my-cluster> region: <us-west-2> version: <'1.18'> nodeGroups: - name: <ng-bottlerocket> instanceType: <m5.large> desiredCapacity: <3> amiFamily: <Bottlerocket> iam: attachPolicyARNs: - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore ssh: allow: true publicKeyName: <YOUR_EC2_KEYPAIR_NAME>
  3. 使用以下命令部署您的节点。

    eksctl create nodegroup --config-file=<filename-you-used-in-previous-step.yaml>

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

    输出:

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

    [✔] created 1 nodegroup(s) in cluster "<my-cluster>"
  4. (可选)使用 https://kubernetes.io/docs/concepts/storage/persistent-volumes/ CSI 插件在 Bottlerocket 节点上创建 Kubernetes Amazon EBS持久性卷。默认 Amazon EBS 驱动程序依赖于 Tottlerocket 中未包含的文件系统工具。有关使用驱动程序创建存储类的更多信息,请参阅Amazon EBS CSI 驱动程序

  5. (可选)默认情况下,kube-proxynf_conntrack_max 内核参数设置为一个默认值,该默认值可能与在启动时最初设置的值不同。如果您更愿意保留 Tottlerocket 的默认设置,请使用以下命令编辑 kube-proxy 配置。

    kubectl edit -n kube-system daemonset kube-proxy

    将 --conntrack-max-per-core 和 --conntrack-min 添加到 kube-proxy 参数,如以下示例所示。设置 0 意味着不进行任何更改。

    containers: - command: - kube-proxy - --v=2 - --config=/var/lib/kube-proxy-config/config - --conntrack-max-per-core=0 - --conntrack-min=0
  6. (可选)部署示例应用程序以测试您的 Bottrocket 节点。

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

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