云容器引擎 CCE-Nginx Ingress使用建议:Nginx Ingress Controller优化设置
Nginx Ingress Controller优化设置
- 使用合适的副本数和资源限制
默认情况下,通过插件中心安装的Nginx Ingress Controller的实例数为2,您可以根据业务的实际需要进行调整。
在部署Nginx Ingress Controller时,多实例会默认分配到不同可用区或者是同一可用区的不同节点。
同时建议您不要将Nginx Ingress Controller的资源限制设置太小,避免OOM所带来的流量中断。建议CPU限制值不低于1000m、内存限制值不低于2 GiB。
- 使用独占节点来提升Nginx Ingress性能与稳定性
提前在创建节点时,设置节点的污点。在安装Nginx Ingress Controller插件时,在容忍策略中添加该节点的污点。详情请参见独占节点部署。
- 优化Nginx Ingress性能
Nginx Ingress Controller性能调优主要分为系统参数调优和Nginx参数调优:
- 系统参数调优:华为云上的操作系统已经默认优化了一些常见参数,其他还需要调优的系统参数主要包括连接队列的大小、源端口的范围。系统参数调优后可以保证Nginx处理高并发请求的能力,以及在连接后端时不会因为端口耗尽而失败。
- Nginx参数调优:
- 调高 keepalive 连接最大请求数:高并发环境中,增大 Nginx 与 client 的 keepalive 连接的最大请求数量,避免产生大量的TIME_WAIT 连接。
- 调高单个 Worker 最大连接数:Nginx参数主要可以调整单个Worker的最大连接数来保证Nginx Ingress Controller处理高并发请求的能力。
- 调高 keepalive 最大空闲连接数:高并发环境下,建议将 keepalive 值配置为1000。
- 设置网关超时:请您确保后端的业务长连接的超时时间不低于Nginx Ingress Controller的连接超时时间。
- 对Nginx Ingress Controller配置HPA进行自动扩容
一般情况下,Nginx Ingress Controller已经有足够的能力应对业务的突发流量。如果在高负载情况下仍不满足您的要求,也可以配置HPA对Nginx Ingress Controller进行扩容。具体操作,请参见HPA策略。
- 为后端服务配置合理的preStop Hook
后端服务滚动更新时,Nginx Ingress Controller会将正在终止的Pod从后端服务器中移除,但会保持还在处理的请求的连接。如果后端服务Pod在收到结束信号后立即退出,可能会导致正在处理的请求失败或部分流量仍被转发到已经退出的Pod中,导致部分流量损失。为了避免这种情况,建议在后端服务的Pod中配置preStop Hook,在Pod被移除后继续工作一段时间,以解决流量中断的问题。
工作负载配置示例如下:
... spec: template: spec: containers: - name: app lifecycle: # 配置preStop Hook,等待30秒后退出。 # 需要容器中存在sleep命令。 preStop: exec: command: - sleep - 30