FluxCD(或Flux)是一个很棒的工具,它可以将Git和Kubernetes集成起来 它的主要功能是监视远程Git仓库来应用Kubernetes清单中的更改。 结论:我应该使用FluxCD吗? 根据设计,Flux仅专注于将清单部署到群集。因此,你仍然需要CI工具来构建和测试你的应用程序,并在最后将你的容器镜像推送到注册表。
组件 Flux 是使用 GitOps Toolkit 组件构建的,它是一组: 专用工具和 Flux 控制器 可组合的 API 在 fluxcd GitHub 组织下,为构建基于 Kubernetes 的持续交付提供可重用的 对于 Mac 用户可以直接使用 homebrew 进行一键安装: $ brew install fluxcd/tap/flux 如果是 Linux 用户也可以使用下面的命令进行安装: $ curl - s https://fluxcd.io/install.sh | sudo bash 安装完成后,可以使用 flux 命令来验证是否安装成功: $ flux --version flux version 接下来我们就可以通过 Flux 来部署应用了,首先需要为 FluxCD 创建一个仓库连接信息,这就需要用到一个名为 GitRepository 的 CRD 对象,该对象可以定义一个 Source 代码源来为 直接应用该资源对象即可: $ kubectl apply -f k8s-demo-git-repo.yaml gitrepository.source.toolkit.fluxcd.io/k8s-demo
https://charts.fluxcd.io 创建 fluxcd namespace: kubectl create ns fluxcd 通过提供您的 GitHub 存储库 URL 安装 Flux : helm upgrade -i flux fluxcd/flux --wait \ --namespace fluxcd \ --set registry.pollInterval=1m \ --set /install | sh export PATH=$PATH:$HOME/.fluxcd/bin # windows https://github.com/fluxcd/flux/releases Helm Operator 在 fluxcd 命名空间中安装 Flux Helm Operator: helm upgrade -i helm-operator fluxcd/helm-operator namespace: fluxcd annotations: fluxcd.io/ignore: "false" spec: releaseName: sealed-secrets
spdx.json 文件可以在 GitHub 发布页面下载,例如: curl -sL https://github.com/fluxcd/flux2/releases/download/v0.25.3/ 参考资料 [1]Flux 项目: https://fluxcd.io/ [2]满意的用户: https://fluxcd.io/adopters/#flux-v1 [3]文章: https://www.weave.works https://deps.dev/go/github.com%2Ffluxcd%2Fflux2/v0.26.2/dependencies [16]0.16.0: https://github.com/fluxcd github.com%2Ffluxcd%2Fimage-reflector-controller/v0.16.0/dependencies [22]0.20.1: https://github.com/fluxcd /community/#meetings [29]CNCF Slack: https://slack.cncf.io/ [30]采用者: https://fluxcd.io/adopters/
/source-controller:v0.21.1 Verification for ghcr.io/fluxcd/source-controller:v0.21.1 The following checks 如何验证签名 如果你希望一次性手动完成此操作,安装 cosign 工具[7]并对要验证的镜像运行: COSIGN_EXPERIMENTAL=1 cosign verify ghcr.io/fluxcd/ 请查看fluxcd/flux2-multi-tenancy[9],以了解一个更详细的示例,以及 Kyverno 策略是如何应用到那里的。 /flux2-multi-tenancy: https://github.com/fluxcd/flux2-multi-tenancy [10]开发会议: https://fluxcd.io/community /#meetings [11]CNCF Slack: https://slack.cncf.io/ [12]采用者: https://fluxcd.io/adopters/
使用FluxCD实现GitOps: 采用FluxCD工具来实现GitOps方式的配置变更和应用发布。 选择 FluxCD、Flagger 和 ApiSIX Ingress 的组合,从生态系统和扩展能力的角度来看,有几个关键优势: FluxCD:作为 CNCF 项目,它提供紧密的 Kubernetes 集成和自动化部署的基础 Flagger:与 FluxCD 无缝集成,专注于高效、可靠的渐进式交付。 ApiSIX Ingress:作为高性能 API 网关,提供了丰富的流量管理功能,适应复杂的微服务架构。 以下脚本用于安装和配置 FluxCD、Flagger 和 ApiSIX Ingress。 这样,FluxCD 在同步仓库状态到集群时,可以自动触发渐进式发布流程。
从 fluxcd.io 开始使用 Flux。 3 月 25 日参加 CNCF 在线研讨会:Flux is Incubating + The Road Ahead[12]。 参考资料 [1] 开放治理: https://github.com/fluxcd/community/blob/main/GOVERNANCE.md [2] 安全报告: https://github.com /fluxcd/community/blob/main/SECURITY.md [3] Flux 项目: https://fluxcd.io/ [4] 生产使用: https://github.com/ fluxcd/flux/blob/master/README.md#who-is-using-flux-in-production [5] 持续交付技术雷达: https://www.cncf.io/blog /components/ [8] Flagger: https://docs.flagger.app/ [9] 特性路线图: https://toolkit.fluxcd.io/roadmap/ [10
举例: --- apiVersion: source.toolkit.fluxcd.io/v1 kind: GitRepository metadata: name: kubernetes-apps ref https://fluxcd.io/flux/components/source/api/v1beta2/#source.toolkit.fluxcd.io/v1beta2.GitRepositorySpec
自从GitOps工具包诞生以来,很明显fluxcd/将成为一个与GitOps相关的项目家族。Flagger维护人员期望使用工具箱组件并以这种方式简化Flagger。 https://github.com/fluxcd/flagger#roadmap 请帮助我们推动这个项目向前发展! 多架构镜像可以在GitHub仓库ghcr.io/fluxcd/flagger上找到。
举例 apiVersion: helm.toolkit.fluxcd.io/v2beta2 kind: HelmRelease metadata: name: vault namespace: ref https://fluxcd.io/flux/components/helm/api/v2beta2/#helm.toolkit.fluxcd.io/v2beta2.HelmReleaseSpec
en.wikipedia.org/wiki/Fuzzing [2]谷歌的开源软件连续模糊测试: https://github.com/google/oss-fuzz [3]安全审计的结果: https://fluxcd.io flux-coming-to-oss-fuzz [4]ADA Logic: https://adalogics.com/ [5]notification-controller 的相关 PR: https://github.com/fluxcd Conrod: https://jayconrod.com/posts/123/internals-of-go-s-new-fuzzing-system [9]问题: https://github.com/fluxcd /flux2/issues/2417 [10]开发会议: https://fluxcd.io/community/#meetings [11]CNCF Slack: https://slack.cncf.io / [12]采用者: https://fluxcd.io/adopters/
准备工作 flux2-kustomize-helm-example https://github.com/fluxcd/flux2-kustomize-helm-example 您将需要 Kubernetes 使用 Homebrew 在 MacOS 和 Linux 上安装 Flux CLI: brew install fluxcd/tap/flux 或者通过使用 Bash 脚本下载预编译的二进制文件来安装 CLI: curl -s https://fluxcd.io/install.sh | sudo bash 项目结构 Git 存储库包含以下顶级目录: apps 目录包含每个集群具有自定义配置的 Helm podinfo-patch.yaml 在 apps/base/podinfo/ 目录中,我们有一个 HelmRelease,两个集群都有共同的值: apiVersion: helm.toolkit.fluxcd.io /apps/staging prune: true validation: client --- apiVersion: kustomize.toolkit.fluxcd.io/v1beta1
GitRepository 条目可能如下所示: apiVersion: source.toolkit.fluxcd.io/v1beta1 kind: GitRepository metadata: apiVersion: infra.contrib.fluxcd.io/v1alpha1 kind: Terraform metadata: name: helloworld namespace 一种确认方式是: kubectl -n flux-system get terraforms.infra.contrib.fluxcd.io NAME READY STATUS AGE helloworld [3] Flux: http://fluxcd.io/ [4] 特性: https://weaveworks.github.io/tf-controller/#features [5] 路线图: https ://github.com/weaveworks/tf-controller#roadmap [6] flux 文档: https://fluxcd.io/flux/get-started/ [7] 安装文档
/docs/components/source/gitrepositories/#git-implementation [7]打破已知主机的工作方式: https://github.com/fluxcd /golang-with-libgit2#rationale [12]略有不同: https://github.com/fluxcd/golang-with-libgit2/blob/libgit2-1.3.0 / [14]Flux 0.28: https://github.com/fluxcd/flux2/releases/tag/v0.28.0 [15]v1.4.0: https://github.com/ libgit2/libgit2/releases/tag/v1.4.0 [16]即将召开的开发人员会议: https://fluxcd.io/community/#meetings [17]CNCF Slack : https://slack.cncf.io/ [18]采纳者: https://fluxcd.io/adopters/ ---- CNCF (Cloud Native Computing Foundation
举例: --- apiVersion: kustomize.toolkit.fluxcd.io/v1 kind: Kustomization metadata: name: argocd namespace ref https://fluxcd.io/flux/components/kustomize/api/v1/
你可以看这个 fluxcd/source-controller 问题#669[16]了解进度。 sandbox-projects/ [5] 成熟度等级解释: https://www.cncf.io/projects/#maturity-levels [6] Flux Helm Controller: https://fluxcd.io /docs/components/helm/ [7] Flux: https://fluxcd.io/ [8] Argo CD: https://github.com/argoproj/argo-cd azure.github.io/orkestra/ [14] Fleet: https://github.com/rancher/fleet [15] RFC-0002: https://github.com/fluxcd /flux2/tree/main/rfcs/0002-helm-oci [16] #669: https://github.com/fluxcd/source-controller/issues/669
例如安装 FluxCD 可以快速给你的 KubeVela Application 提供部署 Helm Chart 的能力。 编写系统集成的代码,让用户界面可以通过统一的方式使用 FluxCD 等 CRD 的功能,在 KubeVela 系统中就是通过编写模块定义(OAM Definition)完成。 这会带来如下问题: 操作繁琐:用户需要手动查阅文档如何安装 FluxCD 并处理可能发生的错误 资源分散:用户需要下载不同的文件,既需要安装 Helm 安装 FluxCD 还需要下载模块定义等系统扩展的集成配置 如果你对于实现细节感兴趣,可以参考 fluxcd 插件的 这部分配置[12]. 在设计提供什么参数供用户自定义插件安装时,我们也应该遵循一下这些最佳实践来为用户提供更好的使用体验。 当然,如果你可以接受依赖 FluxCD 的话,你也可以使用 helm 类型的 Component 直接安装一个 Helm Chart(因为 helm 类型的 Component 主要由 FluxCD 插件提供
这种情况,可以在设置 commit message 和事件触发的地方约定一个特殊字符串,下面是 ImageUpdateAutomation 的配置: apiVersion: image.toolkit.fluxcd.io 以下是镜像更新的配置: apiVersion: image.toolkit.fluxcd.io/v1beta2 kind: ImagePolicy metadata: name: dev-docs
Flux 项目原本提供了一个 Web UI 来管理 Flux 集群,但该项目已经存档,FluxCD 组织不再开发,所以我们这里不再介绍了,如果你想使用 Web UI 来管理 Flux 集群,可以使用 Weaveworks Flamingo 比较简单,我们可以通过 Flux 的 Kustomization 对象来部署,创建如下所示的资源对象: # flamingo.yaml apiVersion: source.toolkit.fluxcd.io ghcr.io/flux-subsystem-argo/flamingo/manifests ref: tag: latest --- apiVersion: kustomize.toolkit.fluxcd.io - apiVersion: v1 kind: Namespace metadata: name: podinfo-kustomize --- apiVersion: source.toolkit.fluxcd.io oci://ghcr.io/stefanprodan/manifests/podinfo ref: tag: latest --- apiVersion: kustomize.toolkit.fluxcd.io
不知道 ImageRepository 如何编写,我们可以通过上面的 flux 命令来帮我们生成即可,上面的命令会生成如下所示的资源清单文件: apiVersion: image.toolkit.fluxcd.io regcred 然后就可以应用上面的资源清单文件了: $ kubectl apply -f k8s-demo-registry.yaml imagerepository.image.toolkit.fluxcd.io 然后我们可以通过如下所示的 ImagePolicy 对象来告诉 Flux 如何过滤镜像标签: # k8s-demo-image-policy.yaml apiVersion: image.toolkit.fluxcd.io export > k8s-demo-automation.yaml 该命令生成的 ImageUpdateAutomation 对象如下所示: --- apiVersion: image.toolkit.fluxcd.io 一种策略 同样直接更新该资源对象即可: $ kubectl apply -f k8s-demo-automation.yaml imageupdateautomation.image.toolkit.fluxcd.io