OpenShift

当OPENSHIFT 遇上TEKTON,基于TEKTON的PIPELINE入门

关于TEKTON和OPENSHIFT PIPELINE

Tekton是Google推崇的云原生(就是面向Kubernetes)开源CICD框架,2019年已经得到Redhat等云厂商的支持。在OpenShift 4的OpenShift Pipeline中已经通过Operator Frame集成了Tekton框架,这样无需复杂集成和操作,我们就可实现各种基于Tekton的CICD Pipeline构建、操作、运行和监控了。

TEKTON核心概念

在K8s或OpenShift中Tekton Pipeline是通过CRDs的方式进行定义的。一个Pipeline需要我们定义3种对象:

  • Task:用来定义要在CICD中要干的一件事。Task中可以包括多个step,每个step定义一个独立操作。例如下面定义了一个在ubuntu容器中输出hello world的任务。
  • Pipeline:用来定义按照指定顺序执行的一组Task。
  • PipelineResource:在Pipeline运行期间向执行的Task传递参数,这些参数主要和环境相关,例如git repository的地址。

在运行Tekton Pipeline的时候,OpenShift会使用TaskRun和PipelineRun对象分别运行Tesk和Pipeline。Pipeline会按照指定的顺序执行Task,并获取结果。

本CICD PIPEINE场景说明

本CICD Pipeline场景OpenShift的S2I首先从git repository获取基于Spring Boog的PetClinic应用代码,然后build代码,再和基础镜像(base image)打包生成应用镜像(app image)推送到OpenShift内部的Image Registry,最后再部署到OpenShift上并运行。

环境说明

本实验已经验证的运行环境:

操作步骤
安装配置TEKTON OPERATOR

1.用admin身份登录OpenShift Cosole,进入Administrator视图。

2.通过菜单进入Operators–>OpeartorHub。

3.查找到OpenShift Pipelines Operator,并点击进入。

4.在OpenShift Pipelines Operator介绍界面中点击Install。

5.在Create Operator Subscription界面中接受缺省选项,点击Subscribe。

6.通过菜单进入Operators–>Installed Opeartors。(可能需要等一会)可以看到刚刚安装好的OpenShift Pipelines Operator.

7.通过链接进入这个Operator的配置,然后在OpenShift Pipelines Config中点击Create Config。

8.在Create Config页面中接受缺省的yaml配置,然后点击Create。

配置OPENSHIFT
创建OPENSHIFT项目和应用对象

1.执行命令,创建一个项目

$ oc new-project pipelines-tutorial

2.执行命令,验证是否有名为pipeline的ServiceAccount

$ oc get serviceaccount pipeline
NAME       SECRETS   AGE
pipeline   2         12h

3.执行命令创建除images以外的应用对象。在创建完后应用并不能运行,要等App Image构建完后OpenShift才可生成Pod并运行应用。

$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/master/petclinic/manifests.yaml
创建TASK

1.执行命令创建2个Task对象,分别是openshift-client和s2i-java-8。

$ oc create -f https://raw.githubusercontent.com/openshift/tektoncd-catalog/release-v0.7/openshift-client/openshift-client-task.yaml
$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-catalog/release-v0.7/s2i-java-8/s2i-java-8-task.yaml

2.在执行成功后可以用命令验证其状态

$ oc get task
NAME               AGE
openshift-client   15h
s2i-java-8         15h

3.也可以用Tekton的的客户端获取Task的状态

$ tkn task ls
NAME               AGE
openshift-client   15h
s2i-java-8         15h
创建PIPELINE

4.执行命令,创建Pipeline对象

$ oc create -f https://raw.githubusercontent.com/openshift/pipelines-tutorial/master/pipeline/01-build-deploy.yaml

5.执行命令查看Pipeline状态

$ tkn pipeline ls
NAME                       AGE              LAST RUN   STARTED   DURATION   STATUS
petclinic-deploy-pipeline  25 seconds ago   ---        ---       ---        ---
创建PIPELINERESOURCE

1.执行命令,获取OpenShift内部的Image Registry的访问地址(即下面的CLUSTER-IP地址)

$ oc get svc -n openshift-image-registry
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
image-registry   ClusterIP   172.30.123.232   <none>        5000/TCP   28d

2.下载定义PipelineResource的yaml文件,其中定义了2个PipelineResource,petclinic-git和petclinic-image,分别定义应用的git repository和生成的App Image推送的位置。我们需要将其中的“image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/spring-petclinic”替换为上一步获得的CLUSTER-IP地址。

$ curl -o pipelineresources.yaml https://raw.githubusercontent.com/openshift/pipelines-tutorial/master/pipeline/02-resources.yaml

3.执行命令创建PipelineResource,然后查看其状态:

$ oc create -f pipelineresources.yaml
$ tkn resource ls
NAME              TYPE    DETAILS
petclinic-git     git     url: https://github.com/spring-projects/spring-petclinic
petclinic-image   image   url: image-registry.openshift-image-registry.svc:5000/pipelines-tutorial/spring-petclinic
运行PIPELINE

1.通过命令运行Tekton Pipeline,然后查看其状态。当前是Running状态,在运行完后可再次执行,其状态会变为Succeeded。

$ tkn pipeline start petclinic-deploy-pipeline \
       -r app-git=petclinic-git \
       -r app-image=petclinic-image \
       -s pipeline
$ tkn pipeline list
NAME                        AGE             LAST RUN                              STARTED         DURATION   STATUS
petclinic-deploy-pipeline   51 seconds ago   petclinic-deploy-pipeline-run-12Bs7  51 seconds ago   ---        Running

2.上述开始执行pipeline的过程也可在OpenShift Console中的Developer视图里完成。只需要进入Pipeline菜单并找到petclinic-deploy-pipeline,然后在Actions中点击Start即可。

3.除了可以在以上Pipeline的Console查看执行log外,还可执行命令查看Pipeline的执行情况:

$ tkn pipeline logs -f 

4.执行以下命令可以查看TaskRun和PipelineRun的执行状态

$ oc get taskruns
NAME                                               SUCCEEDED   REASON      STARTTIME   COMPLETIONTIME
petclinic-deploy-pipeline-run-2c2lh-build-8xlgx    True        Succeeded   17h         16h
petclinic-deploy-pipeline-run-2c2lh-deploy-bnqtb   True        Succeeded   16h         16h
[dawnsky@rhel81-960 crc]$ oc get pipelineruns
NAME                                  SUCCEEDED   REASON      STARTTIME   COMPLETIONTIME
petclinic-deploy-pipeline-run-2c2lh   True        Succeeded   17h         16h

5.在Pipeline执行成功后,我们可以在Openshift控制台Developer视图的Topology中看到spring-petclinic应用的状态已经是蓝色可访问状态。

6.最后点击Route的链接即可访问到应用