我是Kubernetes的新手,我正在努力弄清楚我应该为我的php webapp设置什么资源限制。
我的第一个猜测是,如果我已经将php fpm配置为最多使用256米内存,那么是否应该将kubernetes配置为限制为256 m。
设置如下:
Deployment中,我在fpm容器上设置了资源限制:资源:请求: cpu:“500 m”内存:“128 my”限制: cpu:"1“内存:”256 my“让我问这个问题的是,PHP.net文档说:
memory_limit整数--它设置脚本允许分配的最大内存量(以字节为单位)。这有助于防止编写不当的脚本占用服务器上的所有可用内存。
php可以同时处理多个请求,我猜每个请求都运行一个完全独立于其他请求的脚本。它们不共享memory_limit设置。如果是这样的话,也许我的Kubernetes容器限制应该高于php memory_limit设置?
好吧,但是有多高!?如果我限制cpu: 1,我猜这意味着不可能有真正的并行处理,但是仍然有许多进程共享CPU,当被IO阻塞时,操作系统切换。我认为fpm pm.max_children设置会告诉我可以运行多少个脚本,因此可以最大限度地占用多少内存。但这会让人感到困惑,因为在我们的非Kubernetes设置中,我们根据实例有多少内存来选择max_children。我们使用的公式是:
max_children = (RAM - 2Gb) / 80Mb
# Where:
# * We Reserve 2Gb for the system.
# * We saw that each request needs on average 40Mb of memory, so we chose 80Mb to be safe.由于RAM是在运行时指定的,因此这个等式在Kubernetes世界中是不存在的,您不需要为系统保留任何内存,因为容器只运行php。
我想用:
memory_limit = 256M
max_children = 10
resources:
requests:
cpu: "500m"
memory: "512Mi"
limits:
cpu: "1"
memory: "2Gi"OOMKilled,我认为这是因为它超过了极限。这种想法看上去合理吗?我不认为它将允许良好的包装,因为10个孩子几乎不需要2Gi限制。如果资源紧张,我们将使用HPA添加更多的豆荚。
你在库伯内特斯的设计中做了什么?
发布于 2018-08-06 13:50:39
设置容器资源请求和限制是在Kubernetes集群中有效使用资源的第一步。设置这些值后,请确保已设置了监视和警报,以确定是否需要调整这些值或升级群集。如果您的容器遇到内存压力,内核将积极地丢弃页面缓存条目以满足需求,最终可能会被Linux (OOM)杀手杀死。由于K8s禁用交换(通过将内存-交换=0传递给Docker),因此对于错误配置而言,这是一个非常不可原谅的环境。
下面您可以找到适合阅读K8s限制并要求理解的文章:
https://serverfault.com/questions/924847
复制相似问题