调整子组件的可选配置项

功能概述

通过调整TektonConfig资源中每个组件的options配置,可以达到对子组件进行自定义配置的目的。

本文档介绍了options支持的配置项,以及如何配置这些项。

使用案例

Tekton支持通过TektonConfig资源来部署子组件。该资源在spec.pipelinespec.triggerspec.hubspec.chainspec.results字段下具有一个通用的配置项options

通过options配置,可以实现:

  • 组件的定点部署
  • 高可用性设置的修改
  • 组件副本数量的修改
  • 组件资源配额的修改
  • 默认ConfigMap配置项的修改

详细可配置项

  • 修改组件的Deployment配置,例如:
    • labelsannotations配置
    • 副本数量replicas
    • 亲和性规则affinity
    • 优先级类priorityClassName
    • 节点选择器nodeSelector
    • 容忍规则tolerations
    • 拓扑分布约束topologySpreadConstraints
    • 运行时类runtimeClassName
    • volumes
    • 容器containersinitContainers
      • 资源配额resources.limitsresources.requests
      • 环境变量env
      • volumes
      • 执行参数args
  • 修改组件的ConfigMap配置,例如:
    • labelsannotations配置
    • 更新或添加新的data配置项
  • 修改组件的Ingress配置,例如:
    • ingressClassName以覆盖默认ingressClass配置
    • rules以覆盖默认路由规则
    • tls以覆盖默认证书配置
  • 修改组件的HorizontalPodAutoscaler的自动伸缩配置,例如:
    • 添加该配置
    • 修改minReplicasmaxReplicas配置
    • 修改targetCPUUtilizationPercentage配置等
  • 修改组件的StatefulSet配置
  • 修改组件的ValidatingWebhookConfigurationMutatingWebhookConfiguration配置

前提条件

在使用该功能之前,请确保:

  • 已安装Tekton Operator组件
  • 环境中已自动创建TektonConfig资源
  • TektonConfig中支持的配置项有基本的理解

以下是一个选项配置的典型示例:

apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  targetNamespace: tekton-pipelines
  hub: {}
  chain: {}
  trigger: {}
  pipeline:
    options:
      # 是否启用选项配置,默认值为false。当设置为true时,options下的所有配置将无效。
      disabled: false

      # 配置ConfigMap的配置项
      configMaps:
        # 要修改或添加的ConfigMap名称
        config-defaults:
          data:
            # 要修改或添加的配置项
            default-container-resource-requirements: |
              place-scripts: # 更新'place-scripts'容器的资源要求
                requests:
                  memory: "64Mi"
                  cpu: "50m"
                limits:
                  memory: "128Mi"
                  cpu: "100m"

      # 配置Deployment的配置项
      deployments:
        # 要修改的Deployment名称
        tekton-events-controller:
          metadata:
            # 要修改的Deployment的标签配置
            labels:
              key: value
            # 要修改的Deployment的注解配置
            annotations:
              key: value
          spec:
            # 要修改的Deployment的副本数量
            replicas: 1
            # 要修改的模板配置
            template:
              metadata:
                # 要修改的标签配置
                labels:
                  key1: value
                # 要修改的注解配置
                annotations:
                  key1: value
              spec:
                # 要修改的亲和性配置
                affinity:
                  nodeAffinity:
                    requiredDuringSchedulingIgnoredDuringExecution:
                      nodeSelectorTerms:
                        - matchExpressions:
                          - key: kubernetes.io/os
                            operator: In
                            values:
                              - linux

                # 要修改的节点选择器配置
                nodeSelector:
                  kubernetes.io/os: linux

                # 要修改的容忍配置
                tolerations:
                  - effect: NoSchedule
                    key: node-role.kubernetes.io/master
                    operator: Exists

                # priorityClassName: ""
                # topologySpreadConstraints: ""
                # runtimeClassName: ""
                # volumes: []
                # initContainers: []

                containers:
                  # 要修改的容器名称
                  - name: tekton-events-controller
                    # 要修改的资源配额
                    resources:
                      limits:
                        cpu: "1"
                        memory: 1Gi
                      requests:
                        cpu: 500m
                        memory: 512Mi

                    # 要修改的环境变量
                    env:
                      - name: key
                        value: value

                    # 要修改的卷配置
                    # volumes: []

                    # 要添加的执行参数
                    # args: []

      # 要修改或添加的HorizontalPodAutoscalers配置
      horizontalPodAutoscalers:
        # 要修改的horizontalPodAutoscaler名称
        tekton-pipelines-remote-resolvers:
          metadata:
            # 要修改的注解配置
            # 要修改的标签配置
            labels:
              key: value
            annotations:
              key: value
          spec:
            # 要修改的MinReplicas配置
            minReplicas: 1
            # 要修改的MaxReplicas配置
            maxReplicas: 5
            # 要修改的Metrics配置
            metrics:
              - resource:
                  name: cpu
                  target:
                    averageUtilization: 50
                    type: Utilization
                type: Resource
              - resource:
                  name: memory
                  target:
                    averageUtilization: 50
                    type: Utilization
                type: Resource
            # 要修改的scaleTargetRef配置
            scaleTargetRef:
              apiVersion: apps/v1
              kind: Deployment
              name: tekton-pipelines-remote-resolvers

操作步骤

pipeline组件为例,本节描述如何配置资源配额。

步骤1

编辑TektonConfig资源

$ kubectl edit tektonconfigs.operator.tekton.dev config

步骤2

WARNING

修改配置可能触发组件Pods的滚动更新,这可能会暂时使服务不可用。请在合适的时间执行此操作。

spec.pipeline.options.deployments配置修改如下:

  • Deployment tekton-events-controller的副本数量更改为2
  • 修改Deployment tekton-events-controllerresources配置
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
  name: config
spec:
  targetNamespace: tekton-pipelines
  hub: {}
  chain: {}
  trigger: {}
  pipeline:
    options:
      disabled: false
      deployments:
        tekton-events-controller:
          spec:
            replicas: 2
            template:
              spec:
                containers:
                  - name: tekton-events-controller
                    resources:
                      limits:
                        cpu: "1"
                        memory: 1Gi
                      requests:
                        cpu: 500m
                        memory: 512Mi

步骤3

提交配置并等待Pods更新。

$ kubectl get pods -n tekton-pipelines -l app=tekton-events-controller -w

NAME                                       READY   STATUS    RESTARTS   AGE
tekton-events-controller-fcd56975b-knvzx   1/1     Running   0          20s
tekton-events-controller-fcd56975b-qqprt   1/1     Running   0          31s

操作结果

你可以看到tekton-events-controller的副本数量为2,并且resources配置已生效。

$ kubectl get deployments.apps -n tekton-pipelines tekton-events-controller -o yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tekton-events-controller
  namespace: tekton-pipelines
spec:
  replicas: 2
  template:
    metadata:
    spec:
      containers:
      - name: tekton-events-controller
        resources:
          limits:
            cpu: "1"
            memory: 1Gi
          requests:
            cpu: 500m
            memory: 512Mi

后续操作

如果需要修改其他组件的配置,可以参考上述步骤来修改其他组件的options配置。

参考资料