Node.js デプロイのテスト

前提条件

概要

本節では、開発マシン上に実現したフル機能の 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 ドキュメント を参照してください。

アプリケーションのデプロイとチェック

  1. 端末画面において、生成した docker-node-kubernetes.yaml が存在するディレクトリに移動します。 そしてアプリケーションを Kubernetes にデプロイします。

    $ kubectl apply -f docker-node-kubernetes.yaml
    

    その出力は以下のようになるはずです。 これにより Kubernetes オブジェクトが正常に生成されたことがわかります。

    deployment.apps/docker-nodejs-demo created
    service/todo-entrypoint created
  2. デプロイ内容を一覧表示することで、すべてが正常に動作したことを確認します。

    $ 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。

  3. ブラウザーを開いて localhost:30001 にアクセスします。 アプリケーションが表示されるはずです。

  4. 以下のコマンドを実行してアプリケーションを終了させます。

    $ kubectl delete -f docker-node-kubernetes.yaml
    

まとめ

本節では、Docker Desktop を使って、開発マシン上に実現したフル機能の Kubernetes 環境に対してのアプリケーションのデプロイ方法を学びました。

関連情報