Amazon EKS クラスターの作成 - Amazon EKS

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

Amazon EKS クラスターの作成

このトピックでは、Amazon EKS クラスターを作成する手順を説明します。Amazon EKS クラスターを初めて作成する場合は、いずれかの Amazon EKS の開始方法 ガイドに従うことをお勧めします。完全なエンドツーエンドのウォークスルーを提供し、 Amazon EKS クラスタにノードがあります。

重要

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

AWS CLI をインストールして設定する場合は、ユーザーの IAM 認証情報を設定できます。AWS CLI バージョン 1.16.156 以降がユーザーに対して適切に設定されている場合は、eksctl はそれらの認証情報を検索できます。詳細については、AWS Command Line Interface ユーザーガイドの「AWS CLI の設定」を参照してください。AWS CLI バージョン 1.16.156 以降をインストールできない場合は、aws-iam-authenticator をインストールする必要があります。

Prerequisites

AWS CLI バージョン 1.16.156 以降または aws-iam-authenticator がインストールされている必要があります。詳細については、「AWS CLI をインストールする」または「インストール中 aws-iam-authenticator」を参照してください。

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

eksctl

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

この手順には、eksctl バージョン 0.26.0 以降が必要です。お使いのバージョンは、以下のコマンドを使用して確認できます。

eksctl version

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

  1. デフォルトのリージョンに、Amazon EKS の最新 Kubernetes バージョンを使用してクラスターを作成します。置換 my-cluster 自分の価値で。

    eksctl create cluster \ --name my-cluster \ --version 1.17 \ --without-nodegroup
    注記

    eksctl を使用してクラスターを作成するときに指定できるほとんどのオプションを表示するには、eksctl create cluster --help コマンドを使用します。すべてのオプションを表示するには、設定ファイルを使用できます。詳細については、eksctl ドキュメントの「Using config files」と「config file schema」を参照してください。設定ファイルの例は、GitHub で見つけることができます。

    警告

    secretsEncryption オプションが設定された設定ファイルを使用して、既存の AWS Key Management Service キーが必要なクラスターを作成した場合、使用するキーが削除されると、クラスターを復旧できなくなります。エンベロープ暗号化を有効にすると、選択したカスタマーマスターキー (CMK) を使用して Kubernetes シークレットが暗号化されます。CMK は対称で、クラスターと同じリージョンで作成する必要があります。CMK が別のアカウントで作成されている場合は、ユーザーが CMK にアクセスできる必要があります。詳細については、以下を参照してください。 他のアカウントのユーザーにCMKの使用を許可するAWS Key Management Service 開発者ガイド. AWS KMS CMK を使用した Kubernetes シークレット暗号化には、Kubernetes バージョン 1.13 以降が必要です。

    デフォルトでは、create-key コマンドは、アカウントのルートユーザーに AWS KMS アクションとリソースに対する管理者アクセスを付与するキーポリシーを持つ対称キーを作成します。詳細については、「キーの作成」を参照してください。権限の範囲を絞り込む場合は、 kms:DescribeKey および kms:CreateGrant は、 create-cluster API。 Amazon EKS は、重要なポリシー条件をサポートしていません。 kms:GrantIsForAWSResource。 このアクションがキーポリシーステートメントにある場合、クラスタの作成は機能しません。

    クラスターのプロビジョニングには数分かかります。クラスターの作成中に、数行の出力が表示されます。出力の最後の行は、次のサンプル行のようになります。

    [✓] EKS cluster "my-cluster" in "region-code" region is ready
  2. クラスターの準備ができたら、kubectl 設定が正しいことをテストします。

    kubectl get svc
    注記

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

    出力

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
  3. (オプション) ポッドをクラスター内の AWS Fargate で実行する場合は、「Fargate ポッド実行ロールを作成する」と「クラスターの Fargate プロファイルを作成する」を参照してください。

  4. の手順に従ってください。 自己管理型の起動 Amazon Linux ノード Linuxノードをクラスタに追加してワークロードをサポートします。

  5. (オプション)Linuxノードをクラスタに追加した後、 Windows サポート Windowsサポートをクラスタに追加し、Windowsノードを追加します。すべて Amazon EKS クラスタには、クラスタでWindowsワークロードのみを実行する場合でも、少なくとも1つのLinuxノードが含まれている必要があります。

AWS マネジメントコンソール

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

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

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

  2. [Create cluster] を選択します。

    注記

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

  3. [Configure cluster (クラスターの設定)] ページで、次のフィールドに入力します。

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

    • Kubernetes version (Kubernetes バージョン) – クラスターで使用する Kubernetes のバージョン。

    • Cluster service role – Choose the Amazon EKS cluster role to allow the Kubernetes control plane to manage AWS resources on your behalf. For more information, see Amazon EKS クラスターの IAM ロール.

    • シークレットの暗号化 – (オプション) AWS Key Management Service (AWS KMS) を使用して Kubernetes シークレットのエンベロープ暗号化を有効にするよう選択します。エンベロープ暗号化を有効にすると、選択したカスタマーマスターキー (CMK) を使用して Kubernetes シークレットが暗号化されます。CMK は対称で、クラスターと同じリージョンで作成する必要があります。CMK が別のアカウントで作成されている場合は、ユーザーが CMK にアクセスできる必要があります。詳細については、『AWS Key Management Service 開発者ガイド』の「他のアカウントのユーザーに CMK の使用を許可する」を参照してください。

      AWS KMS CMK を使用した Kubernetes シークレット暗号化には、Kubernetes バージョン 1.13 以降が必要です。キーが一覧表示されていない場合は、最初にキーを作成する必要があります。詳細については、「キーの作成」を参照してください。

      注記

      By default, the create-key command creates a symmetric key with a key policy that gives the account's root user admin access on AWS KMS actions and resources. If you want to scope down the permissions, make sure that the kms:DescribeKey and kms:CreateGrant actions are permitted on the key policy for the principal that will be calling the create-cluster API.

      Amazon EKS does not support the key policy condition kms:GrantIsForAWSResource. Creating a cluster will not work if this action is in the key policy statement.

      警告

      Deletion of the CMK will permanently put the cluster in a degraded state. If any CMKs used for cluster creation are scheduled for deletion, verify that this is the intended action before deletion. Once the key is deleted, there is no path to recovery for the cluster.

    • [タグ] –(オプション)クラスターにタグを追加します。詳細については、「Amazon EKS リソースのタグ付け」を参照してください。

  4. [Next (次へ)] を選択します。

  5. [Specify networking (ネットワーキングの指定)] ページで、次のフィールドの値を選択します。

    • VPC – Select an existing VPC to use for your cluster. If none are listed, then you need to create one first. For more information, see Amazon EKS クラスター用の VPC の作成.

    • Subnets – By default, the available subnets in the VPC specified in the previous field are preselected. Select any subnet that you don't want to host cluster resources, such as worker nodes or load balancers. The subnets must meet the requirements for an Amazon EKS cluster. For more information, see クラスター VPC に関する考慮事項.

      重要

      If you select subnets that were created before 03/26/2020 using one of the Amazon EKS AWS CloudFormation VPC templates, be aware of a default setting change that was introduced on 03/26/2020. For more information, see Amazon EKS クラスター用の VPC の作成.

    • セキュリティグループ – 「Amazon EKS クラスター VPC を作成する」で生成した AWS CloudFormation 出力の [SecurityGroups] 値。このセキュリティグループのドロップダウン名は [ControlPlaneSecurityGroup] です。

      重要

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

    • [Cluster endpoint access (クラスターエンドポイントのアクセス)] の場合 – 次のいずれかのオプションを選択します。

      • パブリック – クラスターの Kubernetes API サーバーエンドポイントへのパブリックアクセスのみを有効にします。クラスターの VPC の外部から送信される Kubernetes API リクエストは、パブリックエンドポイントを使用します。デフォルトでは、任意の送信元 IP アドレスからのアクセスが許可されます。たとえば、必要に応じて、[詳細設定] を選択し、次に [Add source (ソースの追加)] を選択して、192.168.0.0/16 などの 1 つ以上の CIDR 範囲へのアクセスを制限できます。

      • プライベート – クラスターの Kubernetes API サーバーエンドポイントへのプライベートアクセスのみを有効にします。クラスターの VPC 内から送信される Kubernetes API リクエストは、プライベート VPC エンドポイントを使用します。

        重要

        If you created a VPC without outbound internet access, then you must enable private access.

      • Public and private (パブリックおよびプライベート) – パブリックおよびプライベートアクセスを有効にします。

      前のオプションの詳細については、「クラスターエンドポイントのアクセスの変更」を参照してください。

  6. [Next (次へ)] を選択します。

  7. [ログ記録の構成] ページで、有効にするログタイプをオプションで選択できます。各ログタイプは、デフォルトで [無効] になっています。詳細については、「Amazon EKS コントロールプレーンのログ記録」を参照してください。

  8. [Next (次へ)] を選択します。

  9. [確認と作成] ページで、前のページで入力または選択した情報を確認します。選択内容を変更する必要がある場合は、[編集] を選択します。設定が適切であることを確認したら、[作成] を選択します。クラスターのプロビジョニングプロセスが完了するまで、[状況] フィールドには [作成中] と表示されます。

    注記

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

    Cluster provisioning usually takes between 10 and 15 minutes.

  10. Now that you have created your cluster, follow the procedures in インストール中 aws-iam-authenticator and kubeconfig を Amazon EKS 用に作成します。 to enable communication with your new cluster.

  11. (Optional) If you want to run pods on AWS Fargate in your cluster, see Amazon EKS を使用した AWS Fargate の開始方法.

  12. After you enable communication, follow the procedures in 自己管理型の起動 Amazon Linux ノード to add Linux worker nodes to your cluster to support your workloads.

  13. (Optional) After you add Linux worker nodes to your cluster, follow the procedures in Windows サポート to add Windows support to your cluster and to add Windows worker nodes. All Amazon EKS clusters must contain at least one Linux worker node, even if you only want to run Windows workloads in your cluster.

AWS CLI

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

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

  1. 以下のコマンドを使用して、クラスターを作成します。「Amazon EKS クラスターの IAM ロールの作成」で作成した Amazon EKS クラスターの IAM ロールの Amazon リソースネーム (ARN) をクラスター名として代わりに使用し、「Amazon EKS クラスター VPC を作成する」で作成した VPC のサブネットとセキュリティグループ ID を代わりに使用します。

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

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

    出力

    { "cluster": { "name": "devel", "arn": "arn:aws:eks:region-code:111122223333:cluster/devel", "createdAt": 1527785885.159, "version": "1.17", "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 つ以上のサブネットを使用して、クラスターを作成します。詳細については、「容量不足」を参照してください。

    AWS Key Management Service (AWS KMS) からのカスタマーマスターキー (CMK) を使用して Kubernetes シークレットを暗号化するには、最初に create-key オペレーションを使用して CMK を作成します。

    MY_KEY_ARN=$(aws kms create-key --query KeyMetadata.Arn —-output text)
    注記

    デフォルトでは、create-key コマンドは、アカウントのルートユーザーに AWS KMS アクションとリソースに対する管理者アクセスを付与するキーポリシーを持つ対称キーを作成します。アクセス許可の範囲を絞り込む場合は、create-cluster API を呼び出すプリンシパルのキーポリシーで、kms:DescribeKey および kms:CreateGrant アクションが許可されていることを確認します。

    Amazon EKS は、重要なポリシー条件をサポートしていません。 kms:GrantIsForAWSResource。 このアクションがキーポリシーステートメントにある場合、クラスタの作成は機能しません。

    --encryption-config パラメータを aws eks create-cluster コマンドに追加します。Kubernetes シークレットの暗号化は、クラスターの作成時にのみ有効にできます。

    --encryption-config '[{"resources":["secrets"],"provider":{"keyArn":"$MY_KEY_ARN"}}]'

    keyArn メンバーには、CMK のエイリアスまたは ARN のいずれかを含めることができます。CMK は対称で、クラスターと同じリージョンで作成する必要があります。CMK が別のアカウントで作成されている場合は、ユーザーが CMK にアクセスできる必要があります。詳細については、以下を参照してください。 他のアカウントのユーザーにCMKの使用を許可するAWS Key Management Service 開発者ガイド. AWS KMS CMK を使用した Kubernetes シークレット暗号化には、Kubernetes バージョン 1.13 以降が必要です。

    警告

    CMK を削除すると、クラスターは永続的にパフォーマンスが低下した状態になります。クラスターの作成に使用する CMK の削除がスケジュールされている場合は、削除する前に、これが意図したアクションであることを確認します。キーが削除された場合、クラスターを復旧することはできません。

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

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

    1. endpoint の取得

      aws eks --region region-code describe-cluster --name devel --query "cluster.endpoint" --output text
    2. certificateAuthority.data の取得

      aws eks --region region-code describe-cluster --name devel --query "cluster.certificateAuthority.data" --output text
  4. クラスターを作成したら、「kubeconfig を Amazon EKS 用に作成します。」の手順に従って、新しいクラスターとの通信を有効にします。

  5. (オプション) ポッドをクラスター内の AWS Fargate で実行する場合は、「Amazon EKS を使用した AWS Fargate の開始方法」を参照してください。

  6. 通信を有効にした後、 自己管理型の起動 Amazon Linux ノード ワークロードをサポートするためにクラスタにノードを追加します。

  7. (オプション)Linuxノードをクラスタに追加した後、 Windows サポート Windowsサポートをクラスタに追加し、Windowsノードを追加します。すべて Amazon EKS クラスタには、クラスタでWindowsワークロードのみを実行する場合でも、少なくとも1つのLinuxノードが含まれている必要があります。