云原生的 CICD 框架:Tekton
作者 | AddoZhang来源 | 云原生指北Tekton 是 Google 开源的 Kubernetes 原生CI/CD 系统,功能强大扩展性强。前身是 Knavite 里的 build-pipeline 项目,后期孵化成独立的项目。并成为 CDF 下的四个项目之一, 其他三个分别是 Jenkins, Jenkins X, Spinnaker。为什么说 Tekton ...
作者 | AddoZhang
来源 | 云原生指北
Tekton 是 Google 开源的 Kubernetes 原生CI/CD 系统,功能强大扩展性强。前身是 Knavite 里的 build-pipeline 项目,后期孵化成独立的项目。并成为 CDF 下的四个项目之一, 其他三个分别是 Jenkins, Jenkins X, Spinnaker。
为什么说 Tekton 是 Kubernetes 原生的, 因其基于 Kubernetes 的 CRD 定义了 Pipeline 流水线。
CRD 及说明:
Task: 构建任务, 可以定义一些列的 steps. 每个 step 由一个 container 执行.
TaskRun: task 实际的执行, 并提供执行所需的参数. 这个对象创建后, 就会有 pod 被创建。
Pipeline: 定义一个或者多个 task 的执行, 以及 PipelineResource 和各种定义参数的集合。
PipelineRun: 类似 task 和 taskrun 的关系: 一个定义一个执行. PipelineRun 则是 pipeline 的实际执行. 创建后也会创建 pod 来执行各个 task。
PipelineResource: 流水线的输入资源, 比如 github/gitlab 的源码, 某种存储服务的文件, 或者镜像等. 执行时, 也会作为 pod 的其中一个 container 来运行(比如拉取代码)。
Condition: 在 pipeline 的 task 执行时通过添加 condition 来对条件进行评估, 进而判断是否执行 task. 目前是WIP的状态, 待#1137的完成、
组件:
tekton-pipelines-controller
: 监控 CRD 对象(TaskRun, PipelineRun)的创建, 为该次执行创建 pod.tekton-pipelines-webhook
: 对 apiserver 提供 http 接口做 CRD 对象的校验
安装
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
检查安装的tekton相关的CRD:
kubectl api-resources | grep tekton
clustertasks tekton.dev false ClusterTask
conditions tekton.dev true Condition
pipelineresources tekton.dev true PipelineResource
pipelineruns pr,prs tekton.dev true PipelineRun
pipelines tekton.dev true Pipeline
taskruns tr,trs tekton.dev true TaskRun
tasks tekton.dev true Task
tekton 的两个pod:
kubectl get pods --namespace tekton-pipelines
NAME READY STATUS RESTARTS AGE
tekton-pipelines-controller-556d8f4494-2qthv 1/1 Running 0 11m
tekton-pipelines-webhook-849cff5cf-8m5qq 1/1 Running 0 11m
安装CLI
cli: https://github.com/tektoncd/cli#installing-tkn
brew install tektoncd-cli
Tekton: hello world
创建一个简单的Task
, 只有一个step
就是打印出”hello world”
apiVersion: tekton.dev/v1alpha1
kind: Task
metadata:
name: echo-hello-world
spec:
steps:
- name: echo
image: alpine
command:
- echo
args:
- "hello world"
创建一个TaskRun
执行上面的Task
apiVersion: tekton.dev/v1alpha1
kind: TaskRun
metadata:
name: echo-hello-world-task-run
spec:
taskRef:
name: echo-hello-world
运行task:
kubectl apply -f <name-of-file.yaml>
检查TaskRun
的输出, 执行命令:
tkn taskrun describe echo-hello-world-task-run
Name: echo-hello-world-task-run
Namespace: tekton-pipelines
Task Ref: echo-hello-world
Status
STARTED DURATION STATUS
21 minutes ago 1 minute Succeeded
Input Resources
No resources
Output Resources
No resources
Params
No params
Steps
NAME STATUS
echo Completed
Succeeded
状态表示task执行成功.
查看实际的输出, 执行命令:
tkn taskrun logs echo-hello-world-task-run
结果:
[echo] hello world
往期推荐
点分享
点收藏
点点赞
点在看
更多推荐
所有评论(0)