Airbyte on Kubernetes 的一些优化

376 阅读1分钟

我们是通过Helm私有化部署Airbyte,经过一段时间的运行,发现Airbyte 每个Job的Pod对CPU Limits 资源要求比较高,经常会遇到短时、高并发场景下集群的CPU资源不足而触发Autoscale,但通过观测数据发现,集群节点CPU的资源利用率并不高。

image.png

可以看到一个 Airbyte Job任务会有5个容器

image.png

为了能满足更好的性能,我们进行了两次修改配置,才能对这五个容器的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终于变成期望的配置值。

image.png

分析一下job的Yaml文件,我们可以看到。

image.png

image.png

image.png

image.png

image.png