Tekton Pipeline 教程



前言git

☞ 開學季買書大優惠,錯過等一年 ☜

Tekton Pipeline 是一個 k8s native 的 pipeline, 任務跑在 pod 中,經過自定義 CRD 去管理任務與工做流等等,我看完 tekton 以後感受是功能很強大,可是有點過分設計了,沒有 drone 的簡約大方靈活之感。web

1.
docker

Taskbash

Tekton Pipeline 的主要目標是單獨運行您的任務或做爲管道的一部分運行。每一個任務都在 Kubernetes 集羣上做爲 Pod 運行,每一個步驟都做爲本身的容器。這點深得 drone 思想精髓,其實 drone 也有計劃將 kubernetes 做爲任務執行引擎。微信

Task 定義了須要執行的工做,例如如下是一個簡單的任務:app

steps 是一系列由任務順序執行的命令。這個 steps 內的配置幾乎與 drone 一模一樣。機器學習

Task 定義好了以後並不會被執行,建立 TaskRun 時纔會執行。這是合理的,至關因而一個觸發。編輯器

$ kubectl apply -f < name-of-file.yaml >

查看 TaskRun分佈式

狀態 Succeeded = True 顯示任務已成功運行。學習

2.

任務輸入和輸出

在更常見的場景中,任務須要多個步驟來處理輸入和輸出資源。例如,Task 能夠從 GitHub 存儲庫獲取源代碼並從中構建 Docker 鏡像。

PipelinesResources 用於定義任務的輸入(如代碼)與輸出(如 Docker 鏡像)。有一些系統定義的資源類型可供使用,如下是一般須要的兩個資源示例。

該 git 資源能夠是你要編譯的代碼:

該 image 資源表明要被任務編譯成的鏡像:

如下是 Task 輸入和輸出。輸入資源是 GitHub 存儲庫,輸出是從該源生成的圖像。任務命令的參數支持模板化,所以任務的定義是常量,參數的值能夠在運行時更改。

TaskRun 將輸入和輸出綁定到已定義的 PipelineResources 值,除了執行任務步驟外,還將值設置爲用於模板化的參數。

inputs 和 outputs 應當不限制死必須叫這兩個名字,只要是能支持參數就好。好比定義一個叫 build 的資源去指定 docker build 的鏡像:

Task 裏:

我是以爲須要能進行這樣的擴展了, 僅是 inputs 和 outputs 就狹義了。

獲取 pipeline所有信息:

$ kubectl get build-pipeline
NAME                                                   AGE
taskruns/build-docker-image-from-git-source-task-run   30s

NAME                                          AGE
pipelineresources/skaffold-git                6m
pipelineresources/skaffold-image-leeroy-web   7m

NAME                                       AGE
tasks/build-docker-image-from-git-source   7m

要查看 TaskRun 的輸出,請使用如下命令:

類型的狀態 Succeeded = True 顯示 Task 已成功運行,你還能夠驗證 Docker 鏡像是否生成。

3.

Pipeline

Pipeline 定義要按順序執行的任務列表,同時還經過使用該 from 字段指示是否應將任何輸出用做後續任務的輸入,並指示執行的順序(使用 runAfter 和 from 字段)。你在任務中使用的相同模板也能夠在管道中使用。

以上 Pipeline 是引用一個 Task deploy-using-kubectl

要運行 Pipeline,請建立 PipelineRun 以下:

執行與查看 pipeline:

$ kubectl apply -f < name-of-file.yaml >
$ kubectl get pipelineruns tutorial-pipeline-run-1 -o yaml



總結

初學者會以爲有點繞,可是這種設計也是爲了解耦合,我我的以爲優劣以下:

優點:

  • 能夠把k8s集羣做爲任務執行引擎,這樣能夠更好的利用資源,好比把線上夜間閒置資源用來跑任務,構建鏡像 離線分析 甚至機器學習。

  • 解耦作的比較好,任務模板能夠拿來複用,而不須要你們都去重複定義。

  • 輸入輸出理念,一個任務的輸入做爲另個任務的輸出不錯

劣勢:

  • 有點過分設計,一些簡單的場景可能以爲配置起來有點繞了。

  • 輸入輸出依賴分佈式系統,對比 drone 一個 pipeline 中的容器是共享了一個數據卷的,這樣上個任務產生的文件很方便的給下個任務用,而基於集羣的任務就可能得依賴 git docker 鏡像倉庫等作輸入輸出,有點麻煩,好的解決辦法是利用 k8s 分佈試存儲給 pipeline 設置一個共享卷,方便任務間傳輸數據。

整體來講路子是對的,並且仍是有不少場景能夠用的。

● 之後別人再問你什麼是 Istio,就把這篇文章甩給他

 Kubectl 的替代品:kubeman

 Contour 學習筆記(一):使用 Contour 接管 Kubernetes 的南北流量

雲原生是一種信仰 🤘



掃碼關注公衆號

回覆 「電子書」下載 Kubernetes 指南


點擊 "閱讀原文" 獲取更多資源!


         
❤️ 給個 「在看」 ,是對我最大的支持❤️

本文分享自微信公衆號 - 雲原生實驗室(cloud_native_yang)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索