云原生 | 下一代CI/CD工具,Tekton入门部署指南

2023-10-31 17:29:06 浏览数 (2)

本文为作者原创文章,为尊重作者劳动成果禁止非授权转载,若需转载请在【全栈工程师修炼指南】公众号留言,或者发送邮件到 [master@weiyigeek.top] 中我将及时回复。

0x00 快速入门

1.Tekton 是什么?

历史背景 Tekton 的前身是 Knative 的子项目 build-pipeline,主要用来给 Kantive 的 build 模块增加 pipeline 功能之后独立出来,Tekton的最终目标是一个通用的 CI/CD 工具。

目前,私有云市场占有率比较高的 CICD 工具对 Kubernetes 都有所支持,比如 Jenkins、GitLab CI。但是这些工具只是将 Kubernetes 作为其扩展的一个方面,Kubernetes 作为新的基础设施,需要原生的 CICD 方案。另一方面,Jenkins 的子项目 JenkinsX 也开始默认使用 Tekton 作为 CI 引擎。使用云原生 CRD (是Kubernetes内置的资源类型,即自定义资源的定义) Controller 实现的 Tekton ,无疑有机会成为云原生的主流编排引擎。

简单介绍 描述: Tekton 是一个开源的云原生持续集成和持续交付/部署【Cloud Native CI/CD】解决方案, 使用Golang语言进行开发,允许开发人员通过K8S云平台快速灵活定义流水线,从而更加便捷构建、测试和部署系统,目前是由CD基金会[https://cd.foundation/]管理的项目,其遵循OpenSSF最佳实践。

温馨提示: 此章节作为GitOps中的Tekton初识章节,作者后续会持续更新Tekton ArgoCD 结合实践教程,Tekton 更专注构建 CI/CD 流水线,ArgoCD 更专注应用管理和部署,希望大家多多关注【全栈工程师修炼指南】,作者将推出更多原创文章

Tekton 官网地址: https://tekton.dev/

2.Tekton 有何用?

描述: 前面介绍到 Tekton 主要用于在云原生架构环境中完成CI、CD部分,主要是devops工程师以及开发人员使用,其侧重点应该是在云原生微服务应用以及传统应用的CI持续集成上,

除此之外使用 tekton 的好处如下

  • 可移植性: 跨平台、语言、和部署环境。它适用于 Jenkins、Jenkins X、Skaffold、 Knative 和许多其他流行的 CI/CD 工具。
  • 可定制:Tekton 实体是完全可定制的,从而具有高度的灵活性。平台工程师可以定义非常详细的构建基目录,以供开发人员在各种情况下使用
  • 可重复使用:Tekton 实体是完全可移植的,因此一旦定义,组织内的任何人都可以使用给定的管道并重用其构造块。这使开发人员可以快速构建复杂的管道,而无需“重新发明轮子”。
  • 可扩展:Tekton Catalog是Tekton社区驱动的存储库。您可以使用Tekton目录中的预制组件快速创建新的并展开现有管道。
  • 标准化:Tekton 在您的Kubernetes集群上作为扩展安装并运行,并使用成熟的 Kubernetes 资源模型, 其工作负载在 Kubernetes 容器内执行。
  • 缩放性:为了增加工作负载容量,您可以简单地将节点添加到群集, Tekton 随集群一起扩展 无需重新定义资源分配或对管道进行任何其他修改。

3.Tekton 组件介绍

  • Tekton Pipelines:Tekton 的基础部分,它定义了一组Kubernetes自定义资源,这些资源充当构建块,您可以从中组装CI/CD管道。
  • Tekton Triggers:允许基于 event 实例化 pipeline。例如,每次PR与GitHub存储库合并时,您都可以触发管道的实例化和执行。
  • Tekton Cli:是Tekton Pipelines的一个基于Web的图形界面,用于显示有关管道执行的信息。目前正在进行中。
  • Tekton Dashboard:是Tekton Pipelines的一个基于Web的图形界面,用于显示有关管道执行的信息。
  • Tekton Catalog:是一个由社区贡献的高质量Tekton构建块(任务、管道等)的存储库,可在您自己的管道中使用。
  • Tekton Hub:基于Web的图形界面,用于访问Tekton Catalog。
  • Tekton Operator:是一个Kubernetes Operator模式,允许您在Kubernete集群上安装、更新和删除Tekton项目。
  • Tekton Chain : 为使用Tekton Pipelines建造的文物提供生成、存储和标记出处的工具。

4.Tekton 概念术语

Tekton Pipelines 中最重要的五个概念:TaskTaskRunPipelinePipelineRunPipelineResources(已在v0.44版本被丢弃,此处简单了解)。

  • Task:Tekton 中的最小单元,代表一个任务模板,包括多个步骤。定义一个有序的Step以及每个 Step 调用特定的 在一组特定的输入上构建工具,并生成一组特定的输出,这些输出可用作下一个输入 Step。
  • TaskRun:实例化一个特定的 Task 在一组特定的输入并生成一组特定的输出,并且一个 TaskRun 会创建一个对应的 Pod,每个 step 对应 pod 中的一个 container。
  • Pipeline:Tekton 中一系列有序 Task 组成的有向无环图,定义了流水线的模板。
  • PipelineRun:Pipeline 执行时需要定义一个 PipelineRun,作为流水线的实例,生成一条流水线记录。
  • PipelineResource(已被丢弃):流水线执行过程中需要的资源信息。

Steps, Tasks, and Pipelines 运行示例图

  • Step 中 定义CI/CD工作流中可以完成某一阶段的操作,例如代码拉取,编译构建Java程序,镜像构建,以及应用部署,Tekton 通常会为每一个阶段生成一个Container。
  • Task 中 是按照顺序排列 Step 的集合,定义装载一个Kubernetes卷共享环境,Tekton以Kubernetes pod的形式运行任务,其中每个步骤都成为pod中的运行容器。
  • Pipelines 中是按照顺序排列 Task 的集合,Tekton 整理所有的Task,将它们连接到有向无环图(DAG)中,并按顺序依次执行。换句话说,它创建了许多Kubernetes pod,并确保每个pod都能按要求成功运行。

温馨提示: 任务(Tasks)和管道(Pipelines)被指定为Kubernetes集群中的自定义资源(CRD)。 知识扩展: Task、Pipeline 分别用于什么时候?

Task - 适用于更简单的工作负载,例如运行测试、lint 或构建 Kaniko 缓存, Task 在单个中执行 Kubernetes Pod,使用单个磁盘,通常保持简单。 Pipeline - 适用于复杂的工作负载,例如静态分析,以及测试、构建和部署复杂的项目

TaskRuns and PipelineRuns 运行示例图

  • pipelineRuns 是 Pipeline 的执行入口,可以触发执行 Pipeline 即 CI/CD工作流,每次执行都将成为Kubernetes集群中可跟踪的pipelineRun资源。
  • TaskRuns 是 Task 的特定执行, 当您选择在Pipeline 之外运行Task时非常有用,您可以通过它查看任务中每个步骤执行的细节。

知识总结: TaskRunsPipelineRuns 运行将资源与 TaskPipeline 连接起来,运行必须包括资源的实际地址,例如存储库的URL、任务或管道需求,从而允许开发人员针对不同的输入和输出重用 Task 或者 Pipeline.

温馨提示: 您可以手动创建 taskRunpipelineRuns以及通过 Tekton Triggers 自动触发Tekton立即运行Task或pipeline。

5.Tekton 如何使用?

描述: 本小节将讲解 Tekton 如何学习及其使用,我们可以参考官方的Task、Pipeline以及Tekton Triggers示例进行入门学习,快速开始:https://tekton.dev/docs/getting-started/

其次是参考Tekton Github项目中的Task、Taskrun、Pipeline、Pipeline以及挂载卷、Step 结果存储等高级示例示例,地址为: https://github.com/tektoncd/pipeline/tree/main/examples

最后是参考Tekton Hub中的常用的Task脚本,帮助各位看友可以快速上手使用,等待熟悉之后后期可以自行编写Task,再使用Pipeline进行自定义流水线组合,地址为:https://hub.tekton.dev

至此,我们可以从上述的网站中可以快速学习上手使用,并应用在你企业内部GitOps环境中。


0x01 安装部署

部署环境

测试环境及版本说明:

代码语言:javascript复制
# K8S 高可用集群主机 x 4
系统发行版: Ubuntu 20.04 
Kubernetes v1.23.17
Tekton -> Pipelines v0.44.4 | Triggers v0.22.2 | Dashboard v0.35.1

部署实践

Tekton 组件部署

pipeline

描述: Tekton Pipelines 项目提供了 k8s 风格的资源用于声明 CI/CD 样式的管道。Tekton Pipelines 可以部署到任何的K8S集群,管道中的任务可以独立运行,并且Git存储资源可以在之间相互轻松交互。

项目地址: https://github.com/tektoncd/pipeline/releases

温馨提示: 针对于不同的Kubernetes版本需要采用不同的Tekton Pipelines版本,你应该查看官方文档 Required Kubernetes Version 章节, 例如作者此时k8s环境为 v1.23.x版本应该选用 v0.41.x <= 可选范围 <v0.45.x之间的版本 。

代码语言:javascript复制
v0.24.x release of Tekton: Kubernetes version 1.18 or later
v0.27.x release of Tekton: Kubernetes version 1.19 or later
v0.30.x release of Tekton: Kubernetes version 1.20 or later
v0.33.x release of Tekton: Kubernetes version 1.21 or later
v0.39.x release of Tekton: Kubernetes version 1.22 or later
v0.41.x release of Tekton: Kubernetes version 1.23 or later
v0.45.x release of Tekton: Kubernetes version 1.24 or later

温馨提示: Pipelines v0.44.4 | Triggers v0.22.2 | Dashboard v0.35.1 版本的相关镜像都可以在作者dockerHub中下载,地址 https://hub.docker.com/r/weiyigeek/


偷偷的告诉你哟?极客全栈修炼】微信小程序已开放

可直接在微信里面直接浏览博主文章哟,后续将上线更多有趣的小工具。


安装步骤 Step 1.下载 tektoncd pipeline 资源部署清单。

代码语言:javascript复制
mkdir -vp /storage/dev/webapp/tekton-pipelines/Tekton
cd /storage/dev/webapp/tekton-pipelines/Tekton
curl -Ls https://github.com/tektoncd/pipeline/releases/download/v0.44.4/release.yaml -o TektonCD-Pipelines.yaml

Step 2.使用作者此篇【 如何使用Github Action优雅的同步国外镜像到DockerHub或私有仓库 】文章的方式[ https://mp.weixin.qq.com/s/0STtKrlgYqpoqwMgb0QnoA],利用Github Action来拉取指定镜像到我们的DockerHub中或私有镜像仓库中,执行如下Shell脚本构建skopeo同步命令以及替换资源清单中相关镜像。

代码语言:javascript复制
DOCKER_USERHUB=weiyigeek/tektoncd-pipeline-
grep "image: " TektonCD-Pipelines.yaml | cut -f 2,3 -d ":" | cut -f 1 -d "@" > TektonCD-Pipelines-image.txt
grep "git-image" TektonCD-Pipelines.yaml | sed -e "s#,#n#g" -e 's/"//g' | grep "gcr.io" | cut -f 1 -d "@" >> TektonCD-Pipelines-image.txt
for i in `cat TektonCD-Pipelines-image.txt`;do
  echo  skopeo copy --all docker://${i} docker://${DOCKER_USERHUB}${i##*/}
  sed -i "s#${i}#${DOCKER_USERHUB}${i##*/}#g" TektonCD-Pipelines.yaml
done

执行结果:

代码语言:javascript复制
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller:v0.44.4 docker://weiyigeek/tektoncd-pipeline-controller:v0.44.4
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/resolvers:v0.44.4 docker://weiyigeek/tektoncd-pipeline-resolvers:v0.44.4
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/webhook:v0.44.4 docker://weiyigeek/tektoncd-pipeline-webhook:v0.44.4
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/git-init:v0.44.4 docker://weiyigeek/tektoncd-pipeline-git-init:v0.44.4
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint:v0.44.4 docker://weiyigeek/tektoncd-pipeline-entrypoint:v0.44.4
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/nop:v0.44.4 docker://weiyigeek/tektoncd-pipeline-nop:v0.44.4
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/sidecarlogresults:v0.44.4 docker://weiyigeek/tektoncd-pipeline-sidecarlogresults:v0.44.4
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/imagedigestexporter:v0.44.4 docker://weiyigeek/tektoncd-pipeline-imagedigestexporter:v0.44.4
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/pullrequest-init:v0.44.4 docker://weiyigeek/tektoncd-pipeline-pullrequest-init:v0.44.4
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/workingdirinit:v0.44.4 docker://weiyigeek/tektoncd-pipeline-workingdirinit:v0.44.4

Github项目地址(欢迎大家Fork,然后自行更改项目中的secrets即可): https://github.com/WeiyiGeek/action-sync-images/ ,将上述执行结果复制到入下图所示的工作流中。

Step 3.部署 Tekton-Pipelines

代码语言:javascript复制
# 部署 Tekton-Pipelines
kubectl apply -f TektonCD-Pipelines.yaml

# 查看Pod状态(默认创建 tekton-pipelines 与 tekton-pipelines-resolvers 两个名称空间 )
kubectl get pods --namespace tekton-pipelines -l app.kubernetes.io/part-of=tekton-pipelines
  # NAME                                           READY   STATUS    RESTARTS   AGE
  # tekton-pipelines-controller-568fdb7466-dsddr   1/1     Running   0          5m
  # tekton-pipelines-webhook-7f7cc7d4d6-4tsmb      1/1     Running   0          5m

kubectl get pods --namespace tekton-pipelines-resolvers -l app.kubernetes.io/part-of=tekton-pipelines
  # NAME                                                 READY   STATUS    RESTARTS   AGE
  # tekton-pipelines-remote-resolvers-7b4bc78db5-rwj5j   1/1     Running   0          5m

执行结果:

代码语言:javascript复制
Monitor the installation:
kubectl get pods --namespace tekton-pipelines --watch
When all components show 1/1 under the READY column, the installation is complete. Hit Ctrl   C to stop monitoring.

# 若没有其他错误及tekton-pipelines名称空间下pod均已全部启动,并且显示如下提示则表示安装成功。
Congratulations! You have successfully installed Tekton Pipelines on your Kubernetes cluster.


triggers

描述: Tekton Triggers是一个Kubernetes自定义资源定义(CRD)控制器,它允许您根据从事件有效负载中提取的信息创建Kubernete资源。

项目地址: https://github.com/tektoncd/triggers 安装文档: https://tekton.dev/docs/installation/triggers/

温馨提示: 同样的,针对于不同的Kubernetes版本需要采用不同的Tekton triggers版本,你应该查看官方文档 Required Kubernetes Version 章节, 例如作者此时k8s环境为 v1.23.x版本应该选用v0.22.x的版本 。

代码语言:javascript复制
v0.23.x release of Triggers: Kubernetes version 1.24 or later
v0.22.x release of Triggers: Kubernetes version 1.23 or later
v0.21.x release of Triggers: Kubernetes version 1.22 or later

安装步骤 Step 1.从官网下载 tekton-triggers 所需的资源清单。

代码语言:javascript复制
curl -ls https://storage.googleapis.com/tekton-releases/triggers/previous/v0.22.2/release.yaml -o TektonCD-Triggers.yaml
curl -ls https://storage.googleapis.com/tekton-releases/triggers/previous/v0.22.2/interceptors.yaml -o TektonCD-Triggers-interceptors.yaml

Step 2.同安装pipelines步骤2一样,作者使用此篇【 如何使用Github Action优雅的同步国外镜像到DockerHub或私有仓库】文章的方式[https://mp.weixin.qq.com/s/0STtKrlgYqpoqwMgb0QnoA],利用Github Action来拉取指定镜像到我们的DockerHub中或私有镜像仓库中,执行如下Shell脚本构建skopeo同步命令以及替换资源清单中相关镜像。

代码语言:javascript复制
DOCKER_USERHUB=weiyigeek/tektoncd-triggers-
grep "image: " TektonCD-Triggers.yaml TektonCD-Triggers-interceptors.yaml | cut -f 3,4 -d ":" | cut -f 1 -d "@" | tr -d '"'> TektonCD-triggers-image.txt
grep '-el-image' TektonCD-Triggers.yaml | sed -e "s#,#n#g" -e 's/"//g' | grep "gcr.io" | cut -f 1 -d "@" >> TektonCD-triggers-image.txt
for i in `cat TektonCD-triggers-image.txt`;do
  echo  skopeo copy --all docker://${i} docker://${DOCKER_USERHUB}${i##*/}
  if [[ $(echo ${i} | grep -c "interceptors") -gt 0 ]];then
    sed -i "s#${i}#${DOCKER_USERHUB}${i##*/}#g" TektonCD-Triggers-interceptors.yaml
  else
    sed -i "s#${i}#${DOCKER_USERHUB}${i##*/}#g" TektonCD-Triggers.yaml
  fi
done

执行结果:

代码语言:javascript复制
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/triggers/cmd/controller:v0.22.2 docker://weiyigeek/tektoncd-triggers-controller:v0.22.2
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/triggers/cmd/webhook:v0.22.2 docker://weiyigeek/tektoncd-triggers-webhook:v0.22.2
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/triggers/cmd/interceptors:v0.22.2 docker://weiyigeek/tektoncd-triggers-interceptors:v0.22.2
skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/triggers/cmd/eventlistenersink:v0.22.2 docker://weiyigeek/tektoncd-triggers-eventlistenersink:v0.22.2

Github项目地址(欢迎大家Fork,然后自行更改项目中的secrets即可): https://github.com/WeiyiGeek/action-sync-images/ ,将上述执行结果复制到pipelines步骤2图中所示的工作流中。

Step 3.部署 Tekton Triggers

代码语言:javascript复制
# 部署Triggers 资源清单
kubectl apply -f TektonCD-Triggers.yaml
kubectl apply -f TektonCD-Triggers-interceptors.yaml

# 查看部署资源清单Pod是否正常运行
$ kubectl get pods --namespace tekton-pipelines -l app.kubernetes.io/part-of=tekton-triggers --watch
  # NAME                                               READY   STATUS    RESTARTS   AGE
  # tekton-triggers-controller-56d988bf44-sfp5x        1/1     Running   0          6m4s
  # tekton-triggers-core-interceptors-d56b49cf-gr9b5   1/1     Running   0          6m3s
  # tekton-triggers-webhook-544d4d5f6-msg4g            1/1     Running   0          6m4s
dashboard

描述:Tekton Dashboard是一个通用的、基于web的用户界面,用于Tekton Pipelines和Tekton Triggers资源, 它允许用户管理和查看Tekton资源的创建、执行和结果查看,其支持的一些功能:

  • PipelineRun和TaskRun状态和日志的实时视图
  • 按标签筛选资源
  • 查看资源概述和YAML
  • 显示整个集群的资源或限制特定命名空间的可见性
  • 直接从git存储库导入资源
  • 通过扩展添加功能

项目地址: https://github.com/tektoncd/dashboard/ 安装文档: https://tekton.dev/docs/dashboard/

温馨提示: 同样的,针对于不同的Kubernetes版本需要采用不同的Tekton dashboard版本并且对应着Pipelines Releases / Triggers Releases版本,你应该查看官方文档 Required Kubernetes Version 章节, 例如作者此时k8s环境为 v1.23.x版本应该选用v0.22.x的版本 。

代码语言:javascript复制
# v0.35 (LTS)
Latest Release: v0.35.1 (2023-05-31) (docs)
Initial Release: v0.35.0 (2023-04-25)
End of Life: 2024-04-24
Patch Releases: v0.35.0, v0.35.1
Supported Pipelines Releases: v0.44.x LTS, v0.47.x LTS
Supported Triggers Releases: v0.23.x

安装步骤 Step 1.从官网下载 Tekton Dashboard 所需的资源清单, 注意此处分为 releaserelease-full 两个版本前置只支持read,而后者支持修改流水线等操作,此处作者使用full版本。

代码语言:javascript复制
curl -ls https://storage.googleapis.com/tekton-releases/dashboard/previous/v0.35.1/release-full.yaml -o TektonCD-Dashboard-full.yaml

Step 2.同安装pipelines步骤2一样,作者使用此篇【如何使用Github Action优雅的同步国外镜像到DockerHub或私有仓库】文章的方式,利用Github Action来拉取指定镜像到我们的DockerHub中或私有镜像仓库中,执行如下Shell脚本构建skopeo同步命令以及替换资源清单中相关镜像。

代码语言:javascript复制
DOCKER_USERHUB=weiyigeek/tektoncd-dashboard-
grep "image: " TektonCD-Dashboard-full.yaml | cut -f 2,3 -d ":" | cut -f 1 -d "@" > TektonCD-dashboard-image.txt
for i in `cat TektonCD-dashboard-image.txt`;do
  echo skopeo copy --all docker://${i} docker://${DOCKER_USERHUB}${i##*/}
  sed -i "s#${i}#${DOCKER_USERHUB}${i##*/}#g" TektonCD-Dashboard-full.yaml
done

执行结果: skopeo copy --all docker://gcr.io/tekton-releases/github.com/tektoncd/dashboard/cmd/dashboard:v0.35.1 docker://weiyigeek/tektoncd-dashboard-dashboard:v0.35.1

Step 3.部署Tekton Dashboard

代码语言:javascript复制
# 部署 Tekton Dashboard 资源清单
kubectl apply -f TektonCD-Dashboard-full.yaml
  # namespace/tekton-dashboard created
  # customresourcedefinition.apiextensions.k8s.io/extensions.dashboard.tekton.dev created
  # serviceaccount/tekton-dashboard created
  # role.rbac.authorization.k8s.io/tekton-dashboard-info created
  # clusterrole.rbac.authorization.k8s.io/tekton-dashboard-backend created
  # clusterrole.rbac.authorization.k8s.io/tekton-dashboard-tenant created
  # rolebinding.rbac.authorization.k8s.io/tekton-dashboard-info created
  # clusterrolebinding.rbac.authorization.k8s.io/tekton-dashboard-backend created
  # configmap/dashboard-info created
  # service/tekton-dashboard created
  # deployment.apps/tekton-dashboard created
  # clusterrolebinding.rbac.authorization.k8s.io/tekton-dashboard-tenant created

# 查看部署情况
kubectl get pods --namespace tekton-pipelines -l app.kubernetes.io/part-of=tekton-dashboard
  # NAME                                READY   STATUS    RESTARTS   AGE
  # tekton-dashboard-855f998964-pj6xx   1/1     Running   0          46h

Step 4.为Tekton Dashboard站点配置域名test.weiyigeek.top,此处我在腾讯云中申请了免费SSL证书,为此站点配置SSL, 提交申请之后大约5~10分钟的样子即可,签发下来此时在证书后点击下载根证书下载(crt文件)以及 Nginx(适用大部分场景)(pem文件、crt文件、key文件),并上传至服务器使用unzip解压。

申请地址: https://cloud.tencent.com/act/cps/redirect?redirect=10019&cps_key=b33075ae5a2baf3b47e7456ee5821502

代码语言:javascript复制
# 解压证书
unzip test.weiyigeek.top_nginx.zip
cd test.weiyigeek.top_nginx/ && ls
test.weiyigeek.top_bundle.crt  test.weiyigeek.top_bundle.pem  test.weiyigeek.top.csr  test.weiyigeek.top.key

# 创建 tls 的 secret 
kubectl create secret tls test-weiyigeek-top-certs --cert=test.weiyigeek.top_bundle.crt --key=test.weiyigeek.top.key -n tekton-pipelines
  # secret/test-weiyigeek-top-certs created

Step 5.此处作者已经在集群中安装了ingress-nginx,若还没有安装部署的可以参考作者此篇文章【 Ingress-Nginx 服务暴露基础学习与实践 】[https://blog.weiyigeek.top/2020/5-27-529.html]或者ngress-nginx官网,执行下述命令创建ingress规则,以便我们通过https://test.weiyigeek.top/tekton/地址访问 Tekton-Dashboard 服务。

代码语言:javascript复制
# ingressclasses 控制器查看
kubectl get ingressclasses.networking.k8s.io
  # NAME    CONTROLLER             PARAMETERS   AGE
  # nginx   k8s.io/ingress-nginx   <none>       397d

# TektonCD-Dashboard-ingress 资源清单
tee TektonCD-Dashboard-ingress.yaml <<'EOF'
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: tekton-dashboard
  namespace: tekton-pipelines
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: test.weiyigeek.top
    http:
      paths:
      - path: /tekton(/|$)(.*)
        pathType: ImplementationSpecific
        backend:
          service:
            name: tekton-dashboard
            port:
              number: 9097
  tls:
  - hosts:
    - test.weiyigeek.top
    secretName: test-weiyigeek-top-certs
EOF

# 部署 Dashboard-ingress
kubectl apply -f TektonCD-Dashboard-ingress.yaml
  # ingress.networking.k8s.io/tekton-dashboard created

# 查看部署 Dashboard-ingress
kubectl get ingress -n tekton-pipelines
  # NAME               CLASS    HOSTS                ADDRESS        PORTS     AGE
  # tekton-dashboard   <none>   test.weiyigeek.top   10.107.81.40   80, 443   15s

Step 6.客户端设置硬解析或者使用内部DNS服务器将test.weiyigeek.top解析到Kubernetes任意一个节点,通常会指定一个出口节点,例如此处10.20.176.215 test.weiyigeek.top

然后使用浏览器访问 tekton-dashboard 地址(https://test.weiyigeek.top/tekton/) , 配置无误将显示如下图所示:

至此,Tekton 在K8S常规组件的安装完毕。


Tekton CLI

描述:Tekton Pipelines CLI项目提供了一个命令行界面(CLI),用于与Tekton交互,Tekton是一个用于持续集成和交付(CI/CD)系统的开源框架。

项目地址: https://github.com/tektoncd/cli/releases 使用文档: https://tekton.dev/docs/cli/

安装流程

Step 1.指定当前最新的Cli版本,使用二进制方式进行安装部署.

代码语言:javascript复制
CLI_VERSION="0.31.1"
curl -LO https://github.com/tektoncd/cli/releases/download/v${CLI_VERSION}/tkn_${CLI_VERSION}_Linux_x86_64.tar.gz
# 此处,命令值得学习,只解压压缩包中的tkn到/usr/local/bin/目录中
tar xvzf tkn_${CLI_VERSION}_Linux_x86_64.tar.gz -C /usr/local/bin/ tkn

Step 2.将tkn添加为kubectl插件.

代码语言:javascript复制
# 创建软链接
ln -s /usr/local/bin/tkn /usr/local/bin/kubectl-tkn

# 验证插件配置情况
kubectl plugin list
  # The following compatible plugins are available:
  # /usr/local/bin/kubectl-tkn

本文至此完毕,更多技术文章,尽情等待下篇好文!

原文地址: https://blog.weiyigeek.top/2023/7-22-768.html

0 人点赞