【AWS】Amazon EKS ~ 入門編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2023/02/23/000000

の続き。
Amazon EKS (Elastic Kubernetes Service) をハンズオンしていく。

今回、やってて副産物として「AWS CloudShell」ってのを
知れたのがよかった。

目次

【1】Kubernetes(EKS)クラスタ構築手順
 1)VPCの設定
 2)IAMの設定
 3)Kubernetesクラスタ(EKS)作成
 4)AWS CloudShellによる動作確認
【2】アプリケーションのデプロイ
 1)IAMロールの作成
 2)Worker Nodeの作成
 3)アプリケーションのデプロイ
 4)サービスの設定
 5)動作確認
【3】後片付け
 1)Namespaceの削除
 2)Node削除
 3)Clusterの削除

【1】Kubernetes(EKS)クラスタ構築手順

* Hello world 的に、Kubernetes(EKS)クラスタを立ち上げてみる。

https://tech-lab.sios.jp/archives/29862

を参考にやっていく。
大きな作業項目は、以下の通り。
~~~~~~~~
1)VPCの設定
2)IAMの設定
3)Kubernetesクラスタ(EKS)作成
4)AWS CloudShellによる動作確認
~~~~~~~~

1)VPCの設定

[1] 「CloudForamation」にアクセス
[2] 「スタックの作成」を選択
[3] テンプレートの指定のAmazon S3 URLに記載し「次へ」
 + https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml
[4] スタックの詳細で以下を入力
 + スタック名: 任意(今回は「demo-eks-vpc」)

後は流れで、、、

2)IAMの設定

[1] IAMにアクセス
[2] [ロール]-[ロールを作成]を選択
[3] 「ユースケース」で他のAWSのサービスユースケースから「EKS」を入力し、
 [EKS-Cluster]-[Next]を選択
[4] 「許可を追加」画面で[Next]を選択
[5] 「名前、確認、および作成」画面で以下を入力し、[Next]を選択
 + ロール名: 任意(今回は「demo-eks-cluster-role」)

後は流れで、、、

3)Kubernetesクラスタ(EKS)作成

[1] 「EKS」にアクセス
[2] [Add cluster]-[Create]を選択
[3] 以下を入力し、「Next」
 + 名前: 任意(今回は「demo-eks-cluster」)
 + クラスターサービスロール:【2】で作成したロール(今回は「demo-eks-cluster-role」)
[4] 「ネットワーキングを指定」画面で以下を入力し、「Next」
 + VPC: 【1】で作成したVPC(今回は「demo-eks-vpc」)
 + クラスターエンドポイント:パブリックおよびプライベート

後は流れで、、、

4)AWS CloudShellによる動作確認

[0] kubectlのインストール

環境設定準備として、以下のサイトを参考に行っていく

https://kubernetes.io/ja/docs/tasks/tools/install-kubectl/

# Step1: 次のコマンドにより、最新リリースをダウンロード
curl -LO "https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl"

# Step2: kubectlバイナリを実行可能にする
chmod +x ./kubectl

# Step3: バイナリをPATHの中に移動
sudo mv ./kubectl /usr/local/bin/kubectl

# Step4: バージョン確認 (Warningがでるけど「v5.0.1」が表示)
kubectl version --client

[1] クラスターコンフィグ取得

# aws eks update-kubeconfig --region <aws-region> --name <cluster-name>
aws eks update-kubeconfig --region us-west-2 --name demo-eks-cluster

[2] クラスターの情報取得

# サービス情報を取得 
kubectl get svc

【2】アプリケーションのデプロイ

* Hello world 的に、Kubernetes(EKS)クラスタを立ち上げてみる。

https://tech-lab.sios.jp/archives/29917

を参考にやっていく。
大きな作業項目は、以下の通り。
~~~~~~~~
1)IAMロールの作成
2)Worker Nodeの作成
3)アプリケーションのデプロイ
4)サービスの設定
5)動作確認
~~~~~~~~

1)IAMロールの作成

[1] IAMにアクセス
[2] [ロール]-[ロールを作成]を選択
[3] 「ユースケース」で [EC2]-[Next]を選択
[4] 「許可を追加」画面で以下をチェックした状態で、[Next]を選択
 * AmazonEC2ContainerRegistryReadOnly
 * AmazonEKSWorkerNodePolicy
 * AmazonEKS_CNI_Policy
[5] 「名前、確認、および作成」画面で以下を入力し、[Next]を選択
 + ロール名: 任意(今回は「demo-eks-node-role」)

後は流れで、、、

2)Worker Nodeの作成

[1] 「EKS」にアクセス
[2] 作成したクラスタを選択し、[コンピューティング]-[ノードグループを追加]を選択
[3] 「ノードグループを設定」画面において、以下を入力し、「Next」を選択
 * 名前:demo-eks-node
 * ノードIAMロール:1)で作成したIAMロール
[4] 「コンピューティングとスケーリングの設定を実行」画面で「Next」を選択
[5] 「ネットワーキングを指定」画面で、
 サブネットでpublicのネットワークを除外し、Next」を選択

後は流れで、、、

3)アプリケーションのデプロイ

[0] Nodeの確認

# デプロイ前に、Nodeの状態を確認しておく
kubectl get node

[1] Namespace の作成

# kubectl create namespace <namespace-value>
kubectl create namespace demo-eks-namespace

# 作成されたnamespaceの確認
kubectl get namespace

[2] アプリケーションのデプロイ

# アプリケーションのデプロイ
kubectl apply -f https://k8s.io/examples/controllers/nginx-deployment.yaml -n demo-eks-namespace

# しばらく待って、以下を入力
kubectl get all -n demo-eks-namespace
# podのSTATUSがRunningであることを確認

[3] サービスを作成

# Step1: サービスを作成
kubectl expose deployment nginx-deployment --name=nginx-service -n demo-eks-namespace

# Step2: サービスの作成確認
kubectl get svc -n demo-eks-namespace
# Service「ngnix-service」を確認

[4] 途中経過の確認

# ポートフォワード設定
kubectl port-forward service/nginx-service 8080:80 -n demo-eks-namespace & 

# アクセス確認
curl localhost:8080 -s
# HTMLソースを確認

# ポートフォワードの終了
disown %1

4)サービスの設定

[1] サービス(LoadBalancer)の作成

# Step1: サービス(LoadBalancer)の作成
kubectl expose deployment nginx-deployment --type=LoadBalancer --name=nginx-service-loadbalancer -n demo-eks-namespace

# Step2: サービスの確認
kubectl get svc -n demo-eks-namespace
# nginx-service-loadbalancer のEXTERNAL-IPの値をコピーしておく

5)動作確認

* ブラウザで「http://<EXTERNAL-IP>/」で表示
 => nginxの画面が表示されることを確認

補足:作成されたリソースについて

* EC2
* VPC
* Load Balancer

【3】後片付け

* EKS は高いとのことなので、削除

1)Namespaceの削除

kubectl delete namespace demo-eks-namespace

2)Node削除

[1] 「EKS」にアクセス
[2] 作成したクラスタを選択し、「コンピューティング」を選択
[3] 作成したノードグループを選択し、「削除」を選択

後は流れで、、、

3)Clusterの削除

[1] 全てのノードグループが削除されていることを確認
 => Nodeが残っていると削除できないので、全部消す
[2] 作成したクラスタを「削除」を選択

後は流れで、、、

参考文献

https://tech-lab.sios.jp/archives/29862
https://tech-lab.sios.jp/archives/29917

関連記事

Amazon EKS ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2023/02/23/000000
Kubernetes ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/27/224624
Kubernetes ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/04/013529
WSLで外部に繋げない
https://dk521123.hatenablog.com/entry/2023/01/11/000000
Amazon ECS / Fargate ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2022/04/03/000000