
通过Kubernetes中调整Pod的sysctl参数是否有必要,我们知道某些场景是有必要调整的,并且是只能调整命名空间级别的参数。在 Kubernetes 中,命名空间级别的内核参数主要是通过 sysctl 进行配置的,这些参数可以在 Pod 的 securityContext 中进行设置。以下是主要的命名空间级别的内核参数分类及其具体参数:
内核共享内存参数(kernel.shm*)
- kernel.shmall:可以使用的共享内存的总量。
- kernel.shmmax:单个共享内存段的最大值。
- kernel.shm_rmid_forced:表示是否强制将共享内存和一个进程联系在一起,可以通过杀死进程来释放共享内存。
内核消息队列参数(kernel.msg*)
- kernel.msgmnb:每个消息队列的最大字节限制。
- kernel.msgmni:同时运行的最大的消息队列个数。
- kernel.msgmax:消息队列中单个消息的最大大小。
内核信号量参数(kernel.sem)
- kernel.sem:每个信号集中的最大信号量数目、系统范围内的最大信号量总数目、每个信号发生时的最大系统操作数目、系统范围内的最大信号集总数目。
内核POSIX消息队列参数(fs.mqueue.*)
- fs.mqueue.msg_max:队列里缓存的软最大消息数目。
- fs.mqueue.msgsize_max:最大消息长度上限。
内核网络配置项参数(net.*)
- net.ipv4.ipfrag_low_thresh:用于 IP 分片汇聚的最小内存用量。
- net.ipv4.ipfrag_high_thresh:用于 IP 分片汇聚的最大内存用量。
- net.ipv4.ip_local_port_range:表示允许使用的端口范围。
- net.ipv4.tcp_syncookies:表示是否打开 TCP 同步标签,同步标签可以防止一个套接字在有过多试图连接时引起过载。
- net.ipv4.ping_group_range:限制哪些用户可以创建 ICMP ECHO 请求。
- net.ipv4.ip_unprivileged_port_start:未特权端口的起始范围。
- net.ipv4.tcp_keepalive_time:TCP 保持连接的状态时间。
- net.ipv4.tcp_fin_timeout:TCP 连接的 FIN 等待时间。
- net.ipv4.tcp_keepalive_intvl:TCP 保持连接的间隔时间。
- net.ipv4.tcp_keepalive_probes:TCP 保持连接的探测次数。
- net.ipv4.tcp_rmem:TCP 接收缓冲区的大小。
- net.ipv4.tcp_wmem:TCP 发送缓冲区的大小。
安全性与启用不安全参数
- 安全的命名空间级别内核参数:默认启用,如 `kernel.shm_rmid_forced`、`net.ipv4.ip_local_port_range`、`net.ipv4.tcp_syncookies` 等。
- 不安全的命名空间级别内核参数:默认禁用,需要 Kubernetes 管理员手动启用。例如,`net.core.somaxconn` 和 `kernel.msgmax` 等参数需要在 kubelet 中通过 `--allowed-unsafe-sysctls` 参数启用。
设置方式
1、在 Pod 的 securityContext 中设置:可以通过在 Pod 的配置文件中设置 `securityContext` 来配置命名空间级别的内核参数。
2、使用 initContainers 设置:在 initContainer 中以 privileged 模式运行,修改内核参数。
3、使用 tuning CNI 插件统一设置:为所有 Pod 统一配置某些内核参数。
通过这些参数的配置,我们可以优化 Pod 的性能和资源使用,但需要注意修改内核参数可能带来的风险,如系统不稳定或性能下降。
运维笔谈已经开通AI智能对话功能,解答有关运维日常工作中遇到的问题以及经验分享,感兴趣的大佬来和我聊聊吧!对话 “阿里云k8s” 可以获取《阿里云Kubernetes项目实战手册》pdf。




