前语

FluxCD 是 CNCF 的孵化项目,能够让咱们以 GitOps 的方法轻松地交付运用。和另一个同类的 CNCF 孵化项目 ArgoCD 不同,FluxCD 是许多 toolkit 的集合,天然松耦合而且有良好的扩展性,用户可按需取用。咱们期望经过集成 FluxCD 这样一个优异的 GitOps 项目来为用户供给更多的挑选。

咱们归纳考虑了以下三大要素:

  • 为还没有触摸过 GitOps 的用户供给易上手的体会;
  • 为运用过 FluxCD 的用户供给无缝切换的体会;
  • 为现已运用过 KubeSphere GitOps 功用的用户供给了解感的一起杰出 FluxCD 的优势和特性。

多次从头规划了前端界面和后端完结,最终完结了一个还算比较满意的版别。

ks-devops

规划

  • 模板复用:FluxCD 供给了 HelmChart 类型的 CRD,可是 HelmRelease 无法直接引用 HelmChart,咱们期望添加模板的功用,这样许多装备就能够复用。
  • 多集群:咱们期望 FluxApplication 是一个多集群运用,这样咱们就能够用一套模板装备然后添加不同的装备去布置到多个集群中。

CRD

现有的 gitops.kubesphere.io/applications CRD 现已包含了 ArgoApplication。为了集成 FluxCD,咱们将 FluxCD 中的 HelmReleaseKustomization 组合抽象成一个 FluxApplication 的概念放入 Application 里而且 kind 来标识用户启用了哪种 GitOps Engine。

FluxCD 多集群应用的设计与实现

一个完整的 GitOps 运用能够拆分成三大部分:

  1. :寄存制品的库房,制品包含是 Kubernetes Manifests、Kustomize 和 Helm,库房的类型有 GitRepository、HelmRepository 以及 Bucket 等。
  2. 运用装备:对 Kustomize 能够是 path 和 patches,对 Helm 能够是 valuesFrom 和 values。
  3. 布置方针:制品的布置方位,是集群和相应称号空间的组合。

所以 FluxApplication 的具体完结如下,包含了 SourceConfig,由于 FluxCD 是一个多集群运用,一个布置方针对应一个运用装备,所以布置方针被包含在运用装备中。

type FluxApplicationSpec struct {
   // Source represents the ground truth of the FluxCD Application  
   Source *FluxApplicationSource `json:"source,omitempty"`  
   // Config represents the Config of the FluxCD Application  
   Config *FluxApplicationConfig `json:"config"`  
}

Controller

application-controllerstatus-controller 是办理 FluxCD 多集群运用的具体完结。以下是 FluxCD Helm 运用的示意图:

FluxCD 多集群应用的设计与实现

  • application-controller 负责 reconcile 自定义的多集群运用,解析自定义的 CR 然后转换成底层 FluxCD 的 CR 去驱动 FluxCD 的 kustomize-controllerhelm-controller 去运用的布置。
  • 可认为同一个 HelmTemplate 添加不同的运用装备和布置装备然后布置到多个集群中,还能够运用 FluxCD 的 pauseresume 功用,独自控制某个集群内运用的启停。
  • status-controller 使底层 FluxCD 运用状况透出到上层 gitops.kubesphere.io/application CR 中。

可视化界面

运用创立

为了使体会过 KubeSphere GitOps 功用的用户感到了解,咱们在根底信息装备标签中挑选和 ArgoCD 保持一致。虽然在运用装备和布置装备中 FluxCD 和 ArgoCD 存在相似之处,可是为了可维护性而且杰出 FluxCD 的特点,咱们从头规划了布置设置标签页,而且正在迭代之中。

FluxCD 多集群应用的设计与实现

  1. 在类型这一栏中,能够挑选 HelmRelease 或许 Kustomization。在以后模板 API 全部开发完结之后,用户能够在此处挑选模板类型,然后就能够挑选保存的模板并将该模板布置到任意集群。

FluxCD 多集群应用的设计与实现

  1. 在装备这一栏里能够装备 Chart 和 ValuesFiles,现阶段如果需要装备 ValuesFiles 要运用分号将途径隔开,如:./helm-chart/values.yaml;./helm-chart/aliyun-values.yaml;而且能够挑选是否将此装备保存为模板。
  2. 在布置这一栏中,用户可认为每一个布置方位装备不同的 Values、ValuesFrom 以及高档设置。Values 能够是任意 json 类型,是 helm install xxx --set 后面加的参数,例如:ports.traefik.expose=true;而 ValuesFrom 是 FluxCD 特有的内容,是一个类型为 ConfigMap 或 Secret 的数组,能够让用户更灵活的注入参数,用户能够单击标签挑选类型:

FluxCD 多集群应用的设计与实现

  1. 为了满足高档用户的需求而且照顾到刚触摸 GitOps 的用户,咱们供给了高档设置。现阶段的高档设置包含:同步间隔、ReleaseName、StorageNamespace 以及原生的 Helm 操作参数。和 Helm 的原生操作类似,例如常常运用的装置命令 helm install xxx --create-namespace 中的--create-namespace 的 flag 就能够经过设置装置参数 createNamespace=True 来到达相同的作用,如果你了解 Helm,你一定能够在这里找到了解的感觉,由于 FluxCD 的 helm-controller 内部就是运用了原生的 helm 库来完结对应的操作。

FluxCD 多集群应用的设计与实现

运用办理

在创立好一个 FluxCD 运用之后,在继续布置的主页能够看到创立的运用的概要预览,其间包含运用的类型(HelmRelease|Kustomization)、源(GitRepository|HelmRepository|Bucket)、版别以及安排妥当个数,安排妥当个数的意思是,当挑选将运用布置至多个方位时运用的安排妥当情况,例如将运用布置至三个集群内,其间两个集群中的运用现已处于 Ready 状况,别的一个集群内的运用还处于 Reconciling 的状况时,安排妥当个数为 2/3。用户还能够对该运用进行信息修改,Yaml 修改以及删除等操作。

FluxCD 多集群应用的设计与实现

点击运用称号能够进入运用详情页,在运用详情页能够看到运用的状况、布置方位、以及音讯等内容,该部分会继续完善。

FluxCD 多集群应用的设计与实现

Demo

demo 视频的前端选用 kubesphere/console PR-3761;后端选用 kubesphere/ks-devops master branch。 Demo Video 本文由博客一文多发渠道 OpenWrite 发布!