Amazon EKS の開始方法 – AWS Management Console と AWS CLI - Amazon EKS

Amazon EKS の開始方法 – AWS Management Console と AWS CLI

このガイドでは、AWS Management Console と AWS CLI を使用して、Amazon Elastic Kubernetes Service (Amazon EKS) を使用開始するために必要なすべてのリソースを作成する方法を解説します。ここでは、各リソースを手動で作成します。このチュートリアルの終わりには、アプリケーションのデプロイが可能な、実行状態の Amazon EKS クラスターが完成します。

このガイドの手順に従うと、各リソースがどのように作成され、リソース間でどのようにやり取りするかを全面的に把握できます。大半のリソースを自動的に作成させたい場合には、クラスターとノードの作成に eksctl CLI を使用します。詳細については、「Amazon EKS の開始方法 – eksctl」を参照してください。

Prerequisites

このチュートリアルを開始する前に、Amazon EKS クラスターの作成と管理に必要な次のツールとリソースを、インストールおよび設定しておく必要があります。

  • AWS CLI – Amazon EKS など AWS のサービスを操作するためのコマンドラインツールです。このガイドでは、バージョン 2.2.37 以降または 1.20.40 以降の使用を想定しています。詳細については、 ユーザーガイドの、「AWS CLI のインストール、更新、およびアンインストールAWS Command Line Interface」を参照してください。AWS CLI のインストール後は、設定も行っておくことをお勧めします。詳細については、AWS Command Line Interface ユーザーガイドの「aws configure でクイック設定」を参照してください。

  • kubectl – Kubernetes クラスターを操作するためのコマンドラインツール。このガイドでは、バージョン 1.21 以降を使用していることを想定しています。詳細については、「」を参照してくださいkubectl のインストール

  • IAM からの必要なアクセス許可 – ここで使用する IAM セキュリティプリンシパルには、Amazon EKS の IAM ロールおよびサービスにリンクされたロール、AWS CloudFormation、ならびに VPC とその関連リソースを操作するための権限が必要となります。詳細については、IAM ユーザーガイドの「Amazon Elastic Container Service for Kubernetes のアクション、リソース、および条件キー」、および「サービスにリンクされたロールの使用」を参照してください。このガイドのすべての手順は、1 つのユーザーとして実行する必要があります。

ステップ 1: Amazon EKS クラスターを作成する

Amazon EKS クラスターを作成します。

重要

可能な限りシンプルかつ迅速に使用を開始するため、このトピックでは、クラスターとノードをデフォルト設定で作成する手順について説明します。実稼働で使用するクラスターとノードを作成する際には、すべての設定内容に習熟した上で、ご自身の要件を満たす設定でクラスターとノードをデプロイし直すことをお勧めします。詳細については、「Amazon EKS クラスターの作成」および「Amazon EKS ノード」を参照してください。

クラスターを作成するには

  1. Amazon EKS の要件を満たすように、パブリックサブネットとプライベートサブネットを持つ Amazon VPC を作成します。値の例を独自のものに置き換えることもできますが、このチュートリアルの例の値を使用することをお勧めします。

    aws cloudformation create-stack \ --region us-west-2 \ --stack-name my-eks-vpc-stack \ --template-url https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml
  2. クラスターの IAM ロールを作成して、そのロールに必要な Amazon EKS IAM 管理ポリシーをアタッチします。Amazon EKS によって管理される Kubernetes クラスターは、そのサービスで使用するリソースを管理するために、ユーザーに代わって他の AWS のサービスを呼び出します。

    1. 次の内容を cluster-role-trust-policy.json という名前のファイルにコピーします。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. ロールを作成します。

      aws iam create-role \ --role-name myAmazonEKSClusterRole \ --assume-role-policy-document file://"cluster-role-trust-policy.json"
    3. このロールに、必要な Amazon EKS 管理の IAM ポリシーをアタッチします。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy \ --role-name myAmazonEKSClusterRole
  3. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソール を開きます。

    コンソールの右上で選択したリージョンが Oregonであることを確認してください。選択されていない場合は、リージョン名の横にあるドロップダウンを選択し、米国西部 (オレゴン) us-west-2を選択してください。クラスターは、のAmazon EKS 対応リージョンで作成できますが、このチュートリアルでは、米国西部 (オレゴン) us-west-2 で作成されています。

  4. [Create cluster (クラスターの作成)] を選択します。このオプションが表示されない場合は、[Create EKS cluster (EKS クラスターの作成)] ボックスにクラスター名 (my-cluster など) を入力し、[Next step (次のステップ)] を選択します。

  5. [Configure cluster (クラスターの設定)] ページでクラスター名 (my-cluster など) を入力し、[Cluster Service Role (クラスターサービスロール)] で [myAmazonEKSClusterRole] を選択します。その他の設定はデフォルト値のままにし、[Next (次へ)] を選択します。

  6. [Specify networking (ネットワークの指定)]ページで、VPC のドロップダウンリストから、[vpc-00x0000x000x0x000 | my-eks-vpc-stack-VPC] を選択します。その他の設定はデフォルト値のままにし、[Next (次へ)] を選択します。

  7. [Configure logging (ログ記録の設定)]ページで、[Next (次へ)] を選択します。

  8. [Review and create (確認して作成)] ページで、[Create (作成)] を選択します。

    クラスターのプロビジョニングプロセスが完了するまで、数分の間、クラスター名の右側でステータスが [Creating (作成中)] と表示されます。ステータスが [Active (アクティブ)] になるまで、次のステップに進まないでください。

    注記

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

ステップ 2: 自分のコンピュータでクラスターとの通信を設定する

このセクションでは、クラスター用の kubeconfig ファイルを作成します。このファイルの設定により、kubectl CLI からクラスターへの通信ができるようになります。

クラスターと通信するようにコンピュータを設定するには

  1. クラスター用の kubeconfig ファイルを作成もしくは更新します。必要に応じて、us-west-2 をクラスターを作成したリージョンに置き換えます。

    aws eks update-kubeconfig \ --region us-west-2 \ --name my-cluster

    デフォルトでは、config ファイルが ~/.kube に作成されるか、config ファイルが既に ~/.kube に存在する場合には、その中に新しいクラスター設定が追加されます。

  2. 設定をテストします。

    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: IAM OpenID Connect (OIDC) プロバイダーを作成する

クラスター用に、IAM OpenID Connect (OIDC) プロバイダーを作成して、ワークロードで使用される Kubernetes サービスアカウントから、AWS リソースにアクセスできるようにします。1 つのクラスター用に、このステップを完了する必要があるのは 1 回だけです。

  1. [Configuration (設定)] タブを選択します。

  2. [Details (詳細)] セクションで、[OpenID Connect provider URL (OpenID Connect プロバイダーのURL)] に表示された値をコピーします。

  3. https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

  4. ナビゲーションパネルで、[Identity Providers (ID プロバイダー)] を選択します。

  5. [Add Provider (プロバイダを追加] を選択します。

  6. [Provider Type (プロバイダータイプ)] で、[OpenID Connect] を選択します。

  7. [Provider URL (プロバイダ URL)] に、ステップ 2 で取得したクラスター用の OIDC プロバイダー URL を貼り付け、[Get thumbprint (サムプリントを取得)] を選択します。

  8. [Audience (対象者)] に sts.amazonaws.com を入力し、[Add provider (プロバイダを追加)] を選択します。

ステップ 4 ノードを作成する

クラスターの作成には、次のいずれかのノードタイプが使用できます。各タイプの詳細については、「Amazon EKS ノード」を参照してください。クラスターをデプロイした後に、他のノードタイプを追加できます。

  • Fargate – Linux – AWS Fargate で Linux アプリケーションを実行する場合は、このタイプを選択します。

  • マネージド型ノード – Linux – Amazon EC2 インスタンスで Amazon Linux アプリケーションを実行する場合は、このタイプを選択します。このガイドでは説明していませんが、Windows セルフマネージド型および Bottlerocket ノードを、クラスターに追加することもできます。クラスターで Windows ワークロードのみを実行する場合でも、クラスターには 1 つ以上の Linux ノードが含まれている必要があります。

作成するノードの名前が付いているタブを選択します。

Fargate – Linux

Fargate プロファイルを作成します。デプロイされる Kubernetes ポッドが、このプロファイルで定義される基準を満たしている場合、そのポッドは Fargate にデプロイされます。

Fargate プロファイルを作成するには

  1. IAM ロールを作成して、必要な Amazon EKS IAM 管理ポリシーをアタッチします。クラスターが Fargate インフラストラクチャ上にポッドを作成する場合、そのインフラストラクチャで実行されコンポーネントは、ユーザーに代わり AWS API の呼び出しを行う必要があります。この API により、Amazon ECR からのコンテナイメージの取得や、他の AWS のサービスへのログのルーティングなどが処理されます、Amazon EKS のポッド実行ロールにより、これらを行うための IAM アクセス許可が付与されます。

    1. 次の内容を pod-execution-role-trust-policy.json という名前のファイルにコピーします。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "eks-fargate-pods.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. ポッド実行 IAM ロールを作成します。

      aws iam create-role \ --role-name myAmazonEKSFargatePodExecutionRole \ --assume-role-policy-document file://"pod-execution-role-trust-policy.json"
    3. このロールに、必要な Amazon EKS 管理の IAM ポリシーをアタッチします。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy \ --role-name myAmazonEKSFargatePodExecutionRole
  2. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソール を開きます。

  3. Fargate プロファイルを作成するクラスターを選択し、[Configuration (設定)] タブ、[Compute (コンピューティング)] タブの順に選択します。

  4. [Fargate profiles (Fargate プロファイル)] で、[Add Fargate profile (Fargate プロファイルを追加)] を選択します。

  5. [Configure Fargate profile (Fargate プロファイルの設定) ] ページで以下の情報を入力し、[Next (次へ) ] を選択します。

    1. [名前] に、Fargate プロファイルの一意の名前 (my-profile など) を入力します。

    2. [Pod execution role (ポッド実行ロール)] では、ステップ 1 で作成した myAmazonEKSFargatePodExecutionRole ロールを選択します。

    3. [Subnets (サブネット)] のドロップダウンを展開し、名前に Public を含むすべてのサブネットの選択を解除します。Fargate で実行されるポッドでは、プライベートサブネットのみがサポートされます。

  6. [Configure pods selection (ポッドの設定)] ページで以下の情報を入力し、[Next (次へ)] を選択します。

    1. [Namespace] に default と入力します。

  7. [Review and create (確認と作成)] ページで、Fargate プロファイルの情報を確認し、[Create (作成)] を選択します。

Managed nodes – Linux

前の手順で作成したサブネットとノード IAM ロールを指定しながら、マネージド型ノードグループを作成します。

Amazon EC2 Linux マネージド型ノードグループを作成するには

  1. Amazon VPC CNI プラグイン用に IAM ロールを作成し、必要な Amazon EKS IAM マネージド型ポリシーをアタッチします。Amazon EKS Amazon VPC CNI プラグインは、デフォルトでクラスターにインストールされています。プラグインは、VPC から各ポッドに IP アドレスを割り当てます。

    1. 次の内容を cni-role-trust-policy.json という名前のファイルにコピーします。111122223333 は自分のアカウント ID に置き換えます。また、XXXXXXXXXX45D83924220DC4815XXXXX[OpenID Connect provider URL (OpenID Connect プロバイダーのURL)] の値の最後にある / に置き換えます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/XXXXXXXXXX45D83924220DC4815XXXXX" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.<region-code>.amazonaws.com/id/XXXXXXXXXX45D83924220DC4815XXXXX:sub": "system:serviceaccount:kube-system:aws-node" } } } ] }
    2. Amazon VPC CNI プラグイン用の IAM ロールを作成します。

      aws iam create-role \ --role-name myAmazonEKSCNIRole \ --assume-role-policy-document file://"cni-role-trust-policy.json"
    3. このロールに、必要な Amazon EKS 管理の IAM ポリシーをアタッチします。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name myAmazonEKSCNIRole
  2. VPC CNI プラグインで使用される Kubernetes サービスアカウントを、作成した IAM ロールに関連付けます。111122223333 をアカウント ID に置き換えます。

    aws eks update-addon \ --region us-west-2 \ --cluster-name my-cluster \ --addon-name vpc-cni \ --service-account-role-arn arn:aws:iam::111122223333:role/myAmazonEKSCNIRole
  3. ノードの IAM ロールを作成して、必要な Amazon EKS IAM 管理ポリシーをアタッチします。Amazon EKS ノード kubelet デーモンが、ユーザーに代わって AWS API への呼び出しを実行します。ノードは、IAM インスタンスプロファイルおよび関連ポリシーを通じて、これらの API コールのアクセス許可を受け取ります。

    1. 次の内容を node-role-trust-policy.json という名前のファイルにコピーします。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. ノードの IAM ロールを作成します。

      aws iam create-role \ --role-name myAmazonEKSNodeRole \ --assume-role-policy-document file://"node-role-trust-policy.json"
    3. このロールに、必要な Amazon EKS 管理 IAM ポリシーをアタッチします。

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \ --role-name myAmazonEKSNodeRole aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \ --role-name myAmazonEKSNodeRole
  4. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソール を開きます。

  5. ステップ 1: Amazon EKS クラスターを作成する で作成したクラスター名 (my-cluster など) を選択します。

  6. [Configuration (設定)] タブを選択します。

  7. [Configuration (設定)] タブで、[Compute (コンピューティング)] タブを選択した後、[Add Node Group (ノードグループを追加)] を選択します。

  8. [Configure node group (ノードグループの設定)] ページで、次のパラメータを指定し、残りの値はデフォルトを受け入れて、[Next (次へ)] を選択します。

    • [Name (名前)] – マネージド型ノードグループの一意の名前 (my-nodegroup など) を入力します。

    • [Node IAM role name (ノードの IAM ロール名)] – [myAmazonEKSNodeRole] を選択します。この入門ガイドでは、このロールはこのノードグループにのみ使用し、他のノードグループには使用しないでください。

  9. [Set compute and scaling configuration (コンピューティングとスケーリングの設定)] ページではデフォルトの値を受け入れ、[] を選択します。

  10. [ネットワークの指定] ページで、SSH key pair で使用する既存のキーペアを選択し、[Next (次へ)] を選択します。既存のキーペアがない場合は、次のコマンドを使用して作成します。必要に応じ us-west-2 は、クラスターを作成したリージョンに置き換えます。このコマンドの出力は、必ずローカルコンピュータ上のファイルに保存してください。詳細については、Linux インスタンス用の Amazon EC2 ユーザーガイド「キーペアの作成またはインポート」を参照してください。このガイドでは、キーは必須ではありません。ただし、ノードグループの作成時には使用するキーを指定することが可能です。キーを指定することで、作成されたノードに対し SSH による接続ができるようになります。

    aws ec2 create-key-pair --region us-west-2 --key-name myKeyPair
  11. [確認と作成] ページで、マネージド型ノードグループの設定を確認し、[作成] を選択します。

  12. 数分後、[Node Group configuration (ノードグループの設定)] セクションにある [Status (ステータス)] の表示が、[Creating (作成中)] から [Active (アクティブ)] に変わります。ステータスが [Active (アクティブ)] になるまで、次のステップに進まないでください。

ステップ 5: リソースの表示

ノードと Kubernetes のワークロードを表示することができます。

ノードを表示するには

  1. 左側のペインで [Clusters (クラスター)] を選択し、[Clusters (クラスター)] のリストから、作成したクラスター名 (my-cluster など) を選択します。

  2. [Overview (概要)] タブに、クラスターにデプロイした [Nodes (ノード)] が一覧表示されます。ノードの名前を選択すると、そのノードに関する詳細情報が表示されます。ここに表示される内容の詳細については、「ノードを表示する」参照してください。

  3. クラスターの [Workloads (ワークロード)] タブに、Amazon EKS クラスターにデフォルトでデプロイされたワークロードが一覧表示されます。ワークロードの名前を選択すると、それに関する詳細情報が表示されます。ここに表示される内容の詳細については、「ワークロードの表示」参照してください。

ステップ 6: クラスターとノードを削除する

このチュートリアルの中で作成したクラスターとノードを使用し終えたら、クリーンアップのために、それらのクラスターとノードを削除する必要があります。クリーンアップせずに、他の目的でこのクラスターを使用する場合は、「次の手順」を参照してください。

クラスターとノードを削除するには

  1. すべてのノードグループと Fargate プロファイルを削除します。

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

    2. 左側のナビゲーションペインで [Clusters (クラスター)] を選択し、クラスターのリストから削除するクラスター名を選択します。

    3. [Configuration (設定)] タブを選択します。[Compute (コンピューティング)] タブで、次を行います。

      • 前のステップで作成したノードグループを選択し、[Delete (削除)] を選択します。ノードグループの名前を入力し、[Delete (削除)] を選択します。

      • 前のステップで作成した [Fargate Profile (Fargate プロファイル)] を選択し、[Delete (削除)] を選択します。プロファイルの名前を入力し、[Delete (削除)] を選択します。。

  2. クラスターを削除します。

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

    2. 削除するクラスターを選択し、[Delete (削除)] を選択します。

    3. クラスターの削除確認画面で、[Delete (削除)] を選択します。

  3. このガイドで作成した VPC AWS CloudFormation スタックを削除します。

    1. https://console.aws.amazon.com/cloudformation で AWS CloudFormation コンソール を開きます。

    2. 削除する VPC スタックを選択し、[Delete (削除)] を選択します。

    3. [Delete Stack (スタックの削除)] 確認画面で、[Delete stack (スタックを削除)] を選択します

  4. 作成した IAM ロールを削除します。

    1. https://console.aws.amazon.com/iam/ で IAM コンソールを開きます。

    2. 左のナビゲーションペインで、[Roles (ロール)] を選択します。

    3. リストで、[myAmazonEKSClusterRole] を選択します。[Delete role (ロールの削除)] 、[Yes, Delete (はい、削除します)] の順に選択します。作成した myAmazonEKSFargatePodExecutionRole または myAmazonEKSNodeRole ロールを削除し、また、myAmazonEKSCNIRole ロールを作成している場合はこれも削除します。

次の手順

この段階で、ノードが備わった Amazon EKS クラスターが実行状態になっています。次のステップでは、Kubernetes アドオンのインストールと、クラスターへのアプリケーションのデプロイを行います。以下のトピックは、クラスターの機能を拡張するのに役立ちます。