このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
注記
マネージド型ノードグループでは、ユースケースにいくつかの利点がある場合があります。詳細については、「マネージドノードグループを使用してノードライフサイクルを簡素化する」を参照してください。
このトピックでは、Amazon EKS クラスターに登録している Bottlerocketeksctl
ドキュメント」の「カスタム AMI のサポート
インプレースアップグレードについて詳しくは、GitHub の「Bottlerocket Update Operator
重要
-
Amazon EKS ノードは標準の Amazon EC2 インスタンスであり、通常の Amazon EC2 インスタンス価格に基づいて請求されます。詳細については、「Amazon EC2 料金
」を参照してください。 -
AWS Outposts 上の Amazon EKS 拡張クラスターで Bottlerocket ノードを起動できますが、AWS Outposts 上のローカルクラスターでは起動できません。詳細については、「AWS Outposts を使用して Amazon EKS をオンプレミスにデプロイする」を参照してください。
-
x86
または Arm プロセッサを使用して Amazon EC2 インスタンスにデプロイできます。ただし、Inferentia チップがあるインスタンスにはデプロイできません。 -
Bottlerocket は AWS CloudFormation と互換性があります。ただし、Amazon EKS のBottlerocket ノードをデプロイするためにコピーできる公式の CloudFormation テンプレートはありません。
-
Bottlerocket のイメージには、SSH サーバーやシェルは付属していません。SSH で管理者コンテナを有効にし、ユーザーデータとともにブートストラップの設定ステップを渡すために、帯域外のアクセス方式を使用できます。詳細については、「GitHub」の「bottlerocket README.md
」のセクションを参照してください。
この手順には、eksctl
バージョン 0.199.0
以降が必要です。お使いのバージョンは、以下のコマンドを使用して確認できます。
eksctl version
eksctl
のインストールまたはアップグレードの手順については、 eksctl
ドキュメントの「インストールeksctl
で作成されたクラスターでのみ機能します。
+ 次のコンテンツをデバイスにコピーします。my-cluster
の部分は、自分のクラスター名に置き換えます。この名前には、英数字 (大文字と小文字が区別されます) とハイフンのみを使用できます。先頭の文字は英数字である必要があります。また、100 文字より長くすることはできません。名前は、クラスターを作成する AWS リージョンおよび AWS アカウント内で一意である必要があります。ng-bottlerocket
をノードグループの名前に置き換えます。ノードグループ名は 63 文字以下である必要があります。先頭は文字または数字でなければなりませんが、残りの文字にはハイフンおよびアンダースコアを含めることもできます。Arm インスタンスにデプロイするには、m5.large
を Arm インスタンスタイプに置き換えます。my-ec2-keypair-name
を、起動後に、SSH を使用してノードに接続するときに使用できる Amazon EC2 SSH キーペアの名前に置き換えます。Amazon EC2 キーペアをまだ持っていない場合は、AWS Management Console で作成できます。詳細については、「Amazon EC2 ユーザーガイド」の「Amazon EC2 キーペア」を参照してください。残りのサンプル値
はすべて独自の値に置き換えます。置き換えが完了したら、変更したコマンドを実行して bottlerocket.yaml
ファイルを作成します。
+ Arm Amazon EC2 インスタンスタイプを指定する場合は、デプロイする前に「Amazon EKS 最適化 Arm Amazon Linux AMI」の考慮事項を確認してください。カスタム AMI を使用したデプロイの手順については、「GitHub」の「Bottlerocket の構築eksctl
ドキュメント」の「カスタム AMI のサポート
+ 重要: ノードグループを AWS Outposts、AWS Wavelength、または AWS Local Zone サブネットにデプロイする場合、クラスターの作成時に AWS Outposts、AWS Wavelength、または AWS Local Zone サブネットは渡さないでください。次の例では、サブネットを指定する必要があります。詳細については、eksctl
ドキュメントの「設定ファイルからノードグループを作成するregion-code
を、クラスターのある AWS リージョンに置き換えます。
+
cat >bottlerocket.yaml <<EOF
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: my-cluster
region: region-code
version: '1.30'
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
- arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
ssh:
allow: true
publicKeyName: my-ec2-keypair-name
EOF
-
次のコマンドでノードをデプロイします。
eksctl create nodegroup --config-file=bottlerocket.yaml
出力例は次のとおりです。
ノードの作成中に、複数の行が出力されます。出力の最後の行は、次のサンプル行が表示されます。
[✔] created 1 nodegroup(s) in cluster "my-cluster"
-
(オプション) Amazon EBS CSI プラグイン
を使用して、Bottlerocket ノード上に Kubernetes の永続ボリューム を作成します。デフォルトの Amazon EBS ドライバーは、Bottlerocket に含まれていないファイルシステムツールに依存します。ドライバーを使用してストレージクラスを作成する方法の詳細については、「Amazon EBS を利用して Kubernetes ボリュームを保存する」を参照してください。 -
(オプション)
kube-proxy
では、デフォルトで、最初に Bottlerocket がブート時に設定するものとは異なるデフォルト値にnf_conntrack_max
カーネルパラメータが設定されています。Bottlerocket’s default setting, edit the `kube-proxy の設定を維持するには、次のコマンドを使用します。kubectl edit -n kube-system daemonset kube-proxy
次の例にある
kube-proxy
引数に、--conntrack-max-per-core
と--conntrack-min
を追加します。0
の設定は、変更がないことを意味します。containers: - command: - kube-proxy - --v=2 - --config=/var/lib/kube-proxy-config/config - --conntrack-max-per-core=0 - --conntrack-min=0
-
(オプション) サンプルアプリケーションをデプロイして Bottlerocket ノードをテストします。
-
次の条件が true の場合、IMDS への Pod アクセスをブロックすることをお勧めします。
-
すべての Kubernetes サービスアカウントに IAM ロールを割り当てて、Pods が必要最小限のアクセス許可のみを持つように計画しています。
-
クラスター内の Pods が、現在の AWS リージョンの取得といったその他の理由で Amazon EC2 インスタンスメタデータサービス (IMDS) へのアクセスを必要としていません。
詳細については、「ワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する
」を参照してください。 -