起動テンプレートを使用してマネージドノードをカスタマイズする
自分の起動テンプレートを使用することで、マネージド型ノードをデプロイでき、最高レベルのカスタマイズを実現できます。起動テンプレートを使用すると、次のような機能が可能となります。
-
ノードをデプロイする時に、追加の kubelet
引数などのブートストラップ引数を提供できます。 -
ノードに割り当てられた IP アドレスとは異なる CIDR ブロックから、IP アドレスを Pods に割り当てます。
-
独自のカスタム AMI をノードにデプロイします。
-
独自のカスタム CNI をノードにデプロイします。
最初にマネージドノードグループを作成するときに独自の起動テンプレートを指定する場合にも、後で高い柔軟性を得ることができます。自分の起動テンプレートを使用してマネージド型ノードグループをデプロイする限り、同じ起動テンプレートの異なるバージョンとして繰り返し更新できます。ノードグループを別のバージョンの起動テンプレートに更新すると、指定した起動テンプレートバージョンの新しい設定と一致するように、グループ内のすべてのノードがリサイクルされます。
マネージド型ノードグループは、常に Amazon EC2 Auto Scaling グループで使用する起動テンプレートでデプロイされます。起動テンプレートを指定しない場合、Amazon EKS API はアカウントのデフォルト値を使用して起動テンプレートを自動的に作成します。ただし、自動生成された起動テンプレートを変更することは推奨しません。さらに、カスタム起動テンプレートを使用していない既存のノードグループは、直接更新できません。代わりに、カスタム起動テンプレートを使用して、新しいノードグループを作成する必要があります。
起動テンプレート設定の基本
AWS Management Console、AWS CLI、または AWS SDK を使用して、Amazon EC2 Auto Scaling 起動テンプレートを作成できます。詳細については、「Amazon EC2 Auto Scaling ユーザーガイド」の「Auto Scaling グループの起動テンプレートを作成する」を参照してください。起動テンプレートの一部の設定は、マネージド型ノードで使われている設定と似ています。起動テンプレートを使用してノードグループをデプロイまたは更新する場合、一部の設定はノードグループ設定または起動テンプレートのいずれかで指定する必要があります。両方の場所で設定を指定しないでください。存在してはいけない場所に設定が存在する場合、ノードグループの作成や更新などの操作は失敗します。
次の表に、起動テンプレートで禁止されている設定を示します。また、マネージド型ノードグループの設定に必要な同様の設定がある場合は、その設定も示します。リスト化されている設定は、コンソールに表示される設定です。AWS CLI と SDK では、類似するが異なる名前がある場合があります。
起動テンプレート — 禁止 | Amazon EKS ノードグループ設定 |
---|---|
[ネットワークインターフェイス] ([ネットワークインターフェイスを追加]) の下の [サブネット] |
[Specify networking] (ネットワーキングを指定) ページの [Node group network configuration] (ノードグループのネットワーク設定) の下の [Subnets] (サブネット) |
[高度な詳細] の下の [IAM インスタンスプロファイル] |
[Configure Node group] (ノードグループを設定) ページの [Node group configuration] (ノードグループ設定) の下の [Node IAM role] (ノード IAM ロール) |
[高度な詳細] の下の [シャットダウン動作] および [停止 – 休止動作]。起動テンプレートのどちらの設定でも、[起動テンプレート設定に含めない] のデフォルトを保持します。 |
同等のものはありません。Amazon EKS は、Auto Scaling グループではなく、インスタンスのライフサイクルを管理する必要があります。 |
次の表に、マネージド型ノードグループ構成で禁止される設定を示します。また、起動テンプレートで必要な同様の設定がある場合は、その設定も示します。リスト化されている設定は、コンソールに表示される設定です。AWS CLI と SDK とで名前が似ている場合があります。
Amazon EKS ノードグループ設定 — 禁止 | 起動テンプレート |
---|---|
(起動テンプレートでカスタム AMI を指定した場合のみ) [Set compute and scaling configuration] (コンピューティングとスケーリングの設定を実行) ページの [Node Group compute configuration] (ノードグループのコンピューティング設定) の下の [AMI type] (AMI タイプ) — [Specified in launch template] (起動テンプレートで指定) と、指定した AMI ID がコンソールに表示されます。 起動テンプレートで [Application and OS Images (Amazon Machine Image)] (アプリケーションと OS のイメージ (Amazon マシンイメージ)) が指定されていない場合は、ノードグループ設定で AMI を選択できます。 |
[Launch template contents] (起動テンプレートのコンテンツ) での [Application and OS Images (Amazon Machine Image)] (アプリケーションと OS のイメージ (Amazon マシンイメージ)) - 次のいずれかの要件がある場合は、ID を指定する必要があります。 * カスタム AMI の使用。「AMI を指定するAMI を指定する」に記載されている要件を満たさない AMI を指定すると、ノードグループのデプロイが失敗します。* Amazon EKS 最適化 AMI に含まれる |
[Set compute and scaling configuration] (コンピューティングとスケーリングの設定を実行) ページの [Node Group compute configuration] (ノードグループのコンピューティング設定) の下の [Disk size] (ディスクサイズ) — [Specified in launch template] (起動テンプレートで指定) がコンソールに表示されます。 |
[ストレージ (ボリューム)] ([新しいボリュームの追加]) の下の [サイズ]。これを起動テンプレートで指定する必要があります。 |
[Specify Networking] (ネットワーキングを指定) ページの [Node group configuration] (ノードグループ設定) の下の [SSH key pair] (SSH キーペア) — コンソールに起動テンプレートで指定したキーまたは [Not specified in launch template] (起動テンプレートで指定されていません) が表示されます。 |
[キーペア (ログイン)] の下の [キーペア名]。 |
起動テンプレートを使用する場合は、リモートアクセスを許可するソースセキュリティグループを指定できません。 |
インスタンスの場合、[ネットワーク設定] の下の [セキュリティグループ]、または [ネットワークインターフェイス] ([ネットワークインターフェイスを追加])の下の [セキュリティグループ]。両方設定することはできません。詳細については、「カスタムセキュリティグループを使用する」を参照してください。 |
注記
-
起動テンプレートを使用してノードグループをデプロイする場合は、起動テンプレート内の [起動テンプレートのコンテンツ] で 0 または 1 の [インスタンスタイプ] を指定します。または、コンソールの [コンピューティングとスケーリングの構成を設定する] ページにある [インスタンスタイプ] で 0 から 20 までのインスタンスタイプを指定できます。または、Amazon EKS API を使用する他のツールを使用して行うこともできます。起動テンプレートでインスタンスタイプを指定し、その起動テンプレートを使用してノードグループをデプロイする場合、コンソールや、Amazon EKS API を使用する他のツールを使用してインスタンスタイプを指定することはできません。起動テンプレートやコンソール、または Amazon EKS API を使用する他のツールを使用してインスタンスタイプを指定しない場合は、
t3.medium
インスタンスタイプが使用されます。ノードグループがスポットキャパシティータイプを使用している場合は、コンソールを使用して複数のインスタンスタイプを指定することをお勧めします。詳細については、「マネージド型ノードグループのキャパシティータイプ」を参照してください。 -
ノードグループにデプロイするコンテナが、インスタンスメタデータサービスバージョン 2 を使用している場合は、起動テンプレートの [メタデータレスポンスのホップ制限] を
2
に設定してください。詳細については、「Amazon EC2 ユーザーガイド」の「Instance metadata and user data」(インスタンスメタデータとユーザーデータ) を参照してください。カスタム起動テンプレートを使用せずにマネージド型ノードグループをデプロイする場合、この値はデフォルトの起動テンプレートのノードグループに対して自動的に設定されます。
Amazon EC2 インスタンスへのタグ付け
起動テンプレートの TagSpecification
パラメータを使用して、ノードグループの Amazon EC2 インスタンスに適用するタグを指定します。CreateNodegroup
または UpdateNodegroupVersion
API を呼び出す IAM エンティティには、ec2:RunInstances
および ec2:CreateTags
へのアクセス許可が必要です。また、起動テンプレートにタグが追加される必要があります。
カスタムセキュリティグループを使用する
起動テンプレートでカスタムの Amazon EC2 セキュリティグループを指定し、ノードグループ内のインスタンスに適用できます。これは、インスタンスレベルのセキュリティグループのパラメータ内か、ネットワークインターフェイス設定のパラメータの一部として指定できます。しかし、インスタンスレベルとネットワークインタフェイス、両方のセキュリティグループを指定して、起動テンプレートを作成することはできません。マネージドノード型グループでカスタムセキュリティグループを使用する際に適用される、次の条件を考慮してください。
-
AWS Management Console を使用する場合、Amazon EKS では、単一のネットワークインターフェイス仕様の起動テンプレートのみ使用できます。
-
デフォルトでは、Amazon EKS はクラスターの Amazon EKS セキュリティグループ要件を表示するクラスターセキュリティグループをノードグループ内のインスタンスに追加して、ノードとコントロールプレーンとの間の通信を容易にします。前述のいずれかのオプションを使用して、起動テンプレートでカスタムセキュリティグループを指定した場合、Amazon EKS はクラスターセキュリティグループを追加しません。したがって、セキュリティグループのインバウンドルールとアウトバウンドルールで、クラスターのエンドポイントとの通信が有効になっていることを確認する必要があります。セキュリティグループのルールが正しくない場合、ワーカーノードはクラスターに参加できません。セキュリティグループルールの詳細については、クラスターの Amazon EKS セキュリティグループ要件を表示するを参照してください。
-
ノードグループ内のインスタンスへの SSH アクセスが必要な場合は、そのアクセスを許可するセキュリティグループを含めてください。
Amazon EC2 ユーザーデータ
起動テンプレートには、カスタムユーザーデータのセクションが含まれています。このセクションでは、個々のカスタム AMI を手動で作成しなくても、ノードグループの構成設定を指定できます。Bottlerocket で使用できる設定の詳細については、「GitHub」の「Using user data
cloud-init
を使用すると、インスタンス起動時に起動テンプレート内の Amazon EC2 ユーザーデータを提供できます。詳細については、「cloud-init ドキュメント
マネージド型ノードグループで使用される起動テンプレートの Amazon EC2 ユーザーデータは、Amazon Linux AMI の場合 MIME マルチパートアーカイブkubelet
を起動または変更するコマンドをユーザーデータに指定しないでください。これは Amazon EKS によってマージされたユーザーデータの一部として実行されます。ノードへのラベル設定などの一部の kubelet
パラメータは、マネージド型ノードグループ API 経由で直接設定できます。
注記
手動での起動や、カスタムの設定パラメータの受け渡しなど、高度な kubelet
のカスタマイズについては、AMI を指定するを参照してください。起動テンプレートでカスタム AMI ID が指定されている場合、Amazon EKS はユーザーデータをマージしません。
次の詳細は、ユーザーデータセクションについて説明しています。
- Amazon Linux 2 ユーザーデータ
-
複数のユーザーデータブロックと単一の MIME マルチパートファイルを組み合わせることができます。例えば、カスタムパッケージをインストールするユーザーデータのシェルスクリプトを、Docker デーモンを設定するクラウドブートフックに組み合わせることができます。MIME マルチパートファイルには次のコンポーネントが含まれます。
-
コンテンツタイプとパートバウンダリの宣言:
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
-
MIME バージョンの宣言:
MIME-Version: 1.0
-
次のコンポーネントを含む 1 つ以上のユーザーデータブロック:
-
ユーザーデータブロックの始まりを示す開始境界:
--==MYBOUNDARY==
-
ブロックのコンテンツの種類の宣言:
Content-Type: text/cloud-config; charset="us-ascii"
。コンテンツタイプの詳細については、cloud-initのドキュメントを参照してください。 -
ユーザーデータのコンテンツ (例えば、シェルコマンドや
cloud-init
ディレクティブのリスト)。 -
MIME マルチパートファイルの終わりを示す、終了境界:
--==MYBOUNDARY==--
-
自分で MIME マルチパートファイルを作成するときに使用できる例は、次の通りです。
+
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash echo "Running custom user data script" --==MYBOUNDARY==--
-
- Amazon Linux 2023 ユーザーデータ
-
Amazon Linux 2023 (AL2023) では、YAML 設定スキーマを使用する新しいノード初期化プロセス
nodeadm
が導入されています。セルフマネージド型ノードグループまたは起動テンプレートを持つ AMI を使用している場合は、新しいノードグループの作成時に追加のクラスターメタデータを明示的に指定する必要があります。最低限必要なパラメータの例を以下に示します。ここで、 apiServerEndpoint
、certificateAuthority
、サービスのcidr
が必要になります。--- apiVersion: node.eks.aws/v1alpha1 kind: NodeConfig spec: cluster: name: my-cluster apiServerEndpoint: https://example.com certificateAuthority: Y2VydGlmaWNhdGVBdXRob3JpdHk= cidr: 10.100.0.0/16
通常、この設定はユーザーデータにそのまま設定するか、MIME マルチパートドキュメントに埋め込まれます。
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="BOUNDARY" --BOUNDARY Content-Type: application/node.eks.aws --- apiVersion: node.eks.aws/v1alpha1 kind: NodeConfig spec: [...] --BOUNDARY--
AL2 では、これらのパラメータからのメタデータは Amazon EKS
DescribeCluster
API コールから検出されていました。AL2023 では、ノードの大規模なスケールアップ中に API コールによってスロットリングが発生するリスクがあるため、この動作が変更されました。この変更は、起動テンプレートのないマネージド型ノードグループを使用している場合や、Karpenter を使用している場合には影響しません。certificateAuthority
およびサービスcidr
の詳細については、「Amazon EKS API リファレンス」の「DescribeCluster」を参照してください。 - Bottlerocket ユーザーデータ
-
Bottlerocket では、ユーザーデータは TOML 形式で構造化されています。Amazon EKS が提供するユーザーデータとマージするユーザーデータを提供できます。たとえば、追加の
kubelet
設定を指定できます。[settings.kubernetes.system-reserved] cpu = "10m" memory = "100Mi" ephemeral-storage= "1Gi"
サポートされる設定について詳しくは、Bottlerocket のドキュメント
を参照してください。ユーザーデータにノードラベルと特定のノードで Pods がスケジュールされないようにするテイントを設定できます。ただし、代わりにノードグループ内にこれらを設定することをお勧めします。この場合、Amazon EKS によりこれらの設定が適用されます。 ユーザーデータをマージしても、書式設定は保持されませんが、コンテンツは同じままです。ユーザーデータに指定した設定は、Amazon EKS によって構成された設定よりも優先されます。したがって、
settings.kubernetes.max-pods
またはsettings.kubernetes.cluster-dns-ip
を設定した場合、ユーザーデータのこれらの値がノードに適用されます。Amazon EKS で、有効な TOML がすべてサポートされるわけではありません。以下は、サポートされていない既知の形式の一覧です。
-
引用符で囲まれたキー内の引用符:
'quoted "value"' = "value"
-
値内のエスケープされた引用符:
str = "I’m a string. \"You can quote me\""
-
浮動小数点と整数の混在:
numbers = [ 0.1, 0.2, 0.5, 1, 2, 5 ]
-
配列内の混合型:
contributors = ["foo@example.com
", { name = "Baz", email = "baz@example.com " }] -
引用符付きキーを含む括弧で囲まれたヘッダー:
[foo."bar.baz"]
-
- Windows ユーザーデータ
-
Windows ユーザーデータは PowerShell コマンドを使用します。マネージド型ノードグループを作成すると、カスタムユーザーデータが Amazon EKS マネージドユーザーデータと結合されます。PowerShell コマンドが最初に表示され、その後にマネージドユーザーデータコマンドが続きます。これらはすべて 1 つの
<powershell></powershell>
タグ内にあります。注記
起動テンプレートに AMI ID が指定されていない場合は、ユーザーデータで Windows Amazon EKS ブートストラップスクリプトを使用して Amazon EKS を設定しないでください。
ユーザーデータの例は次のとおりです。
<powershell> Write-Host "Running custom user data script" </powershell>
AMI を指定する
以下のいずれかの要件がある場合は、起動テンプレートの ImageId
フィールドで AMI ID を指定します。追加情報については、要件を選択してください。
ブートストラップとは、インスタンスの起動時に実行できるコマンドの追加を表す用語です。例えば、ブートストラップでは、追加の kubeleteksctl
を使用して引数を bootstrap.sh
スクリプトに渡すことができます。または、起動テンプレートのユーザーデータセクションに情報を指定することでこれを行うことができます。
- 起動テンプレートを指定しない eksctl
-
my-nodegroup.yaml
という名前のファイルを以下の内容で作成します。各サンプル値
は独自の値に置き換えます。--apiserver-endpoint
、--b64-cluster-ca
、および--dns-cluster-ip
引数はオプションです。しかし、これらを定義すると、bootstrap.sh
スクリプトによるdescribeCluster
呼び出しを避けることができます。これは、プライベートクラスターのセットアップや、ノードを頻繁にスケールインおよびスケールアウトするクラスターで役立ちます。bootstrap.sh
スクリプトの詳細については、「GitHub」で「bootstrap.sh」ファイルを参照してください。 -
必須となる引数は、クラスター名 (
my-cluster
) のみです。 -
ami-
の最適化された AMI ID を取得するには1234567890abcdef0
, you can use the tables in the following sections:-
推奨 Amazon Linux AMI ID を取得する推奨 Amazon Linux AMI ID を取得する
-
推奨 Bottlerocket AMI ID を取得する推奨 Bottlerocket AMI ID を取得する
-
推奨 Microsoft Windows AMI ID を取得する推奨 Microsoft Windows AMI ID を取得する
-
-
クラスターの
certificate-authority
を取得するには、次のコマンドを実行します。aws eks describe-cluster --query "cluster.certificateAuthority.data" --output text --name my-cluster --region region-code
-
クラスターの
api-server-endpoint
を取得するには、次のコマンドを実行します。aws eks describe-cluster --query "cluster.endpoint" --output text --name my-cluster --region region-code
-
最終的に、
--dns-cluster-ip
の値はサービス CIDR を示す.10
となります。クラスターのservice-cidr
を取得するには、次のコマンドを実行します。例えば、戻り値がipv4 10.100.0.0/16
であれば、自分の値は10.100.0.10
です。aws eks describe-cluster --query "cluster.kubernetesNetworkConfig.serviceIpv4Cidr" --output text --name my-cluster --region region-code
-
この例では、カスタムの
max-pods
値を設定するためにkubelet
引数を指定します。その際、Amazon EKS 最適化 AMI に含まれているbootstrap.sh
スクリプトを使用します。ノードグループ名は 63 文字以下である必要があります。先頭は文字または数字でなければなりませんが、残りの文字にはハイフンおよびアンダースコアを含めることもできます。my-max-pods-value
を選択する方法については、「各 Amazon EC2 インスタンスタイプの Amazon EKS 推奨最大 Pods 数」を参照してください。--- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: my-cluster region: region-code managedNodeGroups: - name: my-nodegroup ami: ami-1234567890abcdef0 instanceType: m5.large privateNetworking: true disableIMDSv1: true labels: { x86-al2-specified-mng } overrideBootstrapCommand: | #!/bin/bash /etc/eks/bootstrap.sh my-cluster \ --b64-cluster-ca certificate-authority \ --apiserver-endpoint api-server-endpoint \ --dns-cluster-ip service-cidr.10 \ --kubelet-extra-args '--max-pods=my-max-pods-value' \ --use-max-pods false
利用可能な
eksctl
config
ファイルオプションについては、「eksctl
ドキュメント」の「Config file schema」(Config ファイルスキーマ) を参照してください。 eksctl
ユーティリティは引き続き起動テンプレートを作成し、config
ファイルに提供したデータを使用してユーザーデータを設定します。次のコマンドを使用して、ノードグループを作成します。
eksctl create nodegroup --config-file=my-nodegroup.yaml
-
- 起動テンプレートのユーザーデータ
-
起動テンプレートのユーザーデータセクションで次の情報を指定します。各
サンプル値
は独自の値に置き換えます。--apiserver-endpoint
、--b64-cluster-ca
、および--dns-cluster-ip
引数はオプションです。しかし、これらを定義すると、bootstrap.sh
スクリプトによるdescribeCluster
呼び出しを避けることができます。これは、プライベートクラスターのセットアップや、ノードを頻繁にスケールインおよびスケールアウトするクラスターで役立ちます。bootstrap.sh
スクリプトの詳細については、「GitHub」で「bootstrap.sh」ファイルを参照してください。 -
必須となる引数は、クラスター名 (
my-cluster
) のみです。 -
クラスターの
certificate-authority
を取得するには、次のコマンドを実行します。aws eks describe-cluster --query "cluster.certificateAuthority.data" --output text --name my-cluster --region region-code
-
クラスターの
api-server-endpoint
を取得するには、次のコマンドを実行します。aws eks describe-cluster --query "cluster.endpoint" --output text --name my-cluster --region region-code
-
最終的に、
--dns-cluster-ip
の値はサービス CIDR を示す.10
となります。クラスターのservice-cidr
を取得するには、次のコマンドを実行します。例えば、戻り値がipv4 10.100.0.0/16
であれば、自分の値は10.100.0.10
です。aws eks describe-cluster --query "cluster.kubernetesNetworkConfig.serviceIpv4Cidr" --output text --name my-cluster --region region-code
-
この例では、カスタムの
max-pods
値を設定するためにkubelet
引数を指定します。その際、Amazon EKS 最適化 AMI に含まれているbootstrap.sh
スクリプトを使用します。my-max-pods-value
を選択する方法については、「各 Amazon EC2 インスタンスタイプの Amazon EKS 推奨最大 Pods 数」を参照してください。MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/x-shellscript; charset="us-ascii" #!/bin/bash set -ex /etc/eks/bootstrap.sh my-cluster \ --b64-cluster-ca certificate-authority \ --apiserver-endpoint api-server-endpoint \ --dns-cluster-ip service-cidr.10 \ --kubelet-extra-args '--max-pods=my-max-pods-value' \ --use-max-pods false --==MYBOUNDARY==--
-
ブートストラップとは、インスタンスの起動時に実行できるコマンドの追加を表す用語です。起動テンプレートを指定せずに、eksctl
を使用して引数を Start-EKSBootstrap.ps1
スクリプトに渡すことができます。または、起動テンプレートのユーザーデータセクションに情報を指定することでこれを行うことができます。
カスタム Windows AMI ID を指定する場合、次の考慮事項に留意してください。
-
起動テンプレートを使用し、必要なブートストラップコマンドをユーザーデータセクションに入力する必要があります。目的の Windows ID を取得するには、「最適化された Windows AMI を使用してノードを作成する最適化された Windows AMI を使用してノードを作成する」のテーブルを使用できます。
-
いくつかの制限と条件があります。例えば、
eks:kube-proxy-windows
を AWS IAM Authenticator 設定マップに追加する必要があります。詳細については、「AMI ID を指定する場合の制限と条件」を参照してください。
起動テンプレートのユーザーデータセクションで次の情報を指定します。各サンプル値
は独自の値に置き換えます。-APIServerEndpoint
、-Base64ClusterCA
、および -DNSClusterIP
引数はオプションです。しかし、これらを定義すると、Start-EKSBootstrap.ps1
スクリプトによる describeCluster
呼び出しを避けることができます。
-
必須となる引数は、クラスター名 (
my-cluster
) のみです。 -
クラスターの
certificate-authority
を取得するには、次のコマンドを実行します。aws eks describe-cluster --query "cluster.certificateAuthority.data" --output text --name my-cluster --region region-code
-
クラスターの
api-server-endpoint
を取得するには、次のコマンドを実行します。aws eks describe-cluster --query "cluster.endpoint" --output text --name my-cluster --region region-code
-
最終的に、
--dns-cluster-ip
の値はサービス CIDR を示す.10
となります。クラスターのservice-cidr
を取得するには、次のコマンドを実行します。例えば、戻り値がipv4 10.100.0.0/16
であれば、自分の値は10.100.0.10
です。aws eks describe-cluster --query "cluster.kubernetesNetworkConfig.serviceIpv4Cidr" --output text --name my-cluster --region region-code
-
その他の引数については、「ブートストラップスクリプトの設定パラメータ」を参照してください。
注記
カスタムサービス CIDR を使用している場合は、
-ServiceCIDR
パラメータを使用して指定する必要があります。そうしなければ、クラスター内の Pods の DNS 解決が失敗します。
<powershell> [string]$EKSBootstrapScriptFile = "$env:ProgramFiles\Amazon\EKS\Start-EKSBootstrap.ps1" & $EKSBootstrapScriptFile -EKSClusterName my-cluster ` -Base64ClusterCA certificate-authority ` -APIServerEndpoint api-server-endpoint ` -DNSClusterIP service-cidr.10 </powershell>
詳細については、「Amazon EC2 ユーザーガイド」の「Amazon マシンイメージ (AMI)」を参照してください。Amazon EKS AMI ビルド仕様には、Amazon Linux をベースにしたカスタム Amazon EKS AMI を構築するためのリソースと設定スクリプトが含まれています。詳細については、「GitHub」の「Amazon EKS AMI ビルド仕様
重要
AMI を指定する際、Amazon EKS ではユーザーデータをマージしません。代わりに、ノードのクラスターへの参加に必要な bootstrap
コマンドを、ユーザーが提供する必要があります。ノードがクラスターに参加できない場合、Amazon EKS CreateNodegroup
および UpdateNodegroupVersion
アクションも失敗します。
AMI ID を指定する場合の制限と条件
以下に、マネージド型ノードグループで AMI ID を指定する際の制限と条件を示します。
-
起動テンプレートで AMI ID を指定する場合と、AMI ID を指定しない場合は、新しいノードグループを作成して切り替える必要があります。
-
新しい AMI バージョンが利用可能になっても、コンソールでは通知を表示しません。ノードグループを新しい AMI バージョンに更新するには、更新された AMI ID で新しいバージョンの起動テンプレートを作成する必要があります。次に、新しい起動テンプレートバージョンでノードグループを更新する必要があります。
-
AMI ID を指定した場合は、API の次のフィールドを設定することはできません。
-
amiType
-
releaseVersion
-
version
-
-
AMI ID を指定する場合、API で設定されたすべての
taints
は非同期に適用されます。ノードがクラスターに参加する前にテイントを適用するには、--register-with-taints
コマンドラインフラグを使用してユーザーデータ内のkubelet
にテイントを渡す必要があります。詳細については、「Kubernetes ドキュメント」の「kubelet」を参照してください。 -
Windows マネージド型ノードグループのカスタム AMI ID を指定するとき、AWS IAM Authenticator 設定マップに
eks:kube-proxy-windows
を追加します。これは、DNS が正しく機能するために必要です。-
AWS IAM Authenticator 設定マップを編集用に開きます。
kubectl edit -n kube-system cm aws-auth
-
このエントリを、Windows ノードに関連付けられた各
rolearn
の下のgroups
リストに追加します。設定マップは aws-auth-cm-windows.yamlに似ているはずです。 - eks:kube-proxy-windows
-
ファイルを保存し、テキストエディタを終了します。
-