修正したアプリケーションのデプロイ

ボトルネックの特定、およびアプリケーションの修正が完了しました。

ここでは、修正したアプリケーションを利用するコンテナイメージの作成、および新しいコンテナイメージを利用した Pod のデプロイを行います。

以下のコマンドを実行して、アプリケーションコンテナのイメージを再ビルドします。

cd ~/environment/codes/lab3

for app in catalog_detail frontend_node product_catalog; do
    aws ecr describe-repositories --repository-name ${PROJECT_NAME}/${app} >/dev/null 2>&1 || aws ecr create-repository --repository-name ${PROJECT_NAME}/${app} >/dev/null
    docker build -t "${ECR_IMAGE_PREFIX}"/${app} ./apps/${app}
    docker push "${ECR_IMAGE_PREFIX}"/${app}
done

コンテナイメージのビルド、および ECR への登録が完了した後、以下のコマンドを実行して Pod の再作成を行います。

kubectl rollout restart deployment -n workshop frontend prodcatalog proddetail

今回のサンプルアプリケーションでは、手順を容易にするために Kubernetes マニフェストファイルのイメージタグに latest を指定しています。実際の運用では、追跡性の観点から latest タグの指定は避けることが推奨されています。

以下のコマンドで取得したロードバランサーの URL からサンプルアプリケーションにアクセスし、いくつかの操作を実行します。応答時間が大幅に短縮されていることが確認できます。

export LB_NAME=$(kubectl get svc frontend -n workshop -o jsonpath="{.status.loadBalancer.ingress[*].hostname}") 
echo $LB_NAME

今回のサンプルアプリケーションは、カタログデータをメモリ上に保存しているため、Pod の再作成に伴いカタログデータは初期化されます。