银河麒麟v10 sysctl内核参数加载顺序的思考
背景
最近很多伙伴想使用银河麒麟高级服务器系统v10来部署最新版本的k8s集群,可能遇到了各式各样的问题,于是准备使用kylinOS v10重温一遍kubeadm部署最新版本k8s的流程,也是替大家踩踩坑。
在进行服务器基础配置优化时,到内核参数修改这一步,引发了一些新的思考。
过程
在修改内核参数时,我很熟练的执行了以下命令:
cat > /etc/sysctl.d/k8s.conf << EOF
net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.conf.all.route_localnet = 1
vm.overcommit_memory=1
vm.panic_on_oom=0
vm.swappiness = 0
fs.inotify.max_user_watches=89100
fs.file-max=52706963
fs.nr_open=52706963
net.netfilter.nf_conntrack_max=2310720
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 327680
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_timestamps = 0
net.core.somaxconn = 16384
EOF
然后:
sysctl -p
然后随便验证了一个ip_forward的参数,发现其值还是0:
cat /proc/sys/net/ipv4/ip_forward
0
突然就想到,我执行sysctl -p在不加任何参数的情况下,是同步/etc/sysctl.conf 文件的,而kylinOS v10默认的/etc/sysctl.conf文件中,ip_forward的值设置为0,所以其参数值并没有被修改。
引发的思考
既然我执行sysctl -p 时仅同步/etc/sysctl.conf文件,那如果我reboot后,其最终生效的文件是哪个呢?
以前没有深究过系统重启后内核参数的加载顺序问题,正好趁这次机会,好好学习一下完整的加载流程。
系统版本说明
# nkvers
############## Kylin Linux Version #################
Release:
Kylin Linux Advanced Server Release V10 (Trading)
Kernel:
4.19.90-89.18.v2401.ky10.x86_64
Build:
Kylin Linux Advanced Server
Release V10 SP3 2403/(Trading)-x86_64-Build03/20240813
#################################################
内核参数加载顺序的深究
通过一些官方的相关文档和前辈的指导,基本摸清了重启后的加载顺序,详情如下。
内核参数加载的相关服务
系统重启后,与内核参数加载的服务,一共有两个,分别是systemd-sysctl.service和tuned.service。
查看服务状态:
# systemctl status systemd-sysctl.service
● systemd-sysctl.service - Apply Kernel Variables
Loaded: loaded (/usr/lib/systemd/system/systemd-sysctl.service; static; vendor preset: disabled)
# systemctl status tuned.service
● tuned.service - Dynamic System Tuning Daemon
Loaded: loaded (/usr/lib/systemd/system/tuned.service; enabled; vendor preset: enabled)
一般情况下,这两个服务都会生效,有时tuned.service会被设置为disable,不让其开启自启,我们先来介绍以下这两个服务单元的生效规则和配置文件范围。
systemd-sysctl.service服务
此服务时是系统初始化阶段sysinit.target隐式调用的,会在系统启动时,自动执行一次,其加载配置文件路径为:
/run/sysctl.d/*.conf
/etc/sysctl.d/*.conf
/usr/local/lib/sysctl.d/*.conf
/usr/lib/sysctl.d/*.conf
/lib/sysctl.d/*.conf
/etc/sysctl.conf
tuned.service服务
此服务可设置为开机自启,也可取消,自由控制,其加载配置文件路径为:
/usr/lib/tuned/balanced/tuned.conf
/usr/lib/tuned/desktop/tuned.conf
/usr/lib/tuned/latency-performance/tuned.conf
/usr/lib/tuned/network-latency/tuned.conf
/usr/lib/tuned/network-throughput/tuned.conf
/usr/lib/tuned/powersave/tuned.conf
/usr/lib/tuned/recommend.d/50-tuned.conf
/usr/lib/tuned/throughput-performance/tuned.conf
/usr/lib/tuned/virtual-guest/tuned.conf
/usr/lib/tuned/virtual-host/tuned.conf
配置文件加载顺序
理论上软件包应将自带的配置文件安装在/usr/lib/目录下,/etc目录仅供系统管理员使用。
一般情况下,当tuned.service服务设置为enable时,加载顺序是先加载systemd-sysctl.service服务对应的配置文件,再加载tuned.service服务的配置文件。
多个文件中有相同内核参数的配置时,后加载的会将先加载的值覆盖掉,这是一个固定的规则!
每个服务又有这么多的配置文件生效路径,那他们的加载顺序是怎样的呢?
systemd-sysctl.service加载顺序
- 配置文件必须符合filename.conf格式,不同目录下的同名配置文件,仅以优先级最高的目录中的配置文件为准。目录优先级顺序如下:/etc > /run > /usr/local/lib > /usr/lib > /lib
- 读取完以上目录下的配置后,最后读取/etc/sysctl.conf。虽然/etc/sysctl.conf的读取优先级最低,但由于相同内核参数下,后加载会覆盖先加载的值,故最终生效的是/etc/sysctl.conf文件的值
- 除了同名的配置文件,其他所有的配置文件与目录无关,统一按照文件名的字典顺序处理。为了便于排序,建议给配置文件都加上两位十进制数字的文件名前缀,这样会先加载数字小的,后加载数字大的文件,同样,相同参数后加载会覆盖先加载的
示例:
有以下几个配置文件:
/usr/lib/sysctl.d/10-default-yama-scope.conf
/usr/lib/sysctl.d/50-pid-max.conf
/etc/sysctl.d/99-sysctl.conf
/usr/lib/sysctl.d/kylin.conf
读取顺序一定是:
/usr/lib/sysctl.d/10-default-yama-scope.conf --> /usr/lib/sysctl.d/50-pid-max.conf --> /etc/sysctl.d/99-sysctl.conf --> /usr/lib/sysctl.d/kylin.conf --> /etc/sysctl.conf
tuned.service加载顺序
如果tuned.service是enable状态,则其后于systemd-sysctl.service加载。
tuned分为多种模式,每种模式对应其配置文件,
tuned-adm active可查看系统使用的哪种模式,tuned-adm list profiles查看系统支持的模式,tuned-adm profile [name]设置系统为某模式,例如,本系统为:# tuned-adm activeCurrent active profile: virtual-guest
则其对应加载的配置文件为:/usr/lib/tuned/virtual-guest/tuned.conf
对应的tuned.conf文件加载完毕后,tuned服务还会执行
sysctl --system命令,如果配置的参数和之前加载的配置文件有相同内核参数,同样会覆盖。sysctl --system执行加载顺序如下:# sysctl --system | grep Applying
* Applying /usr/lib/sysctl.d/10-default-yama-scope.conf ...
* Applying /usr/lib/sysctl.d/50-coredump.conf ...
* Applying /usr/lib/sysctl.d/50-default.conf ...
* Applying /usr/lib/sysctl.d/50-libkcapi-optmem_max.conf ...
* Applying /usr/lib/sysctl.d/50-pid-max.conf ...
* Applying /etc/sysctl.d/99-sysctl.conf ...
* Applying /etc/sysctl.d/k8s.conf ...
* Applying /usr/lib/sysctl.d/kylin.conf ...
* Applying /etc/sysctl.conf ...
临时主动加载配置文件
系统中还可以使用sysctl -p来主动加载指定内核参数配置文件生效,其后不指定任何文件时,默认加载/etc/sysctl.conf,若指定文件,则表示加载指定文件,例如:
sysctl -p /etc/sysctl.d/k8s.conf
银河麒麟系统中需要注意的点
银河麒麟系统中默认有个/usr/lib/sysctl.d/kylin.conf内核参数配置文件,其中已经配置诸多优化参数,其命名规则加载顺序较为靠后,所以在配置与其文件相同的参数项时,需要注意:
- 将文件命名修改为在kylin.conf其后加载
- 也可以选择直接修改kylin.conf中的配置
- 直接配置到/etc/sysctl.conf中
总结
- tuned.service后于systemd-sysctl.service加载
- 不同目录同名配置文件取目录优先级高的,非同名统一按照文件名的字典顺序加载
- 优先级越高越先加载,越低越后加载,
/etc/sysctl.conf最后加载 - 别忘记
/usr/lib/sysctl.d/kylin.conf文件 - 别忘记相同参数覆盖的问题
银河麒麟v10 sysctl内核参数加载顺序的思考的更多相关文章
- sysctl -p 重新加载文件/etc/sysctl.conf -a 所有参数 -w 临时指定
sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下.sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发.IP碎 ...
- .NET 6应用程序适配国产银河麒麟V10系统随记
最近想在麒麟系统上运行.NET 6程序,经过一番折腾最终完成了,简单记录一下. 目标系统: CPU: aarch64架构(ARM64) 操作系统:银河麒麟V10高级服务器系统 银河麒麟V10系统(以下 ...
- linux内核被加载的过程
二,linux内核被加载的过程 一,linux安装时遇到的概念解析 内核必须模块vmlinz(5M左右)不认识硬盘,原本是需要写跟loader中一样的内容,来加载非必要模块. 内核非必要的功能被编译为 ...
- sysctl内核参数
sysctl命令用来配置与显示/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现. -a 显示所有的系统参数 -p 从指定的文件加载系统参 ...
- 银河麒麟V10 SP1服务器操作系统-单用户模式与救援模式调试方法
单用户模式 单用户模式:该模式下系统并没有完全运行进来,只是部分程序运行,包括网络服务,ssh服务等部分服务未运行,因此无法通过远程登录到操作系 统.进入单用户方式进行系统维护由是ROO ...
- ASM:《X86汇编语言-从实模式到保护模式》第13章:保护模式下内核的加载,程序的动态加载和执行
★PART1:32位保护模式下内核简易模型 1. 内核的结构,功能和加载 每个内核的主引导程序都会有所不同,因为内核都会有不同的结构.有时候主引导程序的一些段和内核段是可以共用的(事实上加载完内核以后 ...
- Crystal框架配置参数加载机制详解?
前言 定义 配置参数定义的形式 配置参数文件定义在哪里? 配置参数加载的优先级 如何使用配置参数? 最佳实践 Jar项目中如何定义配置参数? War项目中如何定义或重载Jar包中的配置参数? 开发人员 ...
- Python_动态参数、名称空间、作用域、作用域链、加载顺序、函数的嵌套、global、nonlocal
1.动态参数 当实参数量与形参数量相等时,参数传递正常. def func1(a, b, c): pass func1(1, 2, 3) 当实参数量与形参数量不相等时,则会报错. def func1( ...
- CSS样式表、JS脚本加载顺序与SpringMVC在URL路径中传参数与SpringMVC 拦截器
CSS样式表和JS脚本加载顺序 Css样式表文件要在<head>中先加载,这样网页显示时可以第一次就渲染出正确的布局和样式,网页就不会闪烁,或跳变 JS脚本尽可能放在<body> ...
- 动态参数 名称空间 作用域 作用域链 加载顺序 函数的嵌套 global nonlocal 等的用法总结
03,动态参数 *args,**kwargs # 用户传入到函数中的实参数量不定时,或者是为了以后拓展,# 此时要用到动态参数*args,**kwargs(万能参数.)# *args接收的是所有的位置 ...
随机推荐
- Mac安装Kafka(依赖zookeeper)
版本 kafka_2.11-2.0.0 flume1.8.0 一.软件下载 http://kafka.apache.org/downloads.htmltar -zxf kafka_2.11-2.0. ...
- ruoyi-vue 界面框架构造
界面框架: 我采用了flex布局,先分左右,然后右侧再分上下. 步骤: 1. 首先实现简单的菜单 1.1 菜单是个菜单项数组 [] 1.2 菜单项结构 例子 { id:'001', name: '历史 ...
- TOGAF 内容元模型综合指南
介绍 开放群组架构框架 (TOGAF) 是一种广泛使用的企业架构框架,它提供了一种结构化的方法来设计.规划.实施和管理企业信息技术架构.TOGAF 内容元模型是该框架的重要组成部分,它提供了一种标准化 ...
- 机器学习 | 强化学习(7) | 融合学习与规划(Integrating Learning and Planning)
7-融合学习与规划(Integrating Learning and Planning) 1.导论 基于模型的强化学习(Model-Based Reinforcement Learning) 在上一个 ...
- 「四」vim执行外部命令、文件另存为、文件提取合并、打开类命令、光标后插入内容、替換、复制粘贴、查找设置
vim执行外部命令 查看当前目录文件::! command 另存为 完整内容: :w filename 选择性内容: v:选择内容. :w filename 文件提取合并 向当前文件插入文件内容: : ...
- npm配置
在 Node.js 中,npm(Node Package Manager)是 JavaScript 包的默认管理工具.要查看 npm 的配置,你可以使用 npm config 命令配合不同的子命令来获 ...
- Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
#div_digg { float: right; font-size: 12px; margin: 10px; text-align: center; width: 120px; position: ...
- jmespath 使用及案例
什么是jmespath jmespath 是python里面的一个库 主要在httprunner框架里使用 2.使用语法 列表: with_jmespath(jmes_path,var_name) m ...
- WARN Issues with peer dependencies found,pnpm peer dependencies auto-install
前言 pnpm 也需要设置自动安装对等依赖项 解决 pnpm 使用 npm 的配置格式,所以应该以与 npm 相同的方式设置配置: pnpm config set auto-install-peers ...
- 解决本地代理问题 git 或者 curl Failed to connect to 127.0.0.1 port 1087 after 8 ms: Connection refused
问题出现原因 git配置了代理 本地配置了代理 执行这个命令可以看到自己的代理设置: env | grep -I proxy 临时更改代理 在当前终端执行以下命令,就可以临时将代理取消掉 export ...