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

2 分钟阅读
0

我想使用 eksctl 启动 Bottlerocket Amazon Machine Image (Bottlerock AMI),以便在 Amazon Elastic Kubernetes Service (Amazon EKS) 中创建一个托管节点组。

解决方法

先决条件

1.    确保 eksctl 版本为 0.124.0 或更高版本。

2.    运行以下命令以检查您的版本:

$ eksctl version

创建 bottlerocket.yaml 文件

1.    打开安装了 eksctl 的终端。然后,完成以下步骤以创建新的文件。

2.    将 mybottlerocket-cluster 替换为集群名称。名称只能包含字母数字字符(区分大小写)和连字符。名称必须以字母字符开头,长度不能超过 100 个字符。

3.    将 bottlerocket-nodegroup 替换为节点组的名称。名称只能包含字母数字字符(区分大小写)和连字符。名称必须以字母字符开头,长度不能超过 100 个字符。

4.    指定实例类型。例如,要在 ARM 实例上部署,请将 m5.xlarge 替换为 ARM 实例类型。

5.    将 eks_bottlerocket 替换为 Amazon Elastic Compute Cloud (Amazon EC2) SSH 密钥对的名称。启动后,使用 SSH 连接到节点。

**注意:**如果您没有 Amazon EC2 SSH 密钥对,请在 AWS 管理控制台中创建一个。有关更多信息,请参阅 Amazon EC2 密钥对和 Linux 实例

6.    将示例中的所有剩余值替换为您自己的值。进行替换后,保存 bottlerocket.yaml 文件。

---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
 
metadata:
  name: mybottlerocket-cluster
  region: us-west-2
  version: '1.23'
 
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 托管的节点组。这些实例类型有静态缩放类(T 系列)、通用类(M 系列)、计算优化类(C 系列)、内存优化类(R 系列),以及基于 Graviton2 ARM 的实例类型。Bottlerocket AMI 不支持加速型计算实例类型(P、G、Inf1)。

有关 Bottlerocket AMI 的更多信息,请参阅 Amazon EKS 优化的 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.operatingSystem
NODE                                          ARCH    OS-Image                                OS
ip-192-168-xx-xx.us-west-2.compute.internal   amd64   Bottlerocket OS 1.11.1 (aws-k8s-1.23)   linux
ip-192-168-xx-xx.us-west-2.compute.internal   amd64   Bottlerocket OS 1.11.1 (aws-k8s-1.23)   linux
ip-192-168-xx-xx.us-west-2.compute.internal   amd64   Bottlerocket OS 1.11.1 (aws-k8s-1.23)   linux

连接到 Bottlerocket AMI 节点(可选)

通过 AWS Systems Manager (AWS SSM) 会话连接到新的 Bottlerocket 节点。AWS SSM 代理正在节点上运行,因为您已经为节点实例角色开启了 AWS SSM 权限。有关 AWS SSM 的更多信息,请参阅什么是 AWS Systems Manager?

1.    运行以下命令查找实例 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.providerID
NODE                                           ARCH    OS-Image                                OS      InstanceId
ip-192-168-xx-xx.us-west-2.compute.internal    amd64   Bottlerocket OS 1.11.1 (aws-k8s-1.23)   linux   aws:///us-west-2b/i-0cf32f13f60c2f501
ip-192-168-xx-xx.us-west-2.compute.internal    amd64   Bottlerocket OS 1.11.1 (aws-k8s-1.23)   linux   aws:///us-west-2b/i-0f31328a5d21cb092
ip-192-168-xx-xx.us-west-2.compute.internal    amd64   Bottlerocket OS 1.11.1 (aws-k8s-1.23)   linux   aws:///us-west-2b/i-08c218b729ecf9b5d

启动 SSM 会话

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

1.    选择您之前确定的一个实例并启动 SSM 会话。以下示例显示了 i-0cf32f13f60c2f501 实例的 SSM 会话命令:

$ 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?

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