18|自托管构建:如何使用 Tekton 构建镜像?
- 深入了解
- 翻译
- 解释
- 总结
Tekton 是一款基于 Kubernetes 的开源 CI/CD 产品,适用于构建次数频繁的中大型团队。本文详细介绍了使用 Tekton 构建镜像的自托管方案。首先介绍了准备 Kubernetes 集群的步骤,包括在云厂商创建集群、安装 Tekton 相关组件和 Ingress-Nginx。随后深入讲解了 Tekton 的基本概念,包括 EventListener、TriggerTemplate、PipelineRun、Pipeline、Task 和 Step,并通过示例演示了如何配置 Tekton 的流水线,并结合 GitHub配置 Webhook 触发器,实现提交代码后触发 Tekton 流水线并构建镜像,最后推送到镜像仓库的过程。读者通过学习本文可以掌握 Tekton 的流水线和触发器的用法,具备独立配置的能力。整体内容详实,适合需要了解 Tekton 构建镜像自托管方案的技术人员阅读。 Tekton 的概念繁多,并且比较抽象,完全掌握这些概念有一定难度。为了方便理解和记忆,你可以把 Tekton 的概念和 GitHub Action 做类比,例如,Task 有点像 GitHub Action 的插件,git-clone Task 实际上和我们在 GitHub Action 引用的 actions/checkout@v3 插件功能是类似的。 其次,Tekton Pipeline 和 GitHub Action Workflow 也比较类似,Tekton Pipeline 通过引用和组合不同的 Task 形成了一个流水线。而 GitHub Action Workflow 则是通过引用并组合插件来完成一个工作流。 Tekton 虽然配置相对复杂,但它是一次性配置,如果你已有 Kubernetes 集群,那么使用 Tekton 来构建镜像是一个不错的选择,这种方案使得镜像构建成本几乎为零,并且扩展性强。 在前面几节课,我们都是使用 Docker Hub 作为镜像存储仓库的。但实际上,它同样也需要收费,在镜像存储方面,我们同样也可以使用自托管方案来进一步降低成本。
《云原生架构与 GitOps 实战》,新⼈⾸单¥59
全部留言(14)
- 最新
- 精选
- 李多原文: kubectl apply -f https://storage.googleapis.com/tekton-releases/dashboard/latest/tekton-dashboard-release.yaml 貌似已经 404 无法访问了。 新的 dashboard yaml 在这个路径下: kubectl apply --filename https://storage.googleapis.com/tekton-releases/dashboard/latest/release.yaml 参照:https://github.com/tektoncd/dashboard
作者回复: 感谢分享,原文已修改。
2023-01-26归属地:山东34 - Waylon容器的entrypoint启动进程 监控到/tekton/downward/ready文件的创建, 并等待文件内容的写入 执行git-init子进程, 从 git 仓库克隆源码 创建/tekton/tools/0文件 所有的 Step 都是被 /tekton/tools/entrypoints 封装起来执行的。 -wait_file 指定一个文件,通过监听文件句柄,在探测到文件存在时执行被封装的 Step 任务。 -post_file 指定一个文件,在Step任务完成后创建这个文件。 通过文件序列 /tekton/tools/${index} 来对 Step 进行排序。
作者回复: 👍🏻课代表!
2023-01-20归属地:北京2 - ghostwritten跟着步骤已全部实现,学到了不少东西。 第一页: 1. 腾讯云创建k8级群:申请标准集群、创建集群网络、设置配额、外网访问、本地kubectl访问集群。 2. 安装 Tekton Operator kubectl apply -f https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml 等待:kubectl wait --for=condition=Ready pods --all -n tekton-pipelines --timeout=300s 3. 安装 Tekton Trigger 和 Tekton Interceptors 组件 kubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/latest/release.yaml kubectl apply -f https://storage.googleapis.com/tekton-releases/triggers/latest/interceptors.yaml kubectl wait --for=condition=Ready pods --all -n tekton-pipelines --timeout=300s 4. 安装 Ingress-Nginx kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml kubectl wait --for=condition=AVAILABLE deployment/ingress-nginx-controller --all -n ingress-nginx 5. 暴露 Tekton Dashboard kubectl apply -f tekton-dashboard.yaml 获取外网 IP :kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}' 配置43.135.82.249 tekton.k8s.local 通过域名 http://tekton.k8s.local 来访问Tekton Dashboard 6. 创建 Task:检出代码 kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/lyzhang1999/gitops/main/ci/18/tekton/task/git-clone.yaml 7. 创建 Task:构建和推送镜像 kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/lyzhang1999/gitops/main/ci/18/tekton/task/docker-build.yaml 8. 创建 Pipeline kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/lyzhang1999/gitops/main/ci/18/tekton/pipeline/pipeline.yaml 9. 创建 EventListener kubectl apply -f https://ghproxy.com/https://raw.githubusercontent.com/lyzhang1999/gitops/main/ci/18/tekton/trigger/github-event-listener.yaml
作者回复: 赞,很高兴看到你获得了收获!加油~
2023-01-30归属地:北京1 - 邵涵如果按照本文的方式对多个github仓库使用Tekton配置自动构建镜像能力,是需要针对每个github仓库都创建独立的webhook url(并在ingress中为其做相应配置)并创建独立的EventListener、TriggerTemplate、Pipeline等对象吗?因为看起来这些对象之间是环环相扣的并在yaml定义中有针对比如镜像名称的一些信息的hardcode的,这样看起来就无法一套对象对多个git仓库通用了
作者回复: 是的,只有 Task 可以复用。如果有很多仓库需要构建镜像的话,也可以考虑用 GitHub Action。不过不同的仓库实际上也需要重新写 Action YAML,只不过它可以内置很多变量可以直接使用,这样让 YAML 的内容看起来都差不多。
2023-03-01归属地:北京 - 老虎请问这个secret里面cat ~/.ssh/known_hosts | grep "github" | base64 找不到github的known_host值,应该怎么处理,谢谢
作者回复: 先在 github 配置一下 ssh key:https://docs.github.com/en/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account
2023-02-26归属地:北京 - Geek_5dacb9cat ~/.ssh/known_hosts | grep "github" | base64 和cat ~/.ssh/config | base64没有找到是哪里没有配置吗?
作者回复: 你的本机需要先从 GitHub 克隆一个仓库。
2023-02-21归属地:北京 - Geek_03197dTekton & skaffold 能否对比一下?哪个业界用的更广泛?( 我看skaffold的github 上的star更多) ,谢谢
作者回复: Skaffold 在本地开发的时候比较常用,Tekton 通用型会更好一些。
2023-02-12归属地:江苏 - gyl1989113Failed to pull image "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller:v0.44.0@sha256:51e4c16fc4d0b18912106ff7fe37cc24c0667de6af468cdd1a9e9dc174039de1": rpc error: code = Unknown desc = failed to pull and unpack image "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller@sha256:51e4c16fc4d0b18912106ff7fe37cc24c0667de6af468cdd1a9e9dc174039de1": failed to resolve reference "gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/controller@sha256:51e4c16fc4d0b18912106ff7fe37cc24c0667de6af468cdd1a9e9dc174039de1": failed to do request: Head "https://gcr.io/v2/tekton-releases/github.com/tektoncd/pipeline/cmd/controller/manifests/sha256:51e4c16fc4d0b18912106ff7fe37cc24c0667de6af468cdd1a9e9dc174039de1": dial tcp 108.177.125.82:443: i/o timeout. 咋办呢
作者回复: gcr.io 的网络问题,建议开通一台云厂商的香港集群来测试,或者解决无法访问的问题。
2023-02-08归属地:四川 - Amosヾ创建 Task和创建 Pipeline两步中各有两个是spec,而不是spce吧?
作者回复: 感谢指正~
2023-01-21归属地:江苏 - Amosヾtekton是否支持图形化拖拽的方式编辑task、piplinerun呢?
作者回复: 不支持哦,只能通过 YAML 来配置。
2023-01-21归属地:江苏