Node.js デプロイのテスト
前提条件
- Node.js アプリケーションのコンテナー化 から始まる、ここまでのガイドすべてを終えていること。
- Docker Desktop において Kubernetes の有効化 を行っていること。
概要
本節では、開発マシン上に実現したフル機能の Kubernetes 環境に対して、Docker Desktop を用いてアプリケーションのデプロイを行う方法について学びます。 これを行うことで、デプロイの前にローカル環境内の Kubernetes においてテストやデバッグができるようになります。
Kubernetes YAML ファイルの生成
クローンを行ったディレクトリ内に docker-node-kubernetes.yaml
というファイルを生成します。
IDE またはテキストエディターを使ってその名前のファイルを開き、以下の内容を記述します。
DOCKER_USERNAME/REPO_NAME
部分は、Docker のユーザー名と、
Node.js アプリケーション向けの CI/CD 設定 において生成したリポジトリ名に書き換えます。
apiVersion: apps/v1
kind: Deployment
metadata:
name: docker-nodejs-demo
namespace: default
spec:
replicas: 1
selector:
matchLabels:
todo: web
template:
metadata:
labels:
todo: web
spec:
containers:
- name: todo-site
image: DOCKER_USERNAME/REPO_NAME
imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
name: todo-entrypoint
namespace: default
spec:
type: NodePort
selector:
todo: web
ports:
- port: 3000
targetPort: 3000
nodePort: 30001
この Kubernetes YAML ファイルにおいては ---
によって区切られた 2 つのオブジェクトがあります。
- その 1 つはデプロイメント。
同一 pod からなるスケール変更可能なグループを表しています。
この例においては 1 つのレプリカ、つまり pod のコピーを 1 つだけ持ちます。
この pod は
template
配下に記述されており、その中に 1 つだけコンテナーを有しています。 そのコンテナーとは、 Node.js アプリケーション向けの CI/CD 設定 における GitHub アクションにより構築したイメージから生成されるものです。 - もう 1 つは NodePort サービス。 これはホスト上のポート 30001 へのトラフィックを pod 内のポート 3000 に転送するものです。 これによってネットワークからアプリケーションへのアクセスが可能となります。
Kubernetes オブジェクトの詳細は Kubernetes ドキュメント を参照してください。
アプリケーションのデプロイとチェック
端末画面において、生成した
docker-node-kubernetes.yaml
が存在するディレクトリに移動します。 そしてアプリケーションを Kubernetes にデプロイします。$ kubectl apply -f docker-node-kubernetes.yaml
その出力は以下のようになるはずです。 これにより Kubernetes オブジェクトが正常に生成されたことがわかります。
deployment.apps/docker-nodejs-demo created service/todo-entrypoint created
デプロイ内容を一覧表示することで、すべてが正常に動作したことを確認します。
$ kubectl get deployments
デプロイ結果は以下のように一覧表示されるはずです。
NAME READY UP-TO-DATE AVAILABLE AGE docker-nodejs-demo 1/1 1 1 6s
上では YAML ファイルにおいて指定した pod がすべて起動していることが示されます。 サービスに対しても同様に確認します。
$ kubectl get services
その出力は以下のようになるはずです。
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d22h todo-entrypoint NodePort 10.111.101.229 <none> 3000:30001/TCP 33s
デフォルトの
kubernetes
サービスに加えてtodo-entrypoint
サービスが一覧表示され、ポート 30001/TCP のトラフィックを受け入れるものであることがわかりまs。ブラウザーを開いて
localhost:30001
にアクセスします。 アプリケーションが表示されるはずです。以下のコマンドを実行してアプリケーションを終了させます。
$ kubectl delete -f docker-node-kubernetes.yaml
まとめ
本節では、Docker Desktop を使って、開発マシン上に実現したフル機能の Kubernetes 環境に対してのアプリケーションのデプロイ方法を学びました。
関連情報