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

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

Amazon EKS クラスターの作成

このトピックでは、Amazon EKS クラスターを作成する手順を説明します。Amazon EKS クラスターを初めて作成する場合は、いずれかの の使用を開始するAmazon EKS ガイドに従うことをお勧めします。ノードを含む Amazon EKS クラスターを作成するための完全なエンドツーエンドのチュートリアルを提供します。

重要

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

eksctl、、AWS マネジメントコンソールまたは を使用してクラスターを作成できますAWS CLI。クラスターを作成するツールの名前が付いているタブを選択します。

eksctl

Prerequisites

  • eksctl バージョン 0.36.0 以降がインストールされている。インストールまたはアップグレードするには、「」eksctl コマンドラインユーティリティを参照してください。

  • インストールkubectlする Kubernetes のバージョンと一致する のバージョン。インストールまたはアップグレードするには、「」のインストール kubectlを参照してください。

  1. デフォルトのリージョンでAmazon EKS、最新バージョンの Kubernetes を使用してクラスターを作成します。<example-values> ( を含む<>) を独自の値に置き換えます。は、<1.18>サポートされている任意のバージョンAmazon EKS Kubernetes バージョンに置き換えることができます。

    eksctl create cluster \ --name <my-cluster> \ --version <1.18> \ --with-oidc \ --without-nodegroup
    注記

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

    重要

    AWS Outposts、AWS Wavelength、または AWS ローカルゾーンが有効になっている AWS リージョンに、クラスターまたはノードを作成するときは、eksctl を使用しないでください。代わりに、Amazon EC2 API または AWS CloudFormation を使用して、クラスターとセルフマネージドノードを作成します。詳細については、「」および「を使用してセルフマネージド型 Windows ノードを起動するには AWS マネジメントコンソール」を参照してください。

    警告

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

    デフォルトでは、 create-key コマンドは、 アクションおよびリソースに対するアカウントのルートユーザー管理者アクセスを許可するキーポリシーを持つ対称AWS KMSキーを作成します。詳細については、「キーの作成.」を参照してください。アクセス許可の範囲を制限する場合は、 kms:DescribeKey API を呼び出すプリンシパルのキーポリシーで kms:CreateGrant および create-cluster アクションが許可されていることを確認します。 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
AWS マネジメントコンソール

Prerequisites

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

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

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

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

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

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

    • [Cluster service role – (クラスターサービスロール)] Amazon EKS クラスターロールを選択して、Kubernetes コントロールプレーンがユーザーに代わって AWS リソースを管理できるようにします。詳細については、「 」を参照してください。Amazon EKS クラスターの IAM ロール.

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

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

      注記

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

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

      警告

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

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

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

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

    • [–VPC] クラスターに使用する既存の VPC を選択します。何もリストされていない場合は、最初に作成する必要があります。詳細については、「 」を参照してください。Amazon EKS クラスター用の VPC の作成.

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

      重要

      March 26, 2020 より前に Amazon EKS AWS CloudFormation VPC テンプレートのいずれかを使用して作成されたサブネットを選択した場合は、March 26, 2020. にデプロイされたデフォルト設定の変更に注意してください。詳細については、「 」を参照してください。Amazon EKS クラスター用の VPC の作成.

      重要

      クラスターの作成時に AWS Outposts、AWS Wavelength、AWS Local Zone のいずれかのサブネットを選択しないでください。クラスターの作成後、クラスター名をタグとして AWS Outposts、AWS Wavelength、AWS Local Zone のいずれかに付けることができます。これにより、セルフマネージドノードをサブネットにデプロイできるようになります。詳細については、「サブネットのタグ付け要件」を参照してください。

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

      重要

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

    • (オプション)どの CIDR ブロックの Kubernetes からサービス IP アドレスを割り当てるかを指定する場合は、[Configure Kubernetes Service IP address range (Kubernetes サービス IP アドレス範囲の設定)] を選択し、[Service range (サービスIPv4範囲)] を指定します。CIDR ブロックは、次の要件を満たしている必要があります。

      • 10.0.0.0/8、172.16.0.0/12、または 192.168.0.0/16 のいずれかの範囲内です。

      • /24 と /12 の間であること。

      • VPC で指定された CIDR ブロックと重複しません。

      VPC にピア接続または接続されている他のネットワークと重複しない CIDR ブロックを指定することをお勧めします。これを有効にしない場合、Kubernetes は 10.100.0.0/16 または 172.20.0.0/16 CIDR ブロックからサービス IP アドレスを割り当てます。

      重要

      カスタム CIDR ブロックは、クラスターの作成時にのみ指定でき、クラスターの作成後にこの値を変更することはできません。

    • [クラスターエンドポイントアクセス–] で、次のいずれかのオプションを選択します。

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

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

        重要

        アウトバウンドインターネットアクセスのない VPC を作成した場合は、プライベートアクセスを有効にする必要があります。

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

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

  6. 前のページで Kubernetes バージョン 1.17 以前を選択した場合は、次のステップに進みます。バージョン 1.18 を選択した場合は、[Networking add-ons (ネットワークアドオン)] セクションのデフォルト値をそのまま使用してAWS、VPC CNI Amazon EKS アドオンの最新バージョンをインストールします。Amazon EKS アドオンは、Kubernetes 1.18 まで使用できなかったサーバー側適用 Kubernetes 機能を必要とするため、 1.18 クラスターでのみAmazon EKSアドオンを使用できます。クラスターに別の Kubernetes バージョンを選択した場合、このオプションは表示されません。

    重要

    AWS VPC CNI アドオンは、 に割り当てられたIAMアクセス許可を使用するように設定されていますAmazon EKS ノードIAMロール。クラスターの作成後、クラスターにAmazon EC2ノードをデプロイする前にAmazonEKS_CNI_PolicyIAM、ポリシーがノードIAMロール、またはアドオンが実行される Kubernetes サービスアカウントに関連付けられた別のロールにアタッチされていることを確認する必要があります。「」の手順を実行して、ポリシーをノードIAMロールとは異なるIAMロールに割り当てることをお勧めしますサービスアカウントの IAM ロールを使用するように VPC CNI プラグインを設定する。クラスターとIAMロールが作成されたら、作成したロールを使用するようにアドオンIAMを更新できます。

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

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

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

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

    注記
    注記

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

    クラスターのプロビジョニングには数分かかります。

  11. (オプション) Amazon EKS アドオンを使用するか、個々の Kubernetes ワークロードに特定のIAMアクセス許可を付与するには、クラスターに対して OpenID 接続 (OIDC) プロバイダーを有効にする必要があります。クラスターの OIDC プロバイダーを設定するにはクラスターの IAM OIDC プロバイダーを作成する、「」を参照してください。クラスターの OIDC プロバイダーを 1 回のみ有効にする必要があります。Amazon EKS アドオンの詳細については、「」Amazon EKS アドオンを設定するを参照してください。ワークロードに特定のIAMアクセス許可を割り当てる方法の詳細については、「」技術概要を参照してください。

  12. 「」の手順に従ってkubeconfig の を作成する Amazon EKS、新しいクラスターとの通信を有効にします。

  13. (オプション) ノードをクラスターにデプロイする前に、クラスターでデプロイされた AWS VPC CNI プラグインを設定して、サービスアカウントの IAM ロールを使用することをお勧めします。詳細については、「 」を参照してください。サービスアカウントの IAM ロールを使用するように VPC CNI プラグインを設定する.

AWS CLI

Prerequisites

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

  1. 以下のコマンドを使用して、クラスターを作成します。「」で作成したAmazon リソースネーム (ARN)クラスターAmazon EKSロールIAMの Amazon EKS クラスターの IAM ロール と、「」で作成した VPC IDs のサブネットおよびセキュリティグループを置き換えますAmazon EKS クラスター用の VPC の作成。を置き換える <my-cluster> ( を含む) <>) を選択します<region-code>https://docs.aws.amazon.com/general/latest/gr/eks.html#eks_region。は、<1.18>サポートされている任意のバージョンAmazon EKS Kubernetes バージョンに置き換えることができます。

    aws eks create-cluster \ --region <region-code> \ --name <my-cluster> \ --kubernetes-version <1.18> \ --role-arn <arn:aws:iam::111122223333:role/eks-service-role-AWSServiceRoleForAmazonEKS-EXAMPLEBKZRQR> \ --resources-vpc-config subnetIds=<subnet-a9189fe2>,<subnet-50432629>,securityGroupIds=<sg-f5c54184>
    重要

    AWS Outposts、AWS Wavelength、または AWS ローカルゾーンでサブネットを指定しないでください。リージョン内のサブネットのみを指定します。クラスターのデプロイ後、セルフマネージドノードのデプロイ先となるサブネットに、AWS Outposts、AWS Wavelength、または AWS ローカルゾーンをクラスター名でタグ付けします。詳細については、「サブネットのタグ付け要件」を参照してください。

    注記

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

    出力:

    { "cluster": { "name": "<my-cluster>", "arn": "arn:aws:eks:<region-code>:<111122223333>:cluster/<my-cluster>", "createdAt": <1527785885.159>, "version": "<1.18>", "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キーを作成します。アクセス許可の範囲を絞り込む場合は、kms:DescribeKey API を呼び出すプリンシパルのキーポリシーで、kms:CreateGrant および create-cluster アクションが許可されていることを確認します。

    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 にアクセスできる必要があります。詳細については、 https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html 開発者ガイドの「他の アカウントのユーザーの CMKAWS Key Management Service の使用を許可する」を参照してください。AWS KMS CMK を使用した Kubernetes シークレット暗号化には、Kubernetes バージョン 1.13 以降が必要です。

    警告

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

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

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

    1. を取得します。endpoint.

      aws eks --region <region-code> describe-cluster --name <my-cluster> --query "cluster.endpoint" --output text
    2. を取得します。certificateAuthority.data.

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

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