前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tekton Pipeline 教程

Tekton Pipeline 教程

作者头像
米开朗基杨
发布2019-09-17 16:48:50
1.5K0
发布2019-09-17 16:48:50
举报
文章被收录于专栏:云原生实验室
Tekton Pipeline 是一个 k8s native 的 pipeline, 任务跑在 pod 中,通过自定义 CRD 去管理任务与工作流等等,我看完 tekton 之后感觉是功能很强大,但是有点过度设计了,没有 drone 的简约大方灵活之感。

1.

Task

Tekton Pipeline 的主要目标是单独运行您的任务或作为管道的一部分运行。每个任务都在 Kubernetes 集群上作为 Pod 运行,每个步骤都作为自己的容器。这点深得 drone 思想精髓,其实 drone 也有计划将 kubernetes 作为任务执行引擎。

Task 定义了需要执行的工作,例如以下是一个简单的任务:

steps 是一系列由任务顺序执行的命令。这个 steps 内的配置几乎与 drone 如出一辙。

Task 定义好了之后并不会被执行,创建 TaskRun 时才会执行。这是合理的,相当于是一个触发。

代码语言:javascript
复制
$ kubectl apply -f < name-of-file.yaml >

查看 TaskRun

状态 Succeeded = True 显示任务已成功运行。

2.

任务输入和输出

在更常见的场景中,任务需要多个步骤来处理输入和输出资源。例如,Task 可以从 GitHub 存储库获取源代码并从中构建 Docker 镜像。

PipelinesResources 用于定义任务的输入(如代码)与输出(如 Docker 镜像)。有一些系统定义的资源类型可供使用,以下是通常需要的两个资源示例。

git 资源可以是你要编译的代码:

image 资源代表要被任务编译成的镜像:

以下是 Task 输入和输出。输入资源是 GitHub 存储库,输出是从该源生成的图像。任务命令的参数支持模板化,因此任务的定义是常量,参数的值可以在运行时更改。

TaskRun 将输入和输出绑定到已定义的 PipelineResources 值,除了执行任务步骤外,还将值设置为用于模板化的参数。

inputsoutputs 应当不限制死必须叫这两个名字,只要是能支持参数就好。比如定义一个叫 build 的资源去指定 docker build 的镜像:

Task 里:

我是觉得需要能进行这样的扩展了, 仅是 inputs 和 outputs 就狭义了。

获取 pipeline全部信息:

代码语言:javascript
复制
$ kubectl get build-pipeline
NAME                                                   AGE
taskruns/build-docker-image-from-git-source-task-run   30s

NAME                                          AGE
pipelineresources/skaffold-git                6m
pipelineresources/skaffold-image-leeroy-web   7m

NAME                                       AGE
tasks/build-docker-image-from-git-source   7m

要查看 TaskRun 的输出,请使用以下命令:

类型的状态 Succeeded = True 显示 Task 已成功运行,你还可以验证 Docker 镜像是否生成。

3.

Pipeline

Pipeline 定义要按顺序执行的任务列表,同时还通过使用该 from 字段指示是否应将任何输出用作后续任务的输入,并指示执行的顺序(使用 runAfterfrom 字段)。你在任务中使用的相同模板也可以在管道中使用。

以上 Pipeline 是引用一个 Task deploy-using-kubectl

要运行 Pipeline,请创建 PipelineRun 如下:

执行与查看 pipeline:

代码语言:javascript
复制
$ kubectl apply -f < name-of-file.yaml >
$ kubectl get pipelineruns tutorial-pipeline-run-1 -o yaml

总结

初学者会觉得有点绕,但是这种设计也是为了解耦合,我个人觉得优劣如下:

优势:

  • 可以把k8s集群作为任务执行引擎,这样可以更好的利用资源,比如把线上夜间闲置资源用来跑任务,构建镜像 离线分析 甚至机器学习。
  • 解耦做的比较好,任务模板可以拿来复用,而不需要大家都去重复定义。
  • 输入输出理念,一个任务的输入作为另个任务的输出不错

劣势:

  • 有点过度设计,一些简单的场景可能觉得配置起来有点绕了。
  • 输入输出依赖分布式系统,对比 drone 一个 pipeline 中的容器是共享了一个数据卷的,这样上个任务产生的文件很方便的给下个任务用,而基于集群的任务就可能得依赖 git docker 镜像仓库等做输入输出,有点麻烦,好的解决办法是利用 k8s 分布试存储给 pipeline 设置一个共享卷,方便任务间传输数据。

总体来说路子是对的,而且还是有很多场景可以用的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云原生实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档