23.2. 请求和限制
对于每个计算资源,容器可以指定一个资源请求和限制。根据确保节点有足够可用容量以满足请求值的请求来做出调度决策。如果容器指定了限制,但忽略了请求,则请求会默认采用这些限制。容器无法超过节点上指定的限制。
限制的强制实施取决于计算资源类型。如果容器没有请求或限制,容器会调度到没有资源保障的节点。在实践中,容器可以在最低本地优先级适用的范围内消耗指定的资源。在资源较少的情况下,不指定资源请求的容器将获得最低的服务质量。
23.2.1. 调整缓冲区块限制
如果 Fluentd 日志记录器无法跟上大量日志,则需要切换到文件缓冲来降低内存用量并防止数据丢失。
Fluentd buffer_chunk_limit
由环境变量 BUFFER_SIZE_LIMIT
决定,其默认值为 8m
。每个输出的文件缓冲区大小由环境变量 FILE_BUFFER_LIMIT
决定,其默认值为 256Mi
。持久性卷大小必须大于 FILE_BUFFER_LIMIT
与输出相乘的结果。
例如,在 Fluentd 和 Mux pod 上,持久性卷 /var/lib/fluentd 应该由 PVC 或 hostmount 准备。然后,将该区域用作文件缓冲区。
buffer_type
和 buffer_path
在 Fluentd 配置文件中进行配置,如下所示:
$ egrep "buffer_type|buffer_path" *.conf output-es-config.conf: buffer_type file buffer_path `/var/lib/fluentd/buffer-output-es-config` output-es-ops-config.conf: buffer_type file buffer_path `/var/lib/fluentd/buffer-output-es-ops-config` filter-pre-mux-client.conf: buffer_type file buffer_path `/var/lib/fluentd/buffer-mux-client`
Fluentd buffer_queue_limit
是变量 BUFFER_QUEUE_LIMIT
的值。默认值为 32
。
环境变量 BUFFER_QUEUE_LIMIT
计算为 (FILE_BUFFER_LIMIT / (number_of_outputs * BUFFER_SIZE_LIMIT))
。
如果 BUFFER_QUEUE_LIMIT
变量具有默认值:
-
FILE_BUFFER_LIMIT = 256Mi
-
number_of_outputs = 1
-
BUFFER_SIZE_LIMIT = 8Mi
buffer_queue_limit
的值为 32
。要更改 buffer_queue_limit
,您需要更改 FILE_BUFFER_LIMIT
的值。
在这个公式中,如果所有日志都发送到单个资源,则 number_of_outputs
为 1
,否则每多一个资源就会递增 1
。例如,number_of_outputs
的值为:
-
1
- 如果所有日志都发送到单个 ElasticSearch pod -
2
- 如果应用程序日志发送到 ElasticSearch pod,并且 ops 日志发送到另一个 ElasticSearch pod -
4
- 如果应用程序日志发送到一个 ElasticSearch pod,ops 日志发送到另一个 ElasticSearch pod,并且这两者都转发到其他 Fluentd 实例