このページの改善にご協力ください
本ユーザーガイドの改善にご協力いただけませんか? すべてのページの右側のペインにある GitHub リンクで、このページの編集を選択してください。皆さまにご協力いただくことで、あらゆる人々に使いやすいユーザーガイドになります。
このトピックはアマゾン EKS クラスターに登録されている アウトポスト 上の アマゾンリナックス ノードの 自動スケーリング グループを起動する方法を説明します。クラスターはAWS クラウド または アウトポスト に置くことができます。
-
既存の アウトポスト。詳細については「AWS アウトポスト とは」を参照してください。
-
既存の アマゾン EKS クラスター。AWS クラウド にクラスターをデプロイするには「アマゾン EKS クラスターを作成します。」を参照してください。アウトポスト にクラスターをデプロイするには「高可用性を実現するために AWS Outposts でローカル Amazon EKS クラスターを作成する」を参照してください。
-
AWS クラウド のクラスターにノードを作成しており、AWS アウトポスト、AWS 波長、または AWS ローカルゾーン が有効になっている AWS リージョンにサブネットがあるとします。この場合、クラスターを作成したときに、これらのサブネットが渡されていない必要があります。アウトポスト 上のクラスターにノードを作成する場合はクラスターの作成時に アウトポスト サブネットを渡しておく必要があります。
-
(AWS クラウド 上のクラスターに推奨) 必要な IAM ポリシーがアタッチされた独自の IAM ロールで設定された Amazon VPC CNI plugin for Kubernetes アドオン。詳細については「IRSA を使用するように アマゾン VPC CNI プラグインを設定する」を参照してください。ローカルクラスターはサービスアカウントの IAM ロールをサポートしていません。
eksctl
または AWS Management Console (AWS クラウドFormation テンプレートを使用) で、セルフマネージド型の アマゾンリナックス ノードグループを作成できます。Terraform
このページで説明されている以下のツールを使用して、ローカルクラスターを作成できます:
eksctl
eksctl
を使用して自己管理型Linuxノードを起動するには
-
デバイスまたは AWS クラウドシェル にインストールされている
eksctl
コマンドラインツールのバージョン0.199.0
以降をインストールします。eksctl
をインストールまたはアップグレードするにはeksctl
ドキュメントの「インストール」を参照してください。 -
クラスターが AWS クラウド にあり、[アマゾンEKS_CNI_Policy] マネージド IAM ポリシーが アマゾン EKS ノードの IAM ロールへアタッチされている場合は代わりに Kubernetes
aws-node
サービスアカウントに関連付けた IAM ロールに割り当てることをお勧めします。詳細については「IRSA を使用するように アマゾン VPC CNI プラグインを設定する」を参照してください。クラスターが アウトポスト にある場合はポリシーをノードロールにアタッチする必要があります。 -
次のコマンドは既存のクラスターにノードグループを作成します。クラスターは
eksctl
を使用して作成されている必要があります。al-nodes
を、ノードグループの名前に置き換えます。ノードグループ名は 63 文字以下である必要があります。先頭は文字または数字でなければなりませんが、残りの文字にはハイフンおよびアンダースコアを含めることもできます。マイクラスター
の部分は自分のクラスター名に置き換えます。この名前には英数字 (大文字と小文字が区別されます) とハイフンのみを使用できます。先頭の文字は英数字である必要があります。また、100 文字より長くすることはできません。名前はクラスターを作成する AWS リージョンおよび AWS アカウント内で一意である必要があります。クラスターが アウトポスト に存在する場合はid
を アウトポスト サブネットの ID に置き換えます。AWS クラウド にクラスターが存在する場合、id
をクラスターの作成時に指定しなかったサブネットの ID に置き換えます。インスタンス型
を アウトポスト でサポートされているインスタンスタイプに置き換えます。残りのサンプル値
は独自の値に置き換えます。デフォルトではノードはコントロールプレーンと同じ Kubernetes バージョンで作成されます。インスタンス型
を アウトポスト で利用可能なインスタンスタイプに置き換えます。マイキー
を アマゾン EC2 キーペアまたはパブリックキーの名前に置き換えます。このキーは起動後のノードに SSH 接続するために使用されます。アマゾン EC2 キーペアをまだ持っていない場合はAWS Management Console で作成できます。詳細については「アマゾン EC2 ユーザーガイド」の「アマゾン EC2 キーペア」を参照してください。次のコマンドを使用して、ノードグループを作成します。
eksctl create nodegroup --cluster my-cluster --name al-nodes --node-type instance-type \ --nodes 3 --nodes-min 1 --nodes-max 4 --managed=false --node-volume-type gp2 --subnet-ids subnet-id
クラスターを AWS クラウド 上にデプロイしている場合:
-
デプロイするノードグループにはインスタンスのブロックとは異なる CIDR ブロックから
IPv4
アドレスを Pods に割り当てることができます。詳細については「カスタムネットワーキングを使用して代替サブネットにPodsをデプロイする」を参照してください。 -
デプロイするノードグループはアウトバウンドインターネットアクセスを必要としません。詳細については「インターネットアクセスが制限されたプライベートクラスターをデプロイする」を参照してください。
利用できるすべてのオプションとデフォルトの詳細なリストについては
eksctl
ドキュメントの「AWS アウトポスト サポート」を参照してください。 -
ノードがクラスターに参加できない場合は「アマゾン EKS クラスターとノードに関する問題をトラブルシューティングする」の「ノードをクラスターに結合できません」および「AWS アウトポスト でローカル アマゾン EKS クラスターをトラブルシューティングする」の「ノードをクラスターに結合できない」を参照してください。
-
出力例は次のとおりです。ノードの作成中に、複数の行が出力されます。出力の最後の行は次のサンプル行が表示されます。
[✔] created 1 nodegroup(s) in cluster "my-cluster"
-
-
(オプション) サンプルアプリケーション をデプロイして、クラスターと Linux ノードをテストします。
AWS Management Console
ステップ 1: AWS Management Console を使用してセルフマネージド型の Linux ノードを起動する`
-
AWS クラウドFormation テンプレートの最新バージョンをダウンロードします。
curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2022-12-23/amazon-eks-nodegroup.yaml
-
AWS クラウドFormation コンソール
を開きます。 -
[スタックの作成] を選択し、[新しいリソースを使用 (標準)] を選択してください。
-
[テンプレートの指定] で、[テンプレートファイルのアップロード] を選択し、[ファイルを選択] を選択してください。前のステップでダウンロードした
amazon-eks-nodegroup.yaml
ファイルを選択し、[次へ] を選択してください。 -
[スタックの詳細の指定] ページで、必要に応じて次のパラメータを入力し、[次へ] を選択してください:
-
スタック名: AWS クラウドFormation スタックのスタック名を選択してください:例えば、
al-nodes
という名前にすることができます。この名前には英数字 (大文字と小文字が区別されます) とハイフンのみを使用できます。先頭の文字は英数字である必要があります。また、100 文字より長くすることはできません。名前はクラスターを作成する AWS リージョンおよび AWS アカウント内で一意である必要があります。 -
[クラスター名]: クラスターの名前を入力してください:この名前が、クラスター名と一致しない場合、ノードはクラスターに参加できません。
-
[クラスター制御プレーンセキュリティグループ]: VPC の作成時に生成した AWS クラウドフォーメーション 出力の [セキュリティグループ] 値を選択してください:
次のステップでは該当するグループを取得する 1 つのオペレーションを説明します。
-
アマゾン EKS コンソール
を開きます。 -
クラスターの名前を選択してください。
-
[ネットワーキング] タブを選択してください。
-
[クラスター制御プレーンセキュリティグループ] ドロップダウンリストから選択する場合は[追加のセキュリティグループ] の値をリファレンスとして使用します。
-
-
[ノードグループ名]: ノードグループの名前を入力してください:この名前はノードに対して作成される自動スケーリングノードグループを識別するために後で使用できます。
-
[ノード自動スケーリンググループ最小サイズ]: ノードの 自動スケーリング グループがスケールインできる最小ノード数を入力してください:
-
ノード自動スケーリンググループ希望容量: スタック作成時にスケーリングする必要のあるノード数を入力してください:
-
[ノード自動拡大縮小グループ最大サイズ]: ノードの 自動スケーリング グループがスケールアウトできる最大ノード数を入力してください:
-
[ノードインスタンス型]: ノードのインスタンスタイプを選択してください:クラスターが AWS クラウド で動作している場合は詳細については「最適な Amazon EC2 ノードインスタンスタイプを選択する」を参照してください。クラスターが アウトポスト で実行されている場合、アウトポスト で使用できるインスタンスタイプのみを選択できます。
-
[ノードイメージIdSSMParam]: 最新の アマゾン EKS 最適化 AMI の アマゾン EC2 システムマネージャー のパラメータが、可変 Kubernetes バージョン用に事前設定されています:アマゾン EKS でサポートされている別の Kubernetes マイナーバージョンを使用するには
1.XX
を別のサポートされているバージョンに置き換えます。クラスターと同じ Kubernetes バージョンを指定することをお勧めします。アマゾン EKS 最適化高速 AMI を使用するには
アマゾンリナックス-2
をamazon-linux-2-gpu
に置き換えます。アマゾン EKS 最適化 Arm AMI を使用するにはアマゾンリナックス-2
をamazon-linux-2-arm64
に置き換えます。注記
アマゾン EKS ノード AMI は アマゾンリナックス をベースとしています。アマゾンリナックス のセキュリティまたはプライバシーに関するイベントを、アマゾンリナックス セキュリティセンター
で追跡できます。そのためには目的のバージョンのタブを選択してください。該当する RSS フィードをサブスクライブすることもできます。セキュリティおよびプライバシーイベントには問題の概要、影響を受けるパッケージ、および問題を修正するためにインスタンスを更新する方法などがあります。 -
ノードイメージId: (オプション (アマゾン EKS 最適化 AMI の代わりに 独自のカスタム AMI を使用している場合はAWS リージョンのノード AMI ID を入力してください:ここで値を指定すると、[ノードイメージIdSSMParam] フィールドの値はすべて上書きされます。
-
[ノードボリュームサイズ]: ノードのルートボリュームのサイズを GiB 単位で指定します:
-
[ノードボリューム型]: ノードのルートボリュームタイプを指定します:
-
[キー名]: 起動後に、SSH を使用してノードに接続するときに使用できる アマゾン EC2 SSH キーペアの名前を入力してください:アマゾン EC2 キーペアをまだ持っていない場合はAWS Management Console で作成できます。詳細については「アマゾン EC2 ユーザーガイド」の「アマゾン EC2 キーペア」を参照してください。
注記
ここでキーペアを指定しないと、AWS クラウドFormation スタックの作成は失敗します。
-
[ブートストラップ引数]: ノードに渡すことができるオプションの引数がいくつかあります:詳細については「GitHub」の「ブートストラップスクリプトの使用状況
」を参照してください。AWS アウトポスト の アマゾン EKS ローカルクラスター (Kubernetes コントロールプレーンインスタンスが AWS アウトポスト で稼働 と入出力のインターネット接続がないクラスター (プライベートクラスターとも呼ばれる にノードを追加する場合は次のブートストラップ引数を (1 行で 指定する必要があります。 --b64-cluster-ca ${CLUSTER_CA} --apiserver-endpoint https://${APISERVER_ENDPOINT} --enable-local-outpost true --cluster-id ${CLUSTER_ID}
-
[無効IMDSv1]: 各ノードはデフォルトでインスタンスメタデータサービスバージョン 1 (IMDSv1 および IMDSv2 をサポートします:IMDSv1 は無効にできます。ノードグループ内の将来のノードおよび Pods が MDSv1 を使用しないようにするには[無効IMDsv1] を [正] に設定します。IDMS の詳細については「インスタンスメタデータサービスの設定」を参照してください。ノードでのそれへのアクセス制限について詳しくはワーカーノードに割り当てられたインスタンスプロファイルへのアクセスを制限する
を参照してください。 -
[VpcId]: 作成した VPC の ID を入力します:VPC を選択する前に、「VPC の要件と考慮事項」を確認してください。
-
[サブネット]: クラスターが アウトポスト にある場合、VPC 内で少なくとも 1 つのプライベートサブネットを選択してください:サブネットを選択する前に、「サブネットの要件と考慮事項」を確認してください。クラスターの [ネットワーキング] タブから、各サブネットリンクを開き、プライベートのサブネットを確認できます。
-
-
[スタックオプションの設定] ページで、希望する設定を選択し、[次へ] を選択してください。
-
[AWS クラウドFormation が IAM リソースを作成する可能性を認識しています] の左にあるチェックボックスを選択して、[スタックの作成] を選択してください。
-
スタックの作成が完了したら、コンソールで選択し、[出力] を選択してください。
-
作成されたノードグループの [ノードインスタンス役割] を記録します。これはアマゾン EKS ノードを設定する際、必要になります。
ステップ 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 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)」を参照してください。
ノードがクラスターに参加できない場合は「アマゾン EKS クラスターとノードに関する問題をトラブルシューティングする」の「ノードをクラスターに結合できません」および「AWS アウトポスト でローカル アマゾン EKS クラスターをトラブルシューティングする」の「ノードをクラスターに結合できない」を参照してください。
-
アマゾン EBS CSI ドライバーをインストールします。詳細についてはGitHub の Installation
を参照してください。[ドライバーのアクセス許可を設定] セクションでは[IAM インスタンスプロファイルの使用] オプションの指示に従うことを確認します。 gp2
ストレージクラスを使用する必要があります。gp3
ストレージクラスはサポートされていません。クラスターの
gp2
ストレージクラスを作成するには以下のステップを実行してください。-
次のコマンドを実行して、
gp2-storage-class.yaml
ファイルを作成します。cat >gp2-storage-class.yaml <<EOF apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" name: ebs-sc provisioner: ebs.csi.aws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp2 encrypted: "true" allowVolumeExpansion: true EOF
-
マニフェストをクラスターに適用します。
kubectl apply -f gp2-storage-class.yaml
-
-
(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 ノードをテストします。
-
クラスターが アウトポスト にデプロイされている場合はこのステップをスキップしてください。クラスターが AWS クラウド にデプロイされている場合、次の情報はオプションです。[アマゾンEKS_CNI_Policy] マネージド IAM ポリシーが アマゾン EKS ノードの IAM ロール にアタッチされている場合は代わりに Kubernetes
aws-node
サービスアカウントに関連付けた IAM ロールに割り当てることをお勧めします。詳細については「IRSA を使用するように アマゾン VPC CNI プラグインを設定する」を参照してください。