01Tekton 初探
一 概述
Tekton 是一个开源云原生 CICD(持续集成和持续交付/部署)解决方案。
Tekton是一个建造 CI/CD 管道的云端解决方案。它由提供建筑材料的 Tekton Pipelines 和支撑部件组成,如泰克顿集团和 Tekton Catalog,组成了一个完整的生态系统。Tekton 是 CD 基金会的一部分,这是一个 Linux 基金会项目。Tekton安装和运行作为一个库伯尼特集群的扩展,包括一组库伯尼特定制资源,定义你可以创建和再利用你的管道的组件。一旦安装,通过 Kubernetes CLI (kubectl)和 API 调用,就像吊舱和其他资源一样,可以获得石油管道。
1.2 相关概念
- Task:定义构建任务,它由一系列有序steps构成。每个step可以定义输入和输出,且可以将上一个step的输出作为下一个step的输入。每个step都会由一个container来执行。
- TaskRun:Task用于定义具体要做的事情,并不会真正的运行,而TaskRun就是真正的执行者,并且会提供执行所需需要的参数,一个TaskRun就是一个Pod。
- Pipeline:顾名思义就是流水线,它由一系列Tasks组成。就像Task中的step一样,上一个Task的输出可以作为下一个Task的输入。
- PipelineRun:Pipeline的实际执行,创建后会创建Pod来执行Task,一个PipelineRun中有多个Task。
- PipelineResource:主要用于定义Pipeline的资源,常见的如Git地址、Docker镜像等。
- Condition:它主要是在Pipeline中用于判断的,Task的执行与否通过Condition的判断结果来决定。
二 安装部署
2.1 tekton 安装
$ kubectl apply --filename \
https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
$ kubectl get crd |grep tekton
$ kubectl get pods --namespace tekton-pipelines --watch
查看安装的资源
$ kubectl api-resources --api-group=tekton.dev
NAME SHORTNAMES APIVERSION NAMESPACED KIND
clustertasks tekton.dev/v1beta1 false ClusterTask
conditions tekton.dev/v1alpha1 true Condition
pipelineresources tekton.dev/v1alpha1 true PipelineResource
pipelineruns pr,prs tekton.dev/v1beta1 true PipelineRun
pipelines tekton.dev/v1beta1 true Pipeline
runs tekton.dev/v1alpha1 true Run
taskruns tr,trs tekton.dev/v1beta1 true TaskRun
tasks tekton.dev/v1beta1 true Task
2.2 tekton cli之tkn安装
Tekton Pipelines CLI 项目提供了一个用于与 Tekton 交互的命令行界面 (CLI),Tekton 是一个用于持续集成和交付 (CI/CD) 系统的开源框架。
- Mac安装
$ brew install tektoncd-cli
$ tkn -h
CLI for tekton pipelines
Usage:
tkn [flags]
tkn [command]
Available Commands:
bundle Manage Tekton Bundles
chain Manage Chains
clustertask Manage ClusterTasks
clustertriggerbinding Manage ClusterTriggerBindings
condition Manage Conditions
eventlistener Manage EventListeners
hub Interact with tekton hub
pipeline Manage pipelines
pipelinerun Manage PipelineRuns
resource Manage pipeline resources
task Manage Tasks
taskrun Manage TaskRuns
triggerbinding Manage TriggerBindings
triggertemplate Manage TriggerTemplates
Other Commands:
completion Prints shell completion scripts
version Prints version information
Flags:
-h, --help help for tkn
Use "tkn [command] --help" for more information about a command.
- Linux安装
# Get the tar.xz
curl -LO https://github.com/tektoncd/cli/releases/download/v0.23.1/tkn_0.23.1_Linux_x86_64.tar.gz
# Extract tkn to your PATH (e.g. /usr/local/bin)
sudo tar xvzf tkn_0.23.1_Linux_x86_64.tar.gz -C /usr/local/bin/ tkn
2.3 DashBoard
Tekton Dashboard 是一个通用的、基于 Web 的 UI,用于 Tekton Pipelines 和 Tekton 触发器资源。 它允许用户管理和查看 Tekton 资源的创建、执行和完成。
支持:
- 通过label过滤资源
- 实时查看TaskRun和PipelineRun 日志
- 查看资源详情和YAML
- 显示整个集群的资源或限制对特定命名空间的可见性
- git repository直接导入资源
- 通过扩展添加功能
# 安装
$ kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/latest/tekton-dashboard-release.yaml
# 查看状态
$ kubectl get pods --namespace tekton-pipelines --watch
# 端口转发出来
$ kubectl --namespace tekton-pipelines port-forward svc/tekton-dashboard 9097:9097
三 Task测试
创建并运行一个task用来测试。
Task,在 API 中表示为 Task 类型的对象,定义了一系列按顺序运行的步骤,以执行任务所需的逻辑。每个任务都作为 Kubernetes 集群上的 pod 运行,每个步骤都在自己的容器中运行。
3.1 操作task
$ cat > hello-task.yaml <<EOF
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: hello-task
spec:
steps:
- name: echo
image: alpine
script: |
#!/bin/sh
echo "Hello tekton"
EOF
$ kubectl apply -f hello-task.yaml
$ kubectl get task
NAME AGE
hello 115s
3.2 操作taskrun
taskrun操作有两种方式,一种为直接编写taskrun清单文件执行,另一种为利用tkn 工具执行。
- 编写taskrun清单执行
$ cat > hello-taskrun.yaml <<EOF
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
name: hello-task-run
spec:
taskRef:
# 注意,再次需要taskrun和task进行关联
name: hello-task
EOF
# 查看
$ kubectl apply -f hello-taskrun.yaml
$ kubectl get taskrun hello-task-run
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
hello-task-run Unknown Pending 5s
# 查看日志
$ kubectl logs --selector=tekton.dev/taskRun=hello-task-run
Hello tekton
- 使用tkn工具执行
$ tkn task start -f hello-task.yaml
TaskRun started: hello-task-run-kth94
In order to track the TaskRun progress run:
tkn taskrun logs hello-task-run-kth94 -f -n default
$ tkn taskrun list
NAME STARTED DURATION STATUS
hello-task-run-kth94 2 minutes ago --- Running(Pending)
四 Pipeline测试
4.1 创建两个task
# 类似于hellotask创建一个goodbye task
$ cat >goodbye-task.yaml <<EOF
apiVersion: tekton.dev/v1beat1
kind: Task
metadata:
name: goodbye-task
spec:
steps:
- name: echo
image: alpine
script: |
#!/bin/sh
echo "Goodbye tekton"
EOF
# 查看task
$ kubectl get task
NAME AGE
goodbye-task 4s
hello-task 10m
4.2 操作pipeline
# 创建两个task的pipeline
$ cat > hello-goodbye-pipeline.yaml <<EOF
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: hello-goodbye
spec:
tasks:
- name: hello-task
taskRef:
name: hello-task
- name: goodbye-task
runAfter:
- hello-task
taskRef:
name: goodbye-task
EOF
# 应用pipeline
$ kubectl apply -f hello-goodbye-pipeline.yaml
pipeline.tekton.dev/hello-goodbye created
# 查看pipeline
$ kubectl get pipline
NAME AGE
hello-goodbye 10s
4.3 操作pipelinerun
# 编写pipelinerun
$ cat > hello-goodbye-pipeline-run.yaml <<EOF
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
name: hello-goodbye-run
spec:
pipelineRef:
name: hello-goodbye
EOF
# 应用pipelinerun
$ kubectl apply -f hello-goodbye-pipeline-run.yaml
pipelinerun.tekton.dev/hello-goodbye-run created
# 查看pipelinerun 状态
$ kubectl get pipelinerun
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
hello-goodbye-run True Succeeded 107s 87s
# 查看运行结果
$ tkn task list
NAME DESCRIPTION AGE
goodbye-task 1 hour ago
hello-task 1 hour ago
$ tkn taskrun list
NAME STARTED DURATION STATUS
hello-goodbye-run-goodbye-task 1 hour ago 10 seconds Succeeded
hello-goodbye-run-hello-task 1 hour ago 10 seconds Succeeded
hello-task-run 1 hour ago 2 minutes Succeeded
$ tkn pipeline list
NAME AGE LAST RUN STARTED DURATION STATUS
hello-goodbye 1 hour ago hello-goodbye-run 1 hour ago 20 seconds Succeeded
$ tkn pipelinerun list
NAME STARTED DURATION STATUS
hello-goodbye-run 1 hour ago 20 seconds Succeeded
$ tkn pipelinerun logs
[hello-task : echo] Hello tekton
[goodbye-task : echo] Goodbye tekton
4.4 查看
五 其他
参考链接
- 点赞
- 收藏
- 关注作者
评论(0)