Knative 初体验:CICD 极速入门

  • 日期:08-18
  • 点击:(1865)


2509688-2d9372a84a2b398d.png

Knative社区长期讨论使用Tekton来替换Build模块。 Knative Build正式宣布不再推荐使用Knative Build。

2509688-700d52b19761da90.png

如果您知道Knative Build是什么,很容易相信您了解Tekton。

Knative Build自己的句子概述是:

Tekton对自己的话的总结是:

可以看出,两者的定位非常相似,而且Tekton的设计功能更加丰富和完善,这也是社区最终采用Tekton的原因。让我们来看看Tekton的核心概念。

Tekton主要由以下五个核心概念组成:

任务

TaskRun

管道

PipelineRun

PipelineResource

这五个概念中的每一个都以CRD的形式提供。下面简要描述这五个概念的含义。

任务

任务是任务执行模板。 Task是模板的原因是Task定义可以包含变量。任务需要在实际执行时指定变量的特定值。 Tekton的Task与函数的定义非常相似。任务定义inputs.params需要哪些参数,每个输入参数也可以指定默认值。任务的steps字段指示当前Task由哪个子步骤组成。每个步骤都是镜像的执行。可以使用Task输入的模板语法配置图像的启动参数。

TaskRun

在定义Task之后,它就无法执行,就像定义一个函数需要被调用一样。因此,您需要定义另一个TaskRun来执行Task。 TaskRun主要负责设置Task所需的参数,并通过taskRef字段引用要执行的Task。

管道

TaskRun只能执行一个任务,当您需要编排多个任务时,需要使用管道。 Pipeline是用于编排任务的模板。 Pipeline的params声明执行所需的输入参数。 Pipeline的spec.tasks定义了需要编排的任务。任务是一个数组。数组中的任务不按声明它们的顺序执行。相反,runAfter用于声明执行任务的顺序。 Tekton控制器在解析CRD时解析任务的顺序,然后按照它们的设置顺序执行它们。在编写任务时,管道需要将必要的参数传递给每个任务。这些参数的值可以来自管道自己的参数。

PipelineRun

与Task类似,管道定义在完成后无法直接执行。 PipelineRun需要执行Pipeline。 PipelineRun的主要作用是为Pipeline设置必要的参数并执行Pipeline。

PipelineResource

早先介绍了Tekton的四个核心概念。现在我们已经知道如何定义任务,执行任务和编排任务。但也许你仍然希望在Tasks之间共享资源,这就是PipelineResource所做的事情。例如,我们可以将git存储库信息放在PipelineResource中。这样所有Pipeline都可以共享这些数据。

授权信息

git存储库和镜像存储库都需要使用身份验证。因此,还需要用于设置认证信息的机制。 Tekton本身就是Kubernetes的原生编排系统。因此,您可以使用Kubernetes的ServiceAccount机制直接实现身份验证。

一个例子如下:

定义保存图像存储库验证信息的秘密

定义ServiceAccount并使用上面的秘密

在PipelineRun中引用ServiceAccount

这是一个完整的Tekton Helle World。让我们一起体验这个海尔世界吧。

在开始战斗之前你需要有一个Kubernetes集群,你还需要安装Knative和Tekton。 tekton-knative中的release-v0.5.2.yaml可以直接提交给Kubernetes集群以完成Tekton安装。让我们从使用Tekton从源代码构建到构建再到部署的自动化过程开始。

克隆代码

将代码克隆到本地。

创建PipelineResource

主要内容在文件中。如下所示,它主要存储在其他资源的资源中。

创建任务

创建一个任务,在这个例子中我们创建了两个任务:source-to-image和deploy-using-kubectl

源到图像

主要内容在文件中。此任务的主要功能是将源代码编译为镜像。

主要的是使用kaniko实现在容器中编译Docker镜像的能力。此任务的参数主要是设置有关编译上下文的一些信息,例如:Dockerfile,ContextPath和目标图像标记。

部署-使用-kubectl

主要内容在文件中。

Task sed命令用目标图像替换Knative Service yaml,如下所示。通过kubectl发布到Kubernetes。

定义管道

现在我们有两个任务,现在我们将使用PIpeline来编排两个任务:

身份验证信息

定义一个Secret和ServiceAccount,如下所示。并绑定ServiceAccount以执行Knative Service。

首先创建一个Secret来保存镜像仓库的身份验证信息,如下所示。

将tekton.dev/docker-0更改为要推送的镜像存储库的地址

用户名将替换为镜像仓库身份验证的用户名

密码环境映像仓库身份验证的密码

以下信息将保存到文件中,并使用kubectl apply -f命令

提交给Kubernetes

定义PIpelineRun

与ServiceAccount对应的认证信息通过与PIpelineRun绑定来执行。见文件

执行HelloWorld

为PIpeline准备资源

执行create以将pipelieRun提交到Kubernetes集群。我们使用create而不是apply的原因是因为PIpelineRun每次都创建一个新的,而kubectl的create指令基于generateName创建一个新的PIpelineRun资源。

查看pod信息可能如下所示:

作者:冬岛

阅读原文

本文是云栖社区的原创内容,未经许可,不得转载。