前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Tekton入门介绍

Tekton入门介绍

作者头像
kinnylee
发布2022-03-07 13:36:38
2.9K0
发布2022-03-07 13:36:38
举报
文章被收录于专栏:kinnylee钻研技术kinnylee钻研技术

概述

Tekton 是一个强大、灵活的构建 CI/CD 流水线系统的开源框架,允许开发者构建、测试和发布应用。Tekton 是云原生的,通过定义 CRD ,让用户快速灵活定义流水线。

使用 tekton 的好处

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

Tekton 中的组件

  • Tekton Pipelines:tekton 的基础,定义了一组 CRD,用于定义 pipeline
  • Tekton Triggers:允许基于 event 实例化 pipeline。比如:git的pr请求
  • Tekton Cli:提供命令行工具和 tekton 交互
  • Tekton Dashboard:图形化界面展示 pipeline 信息
  • Tekton Catalog:高质量的、社区贡献的 pipeline 仓库
  • Tekton Hub:图形化界面访问 tekton catalog
  • Tekton Operator:在k8s上安装、移除、更新tekton组件的项目

如无特殊说明,后文提到的Tekton专指 Tekton Pipeline 组件

基本概念

Tekton 最重要的五个概念:Task、TaskRun、Pipeline、PipelineRun、PipelineResources

  • Task:Tekton中的最小单元,代表一个任务模板,包括多个步骤。每一个操作定义为Task中的一个step
  • Pipeline:多个 Task 组成的有向无环图,定义了流水线的模板
  • PipelineRun:Pipeline 真正执行时需要定义一个PipelineRun,作为流水线的实例,生成一条流水线记录
  • TaskRun:Task 真正执行的实例,记录任务状态。一个TaskRun 会创建一个对应的 Pod,每个 step 对应 pod 中的一个 container
  • PipelineResource:流水线执行过程中需要的资源信息
Tekton重要概念
Tekton重要概念

安装

安装过程中会用到 gcr.io 上的镜像,需要配置docker代理。以centos7为例 mkdir /etc/systemd/system/docker.service.d cat <<EOF > /etc/systemd/system/docker.service.d/http-proxy.conf [Service] [Service] Environment="HTTP_PROXY=http://192.168.0.119:3128" Environment="HTTPS_PROXY=http://192.168.0.119:3128" Environment="NO_PROXY=localhost,127.0.0.1,localaddress,.localdomain.com" EOF systemctl daemon-reload && systemctl restart docker 前置条件:

  • k8s 集群版本 >= 1.15
  • 启动集群 RBAC
  • 授予当前用户 cluster-admin 角色

安装控制器

代码语言:javascript
复制
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml

配置存储

代码语言:javascript
复制
kubectl create configmap config-artifact-pvc \
                         --from-literal=size=10Gi \
                         --from-literal=storageClassName=rook-ceph-block \
                         -o yaml -n tekton-pipelines \
                         --dry-run=client | kubectl replace -f -

安装dashboard

代码语言:javascript
复制
kubectl apply --filename https://github.com/tektoncd/dashboard/releases/latest/download/tekton-dashboard-release.yaml

配置ingress

代码语言:javascript
复制
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tekton-dashboard
  namespace: tekton-pipelines
spec:
  rules:
  - host: tekton.demo.com
    http:
      paths:
      - backend:
          serviceName:     tekton-dashboard
          servicePort: 9097
代码语言:javascript
复制
kubectl apply -f ingress.yaml -n tekton-pipelines

校验

代码语言:javascript
复制
kubectl get pods --namespace tekton-pipelines

Dashboard 页面

HelloWorld

该示例执行一个命令行输出 Hello World

定义Task

代码语言:javascript
复制
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: hello
spec:
  steps:
    - name: hello
      image: ubuntu
      command:
        - echo
      args:
        - "Hello World!"

执行task

代码语言:javascript
复制
# 执行
➜  helloworld sudo kubectl apply -f task.yaml 
Password:
task.tekton.dev/hello created
# 查看
➜  helloworld sudo kubectl get task
NAME                       AGE
hello                      65s

定义TaskRun

为了在tekton中运行前面的Task,需要定义一个TaskRun

代码语言:javascript
复制
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  generateName: hello-run-
spec:
  taskRef:
    name: hello

TaskRun的metadata中定义了generateName,意思是每次创建时自动生成以generateName为前缀的名称。

这时候执行必须使用 kubectl create,使用 kubectl apply 会报错

代码语言:javascript
复制
# 使用 kubectl apply 会报错
➜  sudo kubectl apply -f taskrun.yaml
error: from hello-run-: cannot use generate name with apply
# 使用 kubectl create 执行
➜  sudo kubectl create -f taskrun.yaml
taskrun.tekton.dev/hello-run-8lkcl created
# 查看 taskrun
➜  sudo kubectl get taskrun
NAME                               SUCCEEDED   REASON                    STARTTIME   COMPLETIONTIME
hello-run-8lkcl                    True        Succeeded                 2m25s       2m11s

查看执行结果

查看任务对应的 Pod

TaskRun 自动拉起一个 Pod,且成功执行完毕,状态是 Completed

代码语言:javascript
复制
NAME                        READY   STATUS      RESTARTS   AGE
ast-slave-test              1/1     Running     0          2d5h
hello-run-8lkcl-pod-pdrv9   0/1     Completed   0          5m38s

查看pod的日志文件

代码语言:javascript
复制
➜ sudo kubectl logs hello-run-8lkcl-pod-pdrv9
Hello World!

查看pod的编排文件:pod中定义的 container 中指定了执行的命令 echo hello World

代码语言:javascript
复制
# kubectl get pod hello-run-8lkcl-pod-pdrv9 -oyaml
apiVersion: v1
kind: Pod
metadata:
  ...
  name: hello-run-8lkcl-pod-pdrv9
  namespace: default
spec:
  containers:
  - args:
    - -wait_file
    - /tekton/downward/ready
    - -wait_file_content
    - -post_file
    - /tekton/tools/0
    - -termination_path
    - /tekton/termination
    - -entrypoint
    - echo
    - --
    - Hello World!
    command:
    - /tekton/tools/entrypoint
    env:
    - name: HOME
      value: /tekton/home
    image: ubuntu
    imagePullPolicy: Always
    name: step-hello
    ...
  initContainers:
  - command:
    - /ko-app/entrypoint
    - cp
    - /ko-app/entrypoint
    - /tekton/tools/entrypoint
    image: gcr.io/tekton-releases/github.com/tektoncd/pipeline/cmd/entrypoint:v0.23.0@sha256:5489d6a444ff63b14d94dead8cc10b221ec147cd817b18254dbf28f3d70f4fa5
    imagePullPolicy: IfNotPresent
    name: place-tools
  ...
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021/04/19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
    • 使用 tekton 的好处
      • Tekton 中的组件
        • 基本概念
        • 安装
          • 安装控制器
            • 配置存储
              • 安装dashboard
                • 配置ingress
                  • 校验
                    • Dashboard 页面
                    • HelloWorld
                      • 定义Task
                        • 定义TaskRun
                          • 查看执行结果
                            • 查看任务对应的 Pod
                            相关产品与服务
                            容器镜像服务
                            容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档