如何使用 Bottlerocket AMI 在 Amazon EKS 中创建托管节点组?

2 分钟阅读
0

我想学习如何使用 Bottlerocket 亚马逊机器映像(AMI)和 eksctl 在 Amazon Elastic Kubernetes Service(Amazon EKS)中创建 Bottlerocket 托管节点组。

解决方法

先决条件

在执行解决方案中的步骤之前,请确认您使用的 eksctl 的版本是 0.124.0 或更高版本。

要检查版本,请运行以下命令:

$ eksctl version

创建一个 bottlerocket.yaml 文件

打开您安装 eksctl 的终端。然后,使用以下示例创建并保存 bottlerocket.yaml 文件。

注意:

  • mybottlerocket-cluster 替换为您的集群名称。该名称只能包含连字符和字母数字字符(区分大小写)。它必须以字母字符开头,且长度不能超过 100 个字符。
  • 用您的节点组的名称替换 bottlerocket-nodegroup。该名称只能包含连字符和字母数字字符(区分大小写)。它必须以字母字符开头,且长度不能超过 100 个字符。
  • 指定实例类型。例如,要在 Arm 实例上部署,请将 m5.xlarge 替换为 Arm 实例类型。
  • eks_bottlerocket 替换为 Amazon Elastic Compute Cloud(Amazon EC2)SSH 密钥对的名称。启动节点后,使用 SSH 连接到它们。
    **注意:**如果您没有 Amazon EC2 SSH 密钥对,请在 AWS 管理控制台中创建一对。有关详细信息,请参阅 Amazon EC2 密钥对和 Amazon EC2 实例
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
  name: mybottlerocket-cluster
  region: us-west-2
  version: '1.27'

managedNodeGroups:
  - name: bottlerocket-nodegroup
    instanceType: m5.xlarge
    minSize: 2
    maxSize: 4
    desiredCapacity: 3
    amiFamily: Bottlerocket
    labels: { role: br-worker }
    tags:
       nodegroup-type: Bottlerocket
    ssh:
      allow: true
      publicKeyName: eks_bottlerocket

**注意:**您可以为通用型、计算优化型、内存优化型和存储优化型实例类型创建 BottleRocket 托管节点组。Bottlerocket AMI 不支持加速型计算实例类型。

创建节点组并在 EKS 集群中发布其节点

  1. 运行以下 eksctl 命令来创建节点组:

    $ eksctl create nodegroup -f bottlerocket.yaml[✔]  created 1 nodegroup(s) in cluster "mybottlerocket-cluster"
  2. 在 EKS 集群中发布节点和您的属性:

    $ kubectl get nodes -o=custom-columns=NODE:.metadata.name,ARCH:.status.nodeInfo.architecture,OS-Image:.status.nodeInfo.osImage,OS:.status.nodeInfo.operatingSystemNODE                                          ARCH    OS-Image                                OS
    ip-192-168-xx-xx.us-west-2.compute.internal   amd64   Bottlerocket OS 1.17.0 (aws-k8s-1.27)   linux
    ip-192-168-xx-xx.us-west-2.compute.internal   amd64   Bottlerocket OS 1.17.0 (aws-k8s-1.27)   linux

连接到 Bottlerocket AMI 节点(可选)

通过 AWS Systems Manager 会话连接到新的 Bottlerocket 节点。AWS Systems Manager Agent(SSM Agent)在节点上运行,因为您已经为节点实例角色启用了 Systems Manager 权限。

运行以下命令以找到实例 ID:

$ kubectl get nodes -o=custom-columns=NODE:.metadata.name,ARCH:.status.nodeInfo.architecture,OS-Image:.status.nodeInfo.osImage,OS:.status.nodeInfo.operatingSystem,InstanceId:.spec.providerIDNODE                                           ARCH    OS-Image                                OS      InstanceId
ip-192-168-xx-xx.us-west-2.compute.internal    amd64    Bottlerocket OS 1.17.0 (aws-k8s-1.27)   linux   aws:///us-west-2b/i-0cf32f13f60c2f501
ip-192-168-xx-xx.us-west-2.compute.internal    amd64    Bottlerocket OS 1.17.0 (aws-k8s-1.27)   linux   aws:///us-west-2b/i-0f31328a5d21cb092
ip-192-168-xx-xx.us-west-2.compute.internal    amd64    Bottlerocket OS 1.17.0 (aws-k8s-1.27)   linux   aws:///us-west-2b/i-08c218b729ecf9b5d

启动 Systems Manager 会话

默认情况下,Bottlerocket 有一个在单独的 containerd 实例上运行的控制容器。此容器运行 SSM 代理,允许您在 Bottlerocket 节点上运行命令或启动交互式 Shell 会话。

选择一个实例,然后启动 Systems Manager 会话。以下示例显示了 i-0cf32f13f60c2f501 实例的 Systems Manager 会话命令:

$ aws ssm start-session --target i-0cf32f13f60c2f501 --region us-west-2
Starting session with SessionId: EKS-Test-User-0077e4c89ad2bc888
          Welcome to Bottlerocket's control container!

相关信息

启动自行管理的 Bottlerocket 节点

什么是 Amazon EKS?

Amazon EC2 实例类型

AWS 官方
AWS 官方已更新 1 年前