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

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

このトピックは、Amazon EKS クラスターに登録されている Windows ノードの Auto Scaling グループの起動に役立ちます。ノードがクラスターに参加したら、それらのノードに Kubernetes アプリケーションをデプロイ可能になります。

重要

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

クラスターに対して Windows サポートを有効にする必要があります。Windows ノードグループを起動する前に、重要な考慮事項を確認することをお勧めします。詳細については、「Windows サポートの有効化」を参照してください。

eksctl または AWS マネジメントコンソールを使用して、セルフマネージド型の Windonws ノードを起動できます。

eksctl

eksctl を使用してセルフマネージド型の Windows ノードを起動するには

この手順では、eksctl をインストール済みで、お使いの eksctl バージョンが 0.47.0 以上であることが必要です。 のバージョンは、以下のコマンドを使用して確認できます。

eksctl version

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

注記

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

  1. (オプション) AmazonEKS_CNI_Policy が管理する IAM ポリシーが Amazon EKS ノードの IAM ロール に添付されている場合は、代わりに Kubernetes aws-node サービスアカウントに関連付けた IAM ロールに割り当てることをお勧めします。詳細については、「サービスアカウントの IAM ロールを使用する VPC CNI プラグインの設定」を参照してください。

  2. この手順では、us-west-2 リージョンに「my-cluster」という名前の既存のクラスターがあることを前提としています。既存のクラスターが別にある場合は、値を変更します。Windows ノードグループを追加する先の Amazon EKS クラスターと Linux 2 ノードグループがまだない場合は、代わりに Amazon EKS の開始方法 – eksctl ガイドに従うことをお勧めします。このガイドは、Amazon Linux ノードで Amazon EKS クラスターを作成するための完全なエンドツーエンドのチュートリアルを提供します。

    次のコマンドを使用して、ノードグループを作成します。<example values> (<> を含む) を自分の値に置き換えます。

    重要

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

    eksctl create nodegroup \ --region <us-west-2> \ --cluster <my-cluster> \ --name <ng-windows> \ --node-type <t2.large> \ --nodes <3> \ --nodes-min <1> \ --nodes-max <4> \ --node-ami-family <WindowsServer2019FullContainer>
    注記
    • ノードがクラスターに参加できない場合は、トラブルシューティングガイドの「ノードをクラスターに結合できません」を参照してください。

    • eksctl コマンドで使用可能なオプションの詳細を確認するには、次のコマンドを入力します。

      eksctl <command> -help

    出力:

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

    [✔] created 1 nodegroup(s) in cluster "<my-cluster>"
  3. (オプション) サンプルアプリケーションをデプロイして クラスターと Windows ノードをテストします。

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

AWS Management Console

Prerequisites

  • 既存の Amazon EKS クラスターと Linux ノードグループ。これらのリソースがない場合は、Amazon EKS の使用開始 ガイドのいずれかに従って作成することをお勧めします。これらのガイドは、Linux ノードで Amazon EKS クラスターを作成するための完全なエンドツーエンドのチュートリアルを提供します。

  • Amazon EKS クラスターの要件を満たす、既存の VPC およびセキュリティグループ。詳細については、「クラスター VPC に関する考慮事項」および「Amazon EKS セキュリティグループの考慮事項」を参照してください。Amazon EKS の使用開始 ガイドでは、要件を満たす VPC を作成します。または、「Amazon EKS クラスター VPC の作成」に従って、手動で作成することもできます。

  • Amazon EKS クラスターの要件を満たす VPC およびセキュリティグループを使用している、既存の Amazon EKS クラスター。詳細については、「Amazon EKS クラスターの作成」を参照してください。AWS Outposts、AWS Wavelength、または AWS Local Zones が有効になっている AWS リージョンにサブネットがある場合は、クラスターの作成時にそれらのサブネットが渡されるべきではありません。

AWS マネジメントコンソールを使用してセルフマネージド型 Windows ノードを起動する

  1. クラスターステータスが ACTIVE と表示されるまで待ちます。クラスターがアクティブである前にノードを起動した場合、ノードはクラスターへの登録に失敗し、再起動する必要があります。

  2. https://console.aws.amazon.com/cloudformation で AWS CloudFormation コンソールを開きます。

  3. [Create stack] を選択します。

  4. [テンプレートの指定] で、[Amazon S3 URL] を選択し、次の URL をコピーして、[Amazon S3 URL] に貼り付けて、[次へ ] を 2 回選択します。

    https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-windows-nodegroup.yaml
  5. Quick create stack ページで、必要に応じて以下のパラメータを入力します。

    • スタック名: AWS CloudFormation スタックのスタック名を選択します。例えば、<cluster-name>-nodes と呼ぶことができます。

    • [ClusterName]: Amazon EKS クラスター用に作成した際に使用した名前を入力します。

      重要

      この名前は、「ステップ 1: Amazon EKS クラスターを作成する」で使用した名前と完全一致する必要があります。それ以外の場合、ノードにクラスターを結合できません。

    • [ClusterControlPlaneSecurityGroup]:VPC の作成時に生成した AWS CloudFormation 出力の [SecurityGroups] 値を選択します。

    • [NodeGroupName]: ノードグループの名前を入力します。この名前は、ノードに対して作成される Auto Scaling ノードグループを識別するために後で使用できます。

    • [NodeAutoScalingGroupMinSize]: ノードの Auto Scaling グループがスケールインする最小ノード数を入力します。

    • NodeAutoScalingGroupDesiredCapacity: スタック作成時にスケーリングする必要のあるノード数を入力します。

    • [NodeAutoScalingGroupMaxSize]: ノードの Auto Scaling グループがスケールアウトする最大ノード数を入力します。

    • [NodeInstanceType]: ノードのインスタンスタイプを選択します。

      注記

      最新バージョンの Amazon VPC CNI Plugin for Kubernetes でサポートされているインスタンスタイプをこちらに示します。サポートされている最新のインスタンスタイプを利用するには、CNI のバージョンを更新する必要があります。詳細については、「Amazon VPC CNI Plugin for Kubernetes のアップグレード」を参照してください。

    • [NodeImageIdSSMParam]: 現在推奨されている、Amazon EKS 最適化 Windows Core AMI ID の Amazon EC2 Systems Manager パラメータが事前に入力されています。Windows の通常版を使用する場合、<Core> は Full に置き換えます。

    • [NodeImageId]: (オプション) (Amazon EKS 最適化 AMI の代わりに) 独自のカスタム AMI を使用している場合は、リージョンのノード AMI ID を入力します。ここで値を指定すると、NodeImageIdSSMParam フィールドの値はすべて上書きされます。

    • [NodeVolumeSize]: ノードのルートボリュームサイズを GiB 単位で指定します。

    • [KeyName]: 起動後に、SSH を使用してノードに接続するときに使用できる Amazon EC2 SSH キーペアの名前を入力します。Amazon EC2 キーペアがまだない場合は、AWS マネジメントコンソールで作成できます。詳細については、Windows インスタンス用 Amazon EC2 ユーザーガイドの「Amazon EC2 キーペア」を参照してください。

      注記

      ここでキーペアを指定しないと、AWS CloudFormation スタックの作成は失敗します。

    • [BootstrapArguments]: -KubeletExtraArgs を使用して、kubelet の追加引数など、ノードブートストラップスクリプトに渡すオプションの引数を指定します。

    • [DisableIMDSv1]: 各ノードは、デフォルトでインスタンスメタデータサービスバージョン 1 (IMDSv1) および IMDSv2 をサポートしますが、IMDSv1 を無効にできます。ノードグループ内のノードや、ノードグループ内のノードでスケジュールされたポッドで IMDSv1 を使用しない場合は、[true] を選択します。IDMS の詳細については、「インスタンスメタデータサービスの設定」を参照してください。

    • [VpcId]: 作成した VPC の ID を選択します。

    • [NodeSecurityGroups]: VPC 作成時に Linux ノードグループ用に作成したセキュリティグループを選択します。Linux ノードに複数のセキュリティグループがアタッチされている場合 (Linux ノードグループが eksctl で作成された場合など)、それらのグループのすべてをここで指定します。

    • [サブネット]: 作成したサブネットを選択します。Amazon EKS クラスター VPC の作成 で説明されている手順を使用して VPC を作成した場合は、ノードの VPC 内で、起動するプライベートサブネットのみを指定します。

      重要
      • いずれかのサブネットがパブリックサブネットである場合は、パブリック IP アドレスの自動割り当て設定を有効にする必要があります。この設定がパブリックサブネットに対して有効になっていない場合、そのパブリックサブネットにデプロイするノードにはパブリック IP アドレスが割り当てられず、クラスターやその他の AWS のサービスと通信できなくなります。2020 年 3 月 26 日以前に、Amazon EKS AWS CloudFormation VPC テンプレートを使用して、または eksctl を使用してサブネットがデプロイされた場合、パブリックサブネットではパブリック IP アドレスの自動割り当てが無効になります。サブネットのパブリック IP アドレス割り当てを有効にする方法については、「サブネットのパブリック IPv4 アドレス属性の変更」を参照してください。ノードがプライベートサブネットにデプロイされている場合、NAT ゲートウェイを介してクラスターや他の AWS のサービスと通信できます。

      • サブネットにインターネットアクセスがない場合は、「プライベートクラスター」の考慮事項と追加の手順を確認してください

      • ノードを 1.18 以前のクラスターにデプロイしている場合は、選択したサブネットにクラスター名のタグが付いていることを確認してください。my-cluster (<> を含む) をクラスターの名前に置き換えてから、次のコマンドを実行して、現在クラスターの名前でタグ付けされているサブネットの、リストを表示します。

        aws ec2 describe-subnets --filters Name=tag:kubernetes.io/cluster/<my-cluster>,Values=shared | grep SubnetId

        前のコマンドの出力で、選択したいサブネットが返されなかった場合は、サブネットにタグを手動で追加する必要があります。詳細については、「サブネットのタグ付け」を参照してください。

      • AWS Outposts、AWS Wavelength、または AWS Local Zones サブネット を選択した場合は、クラスターの作成時にサブネットが渡されるべきではありません。

  6. スタックが IAM リソースを作成する可能性があることを確認し、[スタックの作成] を選択します。

  7. スタックの作成が完了したら、コンソールで選択し、[出力] を選択します。

  8. 作成されたノードグループの [NodeInstanceRole] を記録します。これは、Amazon EKS Windows ノードを設定するときに必要になります。

クラスターに参加させるためにノードを有効にするには

  1. AWS IAM Authenticator 設定マップをダウンロード、編集、適用します。

    1. 設定マップをダウンロードします。

      curl -o aws-auth-cm-windows.yaml https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/aws-auth-cm-windows.yaml
    2. 任意のテキストエディタでファイルを開きます。<ARN of instance role (not instance profile) of **Linux** node> および <ARN of instance role (not instance profile) of **Windows** node> スニペットを、Linux および Windows ノードで記録した NodeInstanceRoleの値で置き換え、ファイルを保存します。

      重要

      このファイルの他の行は変更しないでください。

      apiVersion: v1 kind: ConfigMap metadata: name: aws-auth namespace: kube-system data: mapRoles: | - rolearn: <ARN of instance role (not instance profile) of **Linux** node> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - rolearn: <ARN of instance role (not instance profile) of **Windows** node> username: system:node:{{EC2PrivateDNSName}} groups: - system:bootstrappers - system:nodes - eks:kube-proxy-windows
    3. 設定を適用します。このコマンドが完了するまで数分かかることがあります。

      kubectl apply -f aws-auth-cm-windows.yaml
      注記

      その他の認可またはリソースタイプのエラーが発生した場合は、トラブルシューティングセクションの「許可されていないか、アクセスが拒否されました (kubectl)」を参照してください。

      ノードがクラスターに参加できない場合は、トラブルシューティングガイドの「ノードをクラスターに結合できません」を参照してください。

  2. ノードのステータスを監視し、Ready ステータスになるまで待機します。

    kubectl get nodes --watch
  3. (オプション) サンプルアプリケーションをデプロイして クラスターと Windows ノードをテストします。

  4. (オプション) AmazonEKS_CNI_Policy が管理する IAM ポリシーが Amazon EKS ノードの IAM ロール に添付されている場合は、代わりに Kubernetes aws-node サービスアカウントに関連付けた IAM ロールに割り当てることをお勧めします。詳細については、「サービスアカウントの IAM ロールを使用する VPC CNI プラグインの設定」を参照してください。

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