このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
このトピックではアマゾン EKS クラスターに登録する Linux ノードの 自動スケーリング グループを起動する方法について説明します。ノードがクラスターに参加したら、それらのノードに Kubernetes アプリケーションをデプロイ可能になります。eksctl
または AWS Management Consoleを使用して、セルフマネージド型の アマゾン リナックス ノードを起動することもできます。AWS アウトポスト でノードを起動する必要がある場合は「AWS アウトポスト で アマゾンリナックス ノードを作成する」を参照してください。
-
既存の アマゾン EKS クラスター。デプロイするには「アマゾン EKS クラスターを作成します。」を参照してください。AWS アウトポスト、AWS 波長、または AWS ローカルゾーンs が有効になっている AWS リージョンにサブネットがある場合はクラスターの作成時にそれらのサブネットが渡されるべきではありません。
-
ノードが使用する既存の IAM 役割。作成する場合は「Amazon EKS ノードの IAM ロール」を参照してください。この役割に VPC CNI のポリシーがどちらも含まれていない場合、VPC CNI ポッドには以下の別の役割が必要です。
-
(オプションですが推奨) 必要な IAM ポリシーがアタッチされた独自の IAM 役割で設定された Amazon VPC CNI plugin for Kubernetes アドオン。詳細については「IRSA を使用するように アマゾン VPC CNI プラグインを設定する」を参照してください。
-
「最適な アマゾン EC2 ノードインスタンスタイプを選択する」に記載されている考慮事項に精通していること。選択したインスタンスタイプによってはクラスターと VPC に関する追加の前提条件がある場合もあります。
セルフマネージド リナックス ノードは次のいずれかを使用して起動できます。
eksctl
eksctl
を使用してセルフマネージド型の リナックス ノードを起動する`
-
デバイスまたは AWS CloudShell にインストールされている
eksctl
コマンドラインツールのバージョン0.199.0
以降をインストールします。eksctl
をインストールまたはアップグレードするにはeksctl
ドキュメントの「インストール」を参照してください。 -
(オプション) [アマゾンEKS_CNI_Policy] マネージド IAM ポリシーが アマゾン EKS ノードの IAM 役割にアタッチされている場合は代わりに Kubernetes
aws-node
サービスアカウントに関連付けた IAM 役割に割り当てることをお勧めします。詳細については「IRSA を使用するように アマゾン VPC CNI プラグインを設定する」を参照してください。 -
次のコマンドは既存のクラスターにノードグループを作成します。
al-nodes
を、ノードグループの名前に置き換えます。ノードグループ名は 63 文字以下である必要があります。先頭は文字または数字でなければなりませんが、残りの文字にはハイフンおよびアンダースコアを含めることもできます。マイクラスター
の部分は自分のクラスター名に置き換えます。この名前には英数字 (大文字と小文字が区別されます) とハイフンのみを使用できます。先頭の文字は英数字である必要があります。また、100 文字より長くすることはできません。名前はクラスターを作成する AWS リージョンおよび AWS アカウント内で一意である必要があります。残りのサンプル値
は独自の値に置き換えます。デフォルトではノードはコント役割プレーンと同じ Kubernetes バージョンで作成されます。--node-type
の値を選択する前に、「最適な アマゾン EC2 ノードインスタンスタイプを選択する」を確認してください。my-key
を アマゾン EC2 キーペアまたはパブリックキーの名前に置き換えます。このキーは起動後のノードに SSH 接続するために使用されます。アマゾン EC2 キーペアをまだ持っていない場合はAWS Management Console で作成できます。詳細については「アマゾン EC2 ユーザーガイド」の「アマゾン EC2 キーペア」を参照してください。次のコマンドを使用して、ノードグループを作成します。
重要
ノードグループを AWS アウトポスト、波長、または ローカルゾーンs サブネットにデプロイする場合、追加の考慮事項があります。
-
クラスターを作成したときに、サブネットが渡されていない必要があります。
-
ノードグループはサブネットと
volumeType
を指定する設定ファイルを使用して作成する必要があります。詳細については「: gp2 eksctl
ドキュメント」の「設定ファイルからノードグループを作成する」と「設定ファイルのスキーマ 」を参照してください。
eksctl create nodegroup \ --cluster my-cluster \ --name al-nodes \ --node-type t3.medium \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --ssh-access \ --managed=false \ --ssh-public-key my-key
次のノードグループをデプロイするには
-
デフォルト設定よりもはるかに多くの IP アドレスを Pods に割り当てることができるノードグループについては「プレフィックスを使用して アマゾン EKS ノードに割り当てる IP アドレスを増やす」を参照してください。
-
インスタンスのブロックとは異なる CIDR ブロックから
IPv4
アドレスを Pods に割り当てることができるノードグループについては「カスタムネットワーキングを使用して代替サブネットにPodsをデプロイする」を参照してください。 -
Pods とサービスに
IPv6
アドレスを割り当てることができるノードグループについては「クラスター、Pods、サービスに対する IPv6 アドレスの説明」を参照してください。 -
containerd
ランタイムを使用するノードグループについてはconfig
ファイルを使用してノードグループをデプロイする必要があります。詳細については「Amazon Linux 2 の Docker から containerd への移行をテストする」を参照してください。 -
アウトバウンドインターネットアクセスがない場合は「インターネットアクセスが制限されたプライベートクラスターをデプロイする」を参照してください。
すべての使用可能なオプションとデフォルト値の一覧を表示するには次のコマンドを入力してください。
eksctl create nodegroup --help
ノードがクラスターに参加できない場合はトラブルシューティングの章にある「ノードをクラスターに結合できません」を参照してください。
出力例は次のとおりです。ノードの作成中に、複数の行が出力されます。出力の最後の行は次のサンプル行が表示されます。
[✔] created 1 nodegroup(s) in cluster "my-cluster"
-
-
(オプション) サンプルアプリケーション をデプロイして、クラスターと Linux ノードをテストします。
-
次の条件が true の場合、IMDS への Pod アクセスをブロックすることをお勧めします。
-
すべての Kubernetes サービスアカウントに IAM 役割を割り当てて、Pods が必要最小限のアクセス許可のみを持つように計画しています。
-
クラスター内の Pods が、現在の AWS リージョンの取得といったその他の理由で アマゾン EC2 インスタンスメタデータサービス (IMDS) へのアクセスを必要としていません。
詳細については「ワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する
」を参照してください。 -
AWS Management Console
ステップ 1: AWS Management Console を使用してセルフマネージド型の リナックス ノードを起動する`
-
AWS クラウドフォーメーション テンプレートの最新バージョンをダウンロードします。
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml
-
クラスターステータスが
ACTIVE
と表示されるまで待ちます。クラスターがアクティブになる前にノードを起動した場合、ノードはクラスターへの登録に失敗し、再起動する必要があります。 -
AWS クラウドフォーメーション コンソール
を開きます。 -
[スタックの作成] を選択し、[新しいリソースを使用 (標準)] を選択してください。
-
[テンプレートの指定] で、[テンプレートファイルのアップロード] を選択し、[ファイルを選択] を選択してください。
-
ダウンロードした
amazon-eks-nodegroup.yaml
ファイルを選択してください。 -
[次へ] を選択してください。
-
[スタックの詳細の指定] ページで、必要に応じて次のパラメータを入力し、[次へ] を選択してください。
-
スタック名: AWS クラウドフォーメーション スタックのスタック名を選択してください。例えば、
マイクラスター-nodes
という名前にすることができます。この名前には英数字 (大文字と小文字が区別されます) とハイフンのみを使用できます。先頭の文字は英数字である必要があります。また、100 文字より長くすることはできません。名前はクラスターを作成する AWS リージョンおよび AWS アカウント内で一意である必要があります。 -
[クラスター名]: アマゾン EKS クラスターの作成時に使用した名前を入力してください。この名前はクラスター名と同じにする必要があります。同じでない場合、ノードはクラスターに参加できません。
-
[クラスター制御プレーンセキュリティグループ]: VPC の作成時に生成した AWS クラウドフォーメーション 出力の [セキュリティグループs] 値を選択してください。
次のステップでは該当するグループを取得する 1 つのオペレーションを説明します。
-
アマゾン EKS コンソール
を開きます。 -
クラスターの名前を選択してください。
-
[ネットワーキング] タブを選択してください。
-
[クラスター制御プレーンセキュリティグループ] ドロップダウンリストから選択する場合は[追加のセキュリティグループ] の値をリファレンスとして使用します。
-
-
[ノードグループ名]: ノードグループの名前を入力してください。この名前はノードに対して作成される自動スケーリングノードグループを識別するために後で使用できます。ノードグループ名は 63 文字以下である必要があります。先頭は文字または数字でなければなりませんが、残りの文字にはハイフンおよびアンダースコアを含めることもできます。
-
[ノードオートスケーリンググループ最小サイズ]: ノードの 自動スケーリング グループがスケールインできる最小ノード数を入力してください。
-
ノード自動スケーリンググループ希望容量: スタック作成時にスケーリングする必要のあるノード数を入力してください。
-
[NodeAutoScalingGroupMaxSize]: ノードの 自動スケーリング グループがスケールアウトできる最大ノード数を入力してください。
-
[ノードインスタンス型]: ノードのインスタンスタイプを選択してください。詳細については「最適な Amazon EC2 ノードインスタンスタイプを選択する」を参照してください。
-
[ノードイメージIdSSMParam]: 最新の アマゾン EKS 最適化 AMI の アマゾン EC2 システム・マネージャー のパラメータが、可変 Kubernetes バージョン用に事前設定されています。アマゾン EKS でサポートされている別の Kubernetes マイナーバージョンを使用するには
1.XX
を別のサポートされているバージョンに置き換えます。クラスターと同じ Kubernetes バージョンを指定することをお勧めします。アマゾンリナックス-2
を別の AMI タイプに置き換えることもできます。詳細については「推奨 Amazon Linux AMI ID を取得する」を参照してください。注記
アマゾン EKS ノード AMI は アマゾン リナックス をベースとしています。アマゾン リナックス セキュリティセンター
で アマゾン リナックス 2 のセキュリティもしくはプライバシーに関するイベントを追跡したり、関連する RSS フィード をサブスクライブできます。セキュリティおよびプライバシーイベントには問題の概要、影響を受けるパッケージ、および問題を修正するためにインスタンスを更新する方法などがあります。 -
ノードイメージId: (オプション) (アマゾン EKS 最適化 AMI の代わりに) 独自のカスタム AMI を使用している場合はAWS リージョンのノード AMI ID を入力してください。ここで値を指定すると、[ノードイメージIdSSMParam] フィールドの値はすべて上書きされます。
-
[ノードボリュームサイズ]: ノードのルートボリュームのサイズを GiB 単位で指定します。
-
[ノードボリューム型]: ノードのルートボリュームタイプを指定します。
-
[キー名]: 起動後に、SSH を使用してノードに接続するときに使用できる アマゾン EC2 SSH キーペアの名前を入力してください。アマゾン EC2 キーペアをまだ持っていない場合はAWS Management Console で作成できます。詳細については「アマゾン EC2 ユーザーガイド」の「アマゾン EC2 キーペア」を参照してください。
注記
ここでキーペアを指定しないと、AWS クラウドフォーメーション スタックの作成は失敗します。
-
[ブートストラップ引数]:
kubelet
の追加引数など、ノードブートストラップスクリプトに渡すオプションの引数を指定します。詳細については「GitHub」の「ブートストラップスクリプトの使用状況」を参照してください。 次のノードグループをデプロイするには
-
デフォルト設定よりもはるかに多くの IP アドレスを Pods に割り当てることができるノードグループについては「プレフィックスを使用して アマゾン EKS ノードに割り当てる IP アドレスを増やす」を参照してください。
-
インスタンスのブロックとは異なる CIDR ブロックから
IPv4
アドレスを Pods に割り当てることができるノードグループについては「カスタムネットワーキングを使用して代替サブネットにPodsをデプロイする」を参照してください。 -
Pods とサービスに
IPv6
アドレスを割り当てることができるノードグループについては「クラスター、Pods、サービスに対する IPv6 アドレスの説明」を参照してください。 -
containerd
ランタイムを使用するノードグループについてはconfig
ファイルを使用してノードグループをデプロイする必要があります。詳細については「Amazon Linux 2 の Docker から containerd への移行をテストする」を参照してください。 -
アウトバウンドインターネットアクセスがない場合は「インターネットアクセスが制限されたプライベートクラスターをデプロイする」を参照してください。
-
-
[無効IMDSv1]: 各ノードはデフォルトでインスタンスメタデータサービスバージョン 1 (IMDSv1) および IMDSv2 をサポートします。IMDSv1 は無効にできます。以後、ノードグループのノードおよび Pods が MDSv1 を使用しないようにするには無効IMDsv1 を true に設定します。IDMS の詳細については「インスタンスメタデータサービスの設定」を参照してください。ノードでのそれへのアクセス制限について詳しくはワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する
を参照してください。 -
[VpcId]: 作成した VPC の ID を入力してください。
-
[Subnets]: VPC 用に作成したサブネットを選択してください。「アマゾン EKS クラスターの アマゾン VPC を作成する」で説明されている手順で VPC を作成した場合は起動するノードの VPC 内のプライベートサブネットのみを指定します。クラスターの [ネットワーキング] タブから、各サブネットリンクを開き、プライベートのサブネットを確認できます。
重要
-
いずれかのサブネットがパブリックサブネットである場合はパブリック IP アドレスの自動割り当て設定を有効にする必要があります。この設定がパブリックサブネットに対して有効になっていない場合、そのパブリックサブネットにデプロイするノードにはパブリック IP アドレスが割り当てられず、クラスターやその他の AWS のサービスと通信できなくなります。2020 年 3 月 26 日以前に、アマゾン EKS AWS クラウドフォーメーション VPC テンプレートを使用して、または
eksctl
を使用してサブネットがデプロイされた場合、パブリックサブネットではパブリック IP アドレスの自動割り当てが無効になります。サブネットのパブリック IP アドレス割り当てを有効にする方法については「サブネットのパブリック IPv4 アドレス属性の変更」を参照してください。ノードがプライベートサブネットにデプロイされている場合、NAT ゲートウェイを介してクラスターや他の AWS のサービスと通信できます。 -
サブネットにインターネットアクセスがない場合は「インターネットアクセスが制限されたプライベートクラスターをデプロイする」の考慮事項と追加の手順を確認してください。
-
AWS アウトポスト、波長、または ローカルゾーンs サブネット を選択する場合はクラスターの作成時にサブネットを渡さないようにします。
-
-
-
[スタックオプションの設定] ページで、希望する設定を選択し、[次へ] を選択してください。
-
[AWS クラウドフォーメーション が IAM リソースを作成する可能性を認識しています] の左にあるチェックボックスを選択して、[スタックの作成] を選択してください。
-
スタックの作成が完了したら、コンソールで選択し、[出力] を選択してください。
-
作成されたノードグループの [ノードインスタンス役割] を記録します。これはアマゾン EKS ノードを設定する際、必要になります。
ステップ 2: ノードを有効にしてクラスターに参加する
注記
アウトバウンドのインターネットアクセスのないプライベート VPC でノードを起動する場合はノードが VPC 内からクラスターに参加できるようにしてください。
-
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 instance role (not instance profile)> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes [...]
-
ファイルを保存し、テキストエディタを終了します。
-
-
「
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.yaml
-
aws-auth-cm.yaml
ファイルで、rolearn
値を前の手順で記録した [ノードインスタンス役割] 値に設定します。これを行うにはテキストエディタを使用するか、マイノードインスタンス役割
を置き換えて次のコマンドを実行してください。sed -i.bak -e 's|<ARN of instance role (not instance profile)>|my-node-instance-role|' aws-auth-cm.yaml
-
設定を適用します。このコマンドが完了するまで数分かかることがあります。
kubectl apply -f aws-auth-cm.yaml
-
-
ノードのステータスを監視し、
Ready
ステータスになるまで待機します。kubectl get nodes --watch
Ctrl
+C
を入力して、シェルプロンプトに戻ります。注記
認可またはリソースタイプのエラーが発生した場合はトラブルシューティングトピックの「許可されていないか、アクセスが拒否されました (kubectl)」を参照してください。
ノードがクラスターに参加できない場合はトラブルシューティングの章にある「ノードをクラスターに結合できません」を参照してください。
-
(GPU ノードのみ) GPU インスタンスタイプと アマゾン EKS 最適化アクセラレーション AMI を選択した場合はクラスター上の DaemonSet として Kubernetes 用の NVIDIA デバイスプラグイン
を適用する必要があります。次のコマンドを実行する前に、 vX.X.X
を必要となる NVIDIA/k8s-device-pluginバージョンに置き換えます。 kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/vX.X.X/deployments/static/nvidia-device-plugin.yml
ステップ 3: その他のアクション
-
(オプション) サンプルアプリケーション をデプロイして、クラスターと Linux ノードをテストします。
-
(オプション) アマゾン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) へのアクセスを必要としていません。
詳細については「ワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する
」を参照してください。 -