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 ロールの管理 コンソールを使用してクラスターを作成する場合は、クラスター上で AWS コマンドを実行する際、同じ IAM ユーザー認証情報が kubectl SDK 認証情報チェーンにあることを確認する必要があります。

クラスターは、eksctl、AWS Management Console、AWS CLI のいずれかを使用して作成できます。

eksctl

Prerequisite

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

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

eksctl create cluster \ --name <my-cluster> \ --version <1.21> \ --with-oidc \ --without-nodegroup
ヒント

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

重要

クラスターのデプロイ後に、AWS Outposts、AWS Wavelength、または AWS Local Zones にセルフマネージド型ノードをデプロイする場合は、Amazon EKS の要件を満たす既存の VPC が必要です。また、前出のコマンドの実行時には、--vpc-private-subnets オプションを指定します。この際も、AWS Outposts、AWS Wavelength、または AWS Local Zones のサブネット ID を指定することはできません。既存の VPC の使用方法の詳細については、 ドキュメントの「Use existing VPC: other custom configuration (既存 VPC の使用: その他のカスタム設定)eksctl」を参照してください。

警告

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

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

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

[✓] EKS cluster "<my-cluster>" in "<region-code>" region is ready

1.18 以降のクラスターを作成した場合、クラスターとデプロイした Amazon VPC CNI、CoreDNS、kube-proxy アドオンを Amazon EKS アドオンに追加できます。詳細については、「」を参照してくださいAmazon EKS アドオン

AWS Management Console

Prerequisites

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

  1. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソールを開きます。

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

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

    • [Name (名前)] – クラスターの一意の名前。

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

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

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

      キーが一覧表示されていない場合は、最初にキーを作成する必要があります。詳細については、「キーの作成」を参照してください。

      注記

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

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

      警告

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

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

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

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

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

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

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

      • AWS Outposts、AWS Wavelength、または AWS Local Zones ではサブネットを選択しないでください。クラスターのデプロイ後に AWS Outposts、AWS Wavelength、または AWS Local Zones サブネットにセルフマネージド型ノードをデプロイする計画の場合は、選択した VPC 内に Outposts サブネットがあること (存在しない場合は作成できること) を確認します。

      [Security groups (セキュリティグループ)] – VPC を作成した際に AWS CloudFormation 出力から生成した、SecurityGroups の値です。このセキュリティグループのドロップダウン名は [ControlPlaneSecurityGroup] です。

      重要

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

    • (オプション) Kubernetes がサービス IP アドレスの割り当てに使用する CIDR ブロックを指定する場合は、[Configure Kubernetes Service IP address range (Kubernetes サービスの IP アドレス範囲を設定)] を選択して、[Service IPv4 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 ブロックは、クラスターの作成時にのみ指定でき、クラスターの作成後にこの値を変更することはできません。

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

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

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

        重要

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

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

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

  6. 前のページで Kubernetes バージョン 1.17 以前を選択している場合は、次のステップに進んでください。バージョン 1.18 以降を選択した場合は、ネットワーキングアドオンセクションのデフォルトを選択し、AWSVPC CNICoreDNS、およびkube-proxy Amazon EKS アドオンのデフォルトバージョンのインストールを選択するか、または別のバージョンも選択できます。アドオンの機能が不要な場合は、クラスターの作成後に削除できます。

    Amazon EKS アドオンには、サーバー側の Apply Kubernetes 機能が必要となりますが、この機能は Kubernetes 1.18 より前のバージョンでは利用できないため、Amazon EKS アドオンが使用可能なのはバージョン 1.18 以降のみとなります。クラスターに別の Kubernetes バージョンを選択している場合には、このオプションは表示されません。

    重要

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

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

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

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

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

    注記

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

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

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

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

  13. Amazon EC2 ノードをクラスターにデプロイする場合は、AmazonEKS_CNI_Policy IAM 管理ポリシーを、クラスター IAM ロール、または Amazon VPC CNI アドオン用に特別に作成した IAM ロールのいずれかにアタッチします。ロールの作成および使用に際するアドオンの設定の詳細については、サービスアカウントの IAM ロールを使用する Amazon VPC CNI プラグインの設定 を参照してください。

AWS CLI

Prerequisites

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

  1. 以下のコマンドを使用して、クラスターを作成します。Amazon リソースネーム (ARN) を、「Amazon EKS クラスター の IAM ロール」 で作成した Amazon EKS クラスターの IAM ロールのものに置き換えます。また、VPC のサブネットおよびセキュリティグループ ID は「Amazon EKS クラスター VPC の作成」で作成したものに置き換えます。<my-cluster> (<>) を含む) を自分のクラスター名に置き換え、<region-code>サポートされているリージョンに置き換えます。<1.21> は、サポートされている任意のバージョンに置き換えることができます。

    subnetIds については、AWS Outposts、AWS Wavelength、または AWS Local Zones でサブネットを指定しないでください。。クラスターのデプロイ後に AWS Outposts、AWS Wavelength、または AWS Local Zones サブネットにセルフマネージド型ノードをデプロイする計画の場合は、指定した VPC 内にOutposts サブネットがあること (存在しない場合は作成できること) を確認します。

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

    Kubernetes シークレットを暗号化するには、最初に create-key オペレーションを使用して KMS キーを作成します。

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

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

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

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

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

    keyArn メンバーには、KMS キーのエイリアスまたは ARN のいずれかを含めることができます。KMS キーは対称で、クラスターと同じリージョンで作成する必要があります。KMS キーが別のアカウントで作成されている場合は、ユーザーが KMS キーにアクセスできる必要があります。詳細については、AWS Key Management Serviceデベロッパーガイドの「他のアカウントのユーザーに KMS キーの使用を許可する」を参照してください。

    警告

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

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

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

    1. endpoint を取得します。

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

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

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

  6. Amazon EC2 ノードをクラスターにデプロイする場合は、AmazonEKS_CNI_Policy IAM 管理ポリシーを、クラスター IAM ロール、または Amazon VPC CNI アドオン用に特別に作成した IAM ロールのいずれかにアタッチします。ロールの作成および使用に際するアドオンの設定の詳細については、サービスアカウントの IAM ロールを使用する Amazon VPC CNI プラグインの設定 を参照してください。

  7. (オプション) 1.18 以降のクラスターを作成した場合、クラスターとデプロイした Amazon VPC CNI、CoreDNS、kube-proxy アドオンを Amazon EKS アドオンに追加できます。詳細については、「」を参照してくださいAmazon EKS アドオン