eksctl を使用して Bottlerocket Amazon マシンイメージ (Bottlerocket 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 ノードでコマンドを実行したり、インタラクティブなシェルセッションを開始したりできます。
1. 以前に特定したインスタンスの 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 とは