EKSでwebアプリをデプロイする
概要
今回は、サンプルアプリを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のレポジトリから、サンプルアプリケーションをダウンロードする。
ダウンロードしたら、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を実行してデプロイを完了させる。
最後に、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