C++ デプロイのテスト

前提条件

概要

本節では Docker Desktop を使って、開発マシン上に実現されている Kubernetes のフル機能環境に向けたアプリケーションのデプロイ方法について学びます。 これによってデプロイ前に Kubernetes 上のワークロードをローカルにおいてテスト、デバッグすることができます。

Kubernetes YAML ファイルの生成

c-plus-plus-docker ディレクトリ内に docker-kubernetes.yml という名のファイルを生成します。 このファイルを IDE またはテキストエディターで開きます。 そして以下に示す内容を記述します。 DOCKER_USERNAME/REPO_NAME の部分は、自分の Docker ユーザー名、および C++ アプリケーション向け CI/CD の設定 において生成したリポジトリ名に置き換えてください。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: docker-c-plus-plus-demo
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      service: ok-api
  template:
    metadata:
      labels:
        service: ok-api
    spec:
      containers:
        - name: ok-api-service
          image: DOCKER_USERNAME/REPO_NAME
          imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: service-entrypoint
  namespace: default
spec:
  type: NodePort
  selector:
    service: ok-api
  ports:
    - port: 8080
      targetPort: 8080
      nodePort: 30001

この Kubernetes YAML ファイルには --- によって区切られた 2 つのオブジェクトがあります。

  • デプロイメント。 スケール可能なポッドグループを記述します。 ここではレプリカを 1 とします。 つまりポッドを 1 つコピーします。 そのポッドは以下において template と記述されるものであり、その中にただ 1 つのコンテナーを持ちます。 このコンテナーは C++ アプリケーション向け CI/CD の設定 において GitHub アクションによってビルドしたイメージから生成されるものです。
  • NodePort サービス。 これはホスト上のポート 30001 をポッド内のポート 8080 にトラフィックをルーティングします。 これによってネットワークからアプリにアクセスできるようになります。

Kubernetes オブジェクトについての詳細は Kubernetes ドキュメント を参照してください。

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

  1. 端末において c-plus-plus-docker に移動し、アプリケーションを Kubernetes にデプロイします。

    $ kubectl apply -f docker-kubernetes.yml
    

    実行結果は以下のようになるはずです。 つまり Kubernetes オブジェクトは正常に生成されたはずです。

    deployment.apps/docker-c-plus-plus-demo created
    service/service-entrypoint created
  2. デプロイの一覧を表示して、すべてがうまく動作していることを確認します。

    $ kubectl get deployments
    

    デプロイ結果は以下のように一覧表示されるはずです。

    NAME                     READY   UP-TO-DATE   AVAILABLE    AGE
    docker-c-plus-plus-demo   1/1     1            1           10s

    この出力結果から、YAML ファイルに記述したポッドがすべて実行していることが分かります。 今回のサービスに関しても同じく確認します。

    $ kubectl get services
    

    以下のような出力結果が得られるはずです。

    NAME                 TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
    kubernetes           ClusterIP   10.96.0.1        <none>        443/TCP          88m
    service-entrypoint   NodePort    10.105.145.223   <none>        8080:30001/TCP   83s

    デフォルトの kubernetes サービスに加えて service-entrypoint というサービスが表示されます。 そのサービスはポート 30001/TCP のトラフィックを受けつけます。

  3. ブラウザーにおいて以下のアドレスにアクセスします。 メッセージ {"Status" : "OK"} が表示されるはずです。

    http://localhost:30001/
    
  4. 以下のコマンドを実行してアプリケーションを終了します。

    $ kubectl delete -f docker-kubernetes.yml
    

まとめ

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

関連情報