项目源码:

The Tekton Pipelines project provides k8s-style resources for declaring CI/CD-style pipelines.

Tekton管道项目为声明CI/ cd风格的管道提供了k8风格的资源。

安装

Install Tekton Pipelines

kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml

Install Tekton CLI (tkn)

curl -LO https://github.com/tektoncd/cli/releases/download/v0.7.1/tkn_0.7.1_Linux_x86_64.tar.gz

# Change destination directory as needed

tar xvzf tkn_0.7.1_Linux_x86_64.tar.gz -C ~/bin

​

Install Tekton dashboard 仪表盘

kubectl apply --filename https://github.com/tektoncd/dashboard/releases/download/v0.5.1/tekton-dashboard-release.yaml

更改镜像源

默认镜像源安装时的问题解决:

两个yaml 中创建资源时,pull 镜像用的镜像库是国外的,gcr.io 需要替换成国内的镜像源:gcr.azk8s.cn

如果使用原来的gcr.io , 资源创建成功后在启动的过程中,pod状态一直是 imagepullbackoff , 查看pod 内部,是无法pull 镜像所致。get pods --namespace tekton-pipelines --watch

get pods --namespace describe pod ​

解决方法:#将资源删除

kubectl delete--filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml

kubectl delete --filename https://github.com/tektoncd/dashboard/releases/download/v0.5.1/tekton-dashboard-release.yaml

# 下载yaml 文件

# 注意如果因为我们下面要替换的国内源不是即时更新的,有一个同步时间差。

# 如果下载latest release 可能会遇到下载到昨天发布的最新版本,而使用国内源时会出现找不到最新镜像ID. 所以在更新之前可以在官网看一下最新版本是不是昨天才更新的版本,如果是建议选上一个版本

# 如果latest 是几天之前的,则没有问题。

# 官网release : https://github.com/tektoncd/pipeline/releases

# https://storage.googleapis.com/tekton-releases/pipeline/previous/vx.xx.x/release.yaml

wget https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml

wget https://github.com/tektoncd/dashboard/releases/download/v0.5.1/tekton-dashboard-release.yaml

#修改yaml 里面的镜像库

vi release.yaml

:%s/gcr.io/gcr.azk8s.cn/g

:wq

vi tekton-dashboard-release.yaml

:%s/gcr.io/gcr.azk8s.cn/g

:wq

#重新创建资源

kubectl apply -f release.yaml

kubectl apply -f tekton-dashboard-release.yaml

#查看pods 运行状态

kubectl get pods --namespace tekton-pipelines --watch

NAME                                           READY   STATUS              RESTARTS   AGE

tekton-dashboard-7bb59dd55-x4q4q               0/1     ContainerCreating   0          10s

tekton-pipelines-controller-6f9dc7b8f9-99bd9   1/1     Running             0          10m

tekton-pipelines-webhook-69f557c7ff-pqml8      1/1     Running             0          10m

tekton-dashboard-7bb59dd55-x4q4q               0/1     Running             0          45s

tekton-dashboard-7bb59dd55-x4q4q               1/1     Running             0          50s

HelloWork TaskRun

准备好 Resource

task :  task-hello-world.yaml

taskrun :  taskrun-hello-world.yaml

kustomization : 配置以上资源

实例:root@vm1:~/k8s/tekton/helloworld# ll

total 20

drwxr-xr-x 2 root root 4096 Apr 15 11:25 ./

drwxr-xr-x 3 root root 4096 Apr 15 11:23 ../

-rw-r--r-- 1 root root   67 Apr 15 11:25 kustomization.yaml

-rw-r--r-- 1 root root  196 Apr  2 13:23 task-hello-world.yaml

-rw-r--r-- 1 root root  134 Apr  2 13:23 taskrun-hello-world.yaml

root@vm1:~/k8s/tekton/helloworld# cat task-hello-world.yaml

apiVersion: tekton.dev/v1alpha1

kind: Task

metadata:

name: echo-hello-world

spec:

steps:

- name: echo

image: ubuntu

command:

- echo

args:

- "hello world"

root@vm1:~/k8s/tekton/helloworld# cat taskrun-hello-world.yaml

apiVersion: tekton.dev/v1alpha1

kind: TaskRun

metadata:

name: echo-hello-world-task-run

spec:

taskRef:

name: echo-hello-world

root@vm1:~/k8s/tekton/helloworld# cat kustomization.yaml

resources:

- task-hello-world.yaml

- taskrun-hello-world.yaml

root@vm1:~/k8s/tekton/helloworld# kubectl apply -k .

常用检查命令tkn taskrun describe ​tkn taskrun logs  

常见debug 命令

kubectl get pods --watch

kubectl descibe pod xxxxx

kubectl logs 查看所有steps

kubectl logs --container/-c

#持续观察pod状态的变化

kubectl get pods --watch

#当状态为error时,查看这个pod 的log

kubectl descibe pod 

#在上面的describe 的详情页面找到发生Error的步骤:如step-build-and-push, 查看此阶段的log

kubectl logs  --container step-build-and-push

#这个log的内容其实可以在执行的节点上找到对应的容器,为vm2上容器log

docker container logs fc7d1c46d52c --tail 10

应用一个 TaskRun创建一个 secret

创建各种资源:  git , image,  serviceaccout ,  taskgit:  指 代码库的资源 ,比如gitlab

image:  指定 docker build 的image 需要推送的镜像库registry

serviceAccount: 指定镜像库的认证信息,引用上面创建的secret

task: 指定 任务 的过程 ,比如使用 git 类型作为输入,image 类型作为输出,执行step 的步骤创建taskrun : 用来引用上面的创建的task 和其他各种资源。

kubectl create secret docker-registry regcred \

--docker-server=registry.gitlab.systems.com \

--docker-username=xxxx \

--docker-password=xxxx \

--docker-email=xxxxxx@china.com.cn

​

# 例子参见 官网

kubectl apply -f pipelineresource-ci-git-repo.yaml

kubectl apply -f pipelineresource-cointainer-registry.yaml

kubectl apply -f tekton-docker-cred-service.yaml

kubectl apply -f task-build-image.yaml

kubectl apply -f taskrun-build-docker-image.yaml

应用一个 pipelineRun创建一个 secret

创建各种资源:  git , image,  serviceaccout ,  task,clusterrole,clusterrolebinding ,pipelinegit:  指 代码库的资源 ,比如gitlab

image:  指定 docker build 的image 需要推送的镜像库registry

serviceAccount: 指定镜像库的认证信息,引用上面创建的secret

clusterrole:创建一个集群角色

clusterrolebinding:将集群角色和serviceaccout 绑定在一起

task: 指定 任务 的过程 ,比如使用 git 类型作为输入,image 类型作为输出,执行step 的步骤

task:  指定部署任务。

pipeline:  对各个task 编排,传参创建pipelinerun : 用来引用上面的创建的pipeline 和其他资源一起应用。

kubectl create clusterrole tekton-role \

--verb=get,list,watch,create,update,patch,delete \

--resource=deployments,deployments.apps,jobs​

kubectl create clusterrolebinding tekton-binding \

--clusterrole=tekton-role \

--serviceaccount=default:docker-cred-service​​

# 例子参见 官网

# https://github.com/tektoncd/pipeline/blob/master/docs/pipelineruns.md

kubectl apply -f pipelineresource-ci-git-repo.yaml

kubectl apply -f pipelineresource-cointainer-registry.yaml

kubectl apply -f tekton-docker-cred-service.yaml

kubectl apply -f task-build-image.yaml

kubectl apply -f task-deploy-using-kubectl.yaml

kubectl apply -f pipeline.yaml

kubectl apply -f pipelinerun.yaml

​

部署 tekon 仪表盘

下载 dashboard 的yaml

修改 yaml 文件中的镜像库为国内镜像

gcr.azk8s.cn/tekton-releases/github.com/tektoncd/dashboard/cmd/dashboard修改service 的类型为NodePort

在yaml 文件的tekton-dashboard的定义下,spec 下加上type: NodePort应用yaml , 安装dashboardkubectl apply -f dashboard.yaml ​查看服务的nodeport , 30910kubectl get svc --all-namespaces

tekton-pipelines   tekton-dashboard              NodePort    10.111.144.179           9097:30910/TCP              31s浏览器访问,使用集群节点ip加nodeport 30910

比如http://vm1:30910

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐