核心原理
Flux为一款GitOPS的发布工具,应用信息全部放到git仓库中,一旦git仓库中应用信息有新的提交,Flux即可在k8s中发布新的部署。支持kustomize和helm chart形式的应用。目前该项目为CNCF的孵化项目。
快速开始
前置条件
- 已经存在k8s集群
- 可以获取到Github的个人token
安装flux cli
执行如下命令安装flux cli1
curl -s https://fluxcd.io/install.sh | sudo bash
将如下内容追到到文件~/.bash_profile1
. <(flux completion bash)
bootstrap
bootstrap操作会在k8s集群中安装flux到flux-system下,并且会通过git的方式来管理其自身。这里直接采用github,首先要获取到token,并设置为环境变量。1
export GITHUB_TOKEN=xxx
并执行如下命令开始bootstrap1
2
3
4
5flux bootstrap github \
--owner=kuring \
--repository=flux-learn \
--path=clusters/my-cluster \
--personal
会自动创建github repo,并且会在main分支的clusters/my-cluster/flux-system下创建三个文件:
- gotk-components.yaml:flux的组件yaml
- gotk-sync.yaml
- kustomization.yaml:使用kustomization来个性化flux组件
会安装如下组件到k8s中
1 | $ k get deployment -n flux-system |
也可以使用更简单的方式flux install
来安装flux,该命令不会将flux的安装信息存放到git仓库中,而是会直接安装。
部署应用
将上述的github项目copy到本地,需要特别注意的是github不允许使用密码来认证,需要在输入密码的地方输入token。1
2git clone https://github.com/kuring/flux-learn
cd fleet-infra
使用如下命令在git仓库中创建podinfo-source.yaml文件和kustomization文件1
2
3
4
5
6
7
8
9
10
11
12
13flux create source git podinfo \
--url=https://github.com/stefanprodan/podinfo \
--branch=master \
--interval=30s \
--export > ./clusters/my-cluster/podinfo-source.yaml
flux create kustomization podinfo \
--target-namespace=default \
--source=podinfo \
--path="./kustomize" \
--prune=true \
--interval=5m \
--export > ./clusters/my-cluster/podinfo-kustomization.yaml
podinfo-source.yaml文件内容如下:1
2
3
4
5
6
7
8
9
10apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: GitRepository
metadata:
name: podinfo
namespace: flux-system
spec:
interval: 30s
ref:
branch: master
url: https://github.com/stefanprodan/podinfo
podinfo-kustomization.yaml文件内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
name: podinfo
namespace: flux-system
spec:
interval: 5m0s
path: ./kustomize
prune: true
sourceRef:
kind: GitRepository
name: podinfo
targetNamespace: default
执行如下命令将文件提供到git仓库1
2git add -A && git commit -m "Add podinfo GitRepository"
git push
查看podinfo的部署状态,说明已经自动部署成功。1
2
3
4$ flux get kustomizations --watch
NAME REVISION SUSPENDED READY MESSAGE
podinfo master/bf09377 False True Applied revision: master/bf09377
flux-system main/81f2115 False True Applied revision: main/81f2115
修改podinfo-kustomization.yaml文件内容如下,并重新提交到git仓库1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24apiVersion: kustomize.toolkit.fluxcd.io/v1beta2
kind: Kustomization
metadata:
name: podinfo
namespace: flux-system
spec:
interval: 5m0s
path: ./kustomize
prune: true
sourceRef:
kind: GitRepository
name: podinfo
targetNamespace: default
patches:
- patch: |-
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: podinfo
spec:
minReplicas: 3
target:
name: podinfo
kind: HorizontalPodAutoscaler
过会可以看到环境中的hpa最小副本数已经变更为3.