Amazon EKS
ユーザーガイド

eksctl の開始方法

この入門ガイドは、eksctl (Amazon EKS での Kubernetes クラスターの作成および管理用のシンプルなコマンドラインユーティリティ) を使用して、Amazon EKS の開始に必要なすべてのリソースをインストールするのに役立ちます。このチュートリアルの終わりには、マネージド型ノードグループが関連付けられた Amazon EKS クラスターが実行中になり、kubectl コマンドラインユーティリティは新しいクラスターを使用するように設定されます。

前提条件

このセクションは、Amazon EKS クラスターの作成と管理に必要なバイナリをインストールして設定するのに役立ちます。

最新の AWS CLI をインストールする

Amazon EKS クラスターで kubectl を使用するには、クラスター API サーバー通信に必要なクライアントセキュリティトークンを作成できるバイナリをインストールする必要があります。AWS CLI のバージョン 1.16.283 以上で使用可能な aws eks get-token コマンドは、クライアントセキュリティトークンの作成をサポートしています。AWS CLI をインストールまたはアップグレードするには、AWS Command Line Interface ユーザーガイド の「AWS コマンドラインインターフェイスのインストール」を参照してください。

pip およびサポートされるバージョンの Python をすでにインストールしている場合は、以下のコマンドを使用して AWS CLI をインストールできます。

pip install awscli --upgrade --user

注記

システムの Python のバージョンは 2.7.9 以上であることが必要です。そうでない場合は、AWS CLI で Amazon EKS を呼び出すと hostname doesn't match エラーが発生します。詳細については、Python Requests FAQ の「What are "hostname doesn't match" errors?」 を参照してください。

プラットフォーム用に AWS CLI をインストールまたはアップグレードする他の方法の詳細については、AWS Command Line Interface ユーザーガイド の以下のトピックを参照してください。

システムにバージョン 1.16.283 以上の AWS CLI をインストールできない場合は、AWS IAM Authenticator for Kubernetes がシステムにインストールされていることを確認する必要があります。詳細については、「aws-iam-authenticator のインストール」を参照してください。

AWS CLI 認証情報を設定する

eksctl と AWS CLI の両方には、使用している環境で AWS 認証情報が設定されている必要があります。一般的な使用の場合、aws configure コマンドが、AWS CLI をインストールして設定するための最も簡単な方法です。

$ aws configure AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY Default region name [None]: us-west-2 Default output format [None]: json

このコマンドを入力すると、AWS CLI によって、アクセスキー、シークレットアクセスキー、AWS リージョン、出力形式の 4 つの情報の入力が求められます。これらの情報は、default という名前のプロファイル (設定の集合) に保存されます。別のプロファイルを指定しない限り、このプロファイルが使用されます。

詳細については、AWS Command Line Interface ユーザーガイド の「AWS CLI の設定」を参照してください。

eksctl をインストールする

このセクションは、eksctl コマンドラインユーティリティをインストールするのに役立ちます。詳細については、https://eksctl.io/ を参照してください。

以下からクライアントの設定を最もよく表しているタブを選択します。

macOSLinuxWindows
macOS

Homebrew を使用して macOS で eksctl をインストールまたはアップグレードするには

Amazon EKS と macOS の使用を開始する最も簡単な方法は、Homebrew を使用して eksctl をインストールすることです。eksctl Homebrew レシピは、eksctl と Amazon EKS に必要なその他の依存関係 (kubectlaws-iam-authenticator など) をインストールします。

  1. Mac OS で HomeOS をまだインストールしていない場合は、以下のコマンドでインストールします。

    /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. Weaveworks Homebrew tap をインストールします。

    brew tap weaveworks/tap
  3. eksctl をインストールまたはアップグレードします。

    • 以下のコマンドを使用して、eksctl をインストールします。

      brew install weaveworks/tap/eksctl
    • eksctl がすでにインストールされている場合は、以下のコマンドでアップグレードします。

      brew upgrade eksctl && brew link --overwrite eksctl
  4. 以下のコマンドを使用して、インストールが成功したことをテストします。

    eksctl version

    注記

    GitTag のバージョンは 0.11.0 以上であることが必要です。そうでない場合は、ターミナルの出力でインストールまたはアップグレードのエラーを確認します。

Linux

curl を使用して Linux で eksctl をインストールまたはアップグレードするには

  1. 以下のコマンドを使用して、eksctl の最新リリースをダウンロードして解凍します。

    curl --silent --location "https://github.com/weaveworks/eksctl/releases/download/latest_release/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
  2. 抽出したバイナリを /usr/local/bin に移動します。

    sudo mv /tmp/eksctl /usr/local/bin
  3. 以下のコマンドを使用して、インストールが成功したことをテストします。

    eksctl version

    注記

    GitTag のバージョンは 0.11.0 以上であることが必要です。そうでない場合は、ターミナルの出力でインストールまたはアップグレードのエラーを確認します。

Windows

Chocolatey を使用して Windows で eksctl をインストールまたはアップグレードするには

  1. Windows システムに Chocolatey がまだインストールされていない場合は、「Chocolatey のインストール」を参照してください。

  2. eksctl および aws-iam-authenticator をインストールまたはアップグレードします。

    • 次のコマンドでバイナリをインストールします。

      chocolatey install -y eksctl aws-iam-authenticator
    • すでにインストールされている場合は、以下のコマンドでアップグレードします。

      chocolatey upgrade -y eksctl aws-iam-authenticator
  3. 以下のコマンドを使用して、インストールが成功したことをテストします。

    eksctl version

    注記

    GitTag のバージョンは 0.11.0 以上であることが必要です。そうでない場合は、ターミナルの出力でインストールまたはアップグレードのエラーを確認します。

Amazon EKS の kubectl をインストールして設定する

Kubernetes では、クラスター API サーバーとの通信に kubectl というコマンドラインユーティリティを使用します。

注記

前述の Homebrew の手順に従って macOS で eksctl をインストールした場合、kubectlaws-iam-authenticator はすでにシステムにインストールされています。「Amazon EKS クラスターとワーカーノードを作成する」に進めます。

kubectl を Amazon EKS にインストールするには

  • オペレーティングシステムに kubectl をダウンロードしてインストールするには、複数のオプションがあります。

    • kubectl バイナリは、多数のオペレーティングシステムのパッケージで利用できます。このオプションは多くの場合、手動のダウンロードおよびインストールプロセスよりはるかに簡単です。Kubernetes のドキュメントにある個別のオペレーティングシステムやパッケージマネージャー用の手順に従えばインストールできます。

    • Amazon EKS では、同じバージョンのアップストリーム kubectl バイナリと同一の使用できる kubectl バイナリ が発行されています。Amazon EKS が発行したお使いのオペレーティングシステム用のバイナリをインストールするには、「kubectl のインストール」を参照してください。

Amazon EKS クラスターとワーカーノードを作成する

この時点で、eksctl コマンドラインユーティリティを使用して Amazon EKS クラスターとワーカーノードグループを作成できます。

eksctl を使用してクラスターとワーカーノードを作成するには

  1. ワークロードの要件に一致する以下のタブを選択します。クラスターで Linux ワークロードのみを実行する場合は、[Cluster with Linux-only workloads (Linux のみのワークロードがあるクラスター)] を選択します。クラスターで Linux および Windows ワークロードを実行する場合は、[Cluster with Linux and Windows workloads (Linux および Windows のワークロードがあるクラスター)] を選択します。

    Cluster with Linux-only workloadsCluster with Linux and Windows workloads
    Cluster with Linux-only workloads

    この手順では、eksctl をインストール済みで、お使いの eksctl バージョンが 0.11.0 以上であることを前提としています。 お使いのバージョンは、以下のコマンドを使用して確認できます。

    eksctl version

    eksctl のインストールまたはアップグレードの詳細については、eksctl のインストールまたはアップグレード を参照してください。

    以下のコマンドを使用して、Amazon EKS クラスターと Linux ワーカーノードを作成します。example の値は独自の値に置き換えます。

    重要

    Kubernetes バージョン 1.11 は Amazon EKS でサポートされなくなりました。新しい 1.11 クラスターを作成することはできなくなりました。Kubernetes バージョン 1.11 を実行しているすべての既存の Amazon EKS クラスターは、Kubernetes バージョン 1.12 を利用可能な最新のプラットフォームバージョンに最終的に自動的に更新されます。詳細については、「Amazon EKS バージョンの廃止」を参照してください。

    サービスの中断を防ぐため、1.11 クラスターはバージョン 1.12 以降に更新してください。詳細については、「Amazon EKS クラスターの Kubernetes バージョンの更新」を参照してください。

    eksctl create cluster \ --name prod \ --version 1.14 \ --region us-west-2 \ --nodegroup-name standard-workers \ --node-type t3.medium \ --nodes 3 \ --nodes-min 1 \ --nodes-max 4 \ --managed

    注記

    Amazon EKS マネージド型ノードグループ--managed オプションは、現在 Kubernetes 1.14 クラスターでのみサポートされています。最新機能を利用するには、Amazon EKS で利用できる最新バージョンの Kubernetes を使用することをお勧めします。以前のバージョンの Kubernetes を使用する場合は、--managed オプションを削除する必要があります。

    eksctl create cluster の使用可能なオプションの詳細については、GitHub の README プロジェクトを参照するか、以下のコマンドでヘルプページを参照してください。

    eksctl create cluster --help

    出力:

    [ℹ] eksctl version [ℹ] using region us-west-2 [ℹ] setting availability zones to [us-west-2a us-west-2c us-west-2b] [ℹ] subnets for us-west-2a - public:192.168.0.0/19 private:192.168.96.0/19 [ℹ] subnets for us-west-2c - public:192.168.32.0/19 private:192.168.128.0/19 [ℹ] subnets for us-west-2b - public:192.168.64.0/19 private:192.168.160.0/19 [ℹ] using Kubernetes version 1.14 [ℹ] creating EKS cluster "prod" in "us-west-2" region [ℹ] will create 2 separate CloudFormation stacks for cluster itself and the initial managed nodegroup [ℹ] if you encounter any issues, check CloudFormation console or try 'eksctl utils describe-stacks --region=us-west-2 --cluster=prod' [ℹ] CloudWatch logging will not be enabled for cluster "prod" in "us-west-2" [ℹ] you can enable it with 'eksctl utils update-cluster-logging --region=us-west-2 --cluster=prod' [ℹ] Kubernetes API endpoint access will use default of {publicAccess=true, privateAccess=false} for cluster "prod" in "us-west-2" [ℹ] 2 sequential tasks: { create cluster control plane "prod", create managed nodegroup "standard-workers" } [ℹ] building cluster stack "eksctl-prod-cluster" [ℹ] deploying stack "eksctl-prod-cluster" [ℹ] deploying stack "eksctl-prod-nodegroup-standard-workers" [✔] all EKS cluster resources for "prod" have been created [✔] saved kubeconfig as "/Users/ericn/.kube/config" [ℹ] nodegroup "standard-workers" has 3 node(s) [ℹ] node "ip-192-168-29-149.us-west-2.compute.internal" is ready [ℹ] node "ip-192-168-48-14.us-west-2.compute.internal" is ready [ℹ] node "ip-192-168-92-183.us-west-2.compute.internal" is ready [ℹ] waiting for at least 1 node(s) to become ready in "standard-workers" [ℹ] nodegroup "standard-workers" has 3 node(s) [ℹ] node "ip-192-168-29-149.us-west-2.compute.internal" is ready [ℹ] node "ip-192-168-48-14.us-west-2.compute.internal" is ready [ℹ] node "ip-192-168-92-183.us-west-2.compute.internal" is ready [ℹ] kubectl command should work with "/Users/ericn/.kube/config", try 'kubectl get nodes' [✔] EKS cluster "prod" in "us-west-2" region is ready
    Cluster with Linux and Windows workloads

    この手順では、eksctl をインストール済みで、お使いの eksctl バージョンが 0.11.0 以上であることを前提としています。 お使いのバージョンは、以下のコマンドを使用して確認できます。

    eksctl version

    eksctl のインストールまたはアップグレードの詳細については、eksctl のインストールまたはアップグレード を参照してください。

    Windows サポートの「考慮事項」を把握しておいてください。以下の例のテキストには instanceType のサポートされる値が含まれています。example の値は独自の値に置き換えます。以下のテキストを cluster-spec.yaml という名前のファイルに保存します。設定ファイルは、クラスターと Linux および Windows ワーカーノードグループを作成するために使用します。クラスターで Windows ワークロードのみを実行する場合でも、すべての Amazon EKS クラスターには 1 つ以上の Linux ワーカーノードが含まれている必要があります。可用性を確保するために、各ノードグループには 2 つ以上のワーカーノードを作成することをお勧めします。Windows ワークロードに最低限必要な Kubernetes バージョンは 1.14 です。

    --- apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: windows-prod region: us-west-2 version: '1.14' managedNodeGroups: - name: linux-ng instanceType: t2.large minSize: 2 nodeGroups: - name: windows-ng instanceType: m5.large minSize: 2 volumeSize: 100 amiFamily: WindowsServer2019FullContainer

    以下のコマンドを使用して、Amazon EKS クラスターと Windows および Linux ワーカーノードを作成します。

    eksctl create cluster -f cluster-spec.yaml --install-vpc-controllers

    注記

    Amazon EKS マネージド型ノードグループmanagedNodeGroups オプションは、現在 Kubernetes 1.14 クラスターでのみサポートされています。最新機能を利用するには、Amazon EKS で利用できる最新バージョンの Kubernetes を使用することをお勧めします。以前のバージョンの Kubernetes を使用する場合は、--managed オプションを削除する必要があります。

    eksctl create cluster の使用可能なオプションの詳細については、GitHub の README プロジェクトを参照するか、以下のコマンドでヘルプページを参照してください。

    eksctl create cluster --help

    出力:

    [ℹ] using region us-west-2 [ℹ] setting availability zones to [us-west-2a us-west-2d us-west-2c] [ℹ] subnets for us-west-2a - public:192.168.0.0/19 private:192.168.96.0/19 [ℹ] subnets for us-west-2d - public:192.168.32.0/19 private:192.168.128.0/19 [ℹ] subnets for us-west-2c - public:192.168.64.0/19 private:192.168.160.0/19 [ℹ] nodegroup "linux-ng" will use "ami-076c743acc3ec4159" [AmazonLinux2/1.14] [ℹ] nodegroup "windows-ng" will use "ami-0c7f1b5f1bebccac2" [WindowsServer2019FullContainer/1.14] [ℹ] using Kubernetes version 1.14 [ℹ] creating EKS cluster "windows-cluster" in "us-west-2" region [ℹ] 2 nodegroups (linux-ng, windows-ng) were included (based on the include/exclude rules) [ℹ] will create a CloudFormation stack for cluster itself and 2 nodegroup stack(s) [ℹ] if you encounter any issues, check CloudFormation console or try 'eksctl utils describe-stacks --region=us-west-2 --name=windows-cluster' [ℹ] CloudWatch logging will not be enabled for cluster "windows-cluster" in "us-west-2" [ℹ] you can enable it with 'eksctl utils update-cluster-logging --region=us-west-2 --name=windows-cluster' [ℹ] 3 sequential tasks: { create cluster control plane "windows-cluster", 2 parallel sub-tasks: { create nodegroup "linux-ng", create nodegroup "windows-ng" }, install Windows VPC controller } [ℹ] building cluster stack "eksctl-windows-cluster-cluster" [ℹ] deploying stack "eksctl-windows-cluster-cluster" [ℹ] building nodegroup stack "eksctl-windows-cluster-nodegroup-linux-ng" [ℹ] building nodegroup stack "eksctl-windows-cluster-nodegroup-linux-ng" 0m[ℹ] --nodes-max=2 was set automatically for nodegroup windows-ng [ℹ] --nodes-max=2 was set automatically for nodegroup linux-ng [ℹ] deploying stack "eksctl-windows-cluster-nodegroup-windows-ng" [ℹ] deploying stack "eksctl-windows-cluster-nodegroup-linux-ng" [ℹ] created "ClusterRole.rbac.authorization.k8s.io/vpc-resource-controller" [ℹ] created "ClusterRoleBinding.rbac.authorization.k8s.io/vpc-resource-controller" [ℹ] created "kube-system:ServiceAccount/vpc-resource-controller" [ℹ] created "kube-system:Deployment.apps/vpc-resource-controller" [ℹ] created "CertificateSigningRequest.certificates.k8s.io/vpc-admission-webhook.kube-system" [ℹ] created "kube-system:secret/vpc-admission-webhook-certs" [ℹ] created "kube-system:Service/vpc-admission-webhook" [ℹ] created "kube-system:Deployment.apps/vpc-admission-webhook" [ℹ] created "kube-system:MutatingWebhookConfiguration.admissionregistration.k8s.io/vpc-admission-webhook-cfg" [✔] all EKS cluster resources for "windows-cluster" have been created [✔] saved kubeconfig as "C:\\Users\\username/.kube/config" [ℹ] adding role "arn:aws:iam::123456789012:role/eksctl-windows-cluster-nodegroup-NodeInstanceRole-ZR93IIUZSYPR" to auth ConfigMap [ℹ] nodegroup "linux-ng" has 0 node(s) [ℹ] waiting for at least 2 node(s) to become ready in "linux-ng" [ℹ] nodegroup "linux-ng" has 2 node(s) [ℹ] node "ip-192-168-8-247.us-west-2.compute.internal" is ready [ℹ] node "ip-192-168-80-253.us-west-2.compute.internal" is ready [ℹ] adding role "arn:aws:iam::123456789012:role/eksctl-windows-cluster-nodegroup-NodeInstanceRole-XM9UZN3NXBOB" to auth ConfigMap [ℹ] nodegroup "windows-ng" has 0 node(s) [ℹ] waiting for at least 2 node(s) to become ready in "windows-ng" [ℹ] nodegroup "windows-ng" has 2 node(s) [ℹ] node "ip-192-168-4-192.us-west-2.compute.internal" is ready [ℹ] node "ip-192-168-63-224.us-west-2.compute.internal" is ready [ℹ] kubectl command should work with "C:\\Users\\username/.kube/config", try 'kubectl get nodes' [✔] EKS cluster "windows-cluster" in "us-west-2" region is ready
  2. クラスターのプロビジョニングには通常、10 ~ 15 分かかります。クラスターの準備ができたら、kubectl 設定が正しいことをテストします。

    kubectl get svc

    注記

    "aws-iam-authenticator": executable file not found in $PATH エラーが発生した場合、kubectl は、Amazon EKS に設定されていません。詳細については、「aws-iam-authenticator のインストール」を参照してください。

    その他の認可またはリソースタイプのエラーが発生した場合は、トラブルシューティングセクションの 許可されていないか、アクセスが拒否されました (kubectl) を参照してください。

    出力:

    NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
  3. (Linux GPU ワーカーのみ) GPU インスタンスタイプと Amazon EKS 最適化 AMI (GPU 対応) を選択した場合は、以下のコマンドを使用して、NVIDIA device plugin for Kubernetes を、クラスターに設定されたデーモンセットとして適用する必要があります。

    kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/1.0.0-beta/nvidia-device-plugin.yml

次のステップ

ワーカーノードが関連付けられた Amazon EKS クラスターが実行中になったところで、Kubernetes アドオンのインストールとクラスターへのアプリケーションのデプロイを開始できます。以下のトピックは、クラスターの機能を拡張するのに役立ちます。