Amazon EKS Linux ワーカーノードの起動 - Amazon EKS

Amazon EKS Linux ワーカーノードの起動

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

Amazon EKS Linux ワーカーノードを初めて起動する場合は、代わりに Amazon EKS の開始方法 ガイドに従うことをお勧めします。これらのガイドは、Amazon EKS クラスターとワーカーノードを作成するための完全なエンドツーエンドのチュートリアルを提供します。

重要

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

以下から必要なワーカーノード作成方法に対応するタブを選択します。

Amazon EKS managed node groups

マネージド型ノードグループ は、Kubernetes バージョン 1.14 およびプラットフォームバージョンで始まる Amazon EKS クラスターでサポートされていますeks.3。既存のクラスターは、この機能を利用するために、バージョン 1.14 以降に更新できます。詳細については、「Amazon EKS クラスターの Kubernetes バージョンの更新」を参照してください。

マネージド型ノードグループを起動するには

  1. クラスターステータスが ACTIVE と表示されるまで待ちます。まだ ACTIVE ではないクラスターにはマネージド型ノードグループを作成できません。

  2. Open the Amazon EKS console at https://console.aws.amazon.com/eks/home#/clusters.

  3. マネージド型ノードグループを作成するクラスターの名前を選択します。

  4. [クラスター] ページで、[Add node group (ノードグループの追加)] を選択します。

  5. [Configure node group (ノードグループの設定)] ページで、必要に応じてパラメータを指定し、[次へ] を選択します。

    • [名前] — マネージド型ノードグループの一意の名前を入力します。

    • [ノード IAM ロール名] — ノードグループで使用するノードインスタンスロールを選択します。詳細については、「Amazon EKS ワーカーノード IAM ロール」を参照してください。

      重要

      セルフマネージドノードグループによって現在使用されていないロールを使用するか、新しいセルフマネージドノードグループで使用する予定のロールを使用することをお勧めします。詳細については、「マネージド型ノードグループの削除」を参照してください。

    • [サブネット] — マネージド型ノードを起動するサブネットを選択します。

      重要

      Amazon EBS ボリュームによってバックアップされ、Kubernetes Cluster Autoscaler を使用する複数のアベイラビリティーゾーンにわたってステートフルアプリケーションを実行している場合、それぞれが単一のアベイラビリティーゾーンにスコープされる複数のノードグループを設定する必要があります。また、--balance-similar-node-groups 機能を有効にする必要があります。

      重要

      パブリックサブネットを選択した場合、インスタンスがクラスターに正常に参加するには、そのサブネットの MapPublicIpOnLaunch を true に設定する必要があります。サブネットが 03/26/2020 以降に eksctl または Amazon EKS から発行された AWS CloudFormation テンプレートを使用して作成されている場合、この設定はすでに true に設定されています。サブネットが 03/26/2020 より前に eksctl または AWS CloudFormation テンプレートを使用して作成されている場合は、設定を手動で変更する必要があります。詳細については、「サブネットの IPv4 アドレス指定属性の変更」を参照してください。

    • [リモートアクセス] —(オプション)マネージド型ノードグループ内のノードへの SSH アクセスを有効にすることができます。SSH を有効にすることにより、インスタンスに接続し、問題がある場合に診断情報を収集できます。リモートアクセスを有効にするには、以下の手順に従います。

      注記

      ノードグループを作成するときは、リモートアクセスを有効にすることを強くお勧めします。ノードグループの作成後にリモートアクセスを有効にすることはできません。

      1. [Allow remote access to nodes (ノードへのリモートアクセスを許可する)] チェックボックスをオンにします。

      2. [SSH キーペア] の場合は、使用する Amazon EC2 SSH キーを選択します。詳細については、『Linux インスタンス用 Amazon EC2 ユーザーガイド』の「Amazon EC2 のキーペア」を参照してください。

      3. [Allow remote access from (許可するリモートアクセス元)] で、[すべて] を選択してインターネット上の任意の場所 (0.0.0.0/0) から SSH アクセスを許可するか、セキュリティグループを選択して、そのセキュリティグループに属するインスタンスからの SSH アクセスを許可します。

    • [タグ] —(オプション)Amazon EKS マネージド型ノードグループにタグを付けるように選択できます。これらのタグは、Auto Scaling グループやインスタンスなど、ノードグループ内の他のリソースには伝達されません。詳細については、「Amazon EKS リソースのタグ付け」を参照してください。

    • [Kubernetes labels (Kubernetes ラベル)] —(オプション)マネージド型ノードグループ内のノードに Kubernetes ラベルを適用するように選択できます。

  6. [Set compute configuration (コンピューティング構成の設定)] ページで、必要に応じてパラメータを指定し、[次へ] を選択します。

    • [AMI タイプ] — GPU 以外のインスタンスの場合は [Amazon Linux 2 (AL2_x86_64)] を選択し、GPU インスタンスの場合は [Amazon Linux 2 GPU Enabled (AL2_x86_64_GPU) (Amazon Linux 2 GPU 有効 (AL2_x86_64_GPU))] を選択します。

    • [インスタンスタイプ] — マネージド型ノードグループで使用するインスタンスタイプを選択します。大きいインスタンスタイプほど、多くのポッドに対応できます。

    • [ディスクサイズ] — ワーカーノードのルートボリュームに使用するディスクサイズ(GiB 単位)を入力します。

  7. [Setup scaling policies (スケーリングポリシーの設定)] ページで、必要に応じてパラメータを入力し、[次へ] を選択します。

    注記

    Amazon EKS は、ノードグループを自動的にスケールインまたはスケールアウトしません。ただし、これを行うように Kubernetes Cluster Autoscaler を設定することはできます。

    • [最小サイズ] — マネージド型ノードグループがスケールインできるワーカーノードの最小数を指定します。

    • [最大サイズ] — マネージド型ノードグループがスケールアウトできるワーカーノードの最大数を指定します。

    • [必要なサイズ] — マネージド型ノードグループが起動時に保持する必要があるワーカーノードの現在の数を指定します。

  8. [確認と作成] ページで、マネージド型ノードグループの設定を確認し、[作成] を選択します。

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

    kubectl get nodes --watch
  10. (GPU ワーカーのみ) GPU インスタンスタイプと Amazon EKS 最適化 AMI GPU 対応を選択した場合は、NVIDIA device plugin for Kubernetes を、次のコマンドを使ってクラスターに設定されたデーモンセットとして適用しなければなりません。

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta/nvidia-device-plugin.yml
eksctl

eksctl を使用してワーカーノードを起動するには

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

eksctl version

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

注記

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

  1. 以下のコマンドを使用して、ワーカーノードグループを作成します。example の値は独自の値に置き換えます。

    eksctl create nodegroup \ --cluster default \ --version auto \ --name standard-workers \ --node-type t3.medium \ --node-ami auto \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4
    注記

    eksctl create nodegroup の使用可能なオプションの詳細については、GitHub の README プロジェクトを参照するか、以下のコマンドでヘルプページを参照してください。

    eksctl create nodegroup --help

    出力:

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

    [ℹ] all nodegroups have up-to-date configuration
  2. (オプション) ゲストブックアプリケーションを起動する — サンプルアプリケーションをデプロイして、クラスターと Linux ワーカーノードをテストします。

Self-managed nodes

これらの手順には、以下の前提条件があります。

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

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

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

  3. [スタックの作成] を選択します。

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

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

    • Stack name: AWS CloudFormation スタックのスタック名を選択します。たとえば、<cluster-name>- ワーカーノードと呼ぶことができます。

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

      重要

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

    • ClusterControlPlaneSecurityGroup: 「Amazon EKS クラスター 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 が最適化された Linux AMI ID の Amazon EC2 Systems Manager パラメータが事前に入力されています。GPU で AMI を使用する場合は、amazon-linux-2amazon-linux-2-gpu に置き換えます。Amazon EKS でサポートされている別の Kubernetes マイナーバージョンを使用する場合は、1.161.151.14、または 1.13 に置き換えることができます。

      注記

      Amazon EKS ワーカーノード AMI は、Amazon Linux 2 に基づいています。Amazon Linux 2 のセキュリティまたはプライバシーイベントは、Amazon Linux セキュリティセンターで追跡するか、関連付けられた RSS フィードでサブスクライブできます。セキュリティおよびプライバシーイベントには、問題の概要、影響を受けるパッケージ、および問題を修正するためにインスタンスを更新する方法などがあります。

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

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

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

      注記

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

    • BootstrapArguments: kubelet の追加引数など、ワーカーノードブートストラップスクリプトに渡すオプションの引数を指定します。詳細については、https://github.com/awslabs/amazon-eks-ami/blob/master/files/bootstrap.sh でブートストラップスクリプトの使用情報を参照してください。

    • VpcId: 「Amazon EKS クラスター VPC を作成する」で作成した VPC の ID を入力します。

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

      重要

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

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

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

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

ワーカーノードをクラスターと結合するには

  1. AWS IAM オーセンティケーター設定マップをダウンロード、編集、適用します。

    1. 次のコマンドを使用して設定マップをダウンロードします。

      curl -o aws-auth-cm.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-04-21/aws-auth-cm.yaml
    2. 任意のテキストエディタでファイルを開きます。インスタンスロールの <インスタンスのロールの ARN (インスタンスプロファイルではない)> スニペットを、前の手順で記録した [NodeInstanceRole] の値に置き換え、ファイルを保存します。

      重要

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

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

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

      "aws-iam-authenticator": executable file not found in $PATH エラーが発生した場合、kubectl は、Amazon EKS に設定されていません。詳細については、「aws-iam-authenticator のインストール」を参照してください。

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

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

    kubectl get nodes --watch
  3. (GPU ワーカーのみ) GPU インスタンスタイプと Amazon EKS 最適化 AMI GPU 対応を選択した場合は、NVIDIA device plugin for Kubernetes を、次のコマンドを使ってクラスターに設定されたデーモンセットとして適用しなければなりません。

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta/nvidia-device-plugin.yml
  4. (オプション) ゲストブックアプリケーションを起動する — サンプルアプリケーションをデプロイして、クラスターと Linux ワーカーノードをテストします。