码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • K8S 性能优化 - OS sysctl 调优


    前言

    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 编写.

  • 相关阅读:
    Flink学习笔记(三):Flink四种执行图
    《省级国土空间规划编制技术规程》国家标准(GB/T 43214-2023)原文下载
    倍福PLC基于CX5130实现数据的断电保持
    springboot盲盒售卖
    20230921研发面经总结
    Spring Cloud Alibaba Nacos 2.2.3 (1) - 下载与持久化 数据库配置
    C++之lambda匿名函数总结(二百四十五)
    报错:图片验证码接口对接vue+springboot(下一个笔记会记录整个验证码的代码)
    Python-基础知识汇集
    FDTD Solutions笔记
  • 原文地址:https://www.cnblogs.com/east4ming/p/17207862.html
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号