Amazon EKS の開始方法 – eksctl - Amazon EKS

Amazon EKS の開始方法 – eksctl

この入門ガイドでは、eksctl (Amazon EKS 上に Kubernetes クラスターを作成し管理するためのシンプルなコマンドラインユーティリティ) を使用して、Amazon Elastic Kubernetes Service (Amazon EKS) の開始に必要なすべてのリソースをインストールする方法を解説していきます。このチュートリアルの終わりには、アプリケーションのデプロイが可能な、実行状態の Amazon EKS クラスターが完成します。

AWS Management Console からクラスターを作成する場合には手動で作成する必要のあるリソースのいくつかが、このガイドの手順に従うことで自動的に作成されます。リソース間での連携方法について良く理解するために、大半のリソースを手動で作成する場合には、クラスターと計算機能の作成に AWS Management Console を使用します。詳細については、「Amazon EKS の開始方法 – AWS Management Console と AWS CLI」を参照してください。

Prerequisites

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

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

  • eksctl– EKS クラスターで多くの個別のタスクを自動化するために使用するコマンドラインツール。このガイドでは、バージョン 0.60.0 以降を使用していることを想定しています。詳細については、「eksctl コマンドラインユーティリティ」を参照してください。

  • 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 ノード」を参照してください。クラスターをデプロイした後に、他のノードタイプを追加できます。

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

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

クラスターの作成に使用するノードタイプのタブを選択します。

Fargate – Linux

Fargate Linux ノードでクラスターを作成するには

  1. 以下のコマンドにより、AWS Fargate プロファイル および ポッド実行ロール を使用する Amazon EKS クラスターを作成します。my-cluster は、自分が使用する値に置き換えます。クラスターは、任意のAmazon EKS がサポートされるリージョンで作成が可能ですが、このチュートリアルでは、米国西部 (オレゴン) us-west-2 を使用します。

    eksctl create cluster \ --name my-cluster \ --region us-west-2 \ --fargate

    前出のコマンドは、主にデフォルト設定を使用して、クラスターと Fargate プロファイルを作成します。この作業が完了したら、eksctl-<my-cluster>-cluster コンソールで AWS CloudFormation という名前のスタックを表示し、作成されたすべてのリソースを確認します。すべての設定とオプションの一覧を表示するには、eksctl create cluster -h を入力します。すべての設定とオプションの詳細については、 ドキュメントの「Creating and Managing Clusters (クラスターの作成と管理)eksctl」を参照してください。

    出力

    出力には、クラスターと Fargate プロファイルが作成されたことを示す行がいくつか表示されます。作成には数分かかります。出力の最後の行は、次のサンプル行のようになります。

    ... [✓] EKS cluster "my-cluster" in "us-west-2" region is ready

    ノードがクラスターに参加できない場合は、トラブルシューティングガイドの「ノードをクラスターに結合できません」を参照してください。

    config により、~/.kube 内に eksctl kubectl ファイルが作成されるか、config に既存の ~/.kube ファイルの中に新規のクラスター設定が追加されています。

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

    kubectl get svc

    出力

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
Managed nodes – Linux

Amazon EC2 Linux マネージド型ノードを使用してクラスターを作成するには

クラスターと Linux マネージド型ノードグループを作成します。my-cluster は、自分が使用する値に置き換えます。

<your-key> (<> を含む) は、既存のキーペアの名前に置き換えます。まだキーペアがない場合は、次のコマンドを使用して作成できます。必要に応じて us-west-2 を、クラスターの作成先であるリージョンに変更して実行します。この出力結果は、必ずローカルコンピュータ上のファイルに保存します。詳細については、Linux インスタンス用の Amazon EC2 ユーザーガイド「キーペアの作成またはインポート」を参照してください。このガイドでは、キーは必須ではありません。ただし、ノードグループの作成時には使用するキーを指定することが可能です。キーを指定することで、作成されたノードに対し SSH でアクセスできるようになります。このコマンドを実行するには、AWS CLI バージョン 2.2.22 以降または 1.20.6 以降が必要です。詳細については、 ユーザーガイドの、「AWS CLI のインストール、更新、およびアンインストールAWS Command Line Interface」を参照してください。

aws ec2 create-key-pair --region us-west-2 --key-name myKeyPair

以下のコマンドを使用してクラスターとノードを作成します。<example values> (<> を含む) を自分の値に置き換えます。クラスターは、任意のAmazon EKS がサポートされるリージョンで作成が可能ですが、このチュートリアルでは、米国西部 (オレゴン) us-west-2 を使用します。

eksctl create cluster \ --name my-cluster \ --region us-west-2 \ --with-oidc \ --ssh-access \ --ssh-public-key <your-key> \ --managed

前出のコマンドでは、主にデフォルトの Amazon EKS 設定を使用してノードを持つクラスターを作成しています。作成されたすべてのリソースを確認するには、eksctl-<my-cluster>-cluster コンソール (https://console.aws.amazon.com/cloudformation) で、AWS CloudFormation という名前のスタックを表示します。すべての設定とオプションの一覧を表示するには、eksctl create cluster -h を入力します。すべての設定とオプションの詳細については、 ドキュメントの「Creating and Managing Clusters (クラスターの作成と管理)eksctl」を参照してください。

出力

出力には、クラスターとノードが作成されたことを示す行がいくつか表示されます。クラスターとノードの作成には数分かかります。出力の最後の行は、次のサンプル行のようになります。

... [✓] EKS cluster "my-cluster" in "us-west-2" region is ready

eksctl により、kubectl 内に config ~/.kube ファイルが作成されるか、config に既存の ~/.kube ファイルの中に新規のクラスター設定が追加されています。

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

  1. クラスターノードを表示します。

    kubectl get nodes -o wide

    Amazon EC2 ノードについての出力

    NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME ip-192-168-12-49.us-west-2.compute.internal Ready <none> 6m7s v1.18.9-eks-d1db3c 192.168.12.49 52.35.116.65 Amazon Linux 2 4.14.209-160.335.amzn2.x86_64 docker://19.3.6 ip-192-168-72-129.us-west-2.compute.internal Ready <none> 6m4s v1.18.9-eks-d1db3c 192.168.72.129 44.242.140.21 Amazon Linux 2 4.14.209-160.335.amzn2.x86_64 docker://19.3.6

    Fargate ノードについての出力

    NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME fargate-ip-192-168-141-147.us-west-2.compute.internal Ready <none> 8m3s v1.18.8-eks-7c9bda 192.168.141.147 <none> Amazon Linux 2 4.14.209-160.335.amzn2.x86_64 containerd://1.3.2 fargate-ip-192-168-164-53.us-west-2.compute.internal Ready <none> 7m30s v1.18.8-eks-7c9bda 192.168.164.53 <none> Amazon Linux 2 4.14.209-160.335.amzn2.x86_64 containerd://1.3.2

    ここに表示される内容の詳細については、「ノードを表示する」を参照してください。

  2. クラスターで実行されているワークロードを表示します。

    kubectl get pods --all-namespaces -o wide

    Amazon EC2 についての出力

    NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system aws-node-6ctpm 1/1 Running 0 7m43s 192.168.72.129 ip-192-168-72-129.us-west-2.compute.internal <none> <none> kube-system aws-node-cbntg 1/1 Running 0 7m46s 192.168.12.49 ip-192-168-12-49.us-west-2.compute.internal <none> <none> kube-system coredns-559b5db75d-26t47 1/1 Running 0 14m 192.168.78.81 ip-192-168-72-129.us-west-2.compute.internal <none> <none> kube-system coredns-559b5db75d-9rvnk 1/1 Running 0 14m 192.168.29.248 ip-192-168-12-49.us-west-2.compute.internal <none> <none> kube-system kube-proxy-l8pbd 1/1 Running 0 7m46s 192.168.12.49 ip-192-168-12-49.us-west-2.compute.internal <none> <none> kube-system kube-proxy-zh85h 1/1 Running 0 7m43s 192.168.72.129 ip-192-168-72-129.us-west-2.compute.internal <none> <none>

    Fargate についての出力

    NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES kube-system coredns-69dfb8f894-9z95l 1/1 Running 0 18m 192.168.164.53 fargate-ip-192-168-164-53.us-west-2.compute.internal <none> <none> kube-system coredns-69dfb8f894-c8v66 1/1 Running 0 18m 192.168.141.147 fargate-ip-192-168-141-147.us-west-2.compute.internal <none> <none>

    ここに表示される内容の詳細については、「ワークロードの表示」参照してください。

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

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

クラスターとノードを削除します。

eksctl delete cluster --name my-cluster --region us-west-2

次の手順

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