🐥

fluxをkindにインストールして使う

2022/12/02に公開

fluxとは

GitOpsツール。
fluxでは、flux専用のリポジトリを作成し、そこにデプロイしたいマニフェストファイル一式を入れておくイメージ。
GitOpsなので、Git上の差分を検知して自動的にデプロイをかける。
ArgoCD違いは、やはり専用のリポジトリを作る必要があるというところでしょうか。あとは、fluxではGUIは用意されていないはず。

インストール

クラスタ作成

kind create cluster

前提チェック

flux check --pre
► checking prerequisites
✔ Kubernetes 1.24.7-eks-fb459a0 >=1.20.6-0
✔ prerequisites checks passed

初期化

Github上にfleet-infraリポジトリが、./clusters/my-clusterにマニフェストファイルが作成されている

資格情報をあらかじめセットしておく

export GITHUB_TOKEN=<your-token>
export GITHUB_USER=<your-username>
flux bootstrap github \
  --owner=$GITHUB_USER \
  --repository=fleet-infra-kind \
  --branch=main \
  --path=./clusters/my-cluster \
  --personal

このコマンドでクラスタにflux-system namespaceが作成されて、いくつかPodがデプロイされる。やり直したい場合、一度flux-namespaceを消してしまうと手っ取り早いかも。

このような感じで作成される

使ってみる

gitclone

git@github.com:vampire-yuta/fleet-infra-kind.git
cd fleet-infra-kind

PodInfoマニフェストファイルを組み入れる

flux create source git podinfo \
  --url=https://github.com/stefanprodan/podinfo \
  --branch=master \
  --interval=30s \
  --export > ./clusters/my-cluster/podinfo-source.yaml

リポジトリへPush

git add -A && git commit -m "Add podinfo GitRepository"
git push

デプロイ

flux create kustomization podinfo \
  --target-namespace=default \
  --source=podinfo \
  --path="./kustomize" \
  --prune=true \
  --interval=5m \
  --export > ./clusters/my-cluster/podinfo-kustomization.yaml
git add -A && git commit -m "Add podinfo Kustomization"
git push

状況確認

flux get kustomizations --watch

出力結果
podinfoなるものがデプロイされている様子が分かる

NAME            REVISION        SUSPENDED       READY   MESSAGE
flux-system     main/b1a4792    False           True    Applied revision: main/b1a4792
flux-system     main/b1a4792bb4694c207a4779b8799a67d087f8b38f   False   Unknown Reconciliation in progress
flux-system     main/b1a4792bb4694c207a4779b8799a67d087f8b38f   False   Unknown Reconciliation in progress
flux-system     main/b1a4792bb4694c207a4779b8799a67d087f8b38f   False   Unknown Reconciliation in progress
flux-system     main/b1a4792bb4694c207a4779b8799a67d087f8b38f   False   Unknown Reconciliation in progress
podinfo         False   False   waiting to be reconciled
podinfo         False   False   waiting to be reconciled
flux-system     main/b1a4792    False   True    Applied revision: main/8537aa0
flux-system     main/8537aa0    False   True    Applied revision: main/8537aa0
podinfo         False   Unknown Reconciliation in progress
podinfo         False   Unknown Reconciliation in progress
podinfo         False   Unknown Reconciliation in progress
podinfo         False   Unknown Reconciliation in progress
podinfo         False   True    Applied revision: master/8615cb7
podinfo master/8615cb7  False   True    Applied revision: master/8615cb7

クラスタにもデプロイされている

 yuta   main  ~  fleet-infra-kind  1  kubectl -n default get deployments,services
NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/podinfo   2/2     2            2           107s

NAME                 TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
service/kubernetes   ClusterIP   10.96.0.1      <none>        443/TCP             10m
service/podinfo      ClusterIP   10.96.126.23   <none>        9898/TCP,9999/TCP   107s

参考

https://fluxcd.io/flux/get-started/

Discussion