#配置 Pipeline 组件的资源配额
#目录
#Overview
配置与 Pipeline 组件相关的资源配额。
#Use Cases
- 调整 Pipeline 组件的资源配额
- 设置 TaskRun 创建的 init-containers 和 containers 的默认资源配额
#Prerequisites
- 必须已安装 Tekton Operator 组件
- 环境中必须已自动创建 TektonConfig 资源
- 应阅读关于调整子组件可选配置项的文档
#Resource Configuration Guidelines
在配置资源配额之前:
- 评估集群的可用资源和容量
- 考虑工作负载的特性和性能需求
- 从保守的值开始,根据监控数据进行调整
- 先在非生产环境中测试配置
#Steps
#Step 1
编辑 TektonConfig 资源
$ kubectl edit tektonconfigs.operator.tekton.dev config#Step 2
WARNING
修改配置可能会触发组件 Pods 的滚动更新,可能导致短暂的服务不可用。请在合适的时间执行此操作。
修改 spec.pipeline.options.deployments 配置示例:
apiVersion: operator.tekton.dev/v1alpha1
kind: TektonConfig
metadata:
name: config
spec:
pipeline:
options:
disabled: false
configMaps:
config-defaults:
data:
# 添加默认容器资源配额
# 根据集群资源容量和工作负载需求调整以下数值
default-container-resource-requirements: |
place-scripts: # 更新 'place-scripts' 容器的资源需求
requests:
memory: "<MEMORY_REQUEST>" # 例如 "128Mi"
cpu: "<CPU_REQUEST>" # 例如 "250m"
limits:
memory: "<MEMORY_LIMIT>" # 例如 "512Mi"
cpu: "<CPU_LIMIT>" # 例如 "500m"
prepare: # 更新 'prepare' 容器的资源需求
requests:
memory: "<MEMORY_REQUEST>" # 例如 "128Mi"
cpu: "<CPU_REQUEST>" # 例如 "250m"
limits:
memory: "<MEMORY_LIMIT>" # 例如 "256Mi"
cpu: "<CPU_LIMIT>" # 例如 "500m"
working-dir-initializer: # 更新 'working-dir-initializer' 容器的资源需求
requests:
memory: "<MEMORY_REQUEST>" # 例如 "128Mi"
cpu: "<CPU_REQUEST>" # 例如 "250m"
limits:
memory: "<MEMORY_LIMIT>" # 例如 "512Mi"
cpu: "<CPU_LIMIT>" # 例如 "500m"
prefix-scripts: # 更新以 'scripts-' 开头的容器的资源需求
requests:
memory: "<MEMORY_REQUEST>" # 例如 "128Mi"
cpu: "<CPU_REQUEST>" # 例如 "250m"
limits:
memory: "<MEMORY_LIMIT>" # 例如 "512Mi"
cpu: "<CPU_LIMIT>" # 例如 "500m"
prefix-sidecar-scripts: # 更新以 'sidecar-scripts-' 开头的容器的资源需求
requests:
memory: "<MEMORY_REQUEST>" # 例如 "128Mi"
cpu: "<CPU_REQUEST>" # 例如 "250m"
limits:
memory: "<MEMORY_LIMIT>" # 例如 "512Mi"
cpu: "<CPU_LIMIT>" # 例如 "500m"
sidecar-tekton-log-results: # 更新 'sidecar-tekton-log-results' 容器的资源需求
requests:
memory: "<MEMORY_REQUEST>" # 例如 "128Mi"
cpu: "<CPU_REQUEST>" # 例如 "100m"
limits:
memory: "<MEMORY_LIMIT>" # 例如 "256Mi"
cpu: "<CPU_LIMIT>" # 例如 "250m"
deployments:
# 根据集群容量和性能需求调整以下资源数值
tekton-pipelines-controller:
spec:
replicas: <REPLICA_COUNT> # 例如 1
template:
spec:
containers:
- name: tekton-pipelines-controller
resources:
requests:
cpu: <CPU_REQUEST> # 例如 "500m"
memory: <MEMORY_REQUEST> # 例如 "512Mi"
limits:
cpu: <CPU_LIMIT> # 例如 "1"
memory: <MEMORY_LIMIT> # 例如 "1Gi"
tekton-pipelines-remote-resolvers:
spec:
replicas: <REPLICA_COUNT> # 例如 1
template:
spec:
containers:
- name: controller
resources:
requests:
cpu: <CPU_REQUEST> # 例如 "200m"
memory: <MEMORY_REQUEST> # 例如 "256Mi"
limits:
cpu: <CPU_LIMIT> # 例如 "500m"
memory: <MEMORY_LIMIT> # 例如 "512Mi"
tekton-pipelines-webhook:
spec:
replicas: <REPLICA_COUNT> # 例如 1
template:
spec:
containers:
- name: webhook
resources:
requests:
cpu: <CPU_REQUEST> # 例如 "500m"
memory: <MEMORY_REQUEST> # 例如 "256Mi"
limits:
cpu: <CPU_LIMIT> # 例如 "1"
memory: <MEMORY_LIMIT> # 例如 "500Mi"
tekton-events-controller:
spec:
replicas: <REPLICA_COUNT> # 例如 1
template:
spec:
containers:
- name: tekton-events-controller
resources:
requests:
cpu: <CPU_REQUEST> # 例如 "100m"
memory: <MEMORY_REQUEST> # 例如 "100Mi"
limits:
cpu: <CPU_LIMIT> # 例如 "200m"
memory: <MEMORY_LIMIT> # 例如 "256Mi"#Step 3
提交配置并等待 Pods 更新。
$ kubectl get pods -n tekton-pipelines -w
NAME READY STATUS RESTARTS AGE
tekton-pipelines-controller-648d87488b-fq9bc 1/1 Running 0 2m21s
tekton-pipelines-remote-resolvers-79554f5959-cbm6x 1/1 Running 0 2m21s
tekton-pipelines-webhook-5cd9847998-864zf 1/1 Running 0 2m20s
tekton-events-controller-5c97b7554c-m59m6 1/1 Running 0 2m21s#Operation Result
您可以看到与 Pipeline 相关组件的资源配额配置已生效。
$ kubectl get deployments.apps -n tekton-pipelines tekton-pipelines-controller tekton-pipelines-remote-resolvers tekton-pipelines-webhook tekton-events-controller -o yaml | grep 'resources:' -A 6
resources:
limits:
cpu: "1"
memory: 1Gi
requests:
cpu: 500m
memory: 512Mi
--
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 200m
memory: 256Mi
--
resources:
limits:
cpu: "2"
memory: 500Mi
requests:
cpu: "1"
memory: 256Mi
--
resources:
limits:
cpu: 200m
memory: 256Mi
requests:
cpu: 100m
memory: 100Mi#验证 Pod 资源配额配置
#创建一个 TaskRun
$ cat <<'EOF' | kubectl create -f -
apiVersion: tekton.dev/v1
kind: TaskRun
metadata:
name: hello
namespace: default
spec:
taskSpec:
steps:
- name: hello
image: alpine
command: ["echo", "hello"]
EOF#等待 TaskRun 完成
$ kubectl get taskruns.tekton.dev -n default hello
NAME SUCCEEDED REASON STARTTIME COMPLETIONTIME
hello True Succeeded 2m41s 2m28s#查看 Pod 资源配额配置
$ kubectl get pods -n default hello-hello-pod -o yaml
apiVersion: v1
kind: Pod
metadata:
name: hello-pod
namespace: default
spec:
containers:
- image: alpine
name: step-hello
resources: {}
initContainers:
- name: prepare
resources:
limits:
cpu: 100m
memory: 256Mi
requests:
cpu: 50m
memory: 64Mi您可以看到 Pod 中 initContainers 容器 prepare 的资源配额与 config-defaults ConfigMap 中配置的资源配额一致。