新聞中心
使用 Tektoncd Operator 管理 Tekton 組件
作者:陽明 2022-07-27 07:39:45
云計(jì)算
云原生 Tektoncd Operator 是一個(gè) Kubernetes 的擴(kuò)展,用于在 Kubernetes 集群上安裝、升級和管理 TektonCD Pipelines、Dashboard、Triggers 等。我們只需要編寫各個(gè)組件的 yaml 就可以直接來管理 Tekton 的各種組件。

Tektoncd Operator 是一個(gè) Kubernetes 的擴(kuò)展,用于在 Kubernetes 集群上安裝、升級和管理 TektonCD Pipelines、Dashboard、Triggers 等。我們只需要編寫各個(gè)組件的 yaml 就可以直接來管理 Tekton 的各種組件。
|
CRD |
描述 |
|
TektonConfig |
配置要安裝和管理的 Tekton 組件。 |
|
TektonPipeline |
配置安裝管理 Tekton Pipeline 組件。 |
|
TektonTrigger |
配置安裝管理 Tekton Trigger 組件。 |
|
TektonDashboard |
配置安裝管理 Tekton Dashboard 組件。 |
|
TektonResult |
配置安裝管理 Tekton Result 組件。 |
|
TektonAddon |
配置安裝管理插件,目前僅支持 Openshift。 |
安裝
安裝 Tektoncd Operator 有多種方式。
從 Operator Hub 安裝
可以直接前往 Operator Hub 頁面 https://operatorhub.io/operator/tektoncd-operator 進(jìn)行安裝,其生命周期將由 Operator Lifecycle Manager (OLM) 進(jìn)行管理。
使用資源清單文件安裝
可以直接從 Github Release 頁面 https://github.com/tektoncd/operator/releases 獲取資源清單文件,使用這種方式安裝,需要自己管理 Operator 的生命周期。
直接使用下面的命令進(jìn)行安裝即可。
$ kubectl apply -f https://storage.googleapis.com/tekton-releases/operator/latest/release.yaml
由于官方使用的鏡像是 gcr 的鏡像,所以正常情況下我們是獲取不到的,如果你的集群由于某些原因獲取不到鏡像,可以使用下面的資源清單文件:
$ kubectl apply -f https://my-oss-testing.oss-cn-beijing.aliyuncs.com/k8s/tekton/operator/release.v0.60.0.yml
默認(rèn)情況下 Tektoncd Operator 創(chuàng)建的對象會使用 gcr 的鏡像,比如 Tekton Pipelines 控制器的鏡像,可以通過環(huán)境變量 IMAGE_PIPELINES_TEKTON_PIPELINES_CONTROLLER 來指定對應(yīng)的鏡像,如下所示的環(huán)境變量是覆蓋默認(rèn)的 gcr 鏡像的配置方式:
- name: IMAGE_PIPELINES_PROXY
value: cnych/tekton-operator-proxy-webhook:v0.60.0
- name: IMAGE_JOB_PRUNER_TKN
value: cnych/tekton-operator-pruner-tkn:v0.60.0
- name: IMAGE_PIPELINES_TEKTON_PIPELINES_CONTROLLER
value: cnych/tekton-controller:v0.37.2
- name: IMAGE_PIPELINES_WEBHOOK
value: cnych/tekton-webhook:v0.37.2
- name: IMAGE_PIPELINES_ARG__ENTRYPOINT_IMAGE
value: cnych/tekton-entrypoint:v0.37.2
- name: IMAGE_PIPELINES_ARG__GIT_IMAGE
value: cnych/tekton-git-init:v0.37.2
- name: IMAGE_PIPELINES_ARG__IMAGEDIGEST_EXPORTER_IMAGE
value: cnych/tekton-imagedigestexporter:v0.37.2
- name: IMAGE_PIPELINES_ARG__KUBECONFIG_WRITER_IMAGE
value: cnych/tekton-kubeconfigwriter:v0.37.2
- name: IMAGE_PIPELINES_ARG__NOP_IMAGE
value: cnych/tekton-nop:v0.37.2
- name: IMAGE_TRIGGERS_TEKTON_TRIGGERS_CONTROLLER
value: cnych/tekton-triggers-controller:v0.20.1
- name: IMAGE_TRIGGERS_WEBHOOK
value: cnych/tekton-triggers-webhook:v0.20.1
- name: IMAGE_TRIGGERS_TEKTON_TRIGGERS_CORE_INTERCEPTORS
value: cnych/tekton-triggers-interceptors:v0.20.1
- name: IMAGE_TRIGGERS_ARG__EL_IMAGE
value: cnych/tekton-triggers-eventlistenersink:v0.20.1
上面的方式會創(chuàng)建一個(gè)名為 tekton-operator 的命名空間,其中包含一個(gè) Operator 和一個(gè) Webhook 的 Pod:
$ kubectl get pods -n tekton-operator
NAME READY STATUS RESTARTS AGE
tekton-operator-9d747548b-67t7m 2/2 Running 0 9m42s
tekton-operator-webhook-6cc769b85d-fssq9 1/1 Running 0 9m42s
安裝 Operator 后,就可以安裝所需的 Tekton 組件,例如 Tekton Pipeline、Tekton Triggers。
每個(gè) Tekton 組件都有一個(gè)自定義資源,用于安裝和管理組件。
$ kubectl get crd |grep tekton |grep operator
tektonchains.operator.tekton.dev 2022-07-25T00:51:07Z
tektonconfigs.operator.tekton.dev 2022-07-25T00:51:07Z
tektondashboards.operator.tekton.dev 2022-07-25T00:51:07Z
tektonhubs.operator.tekton.dev 2022-07-25T00:51:07Z
tektoninstallersets.operator.tekton.dev 2022-07-25T00:51:07Z
tektonpipelines.operator.tekton.dev 2022-07-25T00:51:07Z
tektonresults.operator.tekton.dev 2022-07-25T00:51:07Z
tektontriggers.operator.tekton.dev 2022-07-25T00:51:07Z
其中 TektonConfig 是創(chuàng)建其他組件的頂級 CRD。所以我們只需創(chuàng)建具有所需配置的 TektonConfig 對象即可,它將會幫助我們安裝相應(yīng)的其他組件。
TektonConfig 將根據(jù)傳遞給它的配置文件創(chuàng)建 TektonPipeline、TektonTriggers 和其他組件 CR 對象,其中有一個(gè) profile 的字段,可以用于確定要安裝的所有組件。
Tektoncd Operator 內(nèi)置了 3 個(gè) profile:lite、all、basic。
- all:此配置文件將安裝所有組件。
- basic:此配置文件將僅安裝 TektonPipeline 和 TektonTrigger 組件。
- lite:此配置文件將僅安裝 TektonPipeline 組件。
比如我們要安裝 pipelines、triggers 和 dashboard,可以使用 all 這個(gè) profile 進(jìn)行安裝,如下資源清單所示:
# tekton-operator-profile-all.yaml
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
profile: all
targetNamespace: tekton-pipelines
pruner:
resources:
- pipelinerun
- taskrun
keep: 100
schedule: "0 8 * * *"
其中 targetNamespace 用來指定安裝 Tekton 組件的命名空間,默認(rèn)為 tekton-pipelines,pruner 為 Tekton 資源提供自動清理功能。
- resources:指定可以自動清理的資源。
- keep:清理時(shí)要保留的最大資源數(shù)。
- schedule:清理資源的頻率。
直接安裝上面的資源對象即可:
$ kubectl apply -f tekton-operator-profile-all.yaml
$ kubectl get tektonconfig
NAME VERSION READY REASON
config v0.60.0 True
上面的 TektonConfig 對象我們配置的 profile 為 all,會自動為我們創(chuàng)建 tektonpipelines、tektontriggers、tektondashboard 組件對象:
$ kubectl get tektonpipelines
NAME VERSION READY REASON
pipeline v0.37.0 True
$ kubectl get tektontriggers
NAME VERSION READY REASON
trigger v0.20.1 True
$ kubectl get tektondashboard
NAME VERSION READY REASON
dashboard v0.27.0 True
上面的這幾個(gè) cr 對象創(chuàng)建后就會自動創(chuàng)建對應(yīng)的組件,如下所示:
$ kubectl get pods -n tekton-pipelines
NAME READY STATUS RESTARTS AGE
tekton-dashboard-84dc6f966b-g8flx 0/1 ImagePullBackOff 0 3m48s
tekton-operator-proxy-webhook-7587596c79-ld8vm 1/1 Running 0 30m
tekton-pipelines-controller-78bc48896b-sd9fk 1/1 Running 0 30m
tekton-pipelines-webhook-5f48c855b4-js54q 1/1 Running 0 30m
tekton-triggers-controller-668b94cb5b-ggbk7 1/1 Running 0 27m
tekton-triggers-core-interceptors-66b7ddd78c-pq7gb 1/1 Running 0 27m
tekton-triggers-webhook-c8fd7755d-rknch 1/1 Running 0 27m
由于 dashboard 組件的鏡像沒有對應(yīng)的覆蓋的環(huán)境變量,所以需要我們手動進(jìn)行修改:
$ kubectl edit deploy tekton-dashboard -n tekton-pipelines
......
image: cnych/tekton-dashboard:v0.28.0
......
Dashboard 的服務(wù)默認(rèn)通過 ClusterIP 方式進(jìn)行暴露,我們可以手動創(chuàng)建一個(gè) Ingress 對象或者修改 Service 為 NodePort 方式進(jìn)行暴露。
$ kubectl get svc -n tekton-pipelines
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
tekton-dashboard ClusterIP 10.102.221.1019097/TCP 28m
tekton-operator-proxy-webhook ClusterIP 10.96.175.155443/TCP 33m
tekton-pipelines-controller ClusterIP 10.99.0.859090/TCP,8008/TCP,8080/TCP 33m
tekton-pipelines-webhook ClusterIP 10.106.195.149090/TCP,8008/TCP,443/TCP,8080/TCP 33m
tekton-triggers-controller ClusterIP 10.99.84.1549000/TCP 30m
tekton-triggers-core-interceptors ClusterIP 10.97.83.1368443/TCP 30m
tekton-triggers-webhook ClusterIP 10.108.88.140443/TCP 30m
測試
Tekon 的組件安裝完成后,接下來我們來運(yùn)行一個(gè)簡單的 Pipeline。
首先創(chuàng)建一個(gè)如下所示的 Task 任務(wù),下面的任務(wù)中會在 bash 容器中去執(zhí)行 echo "Hello, world!" 的命令。
# hello-task.yaml
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
name: hello
spec:
steps:
- name: hello
image: bash:latest
command:
- echo
args:
- "Hello, world!"
用同樣的方式再創(chuàng)建一個(gè) goodbye 的任務(wù),只需要將上面的 echo 內(nèi)容修改為 goodbye 即可。
然后就可以定義一個(gè) Pipeline 流水線了,如下所示:
# hello-goodbye-pipeline.yaml
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
name: hello-goodbye-pipeline
spec:
tasks:
- name: hello
taskRef:
name: hello
- name: goodbye
runAfter:
- hello
taskRef:
name: goodbye
通過 taskRef 引用對應(yīng)的 Task 對象。
直接創(chuàng)建上面的資源對象即可:
$ kubectl get pipeline
NAME AGE
hello-goodbye-pipeline 24s
$ kubectl get task
NAME AGE
goodbye 101s
hello 107s
要執(zhí)行該流水線,我們還需要?jiǎng)?chuàng)建一個(gè) PipelineRun 的對象才會真正執(zhí)行。
# hello-goodbye-pipeline-run.yaml
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
generateName: hello-goodbye-pipeline-
spec:
pipelineRef:
name: hello-goodbye-pipeline
創(chuàng)建上面的資源即可,需要注意我們這里使用的 generateName? 屬性,需要使用 kubectl create 命令進(jìn)行創(chuàng)建。正常創(chuàng)建后很快就會按照上面 Pipeline 的描述去執(zhí)行兩個(gè)任務(wù)了。
要想卸載 Tekton 我們也只需要將定義的 TektonConfig 對象刪除即可。
如果不想使用 TektonCD Operator 內(nèi)置的幾個(gè) profile,我們也可以自己手動去分別配置不同組件的 CR 實(shí)例,另外 TektonCD Operator 現(xiàn)階段提供的可配置方式并不多,特別是對于國內(nèi)用戶來說鏡像這個(gè)老大難的問題,只能通過環(huán)境變量去全局覆蓋 Operator,還有部分鏡像壓根沒有覆蓋,如果是在國內(nèi)使用并且不能使用 gcr 鏡像的話可能體驗(yàn)就不是那么順暢了。
當(dāng)前文章:使用 Tektoncd Operator 管理 Tekton 組件
網(wǎng)站網(wǎng)址:http://www.dlmjj.cn/article/cojhogj.html


咨詢
建站咨詢
