SB C&Sの最新技術情報 発信サイト

C&S ENGINEER VOICE

SB C&S

Tanzu Mission ControlのContinuous Delivery機能紹介

VMware
2023.10.25

こんにちは。SB C&Sの村上です。

この記事ではTanzu Mission Control (TMC) のContinuous Delivery (CD) 機能を用いたKubernetesリソースの管理を紹介します。

TMCのCD機能は、Gitリポジトリ上のマニフェストの更新状況を同期して、管理下のクラスタに展開できるものとなります。
例えば、Deploymentで指定しているレプリカ数やイメージの変更、新しいリソースの適用などを、Gitリポジトリを変更するだけで自動でクラスタに反映できます。

仕組みとしてはTMCにて管理下のクラスタのCD機能を有効化すると、以下2つのFlux CDのアドオンが追加されます。

これらのアドオンによってGitリポジトリとクラスタを同期して、Gitリポジトリ上のマニフェストをもとにKubernetesリソースを展開する形となります。
※ Gitリポジトリ上には「kustomization.yaml」というファイルを用意して、そのファイル内に展開するマニフェストの情報等を記載しておく必要があります

本記事ではここからTMCのCD機能を有効化して、アプリケーションの展開、レプリカ数の変更、コンテナイメージのバージョンアップを実施します。

環境イメージ

本記事では、以下図のようなCDフローの構築を行います。
GitHub上の「Kustomize-sample」というリポジトリを作成して、そこの変更を検知して、Kubernetesリソースとして展開するような形となります。
※EKS上のCDアドオンはTMCから展開します

TMC_CD_1_1.png

今回利用する各環境の操作は、操作用デスクトップを1台用意してそこから以下図のように行います。

TMC_CD_1_2.png

1. Gitリポジトリの準備

CDの対象とするGitリポジトリの準備を行います。

今回Gitリポジトリは以下構成で作成します。

Kustomize-sample
└── kuard-kustomize
     ├── kuard-deployment.yaml
     ├── kuard-service.yaml
     └── kustomization.yaml

kuard-deployment.yaml
今回デプロイするアプリケーションとして、公開コンテナレジストリ(gcr.io)からkuardというサンプルアプリケーションを用います。
マニフェストは、以下のようにreplicasは1、imageのバージョンはv0.9-purpleで用意します。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kuard-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kuard
  template:
    metadata:
      labels:
        app: kuard
    spec:
      containers:
      - name: kuard
        image: gcr.io/kuar-demo/kuard-amd64:v0.9-purple
        ports:
        - containerPort: 8080

kuard-service.yaml
前述のdeploymentに紐づけるServiceとして、以下マニフェストを用意します。

apiVersion: v1
kind: Service
metadata:
  name: kuard-service
spec:
  selector:
    app: kuard
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

kustomization.yaml
TMCのCD機能では、展開対象とするマニフェストを「kustomization.yaml」というファイルに指定しておく必要があります。
本手順では以下のように、deploymentとserviceのマニフェストを指定する形で用意します。

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - kuard-deployment.yaml
  - kuard-service.yaml

マニフェストの作成が完了しましたら、GitHubにリポジトリを作成して、コミット&プッシュしておきます。
プッシュ完了後のリポジトリは以下のような形です。

TMC_CD_1_3.png

2. CDセットアップ

TMCにて対象クラスタでCDが行えるようセットアップを行います。

2.1 CD有効化

まず対象のクラスタにてCD機能を有効化します。

TMCにて対象クラスタの、[ACTIONS]-[Enable continuous delivery]をクリックします。

TMC_CD_2_1.png


Enable Continuous deliveryのポップアップでは、[ENABLE]をクリックして有効化を実施します。

TMC_CD_2_2.png


有効化完了後、[Add-ons]-[Installed Tanzu Packages]を確認するとアドオンが追加されていることが確認できます。

TMC_CD_2_3.png

2.2 Git リポジトリの登録

対象とするGit リポジトリをクラスタに登録していきます。

[Add-ons]-[Git repositories]-[ADD GIT REPOSITRY]をクリックします。

TMC_CD_2_4.png


Gitリポジトリの登録画面が表示されます。
以下パラメータを入力して、[ADD GIT REPOSITORY]をクリックします。

  • Repository name: kustomize-sample
  • Repository URL: https://github.com/{アカウント名}/Kustomize-sample
  • Branch: main ※GitHubのmainブランチを利用のため

TMC_CD_2_5_2.png


作成完了後、[Sync status]がSucceededになっていれば完了です。

TMC_CD_2_6_2.png

2.3 Kustomizationsの登録

最後にKustomizationsの登録を行います。

[Add-ons]-[Installed kustomizations]-[ADD KUSTOMIZATION]をクリックします。

TMC_CD_2_7.png


kustomizationのマニフェストが置かれているGitHubのパスなどの登録画面が表示されます。
以下パラメータを入力して、[ADD KUSTOMIZATION]をクリックします。

  • Kustomization name: kuard-kustomize
  • Repository: kustomize-sample
  • Path: kuard-kustomize
  • Target namespace: default

TMC_CD_2_8.png


登録完了後、[Sync status]がReconciliation Succeededになれば完了です。

TMC_CD_2_9.png


3. 動作確認

Gitリポジトリとクラスタの同期が完了したため、CD機能の様子を見ていきます。

以下コマンドでCD機能の有効化等が完了した状態をみると、PodとServiceが展開されていることが確認できます。これらはCD機能によってGitリポジトリから展開がされたものとなります。

$ kubectl get pods,svc 
## 出力
NAME                                   READY   STATUS    RESTARTS   AGE
pod/kuard-deployment-cb8dd59cc-r9rr6   1/1     Running   0          89s
NAME                    TYPE           CLUSTER-IP       EXTERNAL-IP         PORT(S)        AGE
service/kuard-service   LoadBalancer   10.100.207.227   {長いため省略}     80:32757/TCP   89s

EXTERNAL-IPにアクセスして、アプリケーションが動作していることを確認します。
なお、以下赤枠に記載されているコンテナイメージのバージョンが「v0.9-purple」になっていることも確認できます。

TMC_CD_3_1.png


続いて以下のようにレプリカ数とイメージバージョンを変更して、GitHubのmainブランチに反映しておきます。

  • レプリカ数: 1 → 3
  • イメージバージョン: v0.9-purple → v0.10.0-purple

TMC_CD_3_2.png


以下コマンドを実行すると、Podが3つになっていることが確認できます。
※展開中の場合は、旧Podが削除中であったり、新しいPodが作成中となります

$ kubectl get pod
## 出力
NAME                                    READY   STATUS    RESTARTS   AGE
pod/kuard-deployment-588d57d8d7-92r92   1/1     Running   0          13s
pod/kuard-deployment-588d57d8d7-cc7wv   1/1     Running   0          3s
pod/kuard-deployment-588d57d8d7-cdd4d   1/1     Running   0          8s 

再度EXTERNAL-IPにアクセスすると、以下赤枠のバージョンが「v0.10.0-purple」に上がっていることが確認できます。

TMC_CD_3_3.png

まとめ

今回はTMCのCD機能を用いて、Gitリポジトリ上のマニフェストを用いたリソースの展開を実施しました。
CDの実装自体は少しハードルが高く見えがちですが、TMCのCD機能では、必要な設定等も基本的にはコンソール上の案内に従う形でスムーズに実施することができました。
なお、今回は1つのクラスタだけを対象としましたが、クラスタグループでも設定できるため、複数クラスタへの同時適用等もメリットであると感じました。

他のおすすめ記事はこちら

著者紹介

SB C&S株式会社
ICT事業本部 技術本部 技術統括部
第1技術部 1課
村上 正弥 - Seiya.Murakami -

VMware vExpert