当前位置: 首页 > 科技观察

访谈突击69:TCP可靠吗?为什么?

时间:2023-03-18 17:09:30 科技观察

TektoncdOperator是一个Kubernetes扩展,用于在Kubernetes集群上安装、升级和管理TektonCDPipelines、Dashboard、Triggers等。我们只需要编写各个组件的yaml就可以直接管理Tekton的各个组件。CRD描述TektonConfig配置要安装和管理的Tekton组件。TektonPipeline配置、安装和管理TektonPipeline组件。TektonTrigger配置、安装和管理TektonTrigger组件。TektonDashboard配置、安装和管理Tekton仪表板组件。TektonResult配置、安装和管理TektonResult组件。TektonAddon配置安装管理插件,目前只支持Openshift。安装有几种方法可以安装TektoncdOperator。从OperatorHub安装,可以直接进入OperatorHub页面https://operatorhub.io/operator/tektoncd-operator进行安装,其生命周期将由OperatorLifecycleManager(OLM)进行管理。您可以直接从Github发布页面https://github.com/tektoncd/operator/releases获取资源清单文件,以使用资源清单文件进行安装。如果采用这种方式安装,需要自己管理Operator的生命周期。只需使用以下命令即可安装它。$kubectlapply-fhttps://storage.googleapis.com/tekton-releases/operator/latest/release.yaml由于官方镜像是gcr的镜像,所以一般情况下是获取不到的。如果你的集群由于某种原因无法获取镜像,可以使用如下资源列表文件:$kubectlapply-fhttps://my-oss-testing.oss-cn-beijing.aliyuncs.com/k8s/tekton/operator/release.v0.60.0.ymlTektoncdOperator创建的对象默认会使用gcr的镜像,比如TektonPipelinescontroller的镜像。可以通过环境变量IMAGE_PIPELINES_TEKTON_PIPELINES_CONTROLLER指定对应的镜像。下面显示的环境变量覆盖默认gcr如何配置图像:-名称:IMAGE_PIPELINES_PROXY值:cnych/tekton-operator-proxy-webhook:v0.60.0-名称:IMAGE_JOB_PRUNER_TKN值:cnych/tekton-operator-pruner-tkn:v0.60.0-名称:IMAGE_PIPELINES_TEKTON_PIPELLINESvalue_CONT/tekton-controller:v0.37.2-名称:IMAGE_PIPELINES_WEBHOOK值:cnychinit:v0.37.2-名称:IMAGE_PIPELINES_ARG__IMAGEDIGEST_EXPORTER_IMAGE值:CNYCH/TEKTON-IMAGGEDIGESTEXPORTER:V0.37.2-名称:Image_pipelines_arg__kubeconfig_writer_imagevaluit-触发器控制器:v0.20.1-名称:IMAGE_TRIGGERS_WEBHOOK值:cnych/tekton-triggers-webhook:v0.20.1-名称:IMAGE_TRIGGERS_TEKTON_TRIGGERS_CORE_INTERCEPTORScny/tekton-triggers-interceptors:v0.20.1-名称:IMAGERS_triggers_value:IMAGERSeventlistenersink:v0.20.1上述方法将创建一个名为tekton-operator的命名空间,其中包含一个Operator和一个WebhookPod:$kubectlgetpods-ntekton-operatorNAMEREADYSTATUSRESTARTSAGEtekton-operator-9d747548b-67t7m2/2Running09m42stekton-operator-webhook-6cc769b85d-fssq91/1运行09m42s安装好Operator后,可以安装需要的Tekton组件,比如Tekton管道、Tekton触发器每个Tekton组件都有一个用于安装和管理组件的自定义资源。$kubectlgetcrd|greptekton|grepoperatortektonchains.operator.tekton.dev2022-07-25T00:51:07Ztektonconfigs.operator.tekton.dev2022-07-25T00:51:07Ztektondashboards.operator.tekton.dev2022-07-25T00:51:07Ztektonhubs.operator.tekton.dev2022-07-25T00:51:07Ztektoninstallersets.operator.tekton.dev2022-07-25T00:51:07Ztektonpipelines.operator.tekton.dev2022-07-25T00:51:07Z.operator.tekton.dev2022-07-25T00:51:07Ztektontriggers.operator.tekton.dev2022-07-25T00:51:07Z其中TektonConfig是创建其他组件的顶级CRD。因此,我们只需要创建一个具有所需配置的TektonConfig对象,它将帮助我们相应地安装其他组件。TektonConfig会根据传递给它的配置文件创建TektonPipeline、TektonTriggers等组件CR对象,其中有一个配置文件字段,可以用来确定所有要安装的组件。TektoncdOperator有3个内置配置文件:lite、all、basic。all:此配置文件将安装所有组件。basic:此配置文件将仅安装TektonPipeline和TektonTrigger组件。lite:此配置文件将仅安装TektonPipeline组件。比如我们要安装pipelines、triggers和dashboards,可以使用allprofile来安装,如下资源列表所示:#tekton-operator-profile-all.yamlapiVersion:operator.tekton.dev/v1alpha1kind:TektonConfigmetadata:name:configspec:profile:alltargetNamespace:tekton-pipelinespruner:resources:-pipelinerun-taskrunkeep:100schedule:"08***"其中targetNamespace用于指定安装Tekton组件的命名空间。默认为tekton-pipelines,pruner提供Tekton资源自动清理功能。resources:指定可以自动清理的资源。keep:清理时保留的最大资源数。schedule:清理资源的频率。直接安装上面的资源对象即可:$kubectlapply-ftekton-operator-profile-all.yaml$kubectlgettektonconfigNAMEVERSIONREADYREASONconfigv0.60.0True上面我们配置的TektonConfig对象就是全部了,会自动帮我们创建tektonpipelines、tektontriggers、tektondashboard组件对象:$kubectlgettektonpipelinesNAMEVERSIONREADYREASONpipelinev0.37.0True$kubectlgettektontriggersNAMEVERSIONREADYREASONtriggerv0.20.1True$kubectlgettektondashboardNAMEVERSIONREADYREASONdashboardv0.27.0True上面的这几个cr对象创建后会自动创建相应的组件,如下:$kubectlgetpods-ntekton-pipelinesNAMEREADYSTATUSRESTARTSAGEtekton-dashboard-84dc6f966b-g8flx0/1ImagePullBackOff03m48stekton-operator-proxy-webhook-7587596c79-ld8vm1/1Running030mtekton-pipelines-controller-78bc48896b-sd9fk1/1运行030mtekton-pipelines-webhook-5f48c855b4-js54q1/1正在运行030mtekton-triggers-controller-668b94cb5b-ggbk71/1正在运行027mtekton-triggers-core-interceptors-66b7ddd78c-pq7gb1/1正在运行027mtekton-dggersd1ggtoners1Running027m由于dashboard组件的image没有对应的覆盖环境变量,我们需要手动修改:$kubectleditdeploytekton-dashboard-ntekton-pipelines...image:cnych/tekton-dashboard:v0.28.0......仪表盘服务默认通过ClusterIP暴露。我们可以手动创建一个Ingress对象或者修改Service为NodePort来暴露$kubectlgetsvc-ntekton-pipelinesNAMETYPECLUSTER-IPEXTERNAL-IPPORT(S)AGEtekton-dashboardClusterIP10.102.221.1019097/TCP28mtekton-operator-proxy-webhookClusterIP10.96.175.155443/TCP33mtekton-pipelines-controllerClusterIP10.99.0.859090/TCP,8008/TCP,8080/TCP33mtekton-pipelines-webhookClusterIP10.106.195.149090/TCP,8008/TCP,443/TCP,8080/TCP33mtekton-triggers-controllerClusterIP10.99.84.1549000/TCP30mtekton-triggers-core-interceptorsClusterIP10.97.83.1368443/TCP30mtekton-triggers-webhookClusterIP10.108.88.140443/TCP30mTestTekon的组件安装完成后,我们来运行一个简单的Pipeline。首先,创建一个Task任务,如下所示。在下面的任务中,回显“Hellowillbeexecutedinthebashcontainer,world!”命令。#hello-task.yamlapiVersion:tekton.dev/v1beta1kind:Taskmetadata:name:hellospec:steps:-name:helloimage:bash:latestcommand:-echoargs:-“你好,世界!”同样的方法再创建一个goodbye的任务,将上面的echo内容改成goodbye即可。然后就可以定义一个Pipeline流水线了,如下:再见runAfter:-hellotaskRef:name:goodbye使用taskRef来引用对应的Task对象。直接创建上面的资源对象即可:$kubectlgetpipelineNAMEAGEhello-goodbye-pipeline24s$kubectlgettaskNAMEAGEgoodbye101shello107s要执行管道,我们还需要创建一个PipelineRun对象来实际执行它。#hello-goodbye-pipeline-run.yamlapiVersion:tekton.dev/v1beta1kind:PipelineRunmetadata:generateName:hello-goodbye-pipeline-spec:pipelineRef:name:hello-goodbye-pipeline创建上面资源即可,需要注意的是我们在这里使用的generateName属性需要使用kubectlcreate命令创建。正常创建后,很快就会执行上面Pipeline中描述的两个任务。卸载Tekton,我们只需要删除定义的TektonConfig对象即可。如果你不想使用TektonCDOperator内置的几个配置文件,我们也可以手动配置不同组件的CR实例。另外,TektonCDOperator目前提供的可配置方式并不多,尤其是对于国内用户而言。对于镜像这个由来已久的问题,只能通过环境变量对operator进行全局覆盖,有些镜像根本没有覆盖。如果是在国内使用,不能使用gcr镜像,体验可能不会那么流畅。