セルフマネージド型の Bottlerocket ノードの起動 - Amazon EKS

セルフマネージド型の Bottlerocket ノードの起動

このトピックでは、Amazon EKS クラスターに登録されている Bottlerocket ノードの Auto Scaling グループを起動するのに役立ちます。Bottlerocket は Linux ベースのオープンソースのオペレーティングシステムで、仮想マシンやベアメタル上でコンテナを実行するために AWS によって専用に構築されています。ノードがクラスターに参加したら、それらのノードに Kubernetes アプリケーションをデプロイ可能になります。Bottlerocket の詳細については、GitHub のドキュメントを参照してください。

重要

Amazon EKS ノードは標準の Amazon EC2 インスタンスであり、通常の Amazon EC2 インスタンス価格に基づいて請求されます。詳細については、「Amazon EC2 料金表」を参照してください。

重要
  • x86 または Arm プロセッサを使用して Amazon EC2 インスタンスにデプロイできますが、GPU または Inferentia チップを備えたインスタンスにはデプロイできません。

  • 次のリージョンにはデプロイできません。中国 (北京) (cn-north-1)、中国 (寧夏) (cn-northwest-1)、AWS GovCloud (米国東部) (us-gov-east-1) または AWS GovCloud (米国西部) (us-gov-west-1)。

  • ノードをデプロイする AWS CloudFormation テンプレートはありません。

eksctl を使用して Bottlerocket ノードを起動する

この手順には、eksctl バージョン 0.60.0 以降が必要です。 のバージョンは、以下のコマンドを使用して確認できます。

eksctl version

eksctl のインストールまたはアップグレードの詳細については、「eksctl のインストールまたはアップグレード」 を参照してください。

注記

この手順は、eksctl で作成されたクラスターに対してのみ機能します。

  1. 次の内容で、bottlerocket.yaml という名前のファイルを作成します。example values を自分の値に置き換えてください。Arm インスタンスにデプロイする場合は、m5.large を Arm インスタンスタイプに置き換えます。Arm Amazon EC2 インスタンスタイプを指定する場合は、デプロイする前に Amazon EKS 最適化 Arm Amazon Linux AMI の考慮事項を確認してください。カスタム AMI を使用してデプロイする場合、GitHub の「Building Bottlerocket」と、eksctl ドキュメントの「カスタム AMI サポート」を参照してください。マネージド型ノードグループをデプロイする場合は、起動テンプレートを使用してカスタム AMI をデプロイする必要があります。詳細については、「起動テンプレートのサポート」を参照してください。

    重要

    ノードグループを AWS Outposts、AWS Wavelength、または AWS Local Zones サブネットにデプロイする場合、クラスターの作成時に AWS Outposts、AWS Wavelength、または AWS ローカルゾーンのサブネットは渡されるべきではありません。また、次の例のように、サブネットを指定する必要があります。詳細については、eksctl ドキュメントの「設定ファイルからノードグループを作成する」と「Config ファイルのスキーマ」を参照してください。

    --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: us-west-2 version: '1.21' 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 ssh: allow: true publicKeyName: YOUR_EC2_KEYPAIR_NAME
  2. 次のコマンドでノードをデプロイします。

    eksctl create cluster --config-file=bottlerocket.yaml

    出力:

    ノードが作成されると、複数の行の出力が表示されます。出力の最後の行は、次のサンプル行が表示されます。

    [✔] created 1 nodegroup(s) in cluster "my-cluster"
  3. (オプション) Amazon EBS CSI プラグインを使用して、Bottlerocket ノード上に Kubernetes 永続ボリュームを作成します。デフォルトの Amazon EBS ドライバーは、Bottlerocket に含まれていないファイルシステムツールに依存します。ドライバーを使用してストレージクラスを作成する方法の詳細については、「Amazon EBS CSI ドライバー」を参照してください。

  4. (オプション) デフォルトでは、kube-proxynf_conntrack_max カーネルパラメータを、Bottlerocket がブート時に設定するものとは異なるデフォルト値に設定します。Bottlerocket のデフォルト値のままにしておきたい場合、次のコマンドを使用して kube-proxy 設定を編集します。

    kubectl edit -n kube-system daemonset kube-proxy

    次の例に示すように、--conntrack-max-per-core--conntrack-min to the kube-proxy の引数を追加します。0 の設定は、変更がないことを意味します。

    containers: - command: - kube-proxy - --v=2 - --config=/var/lib/kube-proxy-config/config - --conntrack-max-per-core=0 - --conntrack-min=0
  5. (オプション) サンプルアプリケーションをデプロイして Bottlerocket ノードをテストします。

  6. (オプション) ポッドには必要最低限のアクセス許可のみを与えるように、すべての Kubernetes サービスアカウントに IAM ロールを割当て、クラスター内のポッドが現在のリージョンを取得するなどの理由から Amazon EC2 のインスタンスメタデータサービス (IMDS) へのアクセス許可を必要としないようにしたい場合は、IMDS へのポッドのアクセスをブロックすることをお勧めします。詳細については、「サービスアカウントの IAM ロール」および「IMDS および Amazon EC2 インスタンスプロファイルの認証情報に対するアクセスの制限」を参照してください。