openshift Tekton pipeline 实践

简介: openshift Tekton pipeline 实践

文章目录

1. 介绍

2. 部署一个简单的pipeline

2.1 使用TaskRun运行“hello”样例任务

3 部署 Two-Tier Golang Application

3.1 创建任务来定义资源定义

3.2 Create Task to Update Name of Image Deployed

3.3 创建PVC来存储工作区数据

3.4 为应用程序创建 Build-and-Deploy Pipeline

3.5 Run Pipeline for Back-end API of Voting Application

3.6 Run Pipeline for Front-End UI of Voting Application

3.7 Access Application

4. 问题

Red Hat OpenShift 4.8 环境集群搭建

openshift 如何输出json日志

openshfit Vertical Pod Autoscaler 实践

openshift Certified Helm Charts 实践

openshift 创建一个Serverless应用程序

openshift gitops 实践

openshift Tekton pipeline 实践

1. 介绍

Red Hat®OpenShift®pipeline是一个基于Kubernetes资源的云本地持续集成和持续交付(CI/CD)解决方案。

它使用Tekton构建块,通过抽象底层实现细节,实现跨多个平台的自动化部署。

Tekton引入了许多标准的自定义资源定义(crd),用于定义在Kubernetes发行版之间可移植的CI/CD管道。


OpenShift管道操作符已经为您部署,所以您可以立即启动。

在本实验中,您将创建一个新项目,并部署一个具有“hello world”任务的简单管道,然后部署构建和部署一个两层Golang应用程序所需的各种资源。

目标:


部署一个简单的pipeline

部署一个构建pipeline应用程序

2. 部署一个简单的pipeline

在本练习中,您将创建一个名为trivial-pipeline的新项目。


在OpenShift容器平台web控制台中,选择Administrator透视图。

使用Project:下拉列表创建一个名为trivial-pipeline的新项目。

导入这个YAML内容来创建一个新任务:

a. 在导航菜单上,选择Pipelines → Tasks。

b. 在“Create…”下拉列表中,选择“Task”。

c. 将YAML的默认定义替换为以下内容:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: hello
  namespace: trivial-pipeline
spec:
  steps:
    - name: say-hello
      image: registry.access.redhat.com/ubi8/ubi
      command:
        - /bin/bash
      args: ['-c', 'echo Hello World']
  1. Click Create.

2.1 使用TaskRun运行“hello”样例任务

要运行Task,需要创建TaskRun对象。您可以使用命令行tkn实用程序,或者导入以下YAML内容。

  1. 在导航菜单上,选择Pipelines → Tasks
  2. 从Create下拉列表中,选择TaskRun
  3. 将YAML的默认定义替换为以下内容:
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  namespace: trivial-pipeline
  generateName: hello-run-
  labels:
    app.kubernetes.io/managed-by: tekton-pipelines
    tekton.dev/task: hello
spec:
  resources: {}
  serviceAccountName: pipeline
  taskRef:
    kind: Task
    name: hello
  1. 单击Logs选项卡查看TaskRun的输出。
    期望它显示“Hello World”

3 部署 Two-Tier Golang Application

3.1 创建任务来定义资源定义

接下来,您将构建和部署一个应用程序,其中包含一些Tasks, ClusterTasks, and custom Tasks。

首先,为这项工作创建一个名称空间/项目。

从“项目:”下拉列表中选择“Create Project”,并在“ Name”字段中输入pipelinez -vote。

在导航菜单上,选择Pipelines → Tasks。

在“create”下拉列表中,选择“Tasks”。

将YAML的默认定义替换为以下内容:

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: apply-manifests
  namespace: pipelines-vote
spec:
  workspaces:
 - name: source #1
  params:  #2
    - name: manifest_dir
      description: The directory in source that contains yaml manifests
      type: string
      default: "k8s"
  steps: #3
    - name: apply
      image: quay.io/openshift/origin-cli:latest
      workingDir: /workspace/source
      command: ["/bin/bash", "-c"]
      args:
        - |-
          echo Applying manifests in $(inputs.params.manifest_dir) directory  #4
          oc apply -f $(inputs.params.manifest_dir)
          echo -----------------------------------

1.工作区指的是持久化卷声明(Persistent Volume Claim, PVC),其中存储了参数和任务输出;这个叫做source。

2.此任务接受的单个参数。在本例中,它用于指示可以在其中找到部署应用程序的YAML清单的目录。

3.本任务中的单个步骤。它实际上通过在参数中定义的manifest_dir中的所有文件上运行oc apply -f来创建OpenShift对象。

4.注意在语法$(input .params.)的步骤中参数是如何被引用的。

Click Create.


参数被发送到使用它们的任务之前在哪里定义的?在任务运行。您可以像上面在trivial-pipeline中所做的那样创建单独的任务运行,或者让PipelineRun提供这些值,如您在下一节中看到的那样。

3.2 Create Task to Update Name of Image Deployed

由于管道在每次新应用程序构建时都要构建一个新的容器映像,因此新容器映像将获得一个不同的标记或哈希ref。

您需要在Pipeline中添加一个Task,以确保在重新部署豆荚时使用了适当的容器映像。

  1. 再次单击Create,然后选择Task。
  2. 将YAML的默认定义替换为以下内容:
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: update-deployment
  namespace: pipelines-vote
spec:
  params:
  - description: The name of the deployment patch the image   #1
    name: deployment
    type: string
  - description: Location of image to be patched with   #1
    name: IMAGE
    type: string
  steps:
  - args:
    - |-
      oc patch deployment $(inputs.params.deployment) --patch='{"spec":{"template":{"spec":{
        "containers":[{
          "name": "$(inputs.params.deployment)",
          "image":"$(inputs.params.IMAGE)"
        }]
      }}}}'
    command:
    - /bin/bash
    - -c
    image: quay.io/openshift/origin-cli:latest   #2
    name: patch
    resources: {}

1.这些是Task期望从TaskRun接收的参数。.

2.此任务使用专用的容器 OpenShift命令行工具, oc.

3.3 创建PVC来存储工作区数据

询问参数和合成输出由泰克顿自动存储在专用pvc。你可以通过PipelineRun让任意数量的工作空间与你的任务相关联。此外,工作区可以跨越一个或多个任务,以提供一个共享区域,任务可以在其中访问彼此的数据。这些是普通的pvc。


从web控制台顶部的工具栏中,单击ocp_web_console_add_icon (Add)来创建一个PVC来支持工作区

或者,您可以使用此方法应用定义并创建PVC资源:Storage→PersistentVolumeClaims→create。


Use the following YAML definition:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: source-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Mi

Click Create.

3.4 为应用程序创建 Build-and-Deploy Pipeline

这个管道有三个主要部分和四个任务。各节内容如下:


Workspaces

在这里定义,为下面使用它们的任务提供上下文。

Params

管道期望从PipelineRun得到的输入,这些输入对任务是可用的。

Tasks

这个任务数组定义了哪些任务被执行,对它们可用的工作区,以及传递给它们的参数。

在Pipeline定义中出现的任务顺序不适用。有些步骤具有runAfter值,它指示当前步骤应该在其之后运行的特定任务。这是必需的,因为Tekton默认为并行运行所有步骤。请记住,这是区别于其他持续集成系统的一个重要方面。


在导航菜单上,点击管道,然后 Create → Pipeline。

单击🔘YAML view单选按钮,查看将管道定义粘贴到其中的文本区域。

将默认定义替换为以下YAML内容:

apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: build-and-deploy
spec:
  workspaces:   #1
  - name: shared-workspace
  params:    #2
  - name: deployment-name
    type: string
    description: name of the deployment to be patched
  - name: git-url
    type: string
    description: url of the git repo for the code of deployment
  - name: git-revision
    type: string
    description: revision to be used from repo of the code for deployment
    default: "master"
  - name: IMAGE
    type: string
    description: image to be build from the code
  tasks:    #3
  - name: fetch-repository
    taskRef:
      name: git-clone
      kind: ClusterTask
    workspaces:
    - name: output   #4
      workspace: shared-workspace
    params:
    - name: url
      value: $(params.git-url)
    - name: subdirectory
      value: ""
    - name: deleteExisting
      value: "true"
    - name: revision
      value: $(params.git-revision)
  - name: build-image
    taskRef:
      name: buildah
      kind: ClusterTask
    params:
    - name: TLSVERIFY
      value: "false"
    - name: IMAGE
      value: $(params.IMAGE)
    workspaces:
    - name: source 
      workspace: shared-workspace
    runAfter:   #5
    - fetch-repository
  - name: apply-manifests
    taskRef:
      name: apply-manifests
    workspaces:
    - name: source
      workspace: shared-workspace
    runAfter:
    - build-image
  - name: update-deployment
    taskRef:
      name: update-deployment
    workspaces:
    - name: source
      workspace: shared-workspace
    params:
    - name: deployment
      value: $(params.deployment-name)
    - name: IMAGE
      value: $(params.IMAGE)
    runAfter:
    - apply-manifests

这定义了与下面的单个任务共享的PVC。

Pipeline期望从PipelineRun获得的各种参数。

任务的数组。它们不是按照在此列表中出现的顺序执行的。

工作区的详细信息:这两个设置指出了工作区文件系统中不同的子目录(output and source)。Tekton自动组织这些数据,如果需要,它们可以访问彼此的数据。如前所述,这是通过$(input.)完成的。

一个runAfter:节出现在这个和所有后续的task中,定义了task的一个有序的执行列表

Click Create.

3.5 Run Pipeline for Back-end API of Voting Application

在本节中,您将为投票应用程序的后端部分执行管道。

  1. 在导航菜单上,点击pipeline,然后点击Create→PipelineRun
  2. 将YAML的默认定义替换为以下内容:
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  labels:
    tekton.dev/pipeline: build-and-deploy
  generatename: build-and-deploy-run-
  namespace: pipelines-vote
spec:
  params:   #1
  - name: IMAGE
    value: image-registry.openshift-image-registry.svc:5000/pipelines-vote/vote-api
  - name: deployment-name
    value: pipelines-vote-api
  - name: git-url
    value: https://github.com/openshift/pipelines-vote-api.git
  pipelineRef:   #2
    name: build-and-deploy
  serviceAccountName: pipeline
  timeout: 1h0m0s
  workspaces:   #3
  - name: shared-workspace
    persistentVolumeClaim:
      claimName: source-pvc

这些是由PipelineRun创建的TaskRuns传递给task的实际字符串值。

这是对您在前一节中创建的Pipeline的引用。

这就是工作区的定义。这就是PVC和工作区名称绑定在一起的地方。

点击Create并查看管道的运行!

这将部署应用程序的一部分。接下来创建应用程序的前端部分。

3.6 Run Pipeline for Front-End UI of Voting Application

在本节中,将全面部署应用程序。

如上所述,使用下面的PipelineRun定义来执行构建和部署应用程序:

apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  generateName: build-and-deploy-run-
  labels:
    tekton.dev/pipeline: build-and-deploy
  namespace: pipelines-vote
spec:
  params:
  - name: IMAGE
    value: image-registry.openshift-image-registry.svc:5000/pipelines-vote/vote-ui   #1
  - name: deployment-name
    value: pipelines-vote-ui
  - name: git-url
    value: https://github.com/openshift/pipelines-vote-ui.git   #2
  pipelineRef:
    name: build-and-deploy
  serviceAccountName: pipeline
  timeout: 1h0m0s
  workspaces:
  - name: shared-workspace
    persistentVolumeClaim:
      claimName: source-pvc
  1. 请注意,不同的映像名称将写入构建,并从其中部署pod。
  2. 请注意应用程序前端的不同存储库。在这个案子里,a monorepo是怎么用的?

单击Create并查看管道运行情况。

3.7 Access Application

一旦构建完成,你可以获得投票应用UI的URL:

  1. 在导航菜单上,单击Networking查看到UI的路由。
  2. Click the route and vote.

4. 问题

这是一个Flask应用程序https://github.com/openshift/pipelines-vote-ui.git

如何修改应用程序,使其以cat而不是wolf为特征?

如何打开JSON日志以便更健壮地查询这些日志—例如,查看有多少人在为猫和狗投票?

您是否可以获得代码、修改代码,然后修改构建管道以获取代码修改?

您需要创建自己的源代码存储库吗?

您可以使用本地pvc来托管代码吗?

管道是复杂的,但是任务是非常强大的,并且很容易用taskrun进行测试。考虑如何将容器图像扫描添加到管道中,以便及早发现安全问题。


相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
JSON 监控 数据管理
【Elasticsearch专栏 12】深入探索:Elasticsearch使用索引生命周期管理(ILM)自动化删除旧数据
Elasticsearch的ILM功能允许用户定义策略,自动管理索引从创建到删除的生命周期。用户可以设置策略,根据索引年龄或大小自动删除旧数据,节省存储空间。通过应用ILM策略于索引模板,新索引将遵循预定义的生命周期。用户还可以监控ILM状态,确保策略按预期执行。使用ILM,用户可以高效地管理数据,确保旧数据及时删除,同时保持数据完整性和安全性。
673 3
|
Java 中间件 Serverless
CSE:阿里在线应用如何演进成Serverless架构
**Cloud Service Engine**,简称**CSE**,是中间件部门研发的面向通用Serverless计算的中间件产品,目标是具备AWS Lambda的各种优势,同时可以解决AWS Lambda的关键技术缺陷。 AWS Lambda如果用于核心业务,可能会有以下缺陷:(仅代表个人观点) * 要求用户以Function为单位开发,全新的开发框架,云厂商强绑定。社区主
3558 0
|
SQL 数据挖掘 测试技术
南大通用GBase8s数据库:LISTAGG函数的解析
南大通用GBase8s数据库:LISTAGG函数的解析
|
7月前
|
人工智能 Kubernetes Cloud Native
我们香港见!阿里云亮相 KubeCon China 2025
阿里云亮相KubeCon + CloudNativeCon China 2025,带来多个技术议题分享,覆盖容涉及 AI 模型分发、Argo 工作流、Fluid 数据管理、Kubernetes 运维等多个热门话题,欢迎大家前来与我们零距离交流,共同探讨云原生技术!
|
人工智能 运维 监控
智能化运维:AI在IT运维中的挑战与机遇###
本文探讨了人工智能(AI)技术在IT运维领域的应用,重点分析了AI如何提升运维效率、减少故障恢复时间,并预测未来发展趋势。通过具体案例展示了AI在实际运维中的应用效果,同时指出当前面临的挑战和解决方案,为读者提供一个全面了解智能化运维的视角。 ###
|
存储 安全 Nacos
MSE Nacos,解决敏感配置的安全隐患
本文向大家介绍,MSE Nacos 是如何解决敏感配置的安全隐患,并提供使用 MSE Nacos 加解密敏感配置的最佳实践。
934 99
|
Kubernetes 关系型数据库 分布式数据库
kubeblocks完成阿里云PolarDB数据库产品生态集成认证
近日,杭州云猿生数据有限公司(以下简称云猿生)与阿里云PolarDB 开源数据库社区展开产品集成认证。测试结果表明,杭州云猿生数据有限公司旗下kubeblocks(V0.7.0)与阿里云以下产品:开源云原生数据库PolarDB 分布式版( V2.0 ),完全满足产品兼容认证要求,兼容性良好,系统运行稳定。
|
网络虚拟化 Windows
Windows 10 Windows1011出现0x80190001错误解决方案! Windows微软账户无法登录问题 Microsoft Store商店用不了
Windows 10 Windows1011出现0x80190001错误解决方案! Windows微软账户无法登录问题 Microsoft Store商店用不了
771 1
|
存储 Kubernetes Cloud Native
【 云原生 | kubernetes 】- tekton构建CI/CD流水线(一)
Tekton 是用于构建 CI/CD 管道的云原生解决方案。它由提供构建块的 Tekton Pipelines 和支持组件(例如 Tekton CLI 和 Tekton Catalog)组成,它们使 Tekton 成为一个完整的生态系统。
【 云原生 | kubernetes 】- tekton构建CI/CD流水线(一)
|
存储 缓存 Kubernetes
带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析(四)
带你读《云原生应用开发 Operator原理与实践》第三章 Kubebuilder 原理3.3 Controller-runtime 模块分析