このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
このトピックではアマゾン EKS クラスターに登録する Windows ノードの 自動スケーリング グループを起動する方法について説明します。ノードがクラスターに参加したら、それらのノードに Kubernetes アプリケーションをデプロイ可能になります。
重要
-
アマゾン EKS ノードは標準の アマゾン EC2 インスタンスであり、通常の アマゾン EC2 インスタンス価格に基づいて請求されます。詳細については「アマゾン EC2 料金
」を参照してください。 -
AWS アウトポスト 上の アマゾン EKS 拡張クラスターで Windows ノードを起動できますが、AWS アウトポスト 上のローカルクラスターでは起動できません。詳細については「AWS Outposts を使用して Amazon EKS をオンプレミスにデプロイする」を参照してください。
クラスターの Windows サポートを有効にします。Windows ノードグループを起動する前に、重要な考慮事項を確認することをお勧めします。詳細については「Windows サポートを有効にする」を参照してください。
次のいずれかを使用して、セルフマネージド型の Windows ノードを起動できます。
eksctl
eksctl
<2> を使用して自己管理型 Windows ノードを起動します。
この手順ではeksctl
をインストール済みで、お使いの eksctl
バージョンが 0.199.0
以上であることが必要です。お使いのバージョンは以下のコマンドを使用して確認できます。
eksctl version
eksctl
のインストールまたはアップグレードの手順についてはeksctl
ドキュメントの「インストール
注記
この手順はeksctl
で作成されたクラスターに対してのみ機能します。
-
(オプション) アマゾンEKS_CNI_Policy マネージド IAM ポリシー (
IPv4
クラスターがある場合) またはアマゾンEKS_CNI_IPv6_Policy
(IPv6
クラスターがある場合、ユーザー自身が作成したもの) が アマゾン EKS ノードの IAM 役割にアタッチされている場合、代わりに Kubernetesaws-node
サービスアカウントに関連付けている IAM 役割に割り当てることをお勧めします。詳細については「IRSA を使用するように アマゾン VPC CNI プラグインを設定する」を参照してください。 -
この手順では既存のクラスターがあることを前提としています。Windows ノードグループを追加する先の アマゾン EKS クラスターと アマゾン リナックス ノードグループがまだない場合は「Amazon EKS – eksctl の使用を開始する」に従うことをお勧めします。このガイドはアマゾン リナックス ノードで アマゾン EKS クラスターを作成する方法についての完全なチュートリアルを提供します。
次のコマンドを使用して、ノードグループを作成します。
地域コード
を、クラスターのある AWS リージョンに置き換えます。マイクラスター
の部分は自分のクラスター名に置き換えます。この名前には英数字 (大文字と小文字が区別されます) とハイフンのみを使用できます。先頭の文字は英数字である必要があります。また、100 文字より長くすることはできません。名前はクラスターを作成する AWS リージョンおよび AWS アカウント内で一意である必要があります。ng-windows
をノードグループの名前に置き換えます。ノードグループ名は 63 文字以下である必要があります。先頭は文字または数字でなければなりませんが、残りの文字にはハイフンおよびアンダースコアを含めることもできます。Kubernetes バージョン1.24
以降の場合は2019
を2022
に置き換えて Windows サーバー 2022 を使用できます。残りのサンプル値
は独自の値に置き換えます。重要
ノードグループを AWS アウトポスト、AWS 波長、または AWS ローカルゾーン サブネットにデプロイする場合、クラスターの作成時に AWS アウトポスト、波長、または ローカルゾーン サブネットは渡さないでください。AWS アウトポスト、波長、または ローカルゾーンs サブネットを指定した設定ファイルを使用して、ノードグループを作成します。詳細については
eksctl
ドキュメントの「設定ファイルからノードグループを作成する」と「設定ファイルのスキーマ 」を参照してください。 eksctl create nodegroup \ --region region-code \ --cluster my-cluster \ --name ng-windows \ --node-type t2.large \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --managed=false \ --node-ami-family WindowsServer2019FullContainer
注記
-
ノードがクラスターに参加できない場合はトラブルシューティングガイドの「ノードをクラスターに結合できません」を参照してください。
-
eksctl
コマンドで使用可能なオプションを表示するには次のコマンドを入力してください。eksctl command -help
出力例は次のとおりです。ノードの作成中に、複数の行が出力されます。出力の最後の行は次のサンプル行が表示されます。
[✔] created 1 nodegroup(s) in cluster "my-cluster"
-
-
(オプション) サンプルアプリケーション をデプロイして、クラスターと Windows ノードをテストします。
-
次の条件が true の場合、IMDS への Pod アクセスをブロックすることをお勧めします。
-
すべての Kubernetes サービスアカウントに IAM 役割を割り当てて、Pods が必要最小限のアクセス許可のみを持つように計画しています。
-
クラスター内の Pods が、現在の AWS リージョンの取得といったその他の理由で アマゾン EC2 インスタンスメタデータサービス (IMDS) へのアクセスを必要としていません。
詳細については「ワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する
」を参照してください。 -
AWS Management Console
前提条件
-
既存の アマゾン EKS クラスターと Linux ノードグループ。これらのリソースがない場合はAmazon EKS の使用を開始する のガイドのいずれかに従って作成することをお勧めします。これらのガイドではLinux ノードで アマゾン EKS クラスターを作成する方法について説明します。
-
アマゾン EKS クラスターの要件を満たす、既存の VPC およびセキュリティグループ。詳細についてはVPC とサブネットの Amazon EKS ネットワーキング要件を表示するおよびクラスターの Amazon EKS セキュリティグループ要件を表示するを参照してください。Amazon EKS の使用を開始する のガイドでは要件を満たす VPC を作成します。または「アマゾン EKS クラスターの アマゾン VPC を作成する」に従って手動で作成することもできます。
-
アマゾン EKS クラスターの要件を満たす VPC およびセキュリティグループを使用している、既存の アマゾン EKS クラスター。詳細については「アマゾン EKS クラスターを作成します。」を参照してください。AWS アウトポスト、AWS 波長、または AWS ローカルゾーンs が有効になっている AWS リージョンにサブネットがある場合はクラスターの作成時にそれらのサブネットが渡されるべきではありません。
ステップ 1: AWS Management Console を使用してセルフマネージド型の Windows ノードを起動する
-
クラスターステータスが
ACTIVE
と表示されるまで待ちます。クラスターがアクティブになる前にノードを起動した場合、ノードはクラスターへの登録に失敗し、再起動が必要になります。 -
[スタックの作成] を選択してください。
-
[テンプレートを指定] で、[アマゾン S3 URL] を選択してください。
-
次の URL をコピーして、[アマゾン S3 URL] に貼り付けます。
https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2023-02-09/amazon-eks-windows-nodegroup.yaml
-
[次へ] を 2 回選択してください。
-
[スタックのクイック作成] ページで、必要に応じて以下のパラメータを入力してください。
-
スタック名: AWS クラウドフォーメーション スタックのスタック名を選択してください。例えば、
cluster-name-nodes
という名前にすることができます。 -
[クラスター名]: アマゾン EKS クラスターの作成時に使用した名前を入力してください。
重要
この名前は「ステップ 1: アマゾン EKS クラスターを作成する」で使用した名前と完全に一致する必要があります。そうしないと、ノードはクラスターに参加できません。
-
クラスター制御プレーンセキュリティグループ: VPC を作成する際に生成した AWS クラウドフォーメーション 出力からセキュリティグループを選択してください。次のステップでは該当するグループを取得する 1 つの方法を説明します。
-
アマゾン EKS コンソール
を開きます。 -
クラスターの名前を選択してください。
-
[ネットワーキング] タブを選択してください。
-
[クラスター制御プレーンセキュリティグループ] ドロップダウンリストから選択する場合は[追加のセキュリティグループ] の値をリファレンスとして使用します。
-
-
[ノードグループ名]: ノードグループの名前を入力してください。この名前はノードに対して作成される自動スケーリングノードグループを識別するために後で使用できます。ノードグループ名は 63 文字以下である必要があります。先頭は文字または数字でなければなりませんが、残りの文字にはハイフンおよびアンダースコアを含めることもできます。
-
[ノードオートスケーリンググループ最小サイズ]: ノードの 自動スケーリング グループがスケールインできる最小ノード数を入力してください。
-
ノード自動スケーリンググループ希望容量: スタック作成時にスケーリングする必要のあるノード数を入力してください。
-
[NodeAutoScalingGroupMaxSize]: ノードの 自動スケーリング グループがスケールアウトできる最大ノード数を入力してください。
-
[ノードインスタンス型]: ノードのインスタンスタイプを選択してください。詳細については「最適な Amazon EC2 ノードインスタンスタイプを選択する」を参照してください。
注記
最新バージョンの アマゾン VPC CNI Kubernetes用プラグイン
でサポートされているインスタンスタイプはGitHub 上の vpc_ip_resource_limit.go にリストされています。サポートされている最新のインスタンスタイプを利用するにはCNI のバージョンを更新することが必要になる場合があります。詳細については「アマゾン VPC CNI を使用してPodsに IP を割り当てる」を参照してください。 -
[ノードイメージIdSSMParam]: 現在推奨されている アマゾン EKS 最適化 Windows Core AMI ID の アマゾン EC2 システム・マネージャー パラメータが事前設定されています。Windows のフルバージョンを使用する場合、
Core
はFull
に置き換えます。 -
ノードイメージId: (オプション) (アマゾン EKS 最適化 AMI の代わりに) 独自のカスタム AMI を使用している場合はAWS リージョンのノード AMI ID を入力してください。このフィールドに値を指定すると、[ノードイメージIdSSMParam] フィールドの値はすべて上書きされます。
-
[ノードボリュームサイズ]: ノードのルートボリュームのサイズを GiB 単位で指定します。
-
[キー名]: 起動後に、SSH を使用してノードに接続するときに使用できる アマゾン EC2 SSH キーペアの名前を入力してください。アマゾン EC2 キーペアをまだ持っていない場合はAWS Management Console で作成できます。詳細については「アマゾン EC2 ユーザーガイド」の「アマゾン EC2 キーペア」を参照してください。
注記
ここでキーペアを指定しないと、AWS クラウドフォーメーション スタックの作成は失敗します。
-
[ブートストラップ引数]:
kubelet
を使用して、-KubeletExtraArgs
の追加引数など、ノードブートストラップスクリプトに渡すオプションの引数を指定します。 -
[無効IMDSv1]: 各ノードはデフォルトでインスタンスメタデータサービスバージョン 1 (IMDSv1) および IMDSv2 をサポートします。IMDSv1 は無効にできます。以後、ノードグループのノードおよび Pods が MDSv1 を使用しないようにするには無効IMDsv1 を true に設定します。IDMS の詳細については「インスタンスメタデータサービスの設定」を参照してください。
-
[VpcId]: 作成した VPC の ID を選択してください。
-
[Nodeセキュリティグループs]: VPC の作成時に Linux ノードグループ用に作成したセキュリティグループを選択してください。Linux ノードに複数のセキュリティグループが添付されている場合、それらのすべてを指定します。これは例えば、Linux ノードグループが
eksctl
を使用して作成された場合に行います。 -
[Subnets]: 作成したサブネットを選択してください。「アマゾン EKS クラスターの アマゾン VPC を作成する」で説明されている手順で VPC を作成した場合は起動するノードの VPC 内のプライベートサブネットのみを指定します。
重要
-
いずれかのサブネットがパブリックサブネットである場合はパブリック IP アドレスの自動割り当て設定を有効にする必要があります。この設定がパブリックサブネットに対して有効になっていない場合、そのパブリックサブネットにデプロイするノードにはパブリック IP アドレスが割り当てられず、クラスターやその他の AWS のサービスと通信できなくなります。2020 年 3 月 26 日以前に、アマゾン EKS AWS クラウドフォーメーション VPC テンプレートを使用して、または
eksctl
を使用してサブネットがデプロイされた場合、パブリックサブネットではパブリック IP アドレスの自動割り当てが無効になります。サブネットのパブリック IP アドレス割り当てを有効にする方法については「サブネットのパブリック IPv4 アドレス属性の変更」を参照してください。ノードがプライベートサブネットにデプロイされている場合、NAT ゲートウェイを介してクラスターや他の AWS のサービスと通信できます。 -
サブネットにインターネットアクセスがない場合は「インターネットアクセスが制限されたプライベートクラスターをデプロイする」の考慮事項と追加の手順を確認してください
-
AWS アウトポスト、波長、または ローカルゾーンs サブネット を選択する場合はクラスターの作成時にサブネットを渡さないようにします。
-
-
-
スタックが IAM リソースを作成する可能性があることを確認し、[スタックの作成] を選択してください。
-
スタックの作成が完了したら、コンソールで選択し、[出力] を選択してください。
-
作成されたノードグループの [ノードインスタンス役割] を記録します。これはアマゾン EKS Windows ノードを設定する際、必要になります。
ステップ 2: ノードを有効にしてクラスターに参加する
-
aws-auth
ConfigMap
がすでにあるかどうかを確認します。kubectl describe configmap -n kube-system aws-auth
-
aws-auth
ConfigMap
が表示されている場合は必要に応じて更新してください。-
編集する
ConfigMap
を開きます。kubectl edit -n kube-system configmap/aws-auth
-
必要に応じて新しい
mapRoles
エントリを追加します。rolearn
値を、前の手順で記録した [ノードインスタンス役割] の値に設定します。[...] data: mapRoles: | - rolearn: <ARN of linux instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - rolearn: <ARN of windows instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - eks:kube-proxy-windows [...]
-
ファイルを保存し、テキストエディタを終了します。
-
-
「
Error from server (NotFound): configmaps "aws-auth" not found
」というエラーが表示されたら、ストックConfigMap
を適用してください。-
設定マップをダウンロードします。
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm-windows.yaml
-
aws-auth-cm-windows.yaml
ファイルで、rolearn
値を、前の手順で記録した該当する [ノードインスタンス役割] 値に設定します。これを行うにはテキストエディタを使用するか、このサンプル値
を置き換えて次のコマンドを実行してください。sed -i.bak -e 's|<ARN of linux instance role (not instance profile)>|my-node-linux-instance-role|' \ -e 's|<ARN of windows instance role (not instance profile)>|my-node-windows-instance-role|' aws-auth-cm-windows.yaml
重要
-
このファイルの他の行は変更しないでください。
-
Windows ノードと Linux ノードの両方に同じ IAM 役割を使用しないでください。
-
-
設定を適用します。このコマンドが完了するまで数分かかることがあります。
kubectl apply -f aws-auth-cm-windows.yaml
-
-
ノードのステータスを監視し、
Ready
ステータスになるまで待機します。kubectl get nodes --watch
Ctrl
+C
を入力して、シェルプロンプトに戻ります。注記
認可またはリソースタイプのエラーが発生した場合はトラブルシューティングトピックの「許可されていないか、アクセスが拒否されました (kubectl)」を参照してください。
ノードがクラスターに参加できない場合はトラブルシューティングの章にある「ノードをクラスターに結合できません」を参照してください。
ステップ 3: その他のアクション
-
(オプション) サンプルアプリケーション をデプロイして、クラスターと Windows ノードをテストします。
-
(オプション) アマゾンEKS_CNI_Policy マネージド IAM ポリシー (
IPv4
クラスターがある場合) またはアマゾンEKS_CNI_IPv6_Policy
(IPv6
クラスターがある場合、ユーザー自身が作成したもの) が アマゾン EKS ノードの IAM 役割にアタッチされている場合、代わりに Kubernetesaws-node
サービスアカウントに関連付けている IAM 役割に割り当てることをお勧めします。詳細については「IRSA を使用するように アマゾン VPC CNI プラグインを設定する」を参照してください。 -
次の条件が true の場合、IMDS への Pod アクセスをブロックすることをお勧めします。
-
すべての Kubernetes サービスアカウントに IAM 役割を割り当てて、Pods が必要最小限のアクセス許可のみを持つように計画しています。
-
クラスター内の Pods が、現在の AWS リージョンの取得といったその他の理由で アマゾン EC2 インスタンスメタデータサービス (IMDS) へのアクセスを必要としていません。
詳細については「ワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する
」を参照してください。 -