開発者であれば、通常はKubernetesにコンテナ化されたアプリケーションをデプロイしたいと考えるでしょう。しかし、問題は、どのようにデプロイするかですか? AWS EKS CLIを試してみませんか?
このチュートリアルでは、AWS EKS CLIをセットアップしてKubernetesクラスターを作成する方法を学びます。これにより、インフラストラクチャの管理ではなく、コードに集中することができます。
続けて、今日からクラスターの作成を開始しましょう!
前提条件
このチュートリアルは実践的なデモンストレーションとなります。一緒に進める場合は、PCとAWSアカウントを用意してください。AWSアカウントがない場合は、無料利用枠のアカウントを作成できます。
管理ユーザーの作成
Kubernetesクラスターを作成する前に、管理ユーザーを作成します。管理ユーザーにより、AWSコンソールにログインしてクラスターを構成することができます。AWSコンソールを使用して管理者権限を持つユーザーを作成することから、このチュートリアルを開始します。
1. AWSコンソールにログインし、IAMダッシュボードに移動します。
以下のように、左のパネルのユーザーをクリックして、右上のユーザーの追加をクリックします。

2. 次に、ユーザー名フィールドにユーザー名を入力し、ここではK8-Adminを使用します。 アクセスキー – プログラムによるアクセスオプションを確認し、次へ: アクセス許可をクリックします。
プログラム的にアクセス可能なため、アクセスキー – プログラムによるアクセスオプションを選択しています。その結果、アプリケーションを使用して、AWSに直接通信して操作を実行できます。

3. 既存のポリシーを直接アタッチオプションをクリックし、AdministratorAccessポリシーをチェックし、次へ: タグをクリックします。
AdministratorAccessポリシーはユーザー(K8-Admin)にAWSへの完全なアクセス権限を付与し、以下のようになります:
- ユーザーがCloudFormationを使用できるようにします
- EC2インスタンスを作成し、CloudWatchログを作成できるようにします
- エラスティックロードバランサーを構成します。

4. 次へ: レビューをクリックしてタグの追加をスキップします。

5. 最後に、ユーザーの詳細を確認し、ユーザーの作成をクリックして管理者ユーザーの作成を完了します。

管理者ユーザーの作成が完了すると、画面の上部に以下のような成功メッセージが表示されます。後でログインするためにこれらのキーアクセスキーIDとシークレット アクセスキーをメモしてください。

EC2インスタンスの起動
これで、K8-Adminを作成したので、最初のEC2インスタンスを作成できます。このインスタンスをマスターノードとして使用し、クラスタを作成するためのコマンドを実行します。
1. EC2ダッシュボードに移動し、ページの右端にあるEC2をクリックし、Launch Instancesをクリックします。これにより、ブラウザがページにリダイレクトされ、Amazon Machine Image (AMI) (ステップ2) を選択できるページに移動します。

2. 次に、リストからAmazon Linux 2 AMI (HVM)の横にあるSelectをクリックします。
Amazon Linux 2 AMI (HVM)は、最新世代のハードウェアの最適なパフォーマンスを調整したLinuxカーネル5.10を提供します。このAMIには、本番レベルのKubernetesクラスタに必要な多くの機能も含まれています。

3. インスタンスタイプはデフォルトのまま(t2.micro)にして、Next: Configure Instance Detailsをクリックしてインスタンスを構成します。

4. Auto-assign Public IPオプションを有効にし、Next: Add Storageをクリックします。このオプションにより、各コンテナがKubernetesマスターノードとEC2インスタンスのパブリックIPにアクセスできるようになります。

5. デフォルト(Root)を保持して、ストレージの追加ページで次へをクリックしてください:タグを追加します。 Root ボリュームは、インスタンス内からデータを読み書きするために必要です。

6. タグを追加せずに、次へをクリックしてください:セキュリティグループの構成。

7. 下記のようにセキュリティグループのデフォルトを保持し、確認して起動をクリックしてください。

8. インスタンスの起動詳細を確認し、インスタンスを起動するには起動をクリックしてください。ポップアップが表示され、既存のキーペアを選択するか新しいキーペアを作成するかを選択できます(ステップナイン)。

9. ダイアログポップアップで、以下のようにキーペアを構成してください:
- ドロップダウンボックスで新しいキーペアを作成を選択します。
- RSAをキーペアタイプとして選択します。
- 好みのキーペア名を指定してください。ただし、このチュートリアルでは、キーペア名はmy-nvkpに設定されています。
- キーペアをダウンロードをクリックし、インスタンスを起動をクリックしてください。

インスタンスの起動には1〜2分かかる場合があります。インスタンスが起動していると、EC2ダッシュボードにリストされます。下記のように表示されます。

AWS CLIツールの設定
現在、インスタンスが実行されているので、コマンドライン(CLI)ツールを構成する時が来ました。CLIツールをAWSアカウントと連携させて使用することは、Kubernetesクラスタを作成する上で重要です。
1. EC2ダッシュボードからインスタンスを選択するには、以下に示すようにチェックボックスをクリックします。インスタンスに接続するには、Connectをクリックします。

2. 次に、ステップ1で選択したインスタンスに接続するために、Connectボタンをクリックします。

EC2インスタンスに接続したら、ブラウザは以下に示す対話型ターミナルにリダイレクトされます。これはEC2インスタンスとの一時的なSSHセッションです。
対話型ターミナルを使用して、コマンドラインに接続し、新しいインスタンスに管理コマンドを実行できます。

3. 以下のaws
コマンドを実行して、CLIのバージョンを確認します。
出力から分かるように、Amazon Linux 2インスタンスではバージョン1.18.147が実行されており、これは古いバージョンです。Kubernetesのすべての機能にアクセスするためには、AWS CLIのバージョン2以上をダウンロードしてインストールする必要があります(ステップ3)。

4. 以下のcurl
コマンドを実行して、CLIツールv2+をダウンロードし、awscliv2.zip
という名前のZIPファイルに保存します。

5. ダウンロードしたファイルを解凍し、古いAWS CLIがインストールされている場所を特定するには、次のコマンドを実行します。
出力から分かるように、古いAWS CLIは/usr/bin/awsにインストールされています。このパスを更新する必要があります。

6. 以下のコマンドを実行して、次の操作を行います。AWS CLIのインストールパスを更新します:
- 更新されたAWS CLIツールをAmazon Linux 2インスタンスにインストールします(
sudo ./aws/install
)。 - CLIツールをインストールするディレクトリ(
--install-dir /usr/bin/aws-cli
)を設定します。これにより、更新されたAWS CLIを他のインスタンスに再インストールせずに転送できます。 - 現在の環境にAWS CLIツールの新しいパスがある場合は、(
--update
)現在のシェル環境を更新します。

7. 以下のaws --version
コマンドを再実行して、更新されたAWS CLIが正しくインストールされていることを確認します。
以下に示すように、インストールされたAWS CLIのバージョンは2.4.7です。これは、筆者が書いた時点での最新のAWS CLIバージョンであり、2.4.7です。

8. 次に、aws configure
コマンドを実行して、新しいAWS CLIツールでインスタンスを構成します。
以下のプロンプトに適切な値を入力してください:
- AWS Access Key ID [None] – 前述の「管理ユーザーの作成」セクションでメモしたアクセスキーIDを入力してください。
- AWS Secret Access Key [None] – 前述の「管理ユーザーの作成」セクションでメモしたシークレットアクセスキーを入力してください。
- Default region name [None] – サポートされているリージョンを選択してください。例:us-east-1。
- Default output format [None] – Kubernetesとの使用にはJSON形式が推奨されているため、jsonを入力してください。

Amazon EKSコマンドラインツール(eksctl)の設定
目標はAWS EKS CLIを使用してKubernetesクラスターを作成することです。そのため、Amazon EKS(eksctl)コマンドラインツールも構成します。このツールを使用すると、Amazon EKS上でKubernetesクラスターを作成および管理できます。
1. EC2インスタンスにKubernetesコマンドラインツール(kubectl)の最新バージョンをインストールします。このツールを使用してKubernetesクラスターに対してコマンドを実行できます。
2. 次に、以下のcurl
コマンドを実行して、GitHubから最新のeksctl
リリースを/tmpディレクトリに.tar.gzファイルとして取得し、アーカイブのコンテンツを/tmpディレクトリに抽出します。
以下のコマンドを実行して次の操作を実行します。
- GitHubから最新の
eksctl
リリース(--location
)を取得し、.tar.gzアーカイブとして取得します("<https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$>(uname -s)_amd64.tar.gz"
) - アーカイブのコンテンツを/tmpディレクトリに展開します(
tar xz -C /tmp
)。--silent
フラグはコマンドの進行状況の出力を抑制します。 - eksctlバイナリ(
/tmp/eksctl
)をAWS CLIをインストールしたパス(/usr/bin
)に移動させます(sudo mv
)。
3. 最後に、以下のコマンドを実行して、eksctl
が正常にインストールされたことを確認します。
以下の出力は、eksctl が正常にインストールされたことを確認します。

eksctl
が初めての場合、以下のコマンドを実行して、すべてのサポートされている eksctl
コマンドとその使用法のリストを取得できます。

EKSクラスタのプロビジョニング
eksctl を構成したので、今度は eksctl
コマンドを使用して最初の EKS クラスタをプロビジョニングできます。
以下の eksctl
コマンドを実行して、最初のクラスタを作成し、以下の操作を実行します:
dev
という名前の3ノードのKubernetesクラスタを作成し、1つのノードタイプをt3.micro
として、リージョンをus-east-1
とします。- EKS によって管理されるこのノードグループ用に最小 1 ノード (
--nodes-min 1
) および最大 4 ノード (--nodes-max 4
) を定義します。このノードグループの名前はstandard-workers
です。 - 名前が
standard-workers
のノードグループを作成し、standard-workers
ノードグループ用のマシンタイプを選択します。

2. コマンドで実行されるアクションを確認するために、CloudFormation ダッシュボードに移動します。 eksctl create cluster
コマンドは、CloudFormation を使用して AWS アカウントでインフラストラクチャをプロビジョニングします。
以下のように、eksctl-dev-cluster CloudFormationスタックが作成されています。このプロセスには15分以上かかる場合があります。

3. 現在、EKSダッシュボードに移動し、devという名前のクラスタがプロビジョニングされていることがわかります。 dev ハイパーリンクをクリックして dev のEKSクラスタダッシュボードにアクセスしてください。

以下に、dev のEKSクラスタの詳細が表示されます。ノード名、インスタンスタイプ、ノードグループ、およびステータス。

4. EC2ダッシュボードに切り替えると、4つのノードが実行されていることがわかります。AWSアカウントでt3.microの役割を持つ3つのワーカーノードと1つのマスターノードがあります。

5. 最後に、以下のコマンドを実行して、クラスタのエンドポイント、証明書、および資格情報を使用してkubectl構成を更新します。 update-kubeconfig
。

EKSクラスタにアプリケーションを展開する
EKSクラスタを作成し、完璧に稼働していることを確認しました。しかし、現時点ではEKSクラスタはただの一角に座っています。このデモでは、EKSクラスタを使用してNGINXアプリケーションを展開します。
1.以下のyum
コマンドを実行して、git
をインストールします。インストール中にすべてのプロンプトを自動的に受け入れます(-y
)

2.次に、以下のgit clone
コマンドを実行して、GitHubリポジトリから構成ファイルを現在のディレクトリにクローンします。これらのファイルを使用して、ポッド上にNGINXデプロイメントを作成し、ロードバランサー(ELB)を作成します。

3.以下のコマンドを実行して、ata-elk
ディレクトリに移動し、NGINXのためのサービス(./nginx-svc.yaml
)を作成します。

4.次に、kubectl get service
を実行してNGINXサービスの状態を確認します。
以下に示すように、サービスタイプはロードバランサーであり、Kubernetesはサービス(nginx-svc)を作成しました。これがNGINXデプロイメントです。また、EKSによって作成されたロードバランサーの外部DNSホスト名もEXTERNAL IP列に表示されます。
後でロードバランサーをテストするために、ロードバランサーの外部DNSホスト名をメモしておいてください。

5.以下のkubectl
コマンドを実行してNGINXポッドをデプロイします。

6. 以下のkubectl get
コマンドを実行して、NGINX deployment
およびNGINX pod
のステータスを確認します。
以下の出力で確認できるように、デプロイメントには3つのポッドがあり、すべてが実行されています。

7. 次に、kubectl get node
コマンドを実行してワーカーノードのステータスを確認します。

8. そして、以下のcurl
コマンドを実行してロードバランサーをテストします。<LOAD_BALANCER_DNS_HOSTNAME>
を以前にメモしたDNS名で置き換えてください(ステップ5)。
NGINXのウェルカムページが表示されます。以下の出力は、ロードバランサーが正常に動作し、NGINXポッドにアクセスできることを確認しています。

9. 最後に、ロードバランサーのDNS名を新しいブラウザタブにコピーして貼り付けます。
これにより、NGINXからのウェルカムページが表示され、アプリケーションが動作していることが確認できます。

高可用性のKubernetesコントロールのテスト
クラスターが実行されているので、Kubernetesコントロールプレーンが高可用性かどうかをテストします。アプリケーションの稼働時間はこの機能に依存しています。コントロールプレーンが動作しない場合、アプリケーションはダウンし、ユーザーにサービスを提供できません。
高可用性のKubernetesコントロール機能を使用すると、アプリケーションの可用性が向上します。この機能をテストするために、EKSのワーカーノードを停止して、Kubernetesが新しいノードを起動して失敗したノードを置き換えるかどうかを確認します。
1. EC2ダッシュボードで、EKSのワーカーノードインスタンスをすべて停止します。

2. 次に、ワーカーノードの状態を確認するために次のコマンドを実行します。
様々な状態が表示されます。たとえば、Pending、Running、そしてTerminatingなどです。なぜなら、すべてのワーカーノードを停止しようとすると、Kubernetesは障害を検出し、すぐに別のノードを起動します。

3. 今、kubectl get pod
コマンドを実行して、高可用性のあるKubernetesコントロール機能をテストします。
出力を見ると、Running状態の新しいポッドが3つあることがわかります(年齢で識別)。これらの新しいポッドは、意図したとおりに高可用性のあるKubernetesコントロール機能が動作していることを示しています。

4. 以下のkubectl get service
コマンドを実行して、利用可能なすべてのサービスをリストします。
以下に示すように、Kubernetesは新しいサービスを作成し、ロードバランサーのDNS名が異なることがわかります。kubectl get service

5. 最後に、ロードバランサーのDNS名をブラウザにコピーして貼り付けます。これにより、「EKSクラスターへのアプリケーションのデプロイ」セクションの最後の手順と同じく、NGINXからのウェルカムページが表示されます。
結論
このチュートリアルを通じて、EKSクラスターを作成し、コンテナからNGINXサービスをデプロイし、高可用性のあるコントロールプレーン機能をテストする方法を学びました。
この時点で、AWS環境でEKSクラスターを作成する方法について理解が深まったはずです。
あなたの次のステップは何ですか?おそらく、AWS上でDockerとK8sを使用してNodeJSアプリをデプロイする方法を学ぶことですか?