使用 Ansible 批量更新 Linux 内核版本,推荐通过 ELRepo 仓库安装长期支持(LTS)内核,配合 serial: 1 策略串行重启以避免集群不可用。此方案适用于 CentOS/RHEL 7 及以上版本,操作前需确认 CentOS 7 已于 2024 年 6 月 30 日停止维护,CentOS 8 已于 2021 年 12 月 31 日停止官方支持,生产环境升级需预留回滚窗口。
先说结论:批量内核升级必须采用串行重启策略并保留旧内核引导项,优先选择 ELRepo 的 kernel-lt 长期支持版本。
- 适合:CentOS/RHEL 7/8 集群、K8s 节点等需统一内核特性的场景
- 先看:确认当前内核版本、/boot 分区空间及 ELRepo 源可用性
- 建议:设置 Ansible serial: 1 控制并发,升级后验证 uname -r 及业务连通性
命令速用版
---
- hosts: all
serial: 1
tasks:
- name: Install ELRepo
yum:
name: https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
state: present
- name: Install LTS Kernel
yum:
name: kernel-lt
enablerepo: elrepo-kernel
state: latest
- name: Set Default Kernel
command: grub2-set-default 0
- name: Reboot
reboot:
reboot_timeout: 300为什么会这样
内核升级涉及底层驱动与系统调用变更,直接并行重启会导致服务集群整体不可用。保留旧内核是为了在新内核启动失败时可通过 GRUB 菜单回滚,串行重启确保每次只有一台节点离线,保障业务连续性。
分步处理
1. 准备阶段:备份 /etc 及 /boot 目录,检查磁盘空间确保根分区和/boot 有足够空间(建议 5GB 以上)。
2. 配置源:导入 ELRepo 公钥并安装 elrepo-release 包,区分 kernel-ml(主线)与 kernel-lt(长期支持)。
3. 编写 Playbook:使用 yum 模块安装内核,调用 grub2-set-default 设置启动项,使用 reboot 模块并配置 wait_for 连接等待。
4. 执行策略:在 playbook 头部设置 serial: 1 或 max_fail_percentage: 0,防止批量重启失败。
怎么验证是否生效
重启完成后执行 uname -r 确认内核版本号是否匹配目标版本。检查 /var/log/boot.log 或 dmesg 确认无驱动加载错误。业务层面验证端口连通性及应用日志无异常报错。
常见坑
1. 并行重启风险:未设置 serial 参数可能导致所有节点同时重启,造成服务中断。
2. 版本停止维护:CentOS 7 已于 2024 年 6 月 30 日停止维护,继续使用面临安全补丁缺失风险。
3. 引导项设置:未执行 grub2-set-default 可能导致重启后仍进入旧内核。
常见问题
升级失败如何回滚?
重启时在 GRUB 菜单选择旧内核版本启动,进入系统后卸载新内核包即可。
CentOS 8 还能升级内核吗?
CentOS 8 已于 2021 年 12 月 31 日停止官方支持,建议迁移至 CentOS Stream 或 Rocky Linux。
是否需要重启所有节点?
内核升级必须重启才能生效,但可通过串行策略避免业务整体不可用。
参考来源
- 51CTO 博客:ansible 批量升级内核版本至 4.19
- Linux 内核怎么升级_Linux 内核升级方法与注意事项(2025 年 11 月 18 日)
- CentOS Linux 内核升级(2020 年 4 月 27 日)
- Linux 服务器批量重启策略:如何通过定时任务安全重启(2026 年 6 月 12 日)
- 如何通过 Ansible 批量修改 Linux 服务器内核参数配置
- Linux 系统升级(2025 年 7 月 26 日发布)