前言
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 中的 HelmRelease
和 Kustomization
组合形象成一个 FluxApplication
的概念放入 Application
里并且 kind
来标识用户启用了哪种 GitOps Engine。
一个残缺的 GitOps 利用能够拆分成三大部分:
- 源 :寄存制品的仓库,制品包含是 Kubernetes Manifests、Kustomize 和 Helm,仓库的类型有 GitRepository、HelmRepository 以及 Bucket 等。
- 利用配置 :对 Kustomize 能够是 path 和 patches,对 Helm 能够是 valuesFrom 和 values。
- 部署指标 :制品的部署地位,是集群和相应名称空间的组合。
所以 FluxApplication
的具体实现如下,蕴含了 Source
和 Config
,因为 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-controller
和 status-controller
是治理 FluxCD 多集群利用的具体实现。以下是 FluxCD Helm 利用的示意图:
application-controller
负责 reconcile 自定义的多集群利用,解析自定义的 CR 而后转换成底层 FluxCD 的 CR 去驱动 FluxCD 的kustomize-controller
或helm-controller
去利用的部署。- 能够为同一个
HelmTemplate
增加不同的利用配置和部署配置而后部署到多个集群中,还能够应用 FluxCD 的pause
和resume
性能,独自管制某个集群内利用的启停。 status-controller
使底层 FluxCD 利用状态透出到下层 gitops.kubesphere.io/application CR 中。
可视化界面
利用创立
为了使体验过 KubeSphere GitOps 性能的用户感到相熟,咱们在根底信息配置标签中抉择和 ArgoCD 保持一致。尽管在利用配置和部署配置中 FluxCD 和 ArgoCD 存在相似之处,然而为了可维护性并且突出 FluxCD 的特点,咱们从新设计了部署设置标签页,并且正在迭代之中。
- 在类型这一栏中,能够抉择 HelmRelease 或者 Kustomization。在当前模板 API 全副开发实现之后,用户能够在此处抉择模板类型,而后就能够抉择保留的模板并将该模板部署到任意集群。
- 在配置这一栏里能够配置 Chart 和 ValuesFiles,现阶段如果须要配置 ValuesFiles 要应用分号将门路隔开,如:
./helm-chart/values.yaml;./helm-chart/aliyun-values.yaml
;并且能够抉择是否将此配置保留为模板。 - 在部署这一栏中,用户能够为每一个部署地位配置不同的 Values、ValuesFrom 以及高级设置。Values 能够是任意 json 类型,是
helm install xxx --set
前面加的参数,例如:ports.traefik.expose=true
;而 ValuesFrom 是 FluxCD 特有的内容,是一个类型为 ConfigMap 或 Secret 的数组,能够让用户更灵便的注入参数,用户能够单击标签抉择类型:
- 为了满足高级用户的需要并且关照到刚接触 GitOps 的用户,咱们提供了高级设置。现阶段的高级设置包含:同步距离、ReleaseName、StorageNamespace 以及原生的 Helm 操作参数。和 Helm 的原生操作相似,例如常常应用的装置命令
helm install xxx --create-namespace
中的--create-namespace
的 flag 就能够通过设置装置参数createNamespace=True
来达到雷同的成果,如果你相熟 Helm,你肯定可能在这里找到相熟的感觉,因为 FluxCD 的 helm-controller 外部就是应用了原生的 helm 库来实现对应的操作。
利用治理
在创立好一个 FluxCD 利用之后,在继续部署的主页能够看到创立的利用的概要预览,其中包含利用的类型(HelmRelease|Kustomization)、源(GitRepository|HelmRepository|Bucket)、版本以及就绪个数,就绪个数的意思是,当抉择将利用部署至多个地位时利用的就绪状况,例如将利用部署至三个集群内,其中两个集群中的利用曾经处于 Ready
状态,另外一个集群内的利用还处于 Reconciling
的状态时,就绪个数为 2/3
。用户还能够对该利用进行信息编辑,Yaml 编辑以及删除等操作。
点击利用名称能够进入利用详情页,在利用详情页能够看到利用的状态、部署地位、以及音讯等内容,该局部会继续欠缺。
Demo
demo 视频的前端采纳 kubesphere/console PR-3761;后端采纳 kubesphere/ks-devops master branch。
Demo Video
本文由博客一文多发平台 OpenWrite 公布!