飞天发布时刻:2024年 Forrester 公有云平台Wave™评估报告解读 了解详情
写点什么

初探云原生应用管理(三):聊聊 Tekton 项目

  • 2019-08-19
  • 本文字数:2742 字

    阅读完需:约 9 分钟

初探云原生应用管理(三):聊聊 Tekton 项目

背景

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


相关链接:


Tekton 项目有什么特殊之处?

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


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


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


  1. K8s 原生:流程和概念,尤其是面向用户的部分,需要融入到 k8s 体系中。此外,最好能跟生态里的其他工具互相连通,成为生态的一环。

  2. 举个例子:Spinnaker 这个项目是很强大的,但它的设计初衷,是面向公有云进行应用交付用的(以虚拟机为运行时),Kubernetes 只是它所支持的一种 Provider,并且 Provider 还得用 Groovy 写集成插件。这就使得它跟 K8s 的协作是比较别扭的。

  3. 灵活扩展:基本上所有工具都不能够满足我们复杂多变的业务需求。这些工具架构本身需要提供足够灵活的扩展性,来快速定制实现所需功能。

  4. 举个例子:Argo Rollout 本身的应用发布,是跟 K8s 的 Workload (比如 Deployment )耦合在一起的。这就不是一个很具备扩展性的做法。最简单的例子:对于复杂有状态应用来说,大多都是用 Operator 或者 OpenKruise 管理的,这时候 Argo Rollout 该怎么办呢?

  5. 轻量级:工具本身不能做得“太重”,即不能有太多的组件或太多的概念。小而轻的项目初期易上手、中期易交付、后期易维护。

  6. 举个例子:Spinnaker 虽然功能强大,但是这也就意味着它把所有的事情都帮你做了。而我们团队要发布的应用是复杂有状态的中间件应用, 是需要我们写自己的 Rollout Controller 来控制发布流程的。这个要基于 Spinnaker 来做,还得大量做二次开发了,于是原有的众多功能和组件反而成了负担。

  7. 白盒化:运行中的管道、步骤等需要“白盒化”,即对外暴露状态。这样才能跟前端工具联通,给用户展示实时状态信息。

  8. 举个例子:Tekton 其实只提供 Pipeline 这个一个功能,Pipeline 会被直接映射成 K8s Pod 等 API 资源。而比如应用发布过程的控制,灰度和上线策略,都是我们自己编写  K8s Controller 来实现的,这个可控度其实是我们比较喜欢的。另外,这种设计,也就意味着 Tekton 不会在 K8s 上盖一个”大帽子“,比如我们想看发布状态、日志,就等是直接通过 K8s 查看这个 Pipeline 对应的 Pod 的状态和日志,不需要再面对另外一个 API。


接下来我们在几个候选项目之间做比较:



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

实践案例:使用 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 等功能。站在巨人的肩膀上,未来的应用发布平台将会更加强大。


相关文章


初探云原生应用管理(一): Helm 与 App Hub


初探云原生应用管理(二): 为什么你必须尽快转向 Helm v3


作者介绍:


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


2019-08-19 19:378235

评论 1 条评论

发布
暂无评论
发现更多内容

【web 开发基础】PHP8中数组的序列化和反序列化(54)

迷彩

数组 对象 序列化 反序列化 PHP基础

2022年度总结:虽迷茫,仍前行

年度总结

华为云全球加速GA,为企业跨国办公保驾护航

与时俱进的时代

支持故障自动秒级检测,华为云VPN更省心!

IT科技苏辞

华为云ECS弹性服务器,加快企业数字化转型的进程!

IT科技苏辞

我凭借这份pdf,最终拿到了阿里,腾讯,京东等八家大厂offer

钟奕礼

程序员 Java 面试 Java、 java 编程

开启全新身份!华为阅读畅读会员震撼来袭,限时首月9元快来领取

最新动态

运维训练营第十课作业

好吃不贵

Android程序签名打包

芯动大师

Android Studio 打包签名 签名的含义

java程序员:拜托别再问我Spring原理了!你问的这篇文章都有

钟奕礼

程序员 Java 面试 Java、 java 编程

华为云智能云接入ICA,企业数据上云的信赖之选

与时俱进的时代

华为云智能云接入ICA,助力企业轻松上云

与时俱进的时代

5分钟搞懂BFF

俞凡

架构 BFF

史上最全JVM大全详解!java程序员细节到极致的一次,魔鬼

钟奕礼

程序员 Java 面试 Java、 java 编程

【web 开发基础】PHP中的类和对象(55)

迷彩

面向对象 封装、继承、多态 类与对象 PHP基础

【web 开发基础】如何调换数组中的键和值(53)

迷彩

数组合并 数组操作 PHP基础 数组整理

无需企业搭建基础设施,华为云弹性公网IP经济实惠又便捷!

与时俱进的时代

8年java技术岗面试官总结:2022超强面试大全,抓住2022的小尾巴

钟奕礼

程序员 Java 面试 Java、 java 编程

数字经济时代,为什么华为云ECS能获得更多用户的青睐?

IT科技苏辞

出海有“云”!华为云全球加速助力跨国企业提升网络体验

与时俱进的时代

华为云弹性负载均衡ELB,如何保障服务器不瘫痪?

爱科技的水月

助力企业降本增效:华为云ECS,助力企业数字化转型需求

IT科技苏辞

PostgreSQL 技术内幕(四)执行引擎之Portal

酷克数据HashData

postgresql

笑对过往、活在当下、期盼未来

阿Q说代码

程序员 flag 年度总结

如何准备Java技术岗春招面试:史上最全Java核心知识点笔记奉上

钟奕礼

程序员 Java 面试 Java、 java 编程

实力是最好的武器!华为云ECS助力企业更好发展

IT科技苏辞

2022年中国数字文化娱乐产业综合分析

易观分析

产业 文娱

BAT大厂java程序员面试必问:JVM+Spring+分布式+tomcat+MyBatis

钟奕礼

程序员 Java 面试 Java、 java 编程

回顾与展望Zebec举办的“Web3.0 TechHive Summit 2022 大会”

BlockChain先知

共创、共享、共赢云生态,华为云ECS助力企业轻松上云

IT科技苏辞

初探云原生应用管理(三):聊聊 Tekton 项目_容器_邓洪超_InfoQ精选文章