项目源码:
https://github.com/tektoncd/pipeline
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
更改镜像源
默认镜像源安装时的问题解决:
其中:https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
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 <pod-id>
解决方法:
#将资源删除 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 <echo-hello-world-task-run>
tkn taskrun logs <echo-hello-world-task-run>
常见debug 命令
kubectl get pods --watch
kubectl descibe pod xxxxx
kubectl logs <podname> 查看所有steps
kubectl logs <podname> --container/-c <step-name>
#持续观察pod状态的变化 kubectl get pods --watch #当状态为error时,查看这个pod 的log kubectl descibe pod <podname> #在上面的describe 的详情页面找到发生Error的步骤:如step-build-and-push, 查看此阶段的log kubectl logs <podname> --container step-build-and-push #这个log的内容其实可以在执行的节点上找到对应的容器,为vm2上容器log docker container logs fc7d1c46d52c --tail 10
应用一个 TaskRun
- 创建一个 secret
- 创建各种资源: git , image, serviceaccout , task
- git: 指 代码库的资源 ,比如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 ,pipeline
- git: 指 代码库的资源 ,比如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 , 安装dashboard
kubectl apply -f dashboard.yaml
- 查看服务的nodeport , 30910
kubectl get svc --all-namespaces tekton-pipelines tekton-dashboard NodePort 10.111.144.179 <none> 9097:30910/TCP 31s
- 浏览器访问,使用集群节点ip加nodeport 30910
比如http://vm1:30910
No Leanote account? Sign up now.