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

启动自行管理 Bottlerocket 节点

注意

托管节点组可能会为您的使用案例带来一些优势。有关更多信息,请参阅 托管节点组

本主题帮助您启动注册到 Amazon EKS 集群的 Bottlerocket 节点的 Auto Scaling 组。Bottlerocket 是 Amazon 的基于 Linux 的开源操作系统,用于在虚拟机或裸机主机上运行容器。在这些节点加入集群后,您可以向其部署 Kubernetes 应用程序。有关 Botlerocket 的更多信息,请参阅 GitHub 上的将 Botlerocket AMI 与 Amazon EKS 一起使用eksctl 文档中的自定义 AMI 支持

有关就地升级的信息,请参阅 GitHub 上的 Bottlerocket Update Operator

重要

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

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

  • 您无法部署到以下区域:中国(北京)(cn-north-1) 或中国(宁夏)(cn-northwest-1)。

  • 没有 Amazon CloudFormation 模板用来部署节点。

  • Bottlerocket 图像不附带 SSH 服务器或外壳。您可以使用带外访问方法来允许 SSH 启用管理员容器,并执行一些带有用户数据的引导启动配置步骤。有关更多信息,请参阅 GitHub 上的 bottlerocket README.md

使用 eksctl 启动 Bottlerocket 节点

此过程需要 eksctl 版本 0.84.0 或更高版本。可以使用以下命令来查看您的版本:

eksctl version

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

注意

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

  1. 使用以下内容创建名为 bottlerocket.yaml 的文件。将每个 example-value 替换为您自己的值。要在 Arm 实例上部署,请将 m5.large 替换为 Arm 实例类型。如果指定了 Arm Amazon EC2 实例类型,请在部署前查看 Amazon EKS 优化版 Arm Amazon Linux AMI 中的注意事项。有关使用自定义 AMI 进行部署的说明,请参阅 GitHub 上的构建 Bottlerocket 以及 eksctl 文档中的自定义 AMI 支持。要部署托管节点组,请使用启动模板部署自定义 AMI。有关更多信息,请参阅 启动模板支持

    重要

    要将节点组部署到 Amazon Outposts、Amazon Wavelength 或 Amazon Local Zones 子网,创建集群时不要传入 Amazon Outposts、Amazon Wavelength 或 Amazon Local Zones 子网。您必须在以下示例中指定子网。有关更多信息,请参阅 eksctl 文档中的从配置文件创建节点组Config 文件架构

    --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: cn-north-1 version: '1.21' iam: withOIDC: true nodeGroups: - name: ng-bottlerocket instanceType: m5.large desiredCapacity: 3 amiFamily: Bottlerocket ami: auto-ssm iam: attachPolicyARNs: - arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy - arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore ssh: allow: true publicKeyName: YOUR_EC2_KEYPAIR_NAME
  2. 使用以下命令部署您的节点。

    eksctl create cluster --config-file=bottlerocket.yaml

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

    [✔] created 1 nodegroup(s) in cluster "my-cluster"
  3. (可选)使用 Amazon EBS CSI 插件在 Bottlerocket 节点上创建 Kubernetes 持久性卷。默认 Amazon EBS 驱动程序依赖于一些 Bottlerocket 中不包含的文件系统工具。有关使用驱动程序创建存储类的更多信息,请参阅 Amazon EBS CSI 驱动程序

  4. (可选)kube-proxy 默认将 nf_conntrack_max 内核参数设置为默认值,该值可能与 Bottlerocket 最初在启动时设置的值不同。要保留 Bottlerocket 的原定设置,请使用以下命令编辑 kube-proxy 配置。

    kubectl edit -n kube-system daemonset kube-proxy

    添加 --conntrack-max-per-core--conntrack-min to the kube-proxy 实际参数,如以下示例所示。设置为 0 意味着没有变化。

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

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