云原生架构与 GitOps 实战
王炜
前腾讯云 CODING 架构师
6217 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
云原生架构与 GitOps 实战
15
15
1.0x
00:00/00:00
登录|注册

18|自托管构建:如何使用 Tekton 构建镜像?

你好,我是王炜。
前两节课,我们分别介绍了如何使用 GitHub Action Workflow 和 GitLab CI 来自动构建镜像,它们配置起来相对简单,作为平台自带的功能,也不需要花费额外的维护成本。并且,它们都和 Git 仓库深度整合,这就让触发流水线变得非常简单了。
对于构建次数较少的团队来说,在免费额度范围内使用它们是一个非常好的选择。但是对于构建次数非常频繁的中大型团队来说,综合考虑费用、可控和定制化等各方面因素,他们可能会考虑使用其他自托管的方案。
这节课,我们就来介绍其中一种自动构建镜像的自托管方案:使用 Tekton 来自动构建镜像。Tekton 是一款基于 Kubernetes 的 CI/CD 开源产品,如果你已经有一个 Kubernetes 集群,那么利用 Tekton 直接在 Kubernetes 上构建镜像是一个不错的选择。
我会首先带你了解 Tekton 的基本概念,然后我们仍然以示例应用为例,从零开始为示例应用配置构建镜像的流水线,并结合 GitHub 为 Tekton 配置 Webhook 触发器,实现提交代码之后触发 Tekton 流水线并构建镜像,最后推送到镜像仓库的过程。
在学完这节课之后,你将基本掌握 Tekton 的流水线以及触发器的用法,并具备独立配置它们的能力。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

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归属地:山东
    3
    4
  • 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_5dacb9
    cat ~/.ssh/known_hosts | grep "github" | base64 和cat ~/.ssh/config | base64没有找到是哪里没有配置吗?

    作者回复: 你的本机需要先从 GitHub 克隆一个仓库。

    2023-02-21归属地:北京
  • Geek_03197d
    Tekton & skaffold 能否对比一下?哪个业界用的更广泛?( 我看skaffold的github 上的star更多) ,谢谢

    作者回复: Skaffold 在本地开发的时候比较常用,Tekton 通用型会更好一些。

    2023-02-12归属地:江苏
  • gyl1989113
    Failed 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归属地:江苏
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部