GitOps在云原生技术栈中使用得非常广泛,Git作为单一可信源,可以自动从Git仓库中获取最新的清单文件,并应用到目标环境中。下面以Kubernetes为例介绍GitOps的一些实践。
基于GitOps理念,当前比较活跃、用户采用较多的两个开源项目是Argo CD和Flux CD。这两个开源项目都可以把应用以及自身以声明式方式管理起来。
表4-1 Argo CD和Flux CD
Argo CD包括的组件有API Server、Repository Server、Application Controller。
API Server是一个gRPC/REST服务,并给Web UI、命令行和其他CI/CD系统提供API服务,其特性如下:
❖应用管理和状态报告。
❖应用操作(如同步、回滚、其他动作)。
❖代码仓库和集群凭据的管理。
❖验证和认证代理。
❖RABC认证。
❖Git Webhook事件的监听、转发。
Repository Server是一个内部服务,用于维护存储在Git仓库中的应用(Application)的清单文件(Manifest)。根据给定的输入,Repository Server会生成并返回Kubernetes的清单:
❖仓库(Repository)URL。
❖Revision(commit、tag、branch)。
❖应用路径。
❖模板设置,如parameters、ksonnet、environments、helm values.yaml。
所谓应用控制器,就是一个Kubernetes控制器,会持续地监听应用并对比仓库中清单文件所预期的状态。当它检测到OutOfSync状态的应用时,会根据情况采取对应的动作,还可以执行与生命流程(PreSync、Sync、PostSync)相关事件的任何用户定义的hook。
Argo CD的系统架构如图4-2所示。
图4-2 Argo CD的系统架构
Argo CD支持两种安装模式:多租户、基本功能。
多租户是最常见的Argo CD安装方式。当一个组织中的多个开发团队共用一个平台时,往往会采用这种方式。用户可以通过Web UI或者命令行来访问到API Server,命令行可以通过下面的命令行指定要访问的服务:
只安装基本功能时不会包括APIServer和UI组件,并且每个组件都是以轻量级(非高可用模式)的方式安装。此时,用户需要依赖Kubernetes来访问、管理Argo CD。使用命令行访问时,需要通过如下命令进行配置:
除此之外,Argo CD还支持用Kustomize和Helm的方式安装。
下面是customization文件内容:
1.清单文件格式
Argo CD支持的文件清单(manifest)格式包括Kustomize、Helm、Ksonnet、Jsonnet等。
除了上述已知的格式,Argo CD的插件机制还允许用户按照文档使用自定义工具,可以通过ConfigMap或者sidecar来配置一个插件。
2.私有仓库
Argo CD只需对Git仓库具有只读权限即可,因此,对于公开可访问的Git仓库,我们并不需要做特别设置。而对于私有Git仓库,Argo CD也提供了非常简单易用的方案。
Argo CD支持HTTPS和SSH格式的Git凭据,可以通过如下命令配置凭据:
如下命令可以为HTTPs的仓库添加TLS客户端证书:
或者,添加SSH凭据:
添加凭据后,Argo CD就可以通过Git仓库地址匹配的方式进行关联了。
更多有关Argo CD的详细内容请参考官方文档。
Flux CD的组件包括Source Controller、Kustomize Controller、Helm Controller、Notification Controller、Image automation Controller,如图4-3所示。
Flux提供了两种安装方式,分别是Bootstrap和开发模式。
如下命令可以将Flux安装并配置到Kubernetes集群中,对应的配置文件会自动提交到Git仓库中。
如果目标集群中已经包含Flux组件,该命令就会尝试升级Flux。这个命令具有幂等性,可以安全地执行任意多次。
图4-3 Flux CD
如果只是用于开发、测试,就可以使用如下命令快速安装:
然后,通过如下命令导入Git仓库并开始部署应用。