AWS CLI を使用して EKS Auto Mode クラスターを作成する - アマゾン EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

AWS CLI を使用して EKS Auto Mode クラスターを作成する

EKS Auto Mode クラスターは、コンピューティング、ストレージ、ネットワーキングのルーティン化されたクラスター管理タスクを自動化します。例えば、EKS Auto Mode クラスターは、追加のノードが必要なタイミングを自動的に検出し、ワークロードの需要に合わせて新しい EC2 インスタンスをプロビジョニングします。

このトピックでは、AWS CLI を使用して新しい EKS Auto Mode クラスターを作成し、必要に応じてサンプルワークロードをデプロイする方法について説明します。

前提条件

  • AWS コマンドラインインターフェイス (AWS CLI) の最新バージョンがデバイスにインストールおよび設定されていること。現在のバージョンを確認するには「aws --version」を参照してください。最新バージョンをインストールするには、「AWS コマンドラインインターフェイスユーザーガイド」の「インストール」および「aws configure を使用したクイック設定」を参照してください。

    • 十分な IAM アクセス許可を使用して CLI にログインし、IAM ポリシー、IAM ロール、EKS クラスターなどの AWS リソースを作成します。

  • kubectl コマンドラインツールがデバイスにインストールされている。AWS では、EKS クラスターの Kubernetes バージョンと同じ kubectl バージョンを使用することをお勧めします。kubectl をインストールまたはアップグレードするには、「kubectl および eksctl のセットアップ」を参照してください。

VPC サブネットを指定する

Amazon EKS Auto Mode は、VPC サブネットにノードをデプロイします。EKS クラスターの作成時に、ノードをデプロイする VPC サブネットを指定する必要があります。AWS アカウントでデフォルトの VPC サブネットを使用するか、重要なワークロード専用の VPC を作成することができます。

AWS CLI の使用:

  1. 次のコマンドを実行して、デフォルト VPC とそのサブネットを一覧表示します。

    aws ec2 describe-subnets --filters "Name=vpc-id,Values=$(aws ec2 describe-vpcs --query 'Vpcs[?IsDefault==`true`].VpcId' --output text)" --query 'Subnets[*].{ID:SubnetId,AZ:AvailabilityZone}' --output table
  2. 出力を保存し、サブネット ID をメモします。

    サンプル出力:

    ----------------------------------------
    |             DescribeSubnets          |
    ----------------------------------------
    |   SubnetId        |   AvailabilityZone  |
    |--------------------|---------------------|
    |   subnet-012345678 |   us-west-2a        |
    |   subnet-234567890 |   us-west-2b        |
    |   subnet-345678901 |   us-west-2c        |
    ----------------------------------------

EKS Auto Mode クラスターの IAM ロール

クラスター IAM ロール

EKS Auto Mode では、新しい EC2 インスタンスのプロビジョニングなど、AWS アカウントでアクションを実行するのにクラスター IAM ロールが必要です。必要なアクセス許可を EKS に付与するには、このロールを作成する必要があります。AWS では、クラスター IAM ロールに次の AWS マネージドポリシーをアタッチすることをお勧めします。

ノード IAM ロール

EKS Auto Mode クラスターを作成する際に、ノード IAM ロールを指定します。EKS Auto Mode が保留中のワークロードを処理するノードを作成すると、新しい EC2 インスタンスノードごとにノード IAM ロールが割り当てられます。このロールにより、ノードは EKS と通信できますが、通常、ノードで実行されているワークロードからはアクセスされません。

ノードで実行されているワークロードにアクセス許可を付与する場合は、EKS Pod Identity を使用します。詳細については、「EKS Pod Identity が Pod に AWS サービスへのアクセス権を付与する仕組みを学ぶ」を参照してください。

このロールを作成し、次の AWS マネージドポリシーをアタッチする必要があります。

EKS Auto Mode には、AWS によって自動的に作成および設定されるサービスリンクロールも必要です。詳細については、「AWSServiceRoleForAmazonEKS」 に関するページを参照してください。

EKS Auto Mode クラスター IAM ロールを作成する

ステップ 1: 信頼ポリシーを作成する

Amazon EKS サービスがロールを引き受けることを許可する信頼ポリシーを作成します。ポリシーを trust-policy.json として保存します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "eks.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRole",
        "sts:TagSession"
      ]
    }
  ]
}

ステップ 2: IAM ロールを作成する

信頼ポリシーを使用して、クラスター IAM ロールを作成します。

aws iam create-role \
    --role-name AmazonEKSAutoClusterRole \
    --assume-role-policy-document file://trust-policy.json

ステップ 3: ロール ARN をメモする

以降のステップで使用する新しいロールの ARN を取得して保存します。

aws iam get-role --role-name AmazonEKSAutoClusterRole --query "Role.Arn" --output text

ステップ 4: 必要なポリシーをアタッチする

次の AWS マネージドポリシーをクラスター IAM ロールにアタッチして、必要なアクセス許可を付与します。

AmazonEKSClusterPolicy:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy

アマゾンEKSコンピュートポリシー:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSComputePolicy

アマゾンEKSブロックストレージポリシー:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSBlockStoragePolicy

アマゾンEKSロードバランシングポリシー:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSLoadBalancingPolicy

AmazonEKSNetworkingPolicy:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoClusterRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSNetworkingPolicy

EKS Auto Mode ノード IAM ロールを作成する

ステップ 1: 信頼ポリシーを作成する

Amazon EKS サービスがロールを引き受けることを許可する信頼ポリシーを作成します。ポリシーを node-trust-policy.json として保存します。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "ec2.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

ステップ 2: ノード IAM ロールを作成する

前のステップの node-trust-policy.json ファイルを使用して、ロールを引き受けることができるエンティティを定義します。次のコマンドを実行してノード IAM ロールを作成します。

aws iam create-role \
    --role-name AmazonEKSAutoNodeRole \
    --assume-role-policy-document file://node-trust-policy.json

ステップ 3: ロール ARN をメモする

ロールを作成したら、ノード IAM ロールの ARN を取得して保存します。以降のステップでこの ARN が必要になります。次のコマンドを使用して ARN を取得します。

aws iam get-role --role-name AmazonEKSAutoNodeRole --query "Role.Arn" --output text

ステップ 4: 必要なポリシーをアタッチする

次の AWS マネージドポリシーをノード IAM ロールにアタッチして、必要なアクセス許可を付与します。

AmazonEKSWorkerNodeMinimalPolicy:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoNodeRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodeMinimalPolicy

AmazonEC2ContainerRegistryPullOnly:

aws iam attach-role-policy \
    --role-name AmazonEKSAutoNodeRole \
    --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryPullOnly

EKS Auto Mode クラスターを作成する

概要

AWS CLI を使用して EKS Auto Mode クラスターを作成するには、次のパラメータが必要になります。

  • cluster-name: クラスターの名前。

  • k8s-version: Kubernetes バージョン (1.31 など)。

  • subnet-ids: 前のステップで特定したサブネット ID。

  • cluster-role-arn: クラスター IAM ロールの ARN。

  • node-role-arn: ノード IAM ロールの ARN。

デフォルトのクラスター設定

クラスターを作成する前に、以下のデフォルト値および機能を確認してください。

  • nodePools: EKS Auto Mode には、汎用ノードプールとシステムデフォルトノードプールが含まれています。「ノードプール」の詳細を確認してください。

注: EKS Auto Mode のノードプールは Amazon EKS マネージドノードグループとは異なりますが、同じクラスター内で共存できます。

  • computeConfig.enabled: EC2 インスタンスの作成や削除などのルーティン化されたコンピューティングタスクを自動化します。

  • kubernetesNetworkConfig.elasticLoadBalancing.enabled: Elastic Load Balancer の作成や削除などのロードバランシングタスクを自動化します。

  • storageConfig.blockStorage.enabled: Amazon EBS ボリュームの作成や削除などのストレージタスクを自動化します。

  • accessConfig.authenticationMode: EKS アクセスエントリを要求します。EKS 認証モードの詳細を確認してください。

コマンドを実行する

次のコマンドを使用してクラスターを作成します。

aws eks create-cluster \
  --region ${AWS_REGION} \
  --cli-input-json \
  "{
      \"name\": \"${CLUSTER_NAME}\",
      \"version\": \"${K8S_VERSION}\",
      \"roleArn\": \"${CLUSTER_ROLE_ARN}\",
      \"resourcesVpcConfig\": {
        \"subnetIds\": ${SUBNETS_JSON},
        \"endpointPublicAccess\": true,
        \"endpointPrivateAccess\": true
      },
      \"computeConfig\": {
        \"enabled\": true,
        \"nodeRoleArn\":\"${NODE_ROLE_ARN}\",
        \"nodePools\": [\"general-purpose\", \"system\"]
      },
      \"kubernetesNetworkConfig\": {
        \"elasticLoadBalancing\": {
          \"enabled\": true
        }
      },
      \"storageConfig\": {
        \"blockStorage\": {
          \"enabled\": true
        }
      },
      \"accessConfig\": {
        \"authenticationMode\": \"API\"
      }
    }

クラスターのステータスを確認する

ステップ 1: クラスターの作成を確認する

次のコマンドを実行して、クラスターのステータスを確認します。通常、クラスターの作成には約 15 分かかります。

aws eks describe-cluster --name "${CLUSTER_NAME}" --output json

ステップ 2: kubeconfig を更新する

クラスターの準備ができたら、ローカルの kubeconfig ファイルを更新して、kubectl がクラスターと通信できるようにします。この設定では、認証に AWS CLI を使用します。

aws eks update-kubeconfig --name "${CLUSTER_NAME}"

ステップ 3: ノードプールを検証する

次のコマンドを使用して、クラスター内のノードプールを一覧表示します。

kubectl get nodepools

次のステップ