Tekton入门

image

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

image

接下来点点点的问题就不多说了

6:总结

(https://tekton.dev/docs/getting-started/)上比较全。
后续会介绍Tekton的理论,Tekton pipeline编写以及如何从Jenkins切换到Tekton等
posted @ 2022-04-15 15:41  Layzer  阅读(188)  评论(0编辑  收藏  举报