こんにちは。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から展開します
今回利用する各環境の操作は、操作用デスクトップを1台用意してそこから以下図のように行います。
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にリポジトリを作成して、コミット&プッシュしておきます。
プッシュ完了後のリポジトリは以下のような形です。
2. CDセットアップ
TMCにて対象クラスタでCDが行えるようセットアップを行います。
2.1 CD有効化
まず対象のクラスタにてCD機能を有効化します。
TMCにて対象クラスタの、[ACTIONS]-[Enable continuous delivery]をクリックします。
Enable Continuous deliveryのポップアップでは、[ENABLE]をクリックして有効化を実施します。
有効化完了後、[Add-ons]-[Installed Tanzu Packages]を確認するとアドオンが追加されていることが確認できます。
2.2 Git リポジトリの登録
対象とするGit リポジトリをクラスタに登録していきます。
[Add-ons]-[Git repositories]-[ADD GIT REPOSITRY]をクリックします。
Gitリポジトリの登録画面が表示されます。
以下パラメータを入力して、[ADD GIT REPOSITORY]をクリックします。
- Repository name: kustomize-sample
- Repository URL: https://github.com/{アカウント名}/Kustomize-sample
- Branch: main ※GitHubのmainブランチを利用のため
作成完了後、[Sync status]がSucceededになっていれば完了です。
2.3 Kustomizationsの登録
最後にKustomizationsの登録を行います。
[Add-ons]-[Installed kustomizations]-[ADD KUSTOMIZATION]をクリックします。
kustomizationのマニフェストが置かれているGitHubのパスなどの登録画面が表示されます。
以下パラメータを入力して、[ADD KUSTOMIZATION]をクリックします。
- Kustomization name: kuard-kustomize
- Repository: kustomize-sample
- Path: kuard-kustomize
- Target namespace: default
登録完了後、[Sync status]がReconciliation Succeededになれば完了です。
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」になっていることも確認できます。
続いて以下のようにレプリカ数とイメージバージョンを変更して、GitHubのmainブランチに反映しておきます。
- レプリカ数: 1 → 3
- イメージバージョン: v0.9-purple → v0.10.0-purple
以下コマンドを実行すると、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機能を用いて、Gitリポジトリ上のマニフェストを用いたリソースの展開を実施しました。
CDの実装自体は少しハードルが高く見えがちですが、TMCのCD機能では、必要な設定等も基本的にはコンソール上の案内に従う形でスムーズに実施することができました。
なお、今回は1つのクラスタだけを対象としましたが、クラスタグループでも設定できるため、複数クラスタへの同時適用等もメリットであると感じました。
他のおすすめ記事はこちら
著者紹介
SB C&S株式会社
ICT事業本部 技術本部 技術統括部
第1技術部 1課
村上 正弥 - Seiya.Murakami -
VMware vExpert