首页 > 解决方案 > 在 AKS 集群中处理大文件 (3gb) 所需的节点硬件要求和 kubernetes nginx 入口配置是什么?

问题描述

我们需要通过托管在 AKS 群集中的 .net 核心 api pod 来处理总计不超过 3gb 大小的文件集合。

3 节点集群的当前节点配置为 16gb Ram 和 2vCpus。我还添加了一些入口注释,如下所示:

nginx.ingress.kubernetes.io/client-body-buffer-size: 5000M
nginx.ingress.kubernetes.io/client-max-body-size: 5000M
nginx.ingress.kubernetes.io/proxy-body-size: 5000M
nginx.ingress.kubernetes.io/proxy-connect-timeout: '14400'
nginx.ingress.kubernetes.io/proxy-next-upstream-timeout: '14400'
nginx.ingress.kubernetes.io/proxy-read-timeout: '14400'
nginx.ingress.kubernetes.io/proxy-send-timeout: '14400'
nginx.ingress.kubernetes.io/server-snippet: keepalive_timeout 3600s; client_body_timeout 3600s;

这些更改通过使用 1.02cpu 和 1000mi 内存近 5 分钟的入口来帮助处理高达 2gb 的文件大小。我为入口更新的最新资源要求如下,但它也没有帮助。

resources:
    requests:
      cpu: 1400m
      memory: 3000Mi

但是难以处理超过 2gb 的大小,并在处理大约 7 分钟后终止并引发内部服务器错误。

我还找不到确切的日志消息,除了硬件和入口配置以成功处理 3gb 文件大小之外,有关配置 azure 指标、日志、警报的任何建议也很有帮助。

标签: kuberneteskubernetes-ingressnginx-ingressazure-aks

解决方案


对于该大小的上传,或者直接发布服务端口,或者如果入口提供一些其他功能,请禁用 nginx 中的请求缓冲。

将上传服务放在它自己的入口主机上:upload.x.com

  nginx.ingress.kubernetes.io/proxy-request-buffering: off
  nginx.ingress.kubernetes.io/proxy-body-size: 3G

否则,缓冲对临时文件的请求,因此 nginx 不会将请求保存在内存中。

  nginx.ingress.kubernetes.io/configuration-snippet: |
    client_body_in_file_only: on
  nginx.ingress.kubernetes.io/proxy-max-temp-file-size: 3G
  nginx.ingress.kubernetes.io/client-body-buffer-size: 64k
  nginx.ingress.kubernetes.io/proxy-body-size: 3G

推荐阅读