Tekton 是云原生应用的 CICD 平台。可以非常方便地搭建起来云原生应用的自动化持续集成,持续部署,包含应用打包,应用的镜像构建,镜像发布,测试,helm chart 发布,部署到测试、生产环境。

使用 Tekton 可以只部署 tekton pipeline, 通过命令行交互。 也可以部署 tekton pipeline + tekton dashbaord, 可以在 dashbaord 上面进行维护管理。

原本安装 tekton pipeline 和 tekton dashboard 到 kubernetes 集群上是非常简单的事情, 两个命令完成:

    kubectl create namespace tekton-pipelineskubectl apply -f  https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.32.3/release.yaml kubectl apply -f  https://github.com/tektoncd/dashboard/releases/download/v0.25.0/tekton-dashboard-release.yamlkubectl --namespace tekton-pipelines port-forward svc/tekton-dashboard 9097:9097

然后就可以本地访问 Dashboard: http://localhost:9097

由于众所周知的国内网络的问题,国内由于访问不到 gcr.io 上面的镜像。整个过程比较折腾,需要通过代理把用到的镜像 pull 下来,然后放到自己的镜像仓库。

不过我把整个过程通过脚本几乎自动化了, 你可以参考下文操作即可快速部署起来。大约10多分钟能够部署完,慢的话可能30分钟,当然前提是你对于 k8s, kubectl 之类的比较熟悉,另外需要有以下3个条件:

  • 一台 mac 或者 linux工作机。
  • 这台工作机上配置好了对于 kubernetes 集群的访问。Tekton 将部署于 kubernetes 之上。
  • 有一个你可以访问的 docker 镜像仓库,比如阿里云上创建的镜像仓库。不建议使用 docker.io 作为镜像仓库,国内的 k8s 集群很可能也访问不到上面的镜像。

整个过程如下:
设置代理,docker pull 镜像到本地 -> docker tag && docker push 到国内的镜像仓库  -> 更新 yaml 文件中的配置 -> deploy tekton/tekton dashboard 到 kubernetes.

以下是详细的 4 个步骤的安装过程。

1.下载用于 kubernetes 环境部署的 yaml 文件

以下步骤执行前,开启代理,确保可以正常访问 googleapis, github, gcr.io。

Tekton controller, 选择跟 k8s 相配套的版本:
https://github.com/tektoncd/pipeline#required-kubernetes-version

说明:版本不配套部署的时候会有“Version check failed, kubernetes version xxx is not compatible”的错误日志。

wget  https://storage.googleapis.com/tekton-releases/pipeline/previous/v0.32.3/release.yaml -O tekton-pipeline-release.yaml

Tekton Dashboard,选择跟 k8s 相配套的版本:
https://github.com/tektoncd/dashboard#which-version-should-i-use

wget https://github.com/tektoncd/dashboard/releases/download/v0.25.0/tekton-dashboard-release.yaml -O tekton-dashboard-release.yaml 

2.拉取 gcr.io 镜像,推送到自己的镜像

在 mac/linux 的工作机器上,执行如下代码(如果你用的 Windows,可以通过安装 gnu 的命令行工具来获取 grep, aws 的工具:

grep -Eo "gcr.io([^\" ]*)" tekton-pipeline-release.yaml | awk '{print "docker pull "$0}' > pull.shgrep -Eo "gcr.io([^\" ]*)" tekton-pipeline-release.yaml | awk -F"@" '{origin = $0;gsub("gcr.io/","",$1);print "docker tag " origin " my-registry.cn-beijing.cr.aliyuncs.com/gcrio/"$1 ";\ndocker push my-registry.cn-beijing.cr.aliyuncs.com/gcrio/" $1}' > tag.push.shsource pull.sh
source push.sh

然后更改 tekton-pipeline-release 中的地址为自己的镜像仓库(Linux):

sed -i "s/gcr.io/my-registry.cn-beijing.cr.aliyuncs.com\/gcrio/g" tekton-pipeline-release.yaml

mac 上这样运行(如果 mac 上面安装了 gnu sed,可以直接执行上面的 sed 命令):

sed -i "" "s/gcr.io/my-registry.cn-beijing.cr.aliyuncs.com\/gcrio/g" tekton-pipeline-release.yaml

然后编辑 tekton-pipeline-release.yaml 里面的内容, 去掉镜像仓库中的 SHA256 ,通过 版本号或者 latest 来引用。

3.部署 Tekton (Tekton pipeline)

kubectl create namespace tekton-pipelines
kubectl apply -f tekton-pipeline-release.yaml

4.部署 Tekton Dashboard

类似于前面部署 Tekton Pipeline 的过程, 由于 dashboard 用到的镜像目前只有1个。 直接生成 docker pull, docker tag, docker push 命令, 输出到 console, 然后手工执行这些命令即可:

grep -Eo "gcr.io([^\" ]*)" tekton-dashboard-release.yaml | awk '{print "docker pull "$0}'grep -Eo "gcr.io([^\" ]*)" tekton-dashboard-release.yaml | awk -F"@" '{origin = $0;gsub("gcr.io/","",$1);print "docker tag " origin " my-registry.cn-beijing.cr.aliyuncs.com/gcrio/"$1 ";\ndocker push my-registry.cn-beijing.cr.aliyuncs.com/gcrio/" $1}' 

拷贝前面两个命令的输出, 执行一下命令(docker pull, docker push)

然后替换文件中的镜像地址(Linux):

sed -i "s/gcr.io/my-registry.cn-beijing.cr.aliyuncs.com\/gcrio/g" tekton-dashboard-release.yaml

mac 上这样运行:

sed -i "" "s/gcr.io/my-registry.cn-beijing.cr.aliyuncs.com\/gcrio/g" tekton-dashboard-release.yaml

然后部署 tekton dashboard:

kubectl apply -f tekton-dashboard-release.yaml

检查 pod 的状态:

kubectl get pods --namespace tekton-pipelines

可以看到如下的输出

pod 正常 running 之后, 转发集群端口到本地, 即可通过本地访问:

kubectl --namespace tekton-pipelines port-forward svc/tekton-dashboard 9097:9097

然后就可以本地访问 Dashboard:  http://localhost:9097

Tekton之一:如何部署起来 Tekton相关推荐

  1. Tekton之三:快速理解 Tekton 是如何工作的

    Tekton 是云原生环境下面的非常强大的 CICD 产品. 如果你按照 Tekton 的官方文档来学习,使用 Tekton, 可能会跟遇到很多障碍. Tekton 的技术架构非常优秀,同时Tekto ...

  2. Tekton系列之实践篇-使用Tekton Trigger让Tekton使用更简单

    微信公众号:运维开发故事,作者:乔克 在<Tekton实践篇-如何用Jenkins来管理Tekton>我们介绍了如何使用Jenkins来管理Tekton,这种方式是运维主动式管理,也就是需 ...

  3. 开源云原生CI/CD框架Tekton国内部署方式

    Tekton 是一款功能非常强大而灵活的 CI/CD 开源的云原生框架.致力于提供全功能.标准化的云原生 CI/CD 解决方案.[本文主要是通过流水线自动化的将tekton镜像同步到腾讯云仓库,并部署 ...

  4. 云原生CI/CD框架Tekton国内部署方式

    Tekton 是一款功能非常强大而灵活的 CI/CD 开源的云原生框架.致力于提供全功能.标准化的云原生 CI/CD 解决方案.[本文主要是通过流水线自动化的将tekton镜像同步到腾讯云仓库,并部署 ...

  5. 开源 CI/CD 构建框架 TekTon 的深入剖析

    简介 Tekton 是一个功能强大且灵活的Kubernetes 原生开源框架,用于创建持续集成和交付(CI/CD)系统. 关于Tekton, 网上可以搜到很多很多介绍文档,本文主要阐述我对Tekton ...

  6. Tekton笔记(三)之catalog kaniko

    kaniko是一个容器镜像构建工具 本文主要讲述从github获取Dockerfile,构建镜像,最终上传仓库的过程. 本文使用的task版本为: https://github.com/tektonc ...

  7. kubernetes原生ci/cd工具tekton版本升级至v0.18.1

    前言 最近没啥好写的,一直都在弄hpa的问题,也就是解决hpa没生效的问题,以及最优minReplica最小基数的问题.也已经划水了两篇博客了,所以今天就来简单记录一下之前做过的一个小任务,也就是将项 ...

  8. openshift Tekton pipeline 实践

    文章目录 1. 介绍 2. 部署一个简单的pipeline 2.1 使用TaskRun运行"hello"样例任务 3 部署 Two-Tier Golang Application ...

  9. k8s tekton 实现CI流程,从git到docker registry

    小白防忘. 在没学k8s之前一直使用的是jikens和docker watchtower实现CICD流程,在学习了k8s最后就决定使用tekton实现CI操作,tekton pipelines是一个k ...

最新文章

  1. Javascript 检查一组 radio 中的哪一个被勾选
  2. hive中array嵌套map以及行转列的使用
  3. 移动互联网漫谈(4)-移动通信网络
  4. mongodb之 复制集维护小结
  5. linux du命令使用:目录大小排序
  6. 一口气说出 4种 “附近的人” 实现方式,面试官笑了,嘿嘿
  7. 【4】SCN-Feign远程调用
  8. 【刷算法】按照之字形打印二叉树
  9. Matplotlib 中文用户指南 3.9 路径效果指南
  10. Android native进程间通信实例-binder篇之——解决实际问题inputreader内建类清楚缓存...
  11. Java基础学习总结(118)——单元测试的必要性和重要性
  12. 笔记 编写可读性代码的艺术
  13. 21天Jmeter打卡Day17 后置处理器_JSON_正则表达式_边界提取器_完成删除场景模拟测试
  14. ALGO-147_蓝桥杯_算法训练_4-3水仙花数
  15. ARCGIS 二次开发可以参考的资源(长期更新)
  16. 5G 时代,一加的机会在哪里?
  17. oeasy教您玩转linux-010110内容回顾
  18. 批量抓取羊毛网站信息,定时自动发送到邮箱进行阅览
  19. 域用户不准更改计算机名,请教高手,域环境下如何不退域修改计算机名?
  20. 数据治理的成功要素2:数据架构设计

热门文章

  1. 计算机文件丢失系统无法启动,文件损坏或丢失windows无法启动_windows无法启动文件损坏解决方法...
  2. 开始读《C专家编程》
  3. 将自定义的类的对像保存在本地
  4. Linux就业形势报告
  5. PHP导出Excel时数据量过大的问题
  6. ORACLE的统计分析
  7. Oracle统计分析
  8. 4.Matplotlib多子图,文字和注释以及自定义坐标轴
  9. 如果不能时刻保持学习的心态,那么你将被 IT 甩回开普乐星去
  10. 一个IT售前咨询顾问是如何工作和生活的?