😊

EKSでwebアプリをデプロイする

2023/07/14に公開

概要

今回は、サンプルアプリをEKSでデプロイする。最終的なゴールとしては、下記のようにアプリが表示される。こちらでデプロイ方法を学ぶことで、今後はCI/CDパイプラインによる自動的なデプロイが可能となる。

事前準備

まずkubernetesクラスタを構築する。

eksctl create cluster --name eksctl-demo --nodes=2 --version=1.22 --instance-types=t2.medium --region=us-east-2
# Check the status, Nodes should be ready
kubectl get nodes

イメージレジストリ

Dockerイメージをkubernetesクラスタにデプロイするため、まずはイメージをクラスタがアクセス可能なコンテナレジストリに保管する必要がある。有名なコンテナレジストリとしては、ECRとDocker Hubがある。今回は、Docker Hubを使用する。

Docker Hub

まずはDocker Hubで、simple-flaskというレポジトリを作る。ここに対して、Dockerイメージを保管する。

Dockerイメージのビルド

次に、githubのレポジトリから、サンプルアプリケーションをダウンロードする。
https://github.com/udacity/cd0157-Server-Deployment-and-Containerization

ダウンロードしたら、Docker Hubのユーザidに対して、dockerイメージをビルドする。

git clone https://github.com/<USERNAME>/cd0157-Server-Deployment-and-Containerization
cd cd0157-Server-Deployment-and-Containerization
# Navigate to the "examples/Deploy_Flask_App" folder
cd examples/Deploy_Flask_App

docker build -t <DockerHub username>/simple-flask .
# Example: docker build -t sudkul/simple-flask .
# View the list of images
docker image ls

Docker Hubにローカルイメージをpush

最後に、ローカルPCに落としたアプリケーションをDocker Hubにpushする。これが完了したら、このDocker HubイメージをEKSクラスタにデプロイできる。

# Dockerhub login from terminal
docker login -u <DockerHub username>
# Example: docker login -u sudkul
# Syntax: 
docker push <DockerHub username>/<Repo-name>:<tag-name>
# Example: docker push  sudkul/simple-flask:latest

デプロイ

デプロイするため、deployment.ymlのsudkul/simple-flaskをユーザid/simple-flaskに書き換える。書き換えたら、kubectl apply -f deployment.ymlを実行してデプロイを完了させる。
https://github.com/udacity/cd0157-Server-Deployment-and-Containerization/blob/master/examples/Deploy_Flask_App/deployment.yml

最後に、kubectlでDeploymentを公開して、そのサービスをloadbalancerタイプとして設定する。こうすることで、kubernetesリソースをsimple-flask-deploymentという名前で、外部に公開できる。

kubectl expose deployment simple-flask-deployment --type=LoadBalancer --name=my-service

片付け

下記コマンドを実行することで、AWSリソースの削除ができる。

# Delete your deployment
kubectl delete deployments/simple-flask-deployment
# Tear down your cluster
eksctl delete cluster eksctl-demo --region=us-east-2

Discussion