
1:Tekton介绍
Tekton是一种适用于创建持续集成和持续部署/交付(CI/CD)系统的谷歌开源的Kubernetes原生框架,它支持多云/多集群下进行搭建、测试和部署,可实现滚动部署、蓝/绿部署、金丝雀部署或 GitOps 工作流等高级部署。
Tekton 组件
1:Tekton Pipeline
2:Tekton Trigger
3:Tekton CLI
4:Tekton Dashboard
5:Tekton Catalog
6:Tekton Hub
7:Tekton Operator
2:安装
kubernetes:1.23.1
Tekton的安装非常简单,官方已经将具体的安装文件准备好了,直接安装即可。如下:
[root@k8s-master ~]# kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
该方式安装的是最新版本的Tekton。不过如果你的机器不能访问gcr.io,是无法正常下载镜像的,你可以先通过一台可以访问国外的机器下载镜像再同步到国内镜像仓库。
如果想安装指定版本的tekton,则选择好对应的版本,比如选择v0.32.1版本,执行如下命令:
[root@k8s-master ~]# kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.32.1/release.yaml
更多的版本以及对应的安装方式可以到官网上(https://github.com/tektoncd/pipeline/releases)查看。
当然,在安装的时候还需要注意Kubernetes版本,如果Kubernetes的版本太低,安装高版本的Tekton是安装不了的。由于我这里是Kubernetes 1.23.1,所以我安装的是最新版本。
[root@k8s-master ~]# kubectl get crd | grep tekton
clustertasks.tekton.dev 2022-04-12T21:06:45Z
conditions.tekton.dev 2022-04-12T21:06:45Z
pipelineresources.tekton.dev 2022-04-12T21:06:46Z
pipelineruns.tekton.dev 2022-04-12T21:06:46Z
pipelines.tekton.dev 2022-04-12T21:06:45Z
runs.tekton.dev 2022-04-12T21:06:46Z
taskruns.tekton.dev 2022-04-12T21:06:46Z
tasks.tekton.dev 2022-04-12T21:06:46Z
# 并且可以看到安装了哪些具体的应用,如下
[root@k8s-master ~]# kubectl get po -n tekton-pipelines
NAME READY STATUS RESTARTS AGE
tekton-pipelines-controller-f7c657f7-8wfq8 1/1 Running 0 2m39s
tekton-pipelines-webhook-6d85898ff8-rrq96 1/1 Running 0 2m38s
3:使用
到这里我们就可以使用Tekton了,比如创建一个最简单的Task,如下:
[root@k8s-master tekton]# cat task.yaml
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: hello
spec:
steps:
- name: hello
image: busybox:latest
command:
- echo
args:
- "Hello World!"
从上面的命令可以看到,该Task会输出"Hello World!"。
# 部署一下
[root@k8s-master tekton]# kubectl apply -f task.yaml
task.tekton.dev/hello created
# 然后通过如下命令查看创建结果:
[root@k8s-master tekton]# kubectl get task
NAME AGE
hello 33s
但是仅仅创建Task是没有用的,Task只是声明了我们要做什么,是一个静态的对象,如果要得到其结果,需要借助TaskRun才行。TaskRun的声明也非常的简单,如下:
[root@k8s-master tekton]# cat taskrun.yaml
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
name: hello
spec:
taskRef:
name: hello
# 在TaskRun中关联具体的Task即可。接下来就运行TaskRun,如下:
[root@k8s-master tekton]# kubectl apply -f taskrun.yaml
taskrun.tekton.dev/hello created
[root@k8s-master tekton]# kubectl get taskruns.tekton.dev
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
hello True Succeeded 87s 55s
[root@k8s-master tekton]# kubectl get pod
NAME READY STATUS RESTARTS AGE
hello-pod 0/1 Completed 0 105s
# 这个时候已经执行完了 具体的Pod日志如下:
[root@k8s-master tekton]# kubectl logs -f hello-pod
Hello World!
从日志来看符合为我们的预期。而且可以看到执行完的Pod的状态是Completed状态,这个状态是不是很熟悉?当我们运行一个Job对象的时候,运行完成后也是这个状态。这个状态的Pod在运行完成后并不会消失,会保留以便查看具体的信息。
4:安装Cli
Tekton除了使用kubectl操作之外,本身也有客户端,可以到https://github.com/tektoncd/cli/releases进行下载,如下:
[root@k8s-master tekton]# wget https://github.com/tektoncd/cli/releases/download/v0.23.1/tkn_0.23.1_Linux_x86_64.tar.gz
[root@k8s-master tekton]# tar xf tkn_0.23.1_Linux_x86_64.tar.gz
[root@k8s-master tekton]# ls
LICENSE README.md taskrun.yaml task.yaml tkn tkn_0.23.1_Linux_x86_64.tar.gz
[root@k8s-master tekton]# mv tkn /usr/local/bin/
# 当然也提供其他的安装方式,可以到https://tekton.dev/docs/getting-started/进行学习。
安装完成后,可以使用tkn --help查看具体的使用指南。
[root@k8s-master tekton]# tkn --help
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.
# 比如说要查看所有task,如下:
[root@k8s-master tekton]# tkn task list
NAME DESCRIPTION AGE
hello 19 minutes ago
[root@k8s-master tekton]# tkn taskrun list
NAME STARTED DURATION STATUS
hello 17 minutes ago 32 seconds Succeeded
#更多的操作指令需要自己去了解了。
5:安装Dashboard
为了对用户更友好,Tekton也有一个Dashboard(https://tekton.dev/docs/dashboard/),可以使用如下命令进行安装:
[root@k8s-master tekton]# kubectl apply -f https://github.com/tektoncd/dashboard/releases/latest/download/tekton-dashboard-release.yaml
[root@k8s-master tekton]# kubectl get pod -n tekton-pipelines | grep dash
tekton-dashboard-6c66f85968-mqnvj 1/1 Running 0 55s
[root@k8s-master tekton]# kubectl get pod,svc -n tekton-pipelines | grep dash
pod/tekton-dashboard-6c66f85968-mqnvj 1/1 Running 0 78s
service/tekton-dashboard ClusterIP 172.1.54.95 <none> 9097/TCP 78s
# 这里若要访问,我们需要编译clusterIP为NodePort或者使用Ingress暴露服务
[root@k8s-master tekton]# kubectl get pod,svc -n tekton-pipelines | grep dash
pod/tekton-dashboard-6c66f85968-mqnvj 1/1 Running 0 2m41s
service/tekton-dashboard NodePort 172.1.54.95 <none> 9097:30735/TCP 2m41s

接下来点点点的问题就不多说了
6:总结
(https://tekton.dev/docs/getting-started/)上比较全。
后续会介绍Tekton的理论,Tekton pipeline编写以及如何从Jenkins切换到Tekton等