我们是通过Helm私有化部署Airbyte,经过一段时间的运行,发现Airbyte 每个Job的Pod对CPU Limits 资源要求比较高,经常会遇到短时、高并发场景下集群的CPU资源不足而触发Autoscale,但通过观测数据发现,集群节点CPU的资源利用率并不高。
可以看到一个 Airbyte Job任务会有5个容器
为了能满足更好的性能,我们进行了两次修改配置,才能对这五个容器的CPU Limit 资源进行配置。
**第一次--可配置的优化
在Helm的value.yaml定义如下配置:
socat:
resources:
limits:
cpu: 300m
jobs:
resources:
limits:
cpu: 500m
memory: 250Mi
在env-configmap.yaml增加了SOCAT_KUBE_CPU_LIMIT的值
SOCAT_KUBE_CPU_LIMIT: {{ ((.Values.global.socat.resources | default dict).limits | default dict).cpu | default "" | quote }}
**第二次--源码参数的优化
在 airbyte-platform/airbyte-commons-worker/src/main/java/io/airbyte/workers/process/KubePodProcess.java 127行处
private static final ResourceRequirements LOW_SOCAT_RESOURCES = new ResourceRequirements()
.withMemoryLimit(configs.getSidecarKubeMemoryLimit()).withMemoryRequest(configs.getSidecarMemoryRequest())
.withCpuLimit("2").withCpuRequest("0.25");
可以看到此处withCpuLimit是2,根据需要直接改成0.3
在 airbyte-platform/airbyte-config/config-models/src/main/java/io/airbyte/config/EnvConfigs.java 93行处
private static final String DEFAULT_SIDECAR_KUBE_CPU_LIMIT = "2.0";
可以看到此处DEFAULT_SIDECAR_KUBE_CPU_LIMIT是2,根据需要直接改成0.3
编码编译airbyte后,获取新版本的airbyte-worker的镜像,更新后终于看到这5个容器的CPU Limit终于变成期望的配置值。
分析一下job的Yaml文件,我们可以看到。