Amazon EKS
ユーザーガイド

Amazon EKS クラスターの作成

このトピックでは、Amazon EKS クラスターを作成する手順を説明します。

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

重要

Amazon EKS クラスターが作成されたら、クラスターを作成する IAM エンティティ (ユーザーまたはロール) は、管理者 (system:master アクセス許可が付与されている) として Kubernetes RBAC 認証テーブルに追加されます。最初は、その IAM ユーザーだけが kubectl を使用して Kubernetes API サーバーを呼び出すことができます。詳細については、「クラスターのユーザーまたは IAM ロールの管理」を参照してください。コンソールを使用してクラスターを作成する場合は、クラスター上で kubectl コマンドを実行する際、同じ IAM ユーザー認証情報が AWS SDK 認証情報チェーンにあることを確認する必要があります。

AWS CLI をインストールして設定する場合は、ユーザーの IAM 認証情報を設定できます。AWS CLI がユーザーに対して適切に設定されている場合は、eksctl および AWS IAM Authenticator for Kubernetes でこれらの認証情報も検索できます。詳細については、AWS Command Line Interface ユーザーガイド の「AWS CLI の設定」を参照してください。

以下から必要なクラスター作成方法に対応するタブを選択します。

eksctlAWS マネジメントコンソールAWS CLI
eksctl

eksctl を使用してクラスターとワーカーノードを作成するには

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

eksctl version

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

  1. 以下のコマンドを使用して Amazon EKS クラスターとワーカーノードを作成します。赤いテキストは独自の値に置き換えてください。

    重要

    Kubernetes バージョン 1.10 は Amazon EKS でサポートされなくなりました。新しい 1.10 クラスターを作成することはできなくなりました。Kubernetes バージョン 1.10 を実行しているすべての既存の Amazon EKS クラスターは、Kubernetes バージョン 1.11 を利用可能な最新のプラットフォームバージョンに最終的に自動的に更新されます。詳細については、「Amazon EKS バージョンの廃止」を参照してください。

    サービスの中断を防ぐため、1.10 クラスターはバージョン 1.11 以降に更新してください。詳細については、「Amazon EKS クラスターの Kubernetes バージョンの更新」を参照してください。

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

    注記

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

    eksctl create cluster --help

    出力:

    [ℹ] using region us-west-2 [ℹ] setting availability zones to [us-west-2b us-west-2c us-west-2d] [ℹ] subnets for us-west-2b - public:192.168.0.0/19 private:192.168.96.0/19 [ℹ] subnets for us-west-2c - public:192.168.32.0/19 private:192.168.128.0/19 [ℹ] subnets for us-west-2d - public:192.168.64.0/19 private:192.168.160.0/19 [ℹ] nodegroup "standard-workers" will use "ami-0923e4b35a30a5f53" [AmazonLinux2/1.12] [ℹ] creating EKS cluster "prod" in "us-west-2" region [ℹ] will create 2 separate CloudFormation stacks for cluster itself and the initial nodegroup [ℹ] if you encounter any issues, check CloudFormation console or try 'eksctl utils describe-stacks --region=us-west-2 --name=prod' [ℹ] building cluster stack "eksctl-prod-cluster" [ℹ] creating nodegroup stack "eksctl-prod-nodegroup-standard-workers" [✔] all EKS cluster resource for "prod" had been created [✔] saved kubeconfig as "/Users/ericn/.kube/config" [ℹ] adding role "arn:aws:iam::111122223333:role/eksctl-prod-nodegroup-standard-wo-NodeInstanceRole-IJP4S12W3020" to auth ConfigMap [ℹ] nodegroup "standard-workers" has 0 node(s) [ℹ] waiting for at least 1 node(s) to become ready in "standard-workers" [ℹ] nodegroup "standard-workers" has 2 node(s) [ℹ] node "ip-192-168-22-17.us-west-2.compute.internal" is not ready [ℹ] node "ip-192-168-32-184.us-west-2.compute.internal" is ready [ℹ] kubectl command should work with "/Users/ericn/.kube/config", try 'kubectl get nodes' [✔] EKS cluster "prod" in "us-west-2" region is ready
  2. クラスターのプロビジョニングには通常、10 ~ 15 分かかります。クラスターの準備ができたら、kubectl 設定が正しいことをテストします。

    kubectl get svc

    注記

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

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

    出力:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
  3. (GPU ワーカーのみ) P2 または P3 インスタンスタイプと 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
AWS マネジメントコンソール

コンソールを使用してクラスターを作成するには

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

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

  2. [クラスターの作成] を選択します。

    注記

    IAM ユーザーに管理者権限がない場合は、Amazon EKS API オペレーションを呼び出すために、そのユーザーのアクセス許可を明示的に追加する必要があります。詳細については、「Amazon EKS アイデンティティベースのポリシーの例」を参照してください。

  3. [クラスターを作成] ページで、以下のフィールドに入力し、[作成] を選択します。

    • クラスター名 – クラスターの一意の名前。

    • Kubernetes version (Kubernetes バージョン) – クラスターで使用する Kubernetes のバージョン。アプリケーションで特定の Kubernetes バージョンを必要としない限り、Amazon EKS で利用可能な最新バージョンを使用することをお勧めします。

      重要

      Kubernetes バージョン 1.10 は Amazon EKS でサポートされなくなりました。新しい 1.10 クラスターを作成することはできなくなりました。Kubernetes バージョン 1.10 を実行しているすべての既存の Amazon EKS クラスターは、Kubernetes バージョン 1.11 を利用可能な最新のプラットフォームバージョンに最終的に自動的に更新されます。詳細については、「Amazon EKS バージョンの廃止」を参照してください。

      サービスの中断を防ぐため、1.10 クラスターはバージョン 1.11 以降に更新してください。詳細については、「Amazon EKS クラスターの Kubernetes バージョンの更新」を参照してください。

    • ロール名 – Amazon EKS および Kubernetes コントロールプレーンがユーザーに代わって AWS リソースを管理するための Amazon EKS サービスロールを選択します。詳細については、「Amazon EKS IAM ロール」を参照してください。

    • VPC – クラスターに使用する VPC。

    • サブネット – クラスターに使用する上記の VPC 内のサブネット。デフォルトでは、VPC の利用可能なサブネットがあらかじめ選択されています。クラスターのリソースをホストするすべてのサブネットを指定します (ワーカーノード用のプライベートサブネットやロードバランサー用のパブリックサブネットなど)。サブネットは Amazon EKS クラスターの要件を満たしている必要があります。詳細については、「クラスター VPC に関する考慮事項」を参照してください。

    • セキュリティグループ – クラスターのクロスアカウントの Elastic Network Interface に適用される上記の VPC 内のセキュリティグループを 1 つ以上指定します (上限は 5 つ)。クラスターおよびワーカーノードのセキュリティグループは Amazon EKS クラスターの要件を満たす必要があります。詳細については、「クラスターセキュリティグループの考慮事項」を参照してください。

      重要

      ここで指定するセキュリティグループは、ワーカーノード AWS CloudFormation テンプレートによって変更されるため、Amazon EKS では、クラスターコントロールプレーンごとに専用のセキュリティグループを使用することを強くお勧めします (クラスターごとに 1 つ)。セキュリティグループが他のリソースと共有されている場合は、これらのリソースへの接続をブロックまたは妨害する可能性があります。

    • Endpoint private access (エンドポイントへのプライベートアクセス) – クラスターの Kubernetes API サーバーエンドポイントに対するプライベートアクセスを有効にするか無効にするかを選択します。プライベートアクセスを有効にした場合、クラスターの VPC 内から送信される Kubernetes API リクエストは、プライベート VPC エンドポイントを使用します。詳細については、「Amazon EKS クラスターエンドポイントのアクセスコントロール」を参照してください。

    • Endpoint public access (エンドポイントへのパブリックアクセス) – クラスターの Kubernetes API サーバーエンドポイントに対するパブリックアクセスを有効にするか無効にするかを選択します。パブリックアクセスを無効にした場合、クラスターの Kubernetes API サーバーは、クラスター VPC 内からのリクエストのみを受信できます。詳細については、「Amazon EKS クラスターエンドポイントのアクセスコントロール」を参照してください。

    • ログ記録 – ログタイプごとに、そのログタイプを [有効] にするか [無効] にするかを選択します。各ログタイプは、デフォルトで [無効] になっています。詳細については、「Amazon EKS コントロールプレーンのログ記録」を参照してください。

    注記

    リクエスト内のアベイラビリティーゾーンのいずれかに、Amazon EKS クラスターを作成するのに十分なキャパシティーがないというエラーが表示される場合があります。この場合、エラー出力には、新しいクラスターをサポートできるアベイラビリティーゾーンが含まれます。アカウント向けにサポートされているアベイラビリティーゾーンにある 2 つ以上のサブネットを使用して、クラスターを作成します。詳細については、「容量不足」を参照してください。

  4. [クラスター] ページで、新しいクラスターの名前を選択してクラスター情報を表示します。

  5. クラスターのプロビジョニングプロセスが完了するまで、[状況] フィールドには [作成中] と表示されます。クラスターのプロビジョニングが完了したら (通常 10 ~ 15 分)、[API サーバーエンドポイント] および [認証機関] 値を書き留めます。これらは、kubectl 設定で使用されます。

  6. クラスターを作成したら、aws-iam-authenticator のインストール および kubeconfig を Amazon EKS 用に作成します。 の手順に従って、新しいクラスターとの通信を有効にします。

  7. 通信を有効にしたら、ワークロードをサポートするために「Amazon EKS ワーカーノードを起動する」の手順に従ってクラスターにワーカーノードを追加します。

AWS CLI

AWS CLI を使用してクラスターを作成するには

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

  1. 以下のコマンドを使用して、クラスターを作成します。「Amazon EKS サービスロールを作成する」で作成したクラスター名、Amazon EKS サービスロールの Amazon リソースネーム (ARN)、および 「Amazon EKS クラスター VPC を作成する」で作成した VPC のサブネットおよびセキュリティグループ ID を置き換えます。

    重要

    Kubernetes バージョン 1.10 は Amazon EKS でサポートされなくなりました。新しい 1.10 クラスターを作成することはできなくなりました。Kubernetes バージョン 1.10 を実行しているすべての既存の Amazon EKS クラスターは、Kubernetes バージョン 1.11 を利用可能な最新のプラットフォームバージョンに最終的に自動的に更新されます。詳細については、「Amazon EKS バージョンの廃止」を参照してください。

    サービスの中断を防ぐため、1.10 クラスターはバージョン 1.11 以降に更新してください。詳細については、「Amazon EKS クラスターの Kubernetes バージョンの更新」を参照してください。

    aws eks --region region create-cluster --name devel --kubernetes-version 1.13 \ --role-arn arn:aws:iam::111122223333:role/eks-service-role-AWSServiceRoleForAmazonEKS-EXAMPLEBKZRQR \ --resources-vpc-config subnetIds=subnet-a9189fe2,subnet-50432629,securityGroupIds=sg-f5c54184

    重要

    次のような構文エラーが表示された場合は、プレビューバージョンの Amazon EKS 用 AWS CLI を使用している可能性があります。 コマンドの多くの構文は、パブリックサービスの公開後に変更されています。AWS CLI を利用可能な最新のバージョンに更新し、~/.aws/models/eks のカスタムサービスモデルディレクトリを削除してください。

    aws: error: argument --cluster-name は必須です。

    注記

    IAM ユーザーに管理者権限がない場合は、Amazon EKS API オペレーションを呼び出すために、そのユーザーのアクセス許可を明示的に追加する必要があります。詳細については、「Amazon EKS アイデンティティベースのポリシーの例」を参照してください。

    出力:

    { "cluster": { "name": "devel", "arn": "arn:aws:eks:us-west-2:111122223333:cluster/devel", "createdAt": 1527785885.159, "version": "1.13", "roleArn": "arn:aws:iam::111122223333:role/eks-service-role-AWSServiceRoleForAmazonEKS-AFNL4H8HB71F", "resourcesVpcConfig": { "subnetIds": [ "subnet-a9189fe2", "subnet-50432629" ], "securityGroupIds": [ "sg-f5c54184" ], "vpcId": "vpc-a54041dc", "endpointPublicAccess": true, "endpointPrivateAccess": false }, "status": "CREATING", "certificateAuthority": {} } }

    注記

    リクエスト内のアベイラビリティーゾーンのいずれかに、Amazon EKS クラスターを作成するのに十分なキャパシティーがないというエラーが表示される場合があります。この場合、エラー出力には、新しいクラスターをサポートできるアベイラビリティーゾーンが含まれます。アカウント向けにサポートされているアベイラビリティーゾーンにある 2 つ以上のサブネットを使用して、クラスターを作成します。詳細については、「容量不足」を参照してください。

  2. クラスターのプロビジョニングには通常、10 ~ 15 分かかります。クラスターのステータスのクエリを実行するには、次のコマンドを使用します。クラスターステータスが ACTIVE の場合は、続行できます。

    aws eks --region region describe-cluster --name devel --query cluster.status
  3. クラスターのプロビジョニングが完了したら、次のコマンドを使用して endpoint および certificateAuthority.data を取得します。これらの値を kubectl 設定に追加する必要があります。これにより、クラスターと通信できるようになります。

    1. endpoint を取得します。

      aws eks --region region describe-cluster --name devel --query cluster.endpoint --output text
    2. certificateAuthority.data を取得します。

      aws eks --region region describe-cluster --name devel --query cluster.certificateAuthority.data --output text
  4. クラスターを作成したら、aws-iam-authenticator のインストール および kubeconfig を Amazon EKS 用に作成します。 の手順に従って、新しいクラスターとの通信を有効にします。

  5. 通信を有効にしたら、ワークロードをサポートするために「Amazon EKS ワーカーノードを起動する」の手順に従ってクラスターにワーカーノードを追加します。