GitOpsに興味があり、MinikubeでWeave Fluxを試してみたメモ。
以下のガイドに従い試してみる。
GitOptsとはについては以下の資料などを参照。
準備
コマンドラインツールのfluxctlをインストールする。今回の作業だけならこのツールはなくても大丈夫。
brew install fluxctl
Fluxにウォッチさせるリポジトリとして、サンプルのリポジトリをフォークして使用する。以下のリポジトリでForkボタンを押す。
Weave Fluxの導入
Minikubeを起動する。
minikube start
Fluxのリポジトリをローカルにクローンする。
git clone https://github.com/weaveworks/flux
FluxのDeploymentのマニフェストを修正する。ウォッチするリポジトリをフォークした自分のリポジトリに変更する。
vi deploy/flux-deployment.yaml
...
# replace or remove the following URL
- --git-url=git@github.com:sotoiwa/flux-get-started.git
- --git-branch=master
...
deploy
ディレクトリ配下のマニフェスト群をデプロイする。
kubectl apply -f deploy
Podが起動したことを確認する。
$ kubectl get po
NAME READY STATUS RESTARTS AGE
flux-546fdf9957-vbltb 1/1 Running 0 3s
memcached-57f9c8d4c-fxn8p 1/1 Running 0 8m58s
$
Fluxが起動時に生成した鍵ペアの公開鍵を確認する。
fluxctl identity
fluxctl
を導入していない場合は以下コマンドでも確認できる。
kubectl logs deployment/flux | grep identity.pub
公開鍵をdeploy keyとして登録する。
以上で完了。
ウォッチしたリポジトリにあるマニフェストに従い、demo
というNamespaceが作成され、podinfo
のDepoymentが作成される。あとHPAも。
$ kubectl get po -n demo
NAME READY STATUS RESTARTS AGE
podinfo-597bdb4466-qnkt9 1/1 Running 0 3m15s
podinfo-597bdb4466-vlsdk 1/1 Running 0 3m30s
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
podinfo Deployment/podinfo <unknown>/99% 2 4 2 10m
$
リポジトリに変更をコミット
フォークしたリポジトリをローカルにクローンする。
git clone git@github.com:sotoiwa/flux-get-started.git
今回はMasterブランチでDeploymeht定義を修正する。
現在デプロイされているDeploymentのPODINFO_UI_COLOR
環境変数を確認。
$ kubectl get deployments -n demo podinfo -o yaml | grep -2 "name: PODINFO_UI_COLOR"
- --random-error=false
env:
- name: PODINFO_UI_COLOR
value: green
image: stefanprodan/podinfo:1.3.2
マニフェスト上のPODINFO_UI_COLOR
環境変数のgreen
をblue
に変える。
cd flux-get-started/
vi workloads/podinfo-dep.yaml
...
env:
- name: PODINFO_UI_COLOR
value: blue
...
変更をコミットしてpushする。
git add
git commit
git push
デフォルトでは5分間隔で変更をウォッチしているので、しばらく待つとDeploymentが更新されることが確認できる。
$ kubectl get deployments -n demo podinfo -o yaml | grep -2 "name: PODINFO_UI_COLOR"
- --random-error=false
env:
- name: PODINFO_UI_COLOR
value: blue
image: stefanprodan/podinfo:1.3.2
$
以上。
FluxのPodも非常に軽量なので、とてもよさそうに思える。
$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
flux-546fdf9957-vbltb 3m 31Mi
memcached-57f9c8d4c-fxn8p 0m 9Mi
$