安装 FluxCD
1 2 3 4 5 6 7 8
| # 集群内安装 FluxCD kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/lyzhang1999/resource/main/fluxcd/fluxcd.yaml
# 安装 FluxCD 的工作负载比较多,你也使用 kubectl wait 来等待安装完成 kubectl wait --for=condition=available --timeout=300s --all deployments -n flux-systemdeployment.apps/helm-controller condition metdeployment.apps/image-automation-controller condition metdeployment.apps/image-reflector-controller condition metdeployment.apps/kustomize-controller condition metdeployment.apps/notification-controller condition metdeployment.apps/source-controller condition met
# 本地创建 fluxcd-demo 目录 mkdir fluxcd-demo && cd fluxcd-demo
|
在 fluxcd-demo 目录下创建 deployment.yaml 文件,并将下面的内容保存到这个文件里
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| apiVersion: apps/v1 kind: Deployment metadata: labels: app: hello-world-flask name: hello-world-flask spec: replicas: 2 selector: matchLabels: app: hello-world-flask template: metadata: labels: app: hello-world-flask spec: containers: - image: lyzhang1999/hello-world-flask:latest name: hello-world-flask
|
将此 yaml 推入 github/gitlab 仓库中
配置FluxCD与仓库连接信息
编辑 fluxcd-repo.yaml ,此内容为创建仓库连接信息
1 2 3 4 5 6 7 8 9
| apiVersion: source.toolkit.fluxcd.io/v1beta2 kind: GitRepository metadata: name: hello-world-flask spec: interval: 5s ref: branch: main url: https://github.com/lyzhang1999/fluxcd-demo
|
使用 kubectl apply 将其 GitRepository 对象部署到集群内
1 2 3 4 5
| kubectl apply -f fluxcd-repo.yaml gitrepository.source.toolkit.fluxcd.io/hello-world-flask created
# 验证 kubectl get gitrepository
|
创建部署策略
编辑 fluxcd-kustomize.yaml ,为 FluxCD 创建部署策略
1 2 3 4 5 6 7 8 9 10 11 12
| apiVersion: kustomize.toolkit.fluxcd.io/v1beta2 kind: Kustomization metadata: name: hello-world-flask spec: interval: 5s path: ./ prune: true sourceRef: kind: GitRepository name: hello-world-flask targetNamespace: default
|
将 kustomization 对象部署到集群内:
1 2 3 4
| kubectl apply -f fluxcd-kustomize.yaml
# 验证 kubectl get kustomization
|
自动发布
修改 fluxcd-demo 仓库的 deployment.yaml 文件
1 2 3 4 5 6 7 8 9 10
| - image: lyzhang1999/hello-world-flask:v1 # 修改此处 # 将修改推送到远端仓库 git add -A && git commit -m "Update image tag to v1" git push origin main
# 可以使用 kubectl describe kustomization hello-world-flask 查看触发重新部署的事件 kubectl describe kustomization hello-world-flask
# 通过上面的配置,让 FluxCD 自动完成了监听修改、比较和重新部署
|
发布回滚
GitOps 工作流中,Git 仓库是描述期望状态的唯一可信源,那么只要对 Git 仓库执行回滚,就可以实现发布回滚
1 2 3 4 5 6 7 8 9 10
| # 回滚 fluxcd-demo 仓库,可以使用 git log 来查看它 git log
# 可以看到,上一次的 commit id 为 75f39dc58101b2406d4aaacf276e4d7b2d429fc9,接下来使用 git reset 来回滚到上一次提交,并强制推送到 Git 仓库 git reset --hard 75f39dc58101b2406d4aaacf276e4d7b2d429fc9
# 使用 kubectl describe kustomization hello-world-flask 查看触发重新部署的事件 kubectl describe kustomization hello-world-flask
# 从返回结果的 Last Applied Revision 可以看出,FluxCD 已经检查到了变更,并已经进行了同步。
|