このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? このページの下部までスクロールし、[GitHub でこのページの編集] を選択します。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
セルフマネージド Bottlerocket ノードを作成する
注記
マネージド型ノードグループでは、ユースケースにいくつかの利点がある場合があります。詳細については、「マネージドノードグループを使用してノードライフサイクルを簡素化する」を参照してください。
このトピックでは、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
を使用して Bottlerocket ノードを起動するには
この手順には、eksctl
バージョン 0.191.0
以降が必要です。お使いのバージョンは、以下のコマンドを使用して確認できます。
eksctl version
eksctl
のインストールまたはアップグレードの手順については、eksctl
ドキュメントの「インストール
注記
この手順は、eksctl
で作成されたクラスターに対してのみ機能します。
-
次のコンテンツをデバイスにコピーします。
を自分のクラスター名に置き換えます。この名前には、英数字 (大文字と小文字が区別されます) とハイフンのみを使用できます。先頭の文字は英数字である必要があります。また、100 文字より長くすることはできません。名前は、クラスターを作成する AWS リージョン および AWS アカウント 内で一意である必要があります。my-cluster
をノードグループの名前に置き換えます。ノードグループ名は 63 文字以下である必要があります。先頭は文字または数字でなければなりませんが、残りの文字にはハイフンおよびアンダースコアを含めることもできます。Arm インスタンスにデプロイするには、ng-bottlerocket
を Arm インスタンスタイプに置き換えます。m5.large
を、起動後に、SSH を使用してノードに接続するときに使用できる Amazon EC2 SSH キーペアの名前に置き換えます。Amazon EC2 キーペアをまだ持っていない場合は、AWS Management Console で作成できます。詳細については、「Amazon EC2 ユーザーガイド」の「Amazon EC2 キーペア」を参照してください。残りすべてのmy-ec2-keypair-name
を独自の値に置き換えてください。置き換えが完了したら、変更したコマンドを実行してexample values
bottlerocket.yaml
ファイルを作成します。Arm Amazon EC2 インスタンスタイプを指定する場合は、デプロイする前に Amazon EKS 最適化 Arm Amazon Linux AMI の考慮事項を確認してください。カスタム AMI を使用したデプロイの手順については、「GitHub」の「Bottlerocket の構築
」と、「 eksctl
ドキュメント」の「カスタム AMI のサポート」を参照してください。マネージド型ノードグループをデプロイするには、起動テンプレートを使用してカスタム AMI をデプロイします。詳細については、「起動テンプレートを使用してマネージドノードをカスタマイズする」を参照してください。 重要
ノードグループを AWS Outposts、AWS Wavelength、または AWS Local Zones サブネットにデプロイする場合、クラスターの作成時に AWS Outposts、AWS Wavelength、または AWS Local Zone のサブネットを渡さないでください。次の例では、サブネットを指定する必要があります。詳細については、
eksctl
ドキュメントの「設定ファイルからノードグループを作成する」と「Config ファイルのスキーマ 」を参照してください。
をクラスターのある AWS リージョン に置き換えます。region-code
cat >bottlerocket.yaml <<EOF --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name:
my-cluster
region:region-code
version:'1.31'
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 のデフォルト設定を保持するには、次のコマンドを使用して 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) へのアクセスを必要としていません。
詳細については、「ワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する
」を参照してください。