K8S 性能优化 - OS sysctl 调优

k8s,性能,优化,os,sysctl · 浏览次数 : 267

小编点评

## K8S 性能优化系列文章,本文为第一篇:OS sysctl 性能优化参数最佳实践 **参数一览 sysctl 调优参数一览** 本文将介绍如何优化 K8S 系统的 sysctl 参数,以提升其性能。 **参数简介** * **`vm.max_map_count`**:限制一个进程可以拥有的 VMA(虚拟内存地址)数量。 * **`vm.memory_limit`**:设置每个 pod 的内存限制。 * **`net.ipv4.tcp_max_syn_backlog`**:设置 TCP SYN 连接队列长度。 * **`net.ipv4.tcp_slow_start_after_idle`**:设置 TCP 连接缓着启动时间。 * **`net.ipv4.tcp_tw_reuse`**:允许重用 TIME_WAIT 状态的 TCP 连接。 * **`net.core.netdev_max_backlog`**:设置网络接口数据包缓存队列大小。 * **`net.core.file_max`**:设置文件句柄最大数目。 * **`net.ipv4.ip_forward`**:启用 IP 转发表。 **最佳实践** * **适当设置 `vm.max_map_count`**:根据内存限制和 CPU 核心数设置合适的值。 * **根据场景设置 `net.ipv4.tcp_max_syn_backlog`**:降低 SYN 连接队列长度,以提高性能。 * **降低 `net.ipv4.tcp_slow_start_after_idle`**:降低 TCP 连接缓着启动时间,提升性能。 * **设置合适的 `net.ipv4.tcp_tw_reuse`**:启用 TCP 连接重用,减少连接关闭时间。 * **设置 `net.core.netdev_max_backlog`**:调整网络接口数据包缓存队列大小,影响性能。 * **设置 `net.core.file_max`**:设置文件句柄数量,影响性能。 * **开启 `net.ipv4.ip_forward`**:开启 IP 转发表,提升网络性能。 * **适当设置其他参数**:根据实际情况调整其他参数,例如 `vm.memory_limit`、`net.ipv4.tcp_max_syn_backlog`等。 **总结** 优化 K8S 系统的 sysctl 参数可以显著提升其性能。可以通过设置适当的参数来优化 TCP 连接、缓存、网络接口等参数,以降低请求处理时间和提高系统响应能力。

正文

前言

K8S 性能优化系列文章,本文为第一篇:OS sysctl 性能优化参数最佳实践。

参数一览

sysctl 调优参数一览

# Kubernetes Settings
vm.max_map_count = 262144
kernel.softlockup_panic = 1
kernel.softlockup_all_cpu_backtrace = 1
net.ipv4.ip_local_reserved_ports = 30000-32767

# Increase the number of connections
net.core.somaxconn = 32768

# Maximum Socket Receive Buffer
net.core.rmem_max = 16777216

# Maximum Socket Send Buffer
net.core.wmem_max = 16777216

# Increase the maximum total buffer-space allocatable
net.ipv4.tcp_wmem = 4096 87380 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216

# Increase the number of outstanding syn requests allowed
net.ipv4.tcp_max_syn_backlog = 8096


# For persistent HTTP connections
net.ipv4.tcp_slow_start_after_idle = 0

# Allow to reuse TIME_WAIT sockets for new connections
# when it is safe from protocol viewpoint
net.ipv4.tcp_tw_reuse = 1

# Max number of packets that can be queued on interface input
# If kernel is receiving packets faster than can be processed
# this queue increases
net.core.netdev_max_backlog = 16384

# Increase size of file handles and inode cache
fs.file-max = 2097152

# Max number of inotify instances and watches for a user
# Since dockerd runs as a single user, the default instances value of 128 per user is too low
# e.g. uses of inotify: nginx ingress controller, kubectl logs -f
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 524288

# Additional sysctl flags that kubelet expects
vm.overcommit_memory = 1
kernel.panic = 10
kernel.panic_on_oops = 1

# Prevent docker from changing iptables: https://github.com/kubernetes/kubernetes/issues/40182
net.ipv4.ip_forward=1

如果是 AWS,额外增加如下:

# AWS settings
# Issue #23395
net.ipv4.neigh.default.gc_thresh1=0

如果启用了 IPv6,额外增加如下:

# Enable IPv6 forwarding for network plugins that don't do it themselves
net.ipv6.conf.all.forwarding=1

参数解释

分类 内核参数 说明 参考链接
Kubernetes vm.max_map_count = 262144 限制一个进程可以拥有的VMA(虚拟内存区域)的数量,
一个更大的值对于 elasticsearch、mongo 或其他 mmap 用户来说非常有用
ES Configuration
Kubernetes kernel.softlockup_panic = 1 用于解决 K8S 内核软锁相关 bug root cause kernel soft lockups · Issue #37853 · kubernetes/kubernetes (github.com)
Kubernetes kernel.softlockup_all_cpu_backtrace = 1 用于解决 K8S 内核软锁相关 bug root cause kernel soft lockups · Issue #37853 · kubernetes/kubernetes (github.com)
Kubernetes net.ipv4.ip_local_reserved_ports = 30000-32767 默认 K8S Nodport 端口 service-node-port-range and ip_local_port_range collision · Issue #6342 · kubernetes/kops (github.com)
网络 net.core.somaxconn = 32768 表示socket监听(listen)的backlog上限。什么是backlog?backlog就是socket的监听队列,当一个请求(request)尚未被处理或建立时,他会进入backlog。
增加连接数.
Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
网络 net.core.rmem_max = 16777216 接收套接字缓冲区大小的最大值(以字节为单位)。
最大化 Socket Receive Buffer
Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
网络 net.core.wmem_max = 16777216 发送套接字缓冲区大小的最大值(以字节为单位)。
最大化 Socket Send Buffer
Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
网络 net.ipv4.tcp_wmem = 4096 87380 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
增加总的可分配的 buffer 空间的最大值 Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
网络 net.ipv4.tcp_max_syn_backlog = 8096 表示那些尚未收到客户端确认信息的连接(SYN消息)队列的长度,默认为1024
增加未完成的syn请求的数量
Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
网络 net.ipv4.tcp_slow_start_after_idle = 0 持久化 HTTP 连接 Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
网络 net.ipv4.tcp_tw_reuse = 1 表示允许重用TIME_WAIT状态的套接字用于新的TCP连接,默认为0,表示关闭。
允许在协议安全的情况下重用TIME_WAIT 套接字用于新的连接
Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
网络 net.core.netdev_max_backlog = 16384 当网卡接收数据包的速度大于内核处理的速度时,会有一个队列保存这些数据包。这个参数表示该队列的最大值
如果内核接收数据包的速度超过了可以处理的速度,这个队列就会增加
Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
文件系统 fs.file-max = 2097152 该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。
增加文件句柄和inode缓存的大小
Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
文件系统 fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 524288
一个用户的inotify实例和watch的最大数量
由于dockerd作为单个用户运行,每个用户的默认实例值128太低了
例如使用inotify: nginx ingress controller, kubectl logs -f
Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
kubelet vm.overcommit_memory = 1 对内存分配的一种策略
=1, 表示内核允许分配所有的物理内存,而不管当前的内存状态如何
Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
kubelet kernel.panic = 10 panic错误中自动重启,等待时间为10秒 Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
kubelet kernel.panic_on_oops = 1 在Oops发生时会进行panic()操作 Image: We should tweak our sysctls · Issue #261 · kubernetes-retired/kube-deploy (github.com)
网络 net.ipv4.ip_forward=1 启用ip转发
另外也防止docker改变iptables
Upgrading docker 1.13 on nodes causes outbound container traffic to stop working · Issue #40182 · kubernetes/kubernetes (github.com)
网络 net.ipv4.neigh.default.gc_thresh1=0 修复 AWS arp_cache: neighbor table overflow! 报错 arp_cache: neighbor table overflow! · Issue #4533 · kubernetes/kops (github.com)

EOF

三人行, 必有我师; 知识共享, 天下为公. 本文由东风微鸣技术博客 EWhisper.cn 编写.

与K8S 性能优化 - OS sysctl 调优相似的内容:

K8S 性能优化 - OS sysctl 调优

前言 K8S 性能优化系列文章,本文为第一篇:OS sysctl 性能优化参数最佳实践。 参数一览 sysctl 调优参数一览 # Kubernetes Settings vm.max_map_count = 262144 kernel.softlockup_panic = 1 kernel.sof

K8S 性能优化 - K8S APIServer 调优

前言 K8S 性能优化系列文章,本文为第二篇:Kubernetes API Server 性能优化参数最佳实践。 系列文章: 《K8S 性能优化 - OS sysctl 调优》 参数一览 kube-apiserver 推荐优化的参数如下: --default-watch-cache-size:默认值

K8S 性能优化-K8S Node 参数调优

前言 K8S 性能优化系列文章,本文为第四篇:Kubernetes Node 性能优化参数最佳实践。 系列文章: 《K8S 性能优化 - OS sysctl 调优》 《K8S 性能优化 - K8S APIServer 调优》 《K8S 性能优化 - 大型集群 CIDR 配置》 两个参数 控制可以为

K8S 性能优化 - 大型集群 CIDR 配置

前言 K8S 性能优化系列文章,本文为第三篇:Kubernetes 大型集群 CIDR 配置最佳实践。 系列文章: 《K8S 性能优化 - OS sysctl 调优》 《K8S 性能优化 - K8S APIServer 调优》 CIDR 配置 在安装大型集群或将现有的集群扩展到较大规模时,在安装集群

[转帖]k8s nginx-ingress上的配置优化

https://cloud.tencent.com/developer/article/1932188?areaSource=&traceId= 自建K8s上,如果部署了Nginx-Ingress,通常一些默认的参数有些可能需要优化下以便提升它的性能(阿里云之类的云厂商提供的Ingress是优化过的

[转帖]QPS 最高提升 91% | 腾讯云 TKE 基于 Cilium eBPF 提升 k8s Service 性能

https://my.oschina.net/cncf/blog/5121393 朱瑜坚,腾讯云后台工程师,主要负责腾讯云 TKE 容器网络的构建和相关网络组件的设计、开发和维护工作。张浩,腾讯云高级工程师,主要负责容器网络多个组件的开发和维护,也关注调度、服务网格等领域。 前言 Kubernete

部署于K8S集群上面应用性能影响点推测

前言 本人2017年第一次接触K8S. 中间断断续续学习K8S相关的内容. 但是最近一年,几乎没太有学习. 因为之前学习了四五年, 一直以为产品马上要用 结果一直被浇冷水. 去年开始学乖了. 不这么搞了 但是发现产品要开始用了.. 这里只能临时抱佛脚. 猜测一下可能影响K8S上面应用性能的要点. 摘

[转帖]k8s之udp丢包问题

https://www.jianshu.com/p/6a5faee4cc65 image.png 测试仪发送某种类型的报文进行性能测试,报文目的mac为VF的mac。对于发出去的每个报文,必须在3s内收到响应,否则认为丢包,会重新发送一次,此时会有retransmit的统计。 pod A有两个网卡,

[转帖]如何提高Linux下块设备IO的整体性能?

http://www.yunweipai.com/6989.html 运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维 作者介绍 邹立巍 Li

[转帖]零信任策略下K8s安全监控最佳实践(K+)

https://developer.aliyun.com/article/1009607?spm=a2c6h.24874632.expert-profile.126.3b0b506fysVD76 简介: 本文重点将围绕监控防护展开,逐层递进地介绍如何在复杂的分布式容器化环境中借助可观测性平台,持续监