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」を参照してください。

前提条件

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

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

  • kubectl - Kubernetes クラスターを操作するためのコマンドラインツール。詳細については、「kubectl のインストールまたは更新」を参照してください。

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

    aws sts get-caller-identity
  • このトピック内の手順は、 Bash シェル内で実行することが推奨されます。Bash シェルを使用していない場合、行継続文字や、変数の設定と使用に関する方法など、一部のスクリプトコマンドのためにシェルの調整が必要となります。さらに、シェルの引用規則とエスケープ規則は異なる場合があります。詳細については、「AWS Command Line Interface ユーザーガイド」の「AWS CLI での文字列への引用符の使用」を参照してください。

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

重要

可能な限りシンプルかつ迅速に使用を開始するため、このトピックでは、クラスターをデフォルトの設定で作成するステップについて説明します。本番で使用するクラスターを作成する前に、すべての設定内容に習熟した上で、要件を満たす設定でクラスターをデプロイすることをお勧めします。詳細については、「Amazon EKS クラスターの作成」を参照してください。一部の設定は、クラスターの作成時にのみ有効にできます。

クラスターを作成するには
  1. Amazon EKS の要件を満たすように、パブリックサブネットとプライベートサブネットを持つ Amazon VPC を作成します。region-code を Amazon EKS でサポートされている AWS リージョン に置き換えます。AWS リージョン の一覧については、「AWS 全般的なリファレンスガイド」の「Amazon EKS エンドポイントとクォータ」を参照してください。my-eks-vpc-stack は、好みの任意の名前で置き換えることができます。

    aws cloudformation create-stack \ --region region-code \ --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
    ヒント

    前のコマンドが作成したすべてのリソースの一覧については、AWS CloudFormation コンソール (https://console.aws.amazon.com/cloudformation) を開きます。my-eks-vpc-stack スタックを選択し、[リソース] タブを選択します。

  2. クラスター IAM ロールを作成し、必要な Amazon EKS IAM マネージドポリシーをそれにアタッチします。Amazon EKS によって管理される Kubernetes クラスターは、サービスで使用するリソースを管理するために、ユーザーに代わって他の AWS サービスを呼び出します。

    1. 次の内容を eks-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://"eks-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 コンソール を開きます。

    コンソールの右上に表示されている AWS リージョン が、クラスターを作成する AWS リージョン であることを確認します。異なる場合は、AWS リージョン 名の横にあるドロップダウンを展開し、使用する AWS リージョン を選択します。

  4. [クラスターを追加][作成] の順に選択します。このオプションが表示されない場合は、まず左のナビゲーションペインの [クラスター] を選択します。

  5. [クラスターの設定] ページで、次の手順を実行します。

    1. [名前] に、クラスターの名前 (my-cluster など) を入力します。この名前には、英数字 (大文字と小文字が区別されます) とハイフンのみを使用できます。先頭の文字はアルファベット文字である必要があります。また、100 文字より長くすることはできません。

    2. [クラスターサービスロール] で、「myAmazonEKSClusterRole」を選択します。

    3. その他の設定はデフォルト値のままにし、[次へ] をクリックします。

  6. [ネットワーキングを指定] ページで、以下の作業を行います。

    1. 前のステップで [VPC] ドロップダウンリストから作成した VPC の ID を選択します。この ID は vpc-00x0000x000x0x000 | my-eks-vpc-stack-VPC のような値です。

    2. その他の設定はデフォルト値のままにし、[次へ] をクリックします。

  7. [オブザーバビリティの設定]ページで、[次へ] を選択します。

  8. [アドオンの選択] ページで、[次へ] を選択します。

    アドオンの詳細については、「Amazon EKS アドオン」を参照してください。

  9. [選択したアドオンセッティングの設定] ページで、[次へ] を選択します。

  10. [確認して作成] ページで、[作成] をクリックします。

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

    注記

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

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

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

クラスターと通信するようにコンピュータを設定するには
  1. クラスター用の kubeconfig ファイルを作成もしくは更新します。region-code を、クラスターを作成する AWS リージョン に置き換えます。my-cluster を自分のクラスター名に置き換えます。

    aws eks update-kubeconfig --region region-code --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: ノードを作成する

重要

可能な限りシンプルかつ迅速に使用を開始するため、このトピックでは、ノードをデフォルトの設定で作成するステップについて説明します。本番で使用するノードを作成する前に、すべての設定内容に習熟した上で、要件を満たす設定でノードをデプロイすることをお勧めします。詳細については、「Amazon EKS ノード」を参照してください。一部の設定は、ノードの作成時にのみ有効にできます。

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

  • Fargate - Linux - AWS Fargate で Linux アプリケーションを実行する場合は、このタイプのノードを選択します。Fargate は、Amazon EC2 インスタンスを管理せずに Kubernetes Pods をデプロイできるサーバーレスコンピューティングエンジンです。

  • マネージド型ノード - Linux - 実行する場合は、このタイプのノードを選択しますこのガイドでは説明しませんが、Windows セルフマネージド型 ノードと Bottlerocket ノードをクラスターに追加することもできます。

Fargate – Linux

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

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

    1. 次の内容を pod-execution-role-trust-policy.json という名前のファイルにコピーします。region-code をクラスターのある AWS リージョン に置き換えます。アカウントで、すべての AWS リージョン で同じロールを使用する場合は、region-code* に置き換えます。111122223333 をアカウント ID に置き換え、my-cluster を自分のクラスター名に置き換えます。アカウント内のすべてのクラスターに同じロールを使用する場合は、my-cluster* に置き換えます。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:eks:region-code:111122223333:fargateprofile/my-cluster/*" } }, "Principal": { "Service": "eks-fargate-pods.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    2. Pod 実行 IAM ロールを作成します。

      aws iam create-role \ --role-name AmazonEKSFargatePodExecutionRole \ --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 AmazonEKSFargatePodExecutionRole
  2. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソール を開きます。

  3. [クラスター] ページで、my-cluster クラスターを選択します。

  4. [my-cluster] ページで、次の操作を行います。

    1. [コンピューティング] タブを開きます。

    2. [Fargate プロファイル] で、[Fargate プロファイルを追加] を選択します。

  5. [Fargate プロファイルを設定] ページで、次の操作を行います。

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

    2. [ポッド実行ロール] で、以前のステップで作成した [AmazonEKSFargatePodExecutionRole] を選択します。

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

    4. [Next] (次へ) をクリックします。

  6. [Pod の選択を設定] ページで、次の操作を行います。

    1. [名前空間]default と入力します。

    2. [Next] (次へ) をクリックします。

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

  8. 数分後、[Fargate プロファイル設定] セクションにある [ステータス][作成中] から [アクティブ] に変わります。ステータスが [アクティブ] になるまで、次のステップに進まないでください。

  9. すべての Pods を Fargate にデプロイする場合 (Amazon EC2 ノードにはデプロイしない場合)、次の手順を実行して別の Fargate プロファイルを作成し、Fargate でデフォルトのネームリゾルバー (CoreDNS) を実行します。

    注記

    これを行わな場合、現時点では利用可能なノードはありません。

    1. [Fargate プロファイル] ページで [my-profile] を選択します。

    2. [Fargate プロファイル] で、[Fargate プロファイルを追加] を選択します。

    3. [名前] に CoreDNS と入力します。

    4. [ポッド実行ロール] で、以前のステップで作成した [AmazonEKSFargatePodExecutionRole] を選択します。

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

    6. [Next] (次へ) をクリックします。

    7. [名前空間]kube-system と入力します。

    8. [ラベルを一致させる] を選択し、次に [ラベルを追加] をクリックします。

    9. [キー]k8s-app を入力し、値として kube-dns を入力します。これは、デフォルト名のリゾルバ (CoreDNS) を Fargate にデプロイするために必要です。

    10. [Next] (次へ) をクリックします。

    11. [確認と作成] ページで、Fargate プロファイルの情報を確認し、[作成] を選択します。

    12. 次のコマンドを実行して、CoreDNS Pods からデフォルトの eks.amazonaws.com/compute-type : ec2 アノテーションを削除します。

      kubectl patch deployment coredns \ -n kube-system \ --type json \ -p='[{"op": "remove", "path": "/spec/template/metadata/annotations/eks.amazonaws.com~1compute-type"}]'
    注記

    追加した Fargate プロファイルのラベルに基づいて、システムにより 2 つのノードが作成されデプロイされます。これらはいずれも Fargate ノードに適用できないため、[ノードグループ] のリストには表示されません。新しいノードは [概要] タブ内のリストに表示されます。

Managed nodes – Linux

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

Amazon EC2 Linux マネージド型ノードグループを作成するには
  1. ノードの 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. ロールに、必要なマネージド 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 aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name myAmazonEKSNodeRole
  2. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソール を開きます。

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

  4. [my-cluster] ページで、次の操作を行います。

    1. [コンピューティング] タブを開きます。

    2. [ノードグループを追加] をクリックします。

  5. [ノードグループの設定] ページで以下を実行します。

    1. [名前] に、マネージド型ノードグループの一意の名前 (my-nodegroup など) を入力します。ノードグループ名は 63 文字以下である必要があります。先頭は文字または数字でなければなりませんが、残りの文字にはハイフンおよびアンダースコアを含めることもできます。

    2. [ノード IAM ロール名] で、前のステップで作成した myAmazonEKSNodeRole ロールを選択します。各ノードグループには独自の一意の IAM ロールを使用することをお勧めします。

    3. [Next] (次へ) をクリックします。

  6. [コンピューティングとスケーリングの設定] ページではデフォルトの値を受け入れ、[次へ] をクリックします。

  7. [ネットワーキングの指定] ページでは、デフォルトの値を受け入れ、[次へ] をクリックします。

  8. [確認と作成] ページで、マネージド型ノードグループの設定を確認し、[作成] を選択します。

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

ステップ 4: リソースを表示する

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

ノードとワークロードを表示するには
  1. 左のナビゲーションペインで [クラスター] を選択します。[クラスター] のリストで my-cluster など、作成したクラスターの名前を選択します。

  2. [my-cluster] ページで、次の項目を選択します。

    1. [コンピューティング] タブ – クラスターにデプロイした [ノード] が一覧表示されます。ノードの名前を選択すると、そのノードに関するより詳細な情報が表示されます。

    2. [リソース] タブ - Amazon EKS クラスターにデフォルトでデプロイされたすべての Kubernetes リソースが表示されます。コンソールでリソースタイプを選択すると、その詳細を確認できます。

ステップ 5: リソースを削除する

このチュートリアルのために作成したクラスターとノードの使用が終了したら、作成したリソースを削除する必要があります。リソースを削除する前に、他の目的でこのクラスターを使用する場合は、次のステップ を参照してください。

このガイドで作成したリソースを削除するには
  1. ここで作成した、いずれかのノードグループもしくは Fargate プロファイルを削除します。

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

    2. 左のナビゲーションペインで [クラスター] を選択します。クラスターのリストから my-cluster を選択します。

    3. [コンピューティング] タブを開きます。

    4. ノードグループを作成している場合は、 ノードグループ my-nodegroup を した上で、[削除] を選択します。「my-nodegroup」と入力し、[削除] を選択します。

    5. 作成した各 Fargate プロファイルを選択した後に、[削除] をクリックします。プロファイルの名前を入力した後に、[削除] をクリックします。

      注記

      続いて 2 つ目の Fargate プロファイルを削除する場合、最初のプロファイルの削除が完了するまで待機します。

    6. ノードグループまたは Fargate プロファイルが削除されるまで続行しないでください。

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

    1. 左のナビゲーションペインで [クラスター] を選択します。クラスターのリストから my-cluster を選択します。

    2. [クラスターの削除] を選択します。

    3. my-cluster と入力し、[削除] を選択します。クラスターが削除されるまで続行しないでください。

  3. 作成した VPC AWS CloudFormation スタックを削除します。

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

    2. [my-eks-vpc-stack] スタックを選択してから、[削除] を選択します。

    3. [my-eks-vpc-stack の削除] 確認ダイアログボックスで、[スタックを削除] をクリックします。

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

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

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

    3. リスト ([myAmazonEKSClusterRole]、および、[AmazonEKSFargatePodExecutionRole] または [myAmazonEKSNodeRole]) から、作成した各ロールを選択します。[削除] を選択し、要求された確認テキストを入力した後で、[削除] をクリックします。

次のステップ

以下のトピックは、クラスターの機能を拡張するのに役立ちます。