赞
踩
Tekton 官网地址 https://tekton.dev/
Tekton 最新官网文档 https://tekton.dev/docs/
Tekton GitHub源码地址 https://github.com/tektoncd
Tekton是一个强大、灵活的构建 CI/CD 流水线系统的开源框架,允许开发者构建、测试和发布应用。Tekton 是云原生的,通过定义 CRD ,让用户快速灵活定义流水线;
Tekton是构建CI/CD系统的本地云解决方案。它由提供构建块的Tekton pipeline和支持组件组成,如Tekton CLI和Tekton Catalog,使Tekton成为一个完整的生态系统;Tekton也是CD基金会(一个Linux基金会项目)的一部分;以yaml文件编排应用构建及部署流程,是一个纯云原生的标准化CICD流水线构建、测试和部署流程的工具。
Tekton引入了任务的概念,它指定了你想要运行的工作负载;Tekton 最重要的五个概念:Task、TaskRun、Pipeline、PipelineRun、PipelineResources:
每个任务在它自己的Kubernetes Pod中执行。因此,默认情况下,Pipeline中的任务不共享数据。要在任务之间共享数据,必须显式地配置每个任务,使其输出可用于下一个任务,并将先前执行的任务的输出作为其输入。
安装kubectl
安装K8S集群
# 先要安装docker,然后安装kubectl wget "https://storage.googleapis.com/kubernetes-release/release/v1.18.8/bin/linux/amd64/kubectl" chmod 777 kubectl mv kubectl /usr/local/bin # 安装minikube curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 install minikube-linux-amd64 /usr/local/bin/minikube minikube start # 创建新用户,这步不是必要 adduser K8S //创建K8S用户 passwd K8S //设置密码asdfwsxedc # 将创建的新用户加入到docker组中,,这步不是必要 groupadd mydocker gpasswd -a K8S mydocker //$USER为上面创建的K8S用户 newgrp mydocker docker version # 启动minikube minikube start # 卸载minikube minikube delete #也可以使用--registry-mirror=https://registry.docker-cn.com, running minikube within a VM, consider using --driver=none,--image-mirror-country='cn' minikube start --force --driver=docker
# 使用kubectl安装最新版本的Tekton pipeline
kubectl apply --filename \
https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
# 创建资源时,pull 镜像用的镜像库是国外的,gcr.io 需要替换成国内的镜像源:gcr.azk8s.cn;如果使用原来的gcr.io , 资源创建成功后在启动的过程中,pod状态一直是 imagepullbackoff , 查看pod 内部,是无法pull 镜像所致。
# 官方提供release.yaml中需要的镜像是从谷歌云拉取的,国内的环境可能拉不到镜像
kubectl get pods --namespace tekton-pipelines --watch
kubectl get pods --namespace describe pod <pod-id>
kubectl --namespace tekton-pipelines describe pods
# 创建目录
mkdir tekton
# 下载yaml 文件,注意如果因为我们下面要替换的国内源不是即时更新的,有一个同步时间差,如果下载latest release 可能会遇到下载到昨天发布的最新版本,而使用国内源时会出现找不到最新镜像ID. 所以在更新之前可以在官网看一下最新版本是不是昨天才更新的版本,如果是建议选上一个版本,如果latest 是几天之前的,则没有问题。
#修改yaml 里面的镜像库
vi release.yaml
wget https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
%s/gcr.io/gcr.azk8s.cn/g
#重新创建资源
kubectl apply -f release.yaml
# 上面的都还是有问题,最后可以使用阿里云的资源,这一个可以成功的创建
kubectl apply -f http://my-oss-testing.oss-cn-beijing.aliyuncs.com/k8s/tekton/release.yaml
kubectl get pods -n tekton-pipelines
安装完后后,可以看到在Kubernetes集群中新增了哪些Tekton的crd
创建并运行一个基本任务,Task在API中表示为Task类对象,它定义了一系列按顺序运行的步骤,以执行Task所需的逻辑。每个Task都作为一个pod在Kubernetes集群上运行,每个步骤都在自己的容器中运行。创建vi hello-world.yaml
apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: hello spec: steps: - name: echo image: alpine script: | #!/bin/sh echo "Hello World,itxs" apiVersion: tekton.dev/v1beta1 kind: Task metadata: name: hello spec: steps: - name: echo image: ubuntu # contains bash script: | #!/usr/bin/env bash echo "Hello World,itxs"
应用到集群的更改
kubectl apply --filename hello-world.yaml
要运行此Task,必须使用TaskRun实例化它。创建另一个名为hello-task-run的文件Yaml,内容如下:
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
name: hello-task-run
spec:
taskRef:
name: hello
将更改应用到集群以启动任务
kubectl apply --filename hello-task-run.yaml
# 验证运行是否正常
kubectl get taskrun hello-task-run
# 查看容器运行日志
kubectl logs --selector=tekton.dev/taskRun=hello-task-run
kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/latest/tekton-dashboard-release.yaml
# 安装一个 Tekton 提供的一个 Dashboard,我们可以通过 Dashboard 查看 Tekton 整个任务的构建过程,直接执行下面的命令直接安装即可
kubectl apply -f http://my-oss-testing.oss-cn-beijing.aliyuncs.com/k8s/tekton/dashboard.yaml
安装完后,可以查看其svc资源,类型为NodePort,暴露30952端口
访问http://tekton.com:30952/ ,这里我是作为host解析,所以可以域名访问
# 下载rpm或者二进制包
wget https://github.com/tektoncd/cli/releases/download/v0.26.0/tektoncd-cli-0.26.0_Linux-64bit.rpm
# rpm安装
rpm -Uvh tektoncd-cli-0.26.0_Linux-64bit.rpm
tkn task list
tkn --help
演示步骤如下
创建goodbye-world.yaml
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: goodbye
spec:
steps:
- name: goodbye
image: alpine
script: |
#!/bin/sh
echo "Goodbye World,itxs"
# 应用第二个任务
kubectl apply --filename goodbye-world.yaml
# 管道定义了一个按特定执行顺序排列的有序任务系列,作为CI/CD工作流的一部分,创建管道包含前面两个任务
vi hello-goodbye-pipeline.yaml
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: hello-goodbye
spec:
tasks:
- name: hello
taskRef:
name: hello
- name: goodbye
runAfter:
- hello
taskRef:
name: goodbye
# 应用管道
kubectl apply --filename hello-goodbye-pipeline.yaml
# 用PipelineRun对象实例化你的Pipeline。创建一个名为hello-goodbye-pipeline-run的新文件。Yaml,内容如下
vi hello-goodbye-pipeline-run.yaml
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
name: hello-goodbye-run
spec:
pipelineRef:
name: hello-goodbye
# 通过将PipelineRun配置应用到集群来启动Pipeline:
kubectl apply --filename hello-goodbye-pipeline-run.yaml
# 使用如下命令查看PipelineRun的日志:
tkn pipelinerun logs hello-goodbye-run -f -n default
后续再补充基于Tekton的CI结合ArgoCD的CD实现完美新一代云原生组合
**本人博客网站 **IT小神 www.itxiaoshen.com
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。