随着云原生的不断升温,CI/CD成为了讨论的焦点。GitOps是一种云原生的持续交付模型,它结合了应用系统的声明式基础设施和应用程序。存储在Git版本控制存储库中。实现GitOps的工具有很多,Tekton和ArgoCD是后起之秀的代表。1.TektonTekton是一个强大且灵活的开源框架,用于创建CI/CD系统,通过Operators集成到k8s集群中,由容器驱动完成管道模板定义的任务。社区还提供了许多任务模板以方便使用。Tekton为CI/CD系统(主要针对CI)提供了很多好处:可定制:Tekton是完全可定制和高度灵活的,我们可以定义一个非常详细的构建块目录,供开发人员在.可重复使用:Tekton是完全可移植的,任何人都可以使用给定的管道并重复使用其构建块,从而使开发人员无需“发明轮子”即可快速构建复杂的管道。可扩展:TektonCatalog是一个社区驱动的Tekton构建块存储库,我们可以使用TektonCatalog中定义的组件快速创建新管道和扩展现有管道。标准化:Tekton作为Kubernetes集群上的扩展安装和运行,并使用完善的Kubernetes资源模型,Tekton工作负载在KubernetesPod内执行。可扩展性:要增加工作负载容量,只需向集群添加新节点,Tekton就可以随集群扩展,而无需重新定义资源分配或对管道进行任何其他修改。Tekton为Kubernetes提供了多种CRD资源对象,可以用来定义我们的pipeline,主要有以下几种:Task、TaksRun、Pipeline、PipelineRun和PipelineResource。Task:Task是一个构建任务,是Tekton中不可分割的最小单元,就像Kubernetes中Pod的概念一样。一个Task中可以有多个Step,每个Step由一个Container执行。TaskRun:PipelineRun创建后,会创建自己的TaskRun对应Pipeline中的Task。一个TaskRun控制一个Pod,一个Task中的一个Step对应一个Pod中的一个Container。当然也可以单独创建TaskRun。Pipeline:Pipeline由一个或多个Task组成。在Pipeline中,用户可以定义这些任务的执行顺序和依赖关系,形成一个DAG(有向无环图)。PipelineRun:PipelineRun是Pipeline的实际执行产物。用户定义好Pipeline后,就可以通过创建PipelineRun来执行管道,并生成管道记录。PipelineResource:表示Pipeline输入资源,比如GitHub上的源代码,或者Pipeline快速输出资源,比如容器镜像或者构建生成的jar包。2、ArgoCDArgoCD从名字就可以看出(有CD),它侧重于持续部署,所以CD部分是使用ArgoCD完成的。ArgoCD是Kubernetes的声明式GitOps持续交付工具,可以在指定的目标环境中自动部署所需的应用程序状态。当Git提交特定版本时,应用程序部署可以跟踪对分支、标签或固定到清单的更新。ArgoCD的主要功能可以配合各种配置管理工具(如ksonnet/jsonnet、Helm、kustomize)使应用与Git中的定义保持一致;自动将应用部署到指定的目标环境;持续监控已部署的应用程序;基于Web和CLI的操作,以及应用程序可视化;部署或回滚到Git存储库中提交的应用程序的任何状态(这也是使用Git进行版本管理的一大好处);PreSync、Sync、PostSynchooks支持复杂的应用程序部署策略(例如:蓝/绿、金丝雀升级);SSO集成(OIDC、LDAP、SAML2.0、GitLab、Microsoft、LinkedIn),这些都是企业更需要的特性;Webhook集成(GitHub、BitBucket、GitLab)。它可以独立使用,也可以作为现有管道的一部分,例如与ArgoWorkflow、Jenkins和GitLabCI结合使用;AegoCD中的几个主要组件:API服务:API服务是一个gRPC/REST服务,它暴露了Web暴露了WebUI、CLI和CI/CD系统使用的接口。存储库服务:存储存储库服务是一种内部服务,负责维护保存应用程序清单的Git存储库的本地缓存。应用程序控制器:应用程序控制器是一个Kuberntes控制器,它持续监视正在运行的应用程序并将当前实时状态与所需的目标状态进行比较。3.总结目前很多敏捷和DevOps的实践已经被广泛应用,CI/CD流水线已经建立,我们已经有了很好的工具来实现CI/CD,那么下一步就是基于这些工具,我们是否可以很好的实践应用。
