C++ デプロイのテスト
前提条件
- C++ アプリケーションのコンテナー化 から始まる、ここまでのガイドすべてを終えていること。
- Docker Desktop において Kubernetes を有効 にしていること。
概要
本節では 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 ドキュメント を参照してください。
アプリケーションのデプロイとチェック
端末において
c-plus-plus-docker
に移動し、アプリケーションを Kubernetes にデプロイします。$ kubectl apply -f docker-kubernetes.yml
実行結果は以下のようになるはずです。 つまり Kubernetes オブジェクトは正常に生成されたはずです。
deployment.apps/docker-c-plus-plus-demo created service/service-entrypoint created
デプロイの一覧を表示して、すべてがうまく動作していることを確認します。
$ 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 のトラフィックを受けつけます。ブラウザーにおいて以下のアドレスにアクセスします。 メッセージ
{"Status" : "OK"}
が表示されるはずです。http://localhost:30001/
以下のコマンドを実行してアプリケーションを終了します。
$ kubectl delete -f docker-kubernetes.yml
まとめ
本節では Docker Desktop を使って、開発マシン上に実現されている Kubernetes のフル機能環境に向けたアプリケーションのデプロイ方法について学びました。
関連情報