Amazon EKS の使用開始 – AWS マネジメントコンソールと AWS CLI - Amazon EKS

Amazon EKS の使用開始 – AWS マネジメントコンソールと AWS CLI

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

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

Prerequisites

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

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

  • kubectl – Kubernetes クラスターを操作するためのコマンドラインツール。このガイドでは、バージョン 1.19 以降のツールを使用する必要があります。詳細については、「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 \ --stack-name my-eks-vpc-stack \ --template-url https://s3.us-west-2.amazonaws.com/amazon-eks/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. Amazon EKS コンソール (https://console.aws.amazon.com/eks/home#/clusters) を開きます。

    コンソールの右上で、[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. IAM コンソール (https://console.aws.amazon.com/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. Amazon EKS コンソール (https://console.aws.amazon.com/eks/home#/clusters) を開きます。

  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 アドレスが、Kubernetes ポッド内にも割り当てられるようになります。

    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.us-west-2.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 \ --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. Amazon EKS コンソール (https://console.aws.amazon.com/eks/home#/clusters) を開きます。

  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. Amazon EKS コンソール (https://console.aws.amazon.com/eks/home#/clusters) を開きます。

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

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

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

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

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

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

    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. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

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

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

次の手順

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

  • クラスターを作成した IAM エンティティ (ユーザーまたはロール) が、Kubernetes RBAC 認証テーブル上に、管理者として (system:masters の権限を付与されながら) 追加されています。初期状態では、その IAM ユーザーのみが、kubectl を使用して Kubernetes API サーバーを呼び出すことができます。他のユーザーにクラスターへのアクセス許可を与える場合は、それらのユーザーを aws-auth ConfigMap に追加する必要があります。詳細については、「クラスターのユーザーまたは IAM ロールの管理」を参照してください。

  • IMDS へのアクセスを制限する – IAM ロールをすべての Kubernetes サービスアカウントに割り当てることを計画している場合、ポッドには必要な最小限のアクセス許可のみを付与します。さらに、(現在のリージョンの取得など) 他の理由で、クラスター内のポッドが Amazon EC2 インスタンスメタデータサービス (IMDS) にアクセスしないようにします。このためには、ポッドによる IMDS へのアクセスをブロックすることをお勧めします。詳細については、「サービスアカウントの IAM ロール」および「IMDS および Amazon EC2 インスタンスプロファイルの認証情報に対するアクセスの制限」を参照してください。

  • Cluster Autoscaler – ノードグループ内のノード数を自動的に調整するように、Kubernetes Cluster Autoscaler を設定します。

  • サンプルの Linux ワークロードをデプロイする – サンプルの Linux アプリケーションをデプロイして、クラスターと Linux ノードをテストします。

  • クラスターの管理 – クラスター管理のための重要なツールを使用する方法を解説します。