■ はじめに
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