基于 K8s 作应用发布的工具那么多, 阿里为啥选择灰姑娘般的 Tekton ?


做者 | 邓洪超,阿里云容器平台工程师, Kubernetes Operator 第二人,云原生应用标准交付与管理领域知名技术专家
前端

导读:近年来,愈来愈多专门给 Kubernetes 作应用发布的工具开始缤纷呈现,帮助你们管理和发布不断增多的 Kubernetes 应用。在作技术选型的时候,咱们须要给业务选择一个最好的工具、最稳的底座。那么又该如何比较和衡量这些工具呢?本篇文章中阿里云技术专家邓洪超将会和你们分享本身独特的体验,帮助读者初步了解 Tekton 项目。git

背景

近年来,伴随着云原生社区 (CNCF Community) 的迅猛发展,愈来愈多的应用跑在了 K8s 上。慢慢地,你们的关注点也逐渐从资源层转移到应用层。一方面,咱们看到在有愈来愈多新的 K8s Operators 出现,用来自动化应用的部署和运维。另外一方面,随着各路大型云厂商入场,K8s 服务之后就会像家里的水和电同样为所欲为可用,本身再去动手搭建已经没有了意义。因而人们提出了“K8s 将会消失”,这其实指的是以 k8s 为底座来面向全世界任何一个云以及数据中心交付应用,会是接下来的必然趋势。关于这个趋势,咱们团队的同窗专门写过一篇关于《K8s 多集群/多云技术与发展》的文章,欢迎你们进一步阅读。架构

相关连接:app

Tekton 项目有什么特殊之处?

基于 k8s 作应用发布的工具,咱们有着许多选择,其中不乏业界知名项目 Jenkins X、Spinnaker,也有创业公司出来的小工具好比 Argo Rollout。不过在这其中,咱们团队如今主要使用的是 Tekton。这里也有个重要的背景,那就是咱们团队要面向多云/多集群交付的,是复杂有状态的阿里巴巴中间件应用。这因素我立刻会详细介绍到。框架

可能还有部分同窗还不了解 Tekton 项目是什么?这里我先简单介绍下。Tekton 是一款 k8s 原生的应用发布框架,主要用来构建 CI/CD 系统。它本来是 knative 项目里面一个叫作 build-pipeline 的子项目,用来做为 knative-build 的下一代引擎。然而,随着 k8s 社区里各类各样的需求涌入,这个子项目慢慢成长为一个通用的框架,可以提供灵活强大的能力去作基于 k8s 的构建发布。运维

可能很多同窗会感到疑惑,有这么多功能丰富、声名远扬的项目,为何咱们选择了灰姑娘般的 Tekton?客官别急,容咱们先来梳理一下这个平台底座的要求:ide

  1. K8s 原生:流程和概念,尤为是面向用户的部分,须要融入到 k8s 体系中。此外,最好能跟生态里的其余工具互相连通,成为生态的一环。
  • 举个例子:Spinnaker 这个项目是很强大的,但它的设计初衷,是面向公有云进行应用交付用的(以虚拟机为运行时),Kubernetes 只是它所支持的一种 Provider,而且 Provider 还得用 Groovy 写集成插件。这就使得它跟 K8s 的协做是比较别扭的。
  1. 灵活扩展:基本上全部工具都不可以知足咱们复杂多变的业务需求。这些工具架构自己须要提供足够灵活的扩展性,来快速定制实现所需功能。
  • 举个例子:Argo Rollout 自己的应用发布,是跟 K8s 的 Workload (好比 Deployment )耦合在一块儿的。这就不是一个很具有扩展性的作法。最简单的例子:对于复杂有状态应用来讲,大多都是用 Operator 或者 OpenKruise 管理的,这时候 Argo Rollout 该怎么办呢?
  1. 轻量级:工具自己不能作得“过重”,即不能有太多的组件或太多的概念。小而轻的项目初期易上手、中期易交付、后期易维护。
  • 举个例子:Spinnaker 虽然功能强大,可是这也就意味着它把全部的事情都帮你作了。而咱们团队要发布的应用是复杂有状态的中间件应用, 是须要咱们写本身的 Rollout Controller 来控制发布流程的。这个要基于 Spinnaker 来作,还得大量作二次开发了,因而原有的众多功能和组件反而成了负担。
  1. 白盒化:运行中的管道、步骤等须要“白盒化”,即对外暴露状态。这样才能跟前端工具联通,给用户展现实时状态信息。
  • 举个例子:Tekton 其实只提供 Pipeline 这个一个功能,Pipeline 会被直接映射成 K8s Pod 等 API 资源。而好比应用发布过程的控制,灰度和上线策略,都是咱们本身编写  K8s Controller 来实现的,这个可控度实际上是咱们比较喜欢的。另外,这种设计,也就意味着 Tekton 不会在K8s 上盖一个”大帽子“,好比咱们想看发布状态、日志,就等是直接经过 K8s 查看这个 Pipeline 对应的 Pod 的状态和日志,不须要再面对另一个 API。

接下来咱们在几个候选项目之间作比较:工具

能够看到,Tekton 在灵活实现定制化功能、K8s 原生性、以及社区里的受欢迎程度等方面能够说仍是优点明显的。这也是为何,咱们团队在负责阿里中间件复杂有状态应用的交付工做时,选择了在 Tekton 之上构建应用交付体系。ui

实践案例:使用 Tekton 自动化应用发布

接下来咱们将分享使用 Tekton 自动化应用发布的实践案例。阿里云

一个基于 Tekton 的应用发布平台的架构以下:

这里的流程大体是:

  1. 用户把须要部署的应用先按照一套标准的应用定义写成 YAML 文件(相似 Helm Chart);
  2. 用户把应用定义 YAML 推送到 Git 仓库里;
  3. Tekton CD (一个 K8s Operator) 会监听到相应的改动,根据不一样条件生成不一样的 Tekton Pipelines;

Tekton CD 里的操做具体分为如下几种状况:

  • 若是 Git 改动里有一个应用 YAML 且该应用不存在,那么将渲染和生成 Tekton Pipelines 用来建立应用。
  • 若是 Git 改动里有一个应用 YAML 且该应用存在,那么将渲染和生成 Tekton Pipelines 用来升级应用。这里咱们会根据应用定义 YAML 里的策略来作升级,好比作金丝雀发布、灰度升级。
  • 若是 Git 改动里有一个应用 YAML 且该应用存在且标记了“被删除”,那么将渲染和生成 Tekton Pipelines 用来删除应用。确认应用被删除后,咱们才从 Git 里删除这个应用的 YAML。

接下来,咱们看一个建立应用的简单例子:

这个例子里面咱们生成了一个 Tekton Pipeline。运行这个 pipeline 就能够将应用发布到 K8s 集群上。

用户操做的边界就是 Git,以后全部流程都是自动化的。那么整个过程当中用户怎么获得反馈信息呢?这里主要有:

  • 过程状态:Tekton Pipeline 自己就是 K8s API object,咱们经过汇总 Status 将过程状态信息透出给前端。
  • 日志和监控:因为 Tekton Pipeline 启动的都是 K8s Pod,咱们能够复用原有的基础设施去收集,而后作一遍汇总。

经验总结

上面给你们介绍了 Tekton 项目的基本原理、以及使用 Tekton 作底座进行应用发布的主要流程。在这里总结一些经验体会:

  1. 复用开源技术。少去作造轮子的事情就意味着可以多专一更具价值的事情;
  2. 不要只着眼于眼前的需求,还要关注定制化和扩展性,多考虑将来的场景;
  3. K8s 应用层接下来将会加速发展。帮助开发者在 k8s 上更好地开发、部署、管理应用,把相关流程标准化,是将来的重要趋势。

另外,Tekton 2019 发展规划中还包括了 conditional execution, cancelling or pausing a workflow, resuming a paused or failed workflow, enforcing timeouts on Tasks and Pipelines 等功能。站在巨人的肩膀上,将来的应用发布平台将会更增强大。

相关文章
相关标签/搜索