SELinux 导致 K8s 日志 logrotate 无法轮询压缩
1. 问题现象在某 Linux 环境中Kubernetes 日志无法自动轮询、无法压缩归档具体表现如下/var/log/kubernetes/kubelet.log持续增大达到 90MB 不再切割日志压缩包停留在某一时间点之后不再生成新归档系统日志如/var/log/messages可正常轮询仅 K8s 相关日志异常2. 初步排查思路日志轮询logrotate异常通常只有两类原因logrotate 配置文件错误crontab 定时任务不执行但在本环境中手动执行 logrotate 命令可正常切割其他服务日志轮询正常→ 排除配置与 cron 基础故障问题指向权限 / 安全策略。3. 关键日志定位核心证据查看 cron 运行日志/var/log/cron发现大量Permission denied错误Plain TextError mapping config file /var/run/kubernetes/k8s_logrotate.conf: Permission deniedError mapping config file /var/run/canal/canal_logrotate.conf: Permission deniedError mapping config file /var/run/kubernetes/runtimeshim_logrotate.conf: Permission denied明显规律所有报错的配置文件全部位于 /var/run 目录下。4. 目录权限与挂载排查检查/var/run发现是软链接到/runPlain Textlrwxrwxrwx 1 root root 6 Apr 22 2022 /var/run - ../run权限正常无特殊权限位。查看/run挂载信息cat /proc/mounts | grep /run发现异常Plain Texttmpfs /run tmpfs rw,seclabel,nosuid,nodev,mode755 0 0出现关键字seclabel这是SELinux 开启后的典型特征。5. 根因确认SELinux 被启用执行命令查看状态sestatus输出Plain TextSELinux status: enabledCurrent mode: enforcingMode from config file: enforcing查看配置文件cat /etc/selinux/config发现配置被修改Plain Text#SELINUXdisabledSELINUXenforcing原配置被注释强制开启 enforcing 模式且修改时间与故障开始时间完全一致。6. 最终根因系统开启 SELinuxenforcing后crond 服务访问/var/run目录下的 logrotate 配置时被 SELinux 安全策略拦截导致权限拒绝日志无法轮询。7. 解决方案两种任选方案1关闭 SELinux最彻底、最常用1.修改配置文件vi /etc/selinux/configSELINUXdisabled2.重启服务器生效reboot方案2不关闭 SELinux迁移配置文件无需重启将/var/run下的 logrotate 配置迁移到/var/paas等不受限目录并更新 crontabPlain Text# 原配置异常*/5 * * * * root /usr/sbin/logrotate /var/run/kubernetes/k8s_logrotate.conf# 新配置正常*/5 * * * * root /usr/sbin/logrotate /var/paas/kubernetes/k8s_logrotate.conf等待一个轮询周期后日志自动恢复切割。8. 修复验证ll -h /var/log/kubernetes/可看到kubelet.log 保持正常大小自动生成.gz归档文件cron 不再出现 Permission denied9. 运维经验总结SELinux 是 Linux 底层安全模块开启后极易影响权限、服务、日志/var/run、/run 目录受 SELinux 强管控K8s / Docker / 容器环境建议默认关闭 SELinux出现以下特征优先排查 SELinux手动执行正常定时任务失败报 Permission denied仅 /var/run 目录异常
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2479131.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!