【编者的话】“人间四月芳菲尽,山寺桃花始怒放。” 愈来愈多专门给 Kubernetes 作应用发布的工具开始缤纷呈现,帮助你们管理和发布不断增多的 Kubernetes 应用。在作技术选型的时候,咱们须要给业务选择一个最好的工具、最稳的底座。那咱们又该如何比较和衡量这些工具的呢?在这篇文章中阿里一线工程师给你们分享本身独特的体验。洗尽铅华,一块儿品味这“山寺桃花”。前端
近年来,伴随着云原生社区(CNCF Community)的迅猛发展,愈来愈多的应用跑在了 Kubernetes 上。慢慢地,你们的关注点也逐渐从资源层转移到应用层。一方面,咱们看到在有愈来愈多新的 Kubernetes Operators 出现,用来自动化应用的部署和运维。另外一方面,随着各路大型云厂商入场,Kubernetes 服务之后就会像家里的水和电同样为所欲为可用,本身再去动手搭建已经没有了意义。因而人们提出了“Kubernetes 将会消失”,这其实指的是以 Kubernetes 为底座来面向全世界任何一个云以及数据中心交付应用,会是接下来的必然趋势。关于这个趋势,咱们团队的同窗专门写过一篇关于《云原生时代, Kubernetes 多集群架构初探》的文章,欢迎你们进一步阅读。
git
基于 Kubernetes 作应用发布的工具,咱们有着许多选择,其中不乏业界知名项目 Jenkins X、Spinnaker,也有创业公司出来的小工具好比 Argo Rollout。不过在这其中,咱们团队如今主要使用的是 Tekton。这里也有个重要的背景,那就是咱们团队要面向多云/多集群交付的,是复杂有状态的阿里巴巴中间件应用。这因素我立刻会详细介绍到。github
可能还有部分同窗还不了解 Tekton 项目是什么?这里我先简单介绍下。Tekton 是一款 Kubernetes 原生的应用发布框架,主要用来构建 CI/CD 系统。它本来是 Knative 项目里面一个叫作 build-pipeline 的子项目,用来做为 knative-build 的下一代引擎。然而,随着 Kubernetes 社区里各类各样的需求涌入,这个子项目慢慢成长为一个通用的框架,可以提供灵活强大的能力去作基于 Kubernetes 的构建发布。web
可能很多同窗会感到疑惑,有这么多功能丰富、声名远扬的项目,为何咱们选择了灰姑娘般的 Tekton?客官别急,容咱们先来梳理一下这个平台底座的要求:架构
接下来咱们在几个候选项目之间作比较:框架
能够看到,Tekton 在灵活实现定制化功能、Kubernetes 原生性、以及社区里的受欢迎程度等方面能够说仍是优点明显的。这也是为何,咱们团队在负责阿里中间件复杂有状态应用的交付工做时,选择了在 Tekton 之上构建应用交付体系。
less
接下来咱们将分享使用 Tekton 自动化应用发布的实践案例。运维
一个基于 Tekton 的应用发布平台的架构以下:
这里的流程大体是:ide
Tekton CD 里的操做具体分为如下几种状况:工具
接下来,咱们看一个建立应用的简单例子:
这个例子里面咱们生成了一个 Tekton Pipeline。运行这个 Pipeline 就能够将应用发布到 Kubernetes 集群上。
用户操做的边界就是 Git,以后全部流程都是自动化的。那么整个过程当中用户怎么获得反馈信息呢?这里主要有:
上面给你们介绍了 Tekton 项目的基本原理、以及使用 Tekton 作底座进行应用发布的主要流程。在这里总结一些经验体会:
另外,Tekton 2019 发展规划中还包括了 conditional execution,cancelling or pausing a workflow,resuming a paused or failed workflow,enforcing timeouts on Tasks and Pipelines 等功能。站在巨人的肩膀上,将来的应用发布平台将会更增强大。
Q:请比较一下 Drone 和 Tekton,thx!
A:Drone 是一个 CI/CD 工具,Tekton 是用来作 CI/CD 的框架。Tekton 在更底层,也更为灵活。
Q:Tekton 做为一个执行引擎,可能会有不少执行节点串联运行,不一样节点中运行状态和日志是如何反馈的?
A:Tekton Pipeline 自己就是 Kubernetes API object,咱们经过汇总 Status 来透出运行状态。因为 Tekton Pipeline 启动的都是 Kubernetes Pod,咱们能够复用原有的基础设施去收集,而后作一遍汇总。
Q:Tekton 如何与 GitOps 结合?
A:咱们作了一个相似于 flux(https://github.com/fluxcd/flux)的 Operator,经过监听 webhook 事件等来触发操做。
Q:Tekton 集成方面有哪些特性?
A:灵活以及很是云原生。比传统工具更好在 Kubernetes 跟其余组件作集成。比方说,跟 Flagger 等在 Kubernetes 提供金丝雀发布策略的组件结合,作云原生应用发布。
Q: Tekton 既然做为 Knative 项目里面一个叫作 build-pipeline 的子项目,那请问下 Tekton 和 Knative 有什么不一样或者对比优缺点吗,我最近有准备作 Knative,今天有幸看到这个分享,正好请教一下?
A:Knative 是 Serverless Framework,跟 Tekton 解决的不是一个层面的事情,没有比较性。相反,他们能够 inter-operate,Knative 里就使用了 Tekton。
Q:个人见解是 CD 和 CI 都只是 Tekton 的 Task,可否讲下大家的 CI?
A:你好,咱们作的是 CD。不仅是 Tekton Task,也用了其余的 Tekton 原生功能,好比 Pipeline、PipelineResource 等。咱们作的是面向多云/多集群交付的、面向复杂有状态的阿里巴巴中间件应用的发布平台。
Q:大家作的这个和 Jenkins X Pipeline Operator and Tekton 的区别和二者的优缺点?
A:Jenkins X 是 CloudBees 团队基于原来 Jenkins 的需求,再使用 Tekton、Prow 等搭建的 CI/CD 平台。这也侧面说明了 Tekton 等云原生工具的优点。但 Jenkins X 作的比较重。并且以 CI 端为主,不支持复杂的发布策略。
Q:请问有什么好的 GitOps trigger?咱们使用的的是 Phabricator, 一直没有找到适合的trigger。
A:这个主要看工具自己(好比 Phabricator)提供什么样的 Git trigger,而后才能集成到如 flux 这样的 GitOps 工具中。
Q:请比较一下 Prow 和 Tekton,发现 Kubernetes,Prometheus 以及 Tenkton 自己都是使用了 Prow。
A:Prow 是一款基于 GitHub 作的 Chatbot 工具。Tekton 则是用来实现后面对接的 CI/CD 的底层框架。本人刚好也是早期参与 Prow 项目,因此多说一点这个工具的历史。一开始 GitHub 功能不够强大,这个工具只是为了弥补 GitHub 的不足之处,主要是要通过 review 不能让人手动合并代码。后来功能作着作着变多了,有些被 GitHub 重复了。可是功能集合仍是比 GitHub 多,并且 CNCF 里的 infra 默认使用。
【首届云原生应用大赛火热报名中】报名连接:http://t.tb.cn/7aDijN
9月2日前,使用任意语言开发一个能够被容器化、运行在 K8s 上的应用,并把该应用作成 Helm Charts 格式提交便可参赛!苹果 Airpods,Cherry键盘、天猫精灵等丰厚礼品等你拿!