为什么使用 FLUX CD?
传统的CI/CD
- 开发人员创建代码并编写Dockerfile。他们还为应用程序创建Kubernetes manifests和Helm Charts。
- 他们将代码推送到源代码存储库。
- 源代码存储库使用提交后的钩子触发Jenkins构建。
- Jenkins CI流程将构建Docker映像和Helm软件包,并将其推送到依赖仓库。
- 然后,Jenkins CD程序部署helm charts到k8s cluster。
这个过程听起来合理,或多或少是行业标准。但是,有一些限制:
- 您需要将Kubernetes 凭据存储在Jenkins服务器中。由于服务器是共享的,这是折中的做法。
- 尽管您可以使用Jenkins创建和更改配置,但无法使用它删除现有资源。例如,如果您从存储库中删除清单文件,则kubectl不会将其从服务器中删除。这是自动化GitOps的最大障碍。
Flux被描述为Kubernetes的GitOps运维工具,它可以将Git仓库中的清单状态与集群中运行的内容同步。在本次评测的三个工具中,它是最简单的一个。事实上,只需几步就可以设置好一个GitOps工作流,这一点让人惊叹不已。
FluxCD(或Flux)是一个很棒的工具,它可以将Git和Kubernetes集成起来
它的主要功能是监视远程Git仓库来应用Kubernetes清单中的更改。
该工具专注于软件交付周期中的部署部分
专门针对Git仓库和容器注册表与集群中的工作负载的版本和状态同步,因此该工具易于安装和维护。
GitOps部署
作为Flux的主要功能,它会定期拉取远程Git仓库,并以真正的GitOps方式将其清单文件(如果有新更改)应用于集群。这可以用于部署应用程序,也可以维护Kubernetes清单形式的任何种类的集群配置。同步也可以通过fluxctl sync命令手动触发。
自动部署新版本容器镜像
当新版本的容器镜像可用时,Flux可以选择更新集群中的工作负载。如果启用,运行fluxctl automate或者在工作负载的部署清单中添加注释,它会轮询注册表中的镜像元数据,并且如果有指定镜像的新版本可用,它可以使用新的版本来更新部署。当这样做时,Flux会写一个提交回原始Git仓库,以更新清单中使用的镜像版本,因此Git仍然是集群中运行的内容的真实来源。
结论:我应该使用FluxCD吗?
根据设计,Flux仅专注于将清单部署到群集。因此,你仍然需要CI工具来构建和测试你的应用程序,并在最后将你的容器镜像推送到注册表。另一方面,CI工具不需要访问群集,因为Flux会从内部周期性地拉取变化,最大限度地减少了群集的暴露。
前期准备
你将需要
- 一个Docker Hub镜像仓库,你可以将Flaskapp docker镜像上传到此处
- 一个Git Repo并连接它,然后你可以在整个演示过程中根据需要用你的设置替换“< >”中的任何内容
具体步骤
- 安装Kubernetes
- 安装并配置fluxctl,Flux部署的原生安装程序
- 配置Flux以连接到Git Repo
- 在Git Repo中升级deployment manifest
- 升级容器镜像并同步
- 配置漂移(drift)并同步
参考
https://blog.csdn.net/M2l0ZgSsVc7r69eFdTj/article/details/106653936
https://www.cnblogs.com/rancherlabs/p/12450473.html
https://cloud.tencent.com/developer/article/1659450