学习目标
学完本章你应该能够:
- 用自己的话讲清 Tekton “一切皆资源” 的设计哲学,以及它为什么"生在 K8s、长在 K8s"。
- 理清 Step / Task / Pipeline / Workspace / Trigger 五类核心概念的职责与关系。
- 画出一次流水线从
Pipeline到PipelineRun→TaskRun→ Pod(Step 容器)的运行时映射。 - 照着文档在集群里把 Tekton Pipelines / Triggers / Dashboard 装起来,并用 port-forward 打开界面。
- 在面试或方案评审中,把 Tekton 与 Jenkins / GitLab CI 的差异讲清楚(K8s 原生、CRD 编排、事件驱动)。
前置知识:
- Kubernetes 基础:
kubectl、Pod、CRD(自定义资源)、Namespace - CI/CD 基本概念:构建、测试、部署、流水线
- 一点点 YAML 阅读能力
本章你会动手做的事:
- 按本文命令在 K8s 集群装好 Tekton Pipelines + Dashboard,用 port-forward 打开界面。
- 写一个最小
Task(用busybox打印 hello),创建TaskRun真正跑一次。 - 配置一个 GitHub Webhook Trigger,push 代码自动触发
PipelineRun。
Tekton 基本概念
1、核心概念:K8s 原生的 CI/CD 引擎
Tekton 是 CNCF 孵化项目,以 K8s 为运行底座,将 CI/CD 流程抽象为可扩展的 API 资源。其设计哲学是 “一切皆资源”。
类比:把 Tekton 想成一家"云原生工厂"。工厂建在 Kubernetes 这片园区里,所有设备(Step/Task/Pipeline)都是园区里的标准集装箱(容器 / Pod),园区管理员(K8s 调度器)负责把集装箱摆到合适的机器上运行。所谓"一切皆资源",就是这些设备、流水线、触发器在 K8s 里全都是用 YAML 描述的 CRD,可以用
kubectl像操作 Pod 一样操作它们。
| 概念 | 描述 | 云原生价值 |
|---|---|---|
| Step | 每个 Step直接对应一个容器 | 容器化原子操作(独立隔离) |
| Task | Task是Pipeline的最小执行单元,其核心是 “完成一个具体的离散操作”, 每个Task对应一个Pod | 可复用的原子任务(K8s CRD) |
| Pipeline | Pipeline通过定义 “拉取 → 构建 → 测试 → 部署” 等阶段,让软件交付像工厂流水线一样高效可控 | 任务编排(支持并行 / 依赖) |
| Workspace | Workspace是连接 Task 和 Pipeline的核心组件,用于跨容器、跨任务共享数据。 | 跨任务文件共享(PVC 或 Volume) |
| Trigger | Triggers是实现 事件驱动流水线 的核心组件,用于自动响应外部事件(如代码提交、API 调用)触发 Pipeline执行。 | 事件驱动(Webhook/Git 推送) |
下面这张图把五类核心概念的关系串起来——注意 Trigger 是"点火器",Workspace 是"共享传送带":
flowchart LR
TRG[Trigger 事件触发] --> PL[Pipeline 流水线定义]
PL --> TK1[Task 构建]
PL --> TK2[Task 测试]
PL --> TK3[Task 部署]
TK1 --> WS[(Workspace 共享代码/产物)]
TK2 --> WS
TK3 --> WS
TK1 --> S1[Step 容器]
TK2 --> S2[Step 容器]
TK3 --> S3[Step 容器]2、流水线架构

- 多个 Step (Container) 组成一个 Task (Pod) ,多个 Task 组成 Pipeline,Pipelinerun 来运行 Pipeline
- Task 是引用 Taskrun 来执行的,当 Pipelinerun 来运行 Pipeline 时会自动创建 Taskrun 来运行 Task
- Task 是依次执行的,Task1 完成再去执行下面的 Task2,Task3,Task4,这里 Task 是同时执行的,最后再执行 Task5,全程只要有一个容器执行失败,流水线就会从该处终止
- Step 也是依次执行,Step1 完成了才回去执行 Step2,如果 Step1 执行失败,则从 Step1 开始终止后续运行
白话补充:上面这段里"Task 依次执行"和"Task 同时执行"看似矛盾,本质是 Pipeline 里的 Task 默认可以并行,除非你用
runAfter显式声明依赖顺序。所以图里 Task2/3/4 能并排跑,Task5 等它们都过了再跑。Step 则是 Task 内部严格串行的容器。
下面这张运行时映射图,把"定义(资源)“和"运行(实例)“区分开,这是理解 Tekton 最关键的一张图:
flowchart TD
P[Pipeline 定义] -->|被运行| PR[PipelineRun 实例]
PR -->|自动创建| TR1[TaskRun 1]
PR -->|自动创建| TR2[TaskRun 2]
PR -->|自动创建| TR3[TaskRun 3]
TR1 --> POD1[Pod = Task1]
TR2 --> POD2[Pod = Task2]
TR3 --> POD3[Pod = Task3]
POD1 --> C1[Step 容器 A]
POD1 --> C2[Step 容器 B]Tekton 部署
⚠️ 新手必踩的坑:镜像拉不下来。Tekton 的 release YAML 托管在
storage.googleapis.com,国内网络可能超时。遇到ImagePullBackOff时,先kubectl describe pod看事件,必要时把镜像转存到可访问的仓库再改 YAML。
1、安装 Tekton Pipelines
# 步骤 1:安装 Pipeline 核心组件(CRD + Controller + Webhook)
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
# 步骤 2:盯着 Pod 状态,直到全部 Running 才算装好
kubectl get pods --namespace tekton-pipelines --watch
2、安装 Tekton Triggers
# 步骤 1:安装 Triggers 控制器
kubectl apply --filename \
https://storage.googleapis.com/tekton-releases/triggers/latest/release.yaml
# 步骤 2:安装拦截器(interceptors,用于校验 Webhook 来源等)
kubectl apply --filename \
https://storage.googleapis.com/tekton-releases/triggers/latest/interceptors.yaml
3、安装 Tekton Dashboard
资源清单安装 Tekton Dashboard
要在 Kubernetes 集群上安装 Tekton Dashboard:
a)、运行以下命令安装 Tekton Dashboard:
# 只读模式
kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/latest/release.yaml
这将默认以只读模式安装仪表板。
# 读写模式
kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/latest/release-full.yaml
以前的版本可以在以下网址获取previous/$VERSION_NUMBER/*.yaml,例如
kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/previous/v0.32.0/release.yaml
要以读/写模式安装,请使用 release-full.yaml。
v0.31.0 及更早版本对发布清单使用了不同的命名方案:
| 模式 | 当前的 | v0.31.0 及更早版本 |
|---|---|---|
| 只读 | 发布.yaml | tekton-dashboard-release-readonly.yaml |
| 读/写 | 发布-full.yaml | tekton-仪表板-发布.yaml |
b)、使用以下命令监视安装,直到所有组件都显示Running状态:
kubectl get pods --namespace tekton-pipelines --watch
3、使用安装程序脚本安装 Tekton Dashboard
a)、以读/写模式安装最新版本
curl -sL https://raw.githubusercontent.com/tektoncd/dashboard/main/scripts/release-installer | \
bash -s -- install latest --read-write
b)、安装时可以访问命名空间的子集,而不是完整的集群访问权限:
curl -sL https://raw.githubusercontent.com/tektoncd/dashboard/main/scripts/release-installer | \
bash -s -- install latest --read-write --tenant-namespaces tenant-namespace1,tenant-namespace2
这会将--namespacesarg 添加到仪表板部署中,并在每个指定的命名空间中创建 RoleBindings,并将适当的角色授予仪表板服务帐户。
c)、安装并支持从外部源加载日志:
curl -sL https://raw.githubusercontent.com/tektoncd/dashboard/main/scripts/release-installer | \
bash -s -- install latest --read-write --external-logs <logs-provider-url>
访问 Tekton Dashboard
可以使用以下命令通过端口转发来访问 Tekton Dashboard:
# 只绑定了回环网卡,只能在127.0.0.1:9097访问
kubectl port-forward -n tekton-pipelines service/tekton-dashboard 9097:9097
# 显式指定绑定到所有接口(0.0.0.0)
kubectl port-forward -n tekton-pipelines --address 0.0.0.0 service/tekton-dashboard 9097:9097
⚠️ 新手必踩的坑:别把 Dashboard 绑到 0.0.0.0 就直接暴露公网。9097 没有鉴权,绑全网卡等于把你的 CI/CD 控制台敞开给全网。生产环境务必走 Ingress + 认证,或只用本机 port-forward。
然后在浏览器中打开 http://localhost:9097 即可访问 Tekton Dashboard。
4、安装 Tekton cli
下载地址:https://github.com/tektoncd/cli/releases
自测题与动手练习
自测题(合上书能答出来,才算懂):
Tekton 为什么说"一切皆资源”?它的运行底座是什么?
答:Step/Task/Pipeline/Trigger 在 K8s 里全都是 CRD,用 YAML 描述、用 kubectl 操作;运行底座是 Kubernetes(每个 Task 跑成一个 Pod)。
Step / Task / Pipeline 三者是什么关系?一个 Task 对应几个 Pod?
答:多个 Step(容器)组成一个 Task,多个 Task 组成 Pipeline;一个 Task 对应一个 Pod,Pod 里每个 Step 是一个容器。
Task 和 Pipeline 是怎么被真正"运行"起来的?
答:用
TaskRun运行单个 Task,用PipelineRun运行 Pipeline;PipelineRun 会自动为每个 Task 创建对应的 TaskRun。Workspace 解决什么问题?Trigger 解决什么问题?
答:Workspace 跨容器 / 跨 Task 共享代码与产物(PVC/Volume);Trigger 实现事件驱动,让 Git 推送等外部事件自动点火流水线。
流水线失败时如何终止?Step 和 Task 的失败传播有什么不同?
答:某容器失败,所在 Task 失败;Pipeline 从该处终止(后续 Task 不再跑);Task 内 Step 严格串行,Step1 失败则 Step2 起不再执行。
动手练习(建议真做一遍):
- 按本文命令在集群装好 Tekton Pipelines + Dashboard,用
kubectl port-forward打开http://localhost:9097,确认界面能看到。 - 写一个最小
Task(比如用busybox打印hello tekton),然后创建TaskRun真正跑一次,在 Dashboard 或kubectl logs里看输出。 - 配置一个 GitHub Webhook Trigger,push 代码自动触发一次
PipelineRun,验证事件驱动链路打通。
本章小结
- Tekton 是 K8s 原生的 CI/CD 框架,核心哲学是"一切皆资源”——所有概念都是 CRD。
- 五类核心概念:Step(容器)→ Task(Pod)→ Pipeline(编排),Workspace 做跨任务数据共享,Trigger 做事件驱动点火。
- 运行时映射是重点:
Pipeline→PipelineRun→ 自动创建TaskRun→ 每个 Task 一个 Pod → Pod 内 Step 串行容器。 - 部署就是几条
kubectl apply,但注意国内镜像拉取与 Dashboard 公网暴露两个坑。 - 下一篇可深入写真正的
Task/PipelineYAML,并接上Trigger完成"push 即构建部署"的闭环。