写点什么

初探云原生应用管理(三):聊聊 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:378139

评论 1 条评论

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

相约未名湖畔,百度商业AI技术创新大赛携手北大学子共探AI发展

百度Geek说

人工智能 百度 企业号 6 月 PK 榜

数据可视化设计四大原则透析

搞大屏的小北

数据可视化 设计要素 大屏设计

科兴未来|2023年扬中高层次人才创新创业大赛

科兴未来News

“敏捷教练进阶课程”7月22-23日 ·A-CSM认证在线周末班【提前报名特惠】CST导师亲授

ShineScrum捷行

敏捷教练

精耕丝路,智胜全球 | 新华三助力中企跑好“出海”赛道

新消费日报

平台即产品:数字化转型的全新驱动力

SEAL安全

平台工程 平台即产品

数据分析:电子商务需要关注的重要指标有哪些?

搞大屏的小北

电子商务 销售指标

科兴未来|2023”福地句才”海外人才创业大赛

科兴未来News

“数字创新产品课程”7月29-30日 · CSPO认证周末班【提前报名特惠】CST导师亲授

ShineScrum捷行

DevEco创建项目时的错误解决

路北路陈

6 月 优质更文活动

Web网页端IM产品RainbowChat-Web的v5.0版已发布

JackJiang

网络编程 即时通讯 IM

NFTScan | 06.05~06.11 NFT 市场热点汇总

NFT Research

NFT 热点

深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)

汀丶人工智能

人工智能 自然语言处理 深度学习 命名实体识别 6 月 优质更文活动

直播回顾 | 一体化智能可观测平台如何保障电商节大促

博睿数据

可观测性 智能运维 博睿数据 618 电商行业

千万级数据的可视化交互展示:Vue.js 技术解析

xfgg

Vue eCharts 6 月 优质更文活动

3 个技巧,让你像技术专家一样解决编码问题

LigaAI

程序人生 技术专家 技术人成长 问题分析及解决 企业号 6 月 PK 榜

对线面试官-线程池(四)

派大星

Java 面试题

今年LED显示屏市场趋势

Dylan

商业 广告 娱乐 数字化 LED显示屏

抓包分析RST信号

蓝胖子的编程梦

TCP Wireshark tcpdump RST 报文 Connection reset

喜讯 | 华秋电子荣获证券时报年度高成长企业

华秋电子

赋能矿山 | KaiwuDB 智慧矿山解决方案

KaiwuDB

解决方案 智慧矿山 KaiwuDB

智慧生活垃圾焚烧发电厂Web3D可视化平台

2D3D前端可视化开发

物联网 数字孪生 三维可视化 工业组态 智慧垃圾焚烧发电厂

教培行业的“智能GPT私教”?WorkPlusAI助理帮助教培机构实现十倍人效!

WorkPlus

Java代码性能测试实战之ContiPerf

javalover123

单元测试 性能测试 压测 JUnit Java'

深度学习应用篇-自然语言处理[10]:N-Gram、SimCSE介绍,更多技术:数据增强、智能标注、多分类算法、文本信息抽取、多模态信息抽取、模型压缩算法等

汀丶人工智能

人工智能 自然语言处理 深度学习 命名实体识别 6 月 优质更文活动

通过技术变革,推动全面预算管理前行

智达方通

全面预算管理

分享几款 Mac 上非常好用的的免费软件

搞大屏的小北

数据可视化 数据库工具 截图软件 视屏转 gif 视频号下载

【零售电商系列】走进亚马逊之自建仓储&物流

小诚信驿站

6 月 优质更文活动

Win服务器图床配置

路北路陈

6 月 优质更文活动

从分布式到微服务解密“架构”原理与实战笔记

小小怪下士

Java 程序员 分布式 微服务

电路板电镀中4种特殊的电镀方法

华秋PCB

经验 电路板 焊接 PCB板 电镀

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