tekton入门 - taskrun

taskrun

一个TaskRun定义支持以下领域:

  • 需要:
    • apiVersion-指定API版本,例如 tekton.dev/v1beta1。
    • kind-将此资源对象标识为TaskRun对象。
    • metadata-指定TaskRun唯一标识的元数据,例如name。
    • spec-指定TaskRun的配置。
    • taskRef或taskSpec -指定TaskRun将执行的tasks。
  • 可选的:
    • serviceAccountName-指定一个ServiceAccount对象,该对象提供TaskRun用于执行的自定义凭据。
    • params-指定Task所需的执行参数。
    • resources-指定所需的PipelineResource值。inputs指定输入资源。outputs指定输出资源。
    • timeout-指定TaskRun失败之前的超时时间。
    • podTemplate-指定一个Pod模板作为起点用于配置Task的Pods。
    • workspaces-指定要用于Workspaces声明的物理卷 Task

指定目标Task

要在Task中指定要执行的代码,使用taskRef字段:

spec:
  taskRef:
    name: read-task

您还可以使用taskSpec字段直接在TaskRun中嵌入所需的Task定义:

spec:
  taskSpec:
    resources:
      inputs:
        - name: workspace
          type: git
    steps:
      - name: build-and-push
        image: gcr.io/kaniko-project/executor:v0.17.1
        # specifying DOCKER_CONFIG is required to allow kaniko to detect docker credential
        env:
          - name: "DOCKER_CONFIG"
            value: "/tekton/home/.docker/"
        command:
          - /kaniko/executor
        args:
          - --destination=gcr.io/my-project/gohelloworld

指定参数

如果要执行的task包含参数,可以通过parms字段指定,若task中未设置默认值,则必须指定

spec:
  params:
    - name: flags
      value: -someflag

指定resource

如果task中设置了resource则必须指定,可以在taskrun中直接指定或者引用已有的 PiplineResource对象

  • 引用已有的PiplineResource
spec:
  resources:
    inputs:
      - name: workspace
        resourceRef:
          name: java-git-resource
    outputs:
      - name: image
        resourceRef:
          name: my-app-image
  • 直接指定
spec:
  resources:
    inputs:
      - name: workspace
        resourceSpec:
          type: git
          params:
            - name: url
              value: https://github.com/pivotal-nader-ziada/gohelloworld

指定podtemplate

您可以指定Pod模板配置,该配置将用作Pod的配置起点,您的Task中指定的容器映像将在其中执行。 这使您可以专门为该TaskRun自定义Pod配置。

在下面的例子中,Task指定了一个volumeMount(my-cache)对象,也被TaskRun提供,采用了PersistentVolumeClaim卷。在该SchedulerName字段中还配置了特定的调度程序 。在Pod与常规(非根)用户权限执行。

apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: mytask
  namespace: default
spec:
  steps:
    - name: writesomething
      image: ubuntu
      command: ["bash", "-c"]
      args: ["echo 'foo' > /my-cache/bar"]
      volumeMounts:
        - name: my-cache
          mountPath: /my-cache
---
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
  name: mytaskrun
  namespace: default
spec:
  taskRef:
    name: mytask
  podTemplate:
    schedulerName: volcano
    securityContext:
      runAsNonRoot: true
      runAsUser: 1001
    volumes:
    - name: my-cache
      persistentVolumeClaim:
        claimName: my-volume-claim

指定workspaces

如果task指定一个或多个workspaces,则必须将这些workspaces映射到TaskRun定义中的相应物理卷。例如,可以将PersistentVolumeClaim卷映射到workspaces,如下所示:

workspaces:

  • name: myworkspace # must match workspace name in the Task
    persistentVolumeClaim:
    claimName: mypvc # this PVC must already exist
    subPath: my-subdir

指定sidecar

Sidecar是与Steps任务中指定的容器并行运行的容器,以为执行这些tasks提供辅助支持。例如,Sidecar可以运行日志记录守护程序,更新共享卷上文件的服务或网络代理。

Tekton支持将Sidecar注入到属于TaskRun的Pod中,条件是一旦Task中的所有步骤完成执行,则终止在Pod中运行的每个Sidecar。 这可能会导致Pod包含每个受影响的Sidecar(重试计数为1),这与预期的容器映像不同。

指定LimitRange

为了仅消耗从被调用的任务一次执行一个步骤所需的最少资源,Tekton仅从每个步骤中请求CPU,内存和临时存储的最大值。 这足够了,因为步骤只能在Pod中一次执行一个。 最大值以外的请求都设置为零。

当在其中执行TaskRun的名称空间中存在LimitRange参数并且为容器资源请求指定了最小值时,Tekton将搜索名称空间中存在的所有LimitRange值,并使用最小值而不是0。

指定失败超时时间

您可以使用timeout字段,以分钟为单位设置TaskRun的所需超时值。 如果未在TaskRun中指定此值,则将应用全局默认超时值。 如果将超时设置为0,则TaskRun在遇到错误时立即失败。

首次安装Tekton时,全局默认超时设置为60分钟。 您可以使用config/config-defaults.yaml中的default-timeout-minutes字段设置其他全局默认超时值。

超时值是符合Go的ParseDuration格式的持续时间.例如,有效值为1h30m,1h,1m和60s。 如果将全局超时设置为0,则所有没有单独设置超时的TaskRun都会在遇到错误时立即失败。

指定ServiceAccount凭据

通过在TaskRun定义的serviceAccountName字段中指定ServiceAccount对象名称,可以使用一组特定的凭据在TaskRun中执行Task。 如果未明确指定,则TaskRun将使用configmap-defaults ConfigMap中指定的凭据执行。如果未指定此默认值,则TaskRuns将使用为目标名称空间设置的默认服务帐户执行。

监控执行状态

执行TaskRun时,其状态字段会累积有关每个步骤以及TaskRun整体执行情况的信息。该信息包括开始和停止时间,退出代码,容器映像的全限定名称以及相应的摘要。

Note! 如果Kubernetes已经OOM杀死了任何Pod,即使TaskRun的退出代码为0也被标记为失败。

下表显示了如何读取TaskRun的总体状态:

statusreasoncompletionTime is setDescription
UnknownStartedNoTaskRun刚刚被控制器拉取
UnknownPendingNoTaskRun正在等待状态为Pod的Pod
UnknownRunningNoTaskRun已通过验证并开始执行其工作
UnknownTaskRunCancelledNo用户请求取消TaskRun。取消尚未完成。
TrueSucceededYesTaskRun成功完成
FalseFailedYesTaskRun失败,因为步骤之一失败
False[Error message]NoTaskRun遇到非永久错误,并且仍在运行。它可能最终会成功.
False[Error message]YesTaskRun因永久错误而失败(通常是验证)
FalseTaskRunCancelledYesTaskRun已成功取消.
FalseTaskRunTimeoutYesTaskRun超时.

监控steps

如果在TaskRun调用的任务中定义了多个步骤,则可以使用以下命令在steps.results字段中监视其执行状态,其中是目标TaskRun的名称:

状态中还包含用于实例化TaskRun的确切任务规范,以实现全面的可审核性。

steps

相应的状态以在任务定义中指定步骤的顺序显示在status.steps列表中。

监测结果

如果在调用的任务中指定了一个或多个结果字段,则TaskRun的执行状态将包括Task Results部分,其中Results逐字显示,包括原始行返回和空格。 例如:

Status:
  # […]
  Steps:
  # […]
  Task Results:
    Name:   current-date-human-readable
    Value:  Thu Jan 23 16:29:06 UTC 2020

    Name:   current-date-unix-timestamp
    Value:  1579796946

取消TaskRun

要取消当前正在执行的TaskRun,请更新其定义以将其标记为已取消。这样做时,与该TaskRun相关联的所有正在运行的Pod都将被删除。例如:

apiVersion: tekton.dev/v1alpha1
kind: TaskRun
metadata:
  name: go-example-git
spec:
  # […]
  status: "TaskRunCancelled"

扫描关注我:

微信

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值