tekton簡單介紹及安裝
今天開始,我將逐步上新tekton的使用教程,每篇只需5分鐘的閱讀時間。如有寫的不好的地方,歡迎評論指正
1.1 背景介紹
Tekton是一個谷歌開源的kubernetes原生CI/CD系統,功能強大且靈活,開源社區也正在快速的迭代和發展壯大。其實Tekton的前身是Knative的build-pipeline項目,從名字可以看出這個項目是爲了給build模塊增加pipeline的功能,但是大家發現隨着不同的功能加入到Knative build模塊中,build模塊越來越變得像一個通用的CI/CD系統,這已經脫離了Knative build設計的初衷,於是,索性將build-pipeline剝離出Knative,搖身一變成爲Tekton,而Tekton也從此致力於提供全功能、標準化的原生kubernetesCI/CD解決方案。Tekton雖然還是一個挺新的項目,但是已經成爲 Continuous Delivery Foundation (CDF) 的四個初始項目之一,另外三個則是大名鼎鼎的Jenkins、Jenkins X、Spinnaker,實際上Tekton還可以作爲插件集成到JenkinsX中。所以,如果你覺得Jenkins太重,沒必要用Spinnaker這種專注於多雲平臺的CD,爲了避免和Gitlab耦合不想用gitlab-ci,那麼Tekton值得一試。Tekton的特點是kubernetes原生,什麼是kubernetes原生呢?簡單的理解,就是all in kubernetes,所以用容器化的方式構建容器鏡像是必然,另外,基於kubernetes CRD定義的pipeline流水線也是Tekton最重要的特徵。那Tekton都提供了哪些CRD呢?
- Task
- TaskRun
- Pipeline
- PipelineRun
- PipelineResource
Tekton Pipelines 是一個開源項目,可在 Kubernetes 集羣中配置和運行持續集成和持續交付(也稱爲 CI/CD)流水線。在本教程中,Tekton 以自定義資源的形式提供了一組 Kubernetes 擴展,用於定義流水線。
Tekton Pipelines項目提供了Kubernetes樣式的資源來聲明CI / CD樣式的管道。Tekton pipelines是雲原生的:
- 運行在k8s上;
- Have Kubernetes clusters as a first class type(不知道什麼意思)
- Use containers as their building blocks(使用容器作爲什麼)
Tekton Pipelines是解耦的:
- 一個Pipeline可以被部署進任何k8s集羣
- 組成pipeline的task可以輕鬆的獨立運行
- git repos之類的資源可以在運行之間輕鬆交換
1.2 安裝tekton/pipelines
先看下安裝環境:kubernetes版本要在1.15之上。
安裝tekton pipeline組件到已有的k8s集羣中:
kubectl apply --filename https://storage.googleapis.com/tekton-releases/pipeline/latest/release.yaml
這是官方教程的安裝,但是release.yaml中需要的鏡像是從谷歌雲拉取的,國內的環境可能拉不到鏡像,我安裝的tekton/pipeline是v0.12.0,所以這邊我拉好了谷歌鏡像並推送到我的dockerhub上,
大家去這裏下載我改過的yaml文件https://github.com/fishingfly/pictures_for_markdown/blob/master/tekton/tekton-pipeline-release.yaml
下載到本地後運行
kubectl applt -f tekton-pipeline-release.yaml
運行以下命令來查看部署pipeline是否成功,要是pod都是running,說明部署成功了
kubectl get pods --namespace tekton-pipelines
然後運行個例子:taskrun.yaml
apiVersion: tekton.dev/v1beta1
kind: TaskRun
metadata:
name: steps-run-in-order
spec:
taskSpec:
steps:
- image: busybox
# NB: command is not set, so it must be looked up from the registry.
args: ['-c', 'sleep 3 && touch foo']
- image: busybox
args: ['-c', 'ls', 'foo']
然後查看pod是否運行完,是comepleted:
steps-run-in-order-pod-4dgnn 0/2 Completed 0 13s
查看下日誌:
[root@master1 tekton-example]# kubectl logs steps-run-in-order-pod-4dgnn --all-containers
foo
看到foo。就是ok的。
歡迎關注公衆號 “南君手記”