基于k8s的Flux简单部署
Flux 是一种工具,用于保持 Kubernetes 集群与配置源(如 Git 仓库)同步,并在有新代码要部署时自动更新配置。Flux 从一开始就使用 Kubernetes 的 API 扩展系统,并与 Prometheus 和 Kubernetes 生态系统的其他核心组件集成。Flux 支持多租户,并支持同步任意数量的 Git 仓库。
1.Flux 简介
Flux 是一种工具,用于保持 Kubernetes 集群与配置源(如 Git 仓库)同步,并在有新代码要部署时自动更新配置。
Flux 从一开始就使用 Kubernetes 的 API 扩展系统,并与 Prometheus 和 Kubernetes 生态系统的其他核心组件集成。Flux 支持多租户,并支持同步任意数量的 Git 仓库
2.架构图
Flux
采用 GitOps 工具包组件构建,该组件是一套专用工具和 Flux 控制器
可组合 API,fluxcd GitHub organisation下的 GitOps 可重用 Go 软件包用于在 Kubernetes 上构建持续交付(Continuous Delivery)。
3.快速开始
3.1前提条件
1.Kubernetes 集群。我们建议在本地开发环境中试用 参见Kubernetes Kind
2.具有 repo 权限的 GitHub 个人访问令牌 GitHub 个人访问令牌
3.2 安装 Flux CLI
Flux 命令行界面(CLI)用于启动 Flux 并与之交互
使用以下命令来安装flux
#通过bash安装flux 适用于mac和linux
curl -s https://fluxcd.io/install.sh | sudo bash
其他的操作系统参考CLI install documentation
3.3 配置shell
. <(flux completion bash)
要配置 shell 以加载 flux bash completions,将其添加到你的配置文件
3.4 设置凭证
设置环境变量包括 GitHub 个人访问令牌
和用户名
token获取在前提条件里有
export GITHUB_TOKEN=<your-token>
export GITHUB_USER=<your-username>
3.5检查Kubernetes 集群
运行以下命令,检查是否具备运行 Flux 所需的一切条件
flux check --pre
输出结果类似于以下,kubernetes版本要大于1.24
► checking prerequisites
✔ kubernetes 1.27.3 >=1.24.0
✔ prerequisites checks passed
3.6在集群上安装FLux
运行以下初始化命令
flux bootstrap github \
--owner=$GITHUB_USER \
--repository=fleet-infra \
--branch=main \
--path=./clusters/my-cluster \
--personal
输出结果类似于以下
► connecting to github.com
✔ repository created
✔ repository cloned
✚ generating manifests
✔ components manifests pushed
► installing components in flux-system namespace
deployment "source-controller" successfully rolled out
deployment "kustomize-controller" successfully rolled out
deployment "helm-controller" successfully rolled out
deployment "notification-controller" successfully rolled out
✔ install completed
► configuring deploy key
✔ deploy key configured
► generating sync manifests
✔ sync manifests pushed
► applying sync manifests
◎ waiting for cluster sync
✔ bootstrap finished
bootstrap
命令做了以下的事情
1.在你的 GitHub 账户上创建一个 git 仓库 fleet-infra。
2.向该仓库添加 Flux 组件清单。
3.将 Flux 组件部署到 Kubernetes 集群。
4.配置 Flux 组件,以跟踪版本库中的 /clusters/my-cluster/ 路径。
注意
在初始化flux的时候,可以查看flux-system里的pod是否全部已经运行,
如果,pod没有成功运行,会显示一直卡在响应sync
,然后超时失败
3.7克隆git仓库
将 fleet-infra 仓库克隆到本地计算机上
git clone https://github.com/$GITHUB_USER/fleet-infra
cd fleet-infra
3.8将 podinfo 仓库添加到 Flux
这里使用的是公共存储库 github.com/stefanprodan/podinfo,podinfo 是一个使用 Go 开发的小型网络应用程序。
3.8.1 GitRepository 清单
创建指向 podinfo 仓库主分支的 GitRepository 清单
flux create source git podinfo \
--url=https://github.com/stefanprodan/podinfo \
--branch=master \
--interval=1m \
--export > ./clusters/my-cluster/podinfo-source.yaml
注意:
如果是你自己的仓库,这里的url是你自己将来要存放资源的那个仓库的url
podinfo-source.yaml里的内容如下
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: podinfo
namespace: flux-system
spec:
interval: 1m
ref:
branch: master
url: https://github.com/stefanprodan/podinfo
3.8.2 push 源文件
提交 podinfo-source.yaml 文件并将其推送至你的 fleet-infra 源库
git add -A && git commit -m "Add podinfo GitRepository"
git push
3.9 部署 podinfo 应用程序
3.9.1 创建Kustomization
使用 flux create 命令创建可应用 podinfo 部署的 Kustomization
flux create kustomization podinfo \
--target-namespace=default \
--source=podinfo \
--path="./kustomize" \
--prune=true \
--wait=true \
--interval=30m \
--retry-interval=2m \
--health-check-timeout=3m \
--export > ./clusters/my-cluster/podinfo-kustomization.yaml
注意:
这里的path路径是上面你自己的仓库存放的manifest的资源文件夹路径
在本文里./kustomize
就是https://github.com/stefanprodan/podinfo
里的文件夹
里面存放的就是podinfo相关的manifest
文件
podinfo-kustomization.yaml里的内容如下
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: podinfo
namespace: flux-system
spec:
interval: 30m0s
path: ./kustomize
prune: true
retryInterval: 2m0s
sourceRef:
kind: GitRepository
name: podinfo
targetNamespace: default
timeout: 3m0s
wait: true
3.9.2 push Kustomization 资源文件
提交并将 Kustomization 清单推送至版本库
git add -A && git commit -m "Add podinfo Kustomization"
git push
fleet-infra仓库的结构如下
fleet-infra
└── clusters/
└── my-cluster/
├── flux-system/
│ ├── gotk-components.yaml
│ ├── gotk-sync.yaml
│ └── kustomization.yaml
├── podinfo-kustomization.yaml
└── podinfo-source.yaml
4 查看Flux 同步应用程序
flux get kustomizations --watch
结果如下
NAME REVISION SUSPENDED READY MESSAGE
flux-system main@sha1:4e9c917f False True Applied revision: main@sha1:4e9c917f
podinfo master@sha1:44157ecd False True Applied revision: master@sha1:44157ecd
检查 podinfo 是否已部署到群集上
kubectl -n default get deployments,services
结果如下
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/podinfo 2/2 2 2 108s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/podinfo ClusterIP 10.100.149.126 <none> 9898/TCP,9999/TCP 108s
对主分支中 podinfo Kubernetes manifest
所做的更改会映射在这个集群里
使用kubectl edit
更改 podinfo
部署时,更改会被还原为与 Git仓库 中描述的状态一致。
5 参考资料
更多推荐
所有评论(0)