![Kubernetes 上运行的 Nginx/Openresty 的 worker_processes 值](https://linux22.com/image/766337/Kubernetes%20%E4%B8%8A%E8%BF%90%E8%A1%8C%E7%9A%84%20Nginx%2FOpenresty%20%E7%9A%84%20worker_processes%20%E5%80%BC.png)
根据此处的文档,https://nginx.org/en/docs/ngx_core_module.html#worker_processes
worker_processes 定义为工作进程的数量。
最佳值取决于许多因素,包括(但不限于)CPU 核心数、存储数据的硬盘驱动器数和负载模式。如果有疑问,将其设置为可用 CPU 核心数将是一个不错的开始(值“auto”将尝试自动检测它)。
大多数指南建议将此值设置为服务器上的核心数,或设置为自动,而自动本身会将其设置为机器上的核心数。
我在 kubernetes 上运行 OpenResty,因此当我从 openresty pod 内部检查 CPU 核心数时,它会返回我的物理机器(节点)拥有的核心数。但是,由于 k8s 上的 CPU 请求和限制,pod 无法使用所有 8 个核心。
那么在 kubernetes 的情况下,共享 CPU 的 worker_processes 值应该是多少?
谢谢!
答案1
好问题,我仍在寻找答案。但是,目前我的想法是,Nginx + Kubernetes(其中 Nginx 不是入口控制器)应该有工作进程 = 1。为什么?每个工作进程都是容器内的一个新进程,一般指导原则是应该只有一个进程。因此,如果您使用“auto”,其中 n 是核心数,则 Nginx 在单个容器中将有 n + 1 个进程。即使设置工作进程 = 1,容器中也总共有 2 个进程。
假设 Nginx 非常擅长维护其附加进程,那么您可能可以使用“自动”并在单个 pod 中利用 Nginx。或者,您可以使用工作进程 = 1,然后在外部扩展 pod 以实现类似的规模。
最终,需要对不同场景进行一些性能测试来确认它如何适用于您的应用程序。