Tekton是Kubernetes原生的持续集成和交付(CI/CD)解决方案之一。它允许开发人员在混合云或私有云中进行构建、测试和部署
Tekton官方提供了较多的交互式教程,便于开发者直接实践应用此工具。想快速上手可以点击: https://tekton.dev/try
前提条件:
- Kubernetes群集版本1.15或更高版本建议使用Tekton Pipeline v0.11.0或更高版本
- 对于Kubernetes群集版本低于1.15,建议进行升级,否则Tekton存在兼容性问题且官方也不太容易进行维护处理
- 在群集中启用基于角色的访问控制(RBAC)
- 授予当前用户群集管理员权限。
- 注: 如果您使用的是Google Kubernetes Engine(GKE),请参阅Kubernetes Engine QuickStart获取设置Kubernetes集群的说明默认情况下,GKE群集启用了RBAC,并且默认支持持久卷(PV),需要授予当前用户所需的权限,请运行以下命令,其他K8S环境则参考其安装手册:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole=cluster-admin \
--user=$(gcloud config get-value core/account)
安装:
- Tekton Pipelines是Tekton的核心组件,仅需在k8s集群中执行以下命令,即可完成安装
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
- 安装需要一些时间,为保障服务正常使用,请确保tekton-pipelines相关组件均处于running状态,可使用如下命令查询组件状态
kubectl get pods --namespace tekton-pipelines
持久卷(Persistent volumes)
- 运行CI/CD pinelines,需要为Tekton提供永久卷存储。默认情况下,Tekton需要5G的存储空间。需要注意的是, Tekton的性能会受的存储类影响
注: 可使用如下命令检查存储状态是否可用
kubectl get pv
kubectl get storageclasses
- 可以通过修改Tekton使用的 ConfigMap 来定义其存储设置.如果需要修改PV大小或者PV使用的存储卷类型,则需要修改config-artifact-pvc 中的以下两个选项
- size: 数据卷大小: 比如10Gi
- storageClassName: 存储卷的类型
- 假设需要10Gi的存储空间、指定使用 manal的存储类,则ConfigMap需要做如下修改
kubectl create configmap config-artifact-pvc \
--from-literal=size=10Gi \
--from-literal=storageClassName=manual \
-o yaml -n tekton-pipelines | kubectl replace -f -
- 此外,除非另有配置,否则Tekton将使用Kubernetes集群中的默认服务帐户;如果您希望覆盖此选项,请更新ConfigMap config-default的default-service-account属性:
kubectl create configmap config-defaults \
--from-literal=default-service-account=YOUR-SERVICE-ACCOUNT \
-o yaml -n tekton-pipelines | kubectl replace -f -
安装CLI (tkn)
- 为了方便,建议将Tkn CLI 与 Pinelines核心组件一起安装,下载地址: https://github.com/tektoncd/cli/releases (包含mac、linux、win等主流操作系统)
使用Tekton创建第一个CI/CD工作流
-
使用Tekton,CI/CD 工作流中的每个操作都会变成一个 Step,使用设定好的容器镜像执行该 Step。然后将 Step 聚合到 Task 中,Task 则以 pod 的形式运行。也可以进一步将 Task 聚合到 Pinelines 中,Pinelines可以设定多个 Task 的执行顺序。
-
创建Tekton Task,需要使用 apiVersion: tekton.dev/v1beta1 , Kind: Task来创建K8S中的对象。下面的YAML文件用一个简单的 Step 来执行打印Hello 云原生建筑师的 Task。
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: echo
spec:
steps:
- name: echo
image: ubuntu
command:
- echo
args:
- "Hello 云原生建筑师!"
kubectl apply -f task.yaml
- 运行此 Tekton 的 Task,还需要创建一个 TaskRun 对象。TaskRun 是用来设置 Task 执行任务
- 可以只用tkn命令或者yaml 来执行 TaskRun对象
tkn task start echo --dry-run
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
name: getting-started
spec:
taskRef:
name: echo
- Tekton 现在已经在执行 Task,可以使用如下命令查看 TaskRun的运行日志
tkn taskrun logs getting-started -f
- 执行完成后,会显示执行结果
Hello 云原生建筑师!