
广州网站建设新科分公司,做购物网站的费用,提供网站建设运营公司资质,做网站哪个公司可以做ntp3你现在的配置思路是对的:防止 NetworkManager 在网络状态变化时执行 chrony on/offline 操作,导致 chronyd 被干扰。
但是还不完整。timedatectl、systemd-timesyncd、NetworkManager、chronyd 之间存在几个容易…ntp3
你现在的配置思路是对的:防止 NetworkManager 在网络状态变化时执行 chrony on/offline 操作,导致 chronyd 被干扰。
但是还不完整。timedatectl、systemd-timesyncd、NetworkManager、chronyd 之间存在几个容易踩坑的点。
下面按生产环境(尤其 K8s 节点)给完整方案。1. 先明确几个组件关系
Linux 时间同步可能有:组件作用是否应该运行chronyd
NTP客户端/服务端
✅ 保留systemd-timesyncd
systemd自带NTP客户端
❌ 禁止timedatectl set-ntp
控制NTP服务开关
⚠️ 不建议频繁调用NetworkManager
网络管理
保留NetworkManager dispatcher
网络事件触发脚本
需要限制目标:
NetworkManager|X 不要控制 chronyd|
chronyd --- NTP server|
系统时间2. timedatectl 对 chronyd 的影响
问题来源
执行:
timedatectl set-ntp yes实际上不是"启动chronyd",而是告诉 systemd:启用一个NTP同步服务systemd 会查找:
systemd-timesyncd.service
chronyd.service
ntpd.service不同发行版行为不同。CentOS 7 / RHEL 7
通常:
timedatectl set-ntp yes会:
systemctl enable chronyd但是如果:
systemd-timesyncd存在可能冲突。
检查:
systemctl status systemd-timesyncd如果存在:
关闭:
systemctl disable --now systemd-timesyncd推荐做法
生产环境不要依赖:
timedatectl set-ntp yes改成:
systemctl enable --now chronyd更明确。3. NetworkManager 对 chronyd 的影响
NetworkManager 有 dispatcher。
路径:
/etc/NetworkManager/dispatcher.d/某些发行版默认存在:
20-chrony-onoffline作用:
网络断开:
执行:
chronyc offline网络恢复:
执行:
chronyc online问题:
例如 Kubernetes:
网卡短暂变化:
flannel启动
↓
NetworkManager dispatcher触发
↓
chronyd offline
↓
NTP停止
↓
Leap status Not synchronised于是:
checkntp失败4. 你的处理是否正确?
你现在:
ln -sf /dev/null /etc/NetworkManager/dispatcher.d/20-chrony-onoffline作用:
创建:
/etc/NetworkManager/dispatcher.d/20-chrony-onoffline|v
/dev/null等于屏蔽该脚本。
这个方法:
✅ 有效
也是 RedHat 推荐的 workaround。但是建议补充:
先删除原文件:
rm -f /etc/NetworkManager/dispatcher.d/20-chrony-onoffline再:
ln -s /dev/null /etc/NetworkManager/dispatcher.d/20-chrony-onoffline避免:
File exists5. chrony.conf 建议修改
你现在:
server {{ ntp_service }} iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow all
local stratum 10
logdir /var/log/chrony客户端配置有几个问题。
问题1:allow all
客户端:
allow all不需要。
作用:
允许别人同步你的机器。
客户端应该删除:
allow all否则:
你的所有节点都可能成为NTP server。问题2:local stratum 10
客户端:
不要:
local stratum 10这个是给孤岛模式使用。
作用:
即使没有NTP源:
假装自己是时间源。
风险:
NTP断了:
节点继续提供错误时间。
客户端删除。推荐客户端:
server ntp01 iburstdriftfile /var/lib/chrony/driftmakestep 1.0 3rtcsynclogdir /var/log/chrony6. NTP Server配置
如果是你的 ntp_service 节点:
才使用:
allow 10.0.0.0/8local stratum 10例如:
pool pool.ntp.org iburstdriftfile /var/lib/chrony/driftmakestep 1.0 3rtcsyncallow 10.0.0.0/8local stratum 10logdir /var/log/chrony7. Ansible推荐完整方案
Client节点
- name: configure chrony clientwhen: ansible_nodename != hostvars[ntp_service].ansible_nodenamecopy:dest: /etc/chrony.confcontent: |server {{ ntp_service }} iburstdriftfile /var/lib/chrony/driftmakestep 1.0 3rtcsynclogdir /var/log/chrony- name: disable systemd-timesyncdsystemd:name: systemd-timesyncdenabled: nostate: stoppedignore_errors: yes- name: disable NetworkManager chrony dispatcherfile:src: /dev/nulldest: /etc/NetworkManager/dispatcher.d/20-chrony-onofflinestate: linkwhen: nm_status.stdout == "active"- name: restart chronydsystemd:name: chronydenabled: yesstate: restarted8. 检查是否被NetworkManager影响
查看:
ls -l /etc/NetworkManager/dispatcher.d/确认:
20-chrony-onoffline - /dev/null看日志:
journalctl -u NetworkManager搜索:
grep chrony看chrony:
chronyc activity正常:
200 OK
1 sources online9. 最终生产推荐状态
Kubernetes节点:
systemd-timesyncd stopped disabled|XNetworkManager|X dispatcher chronychronyd||NTP server检查:
chronyc tracking必须:
Leap status : Normalchronyc sources -v必须:
^*chronyc sourcestats -v必须:Offset 小Freq Skew 小Std Dev 小你的方向基本正确,主要需要改三点:不要在客户端使用 allow all不要在客户端使用 local stratum 10不要依赖 timedatectl set-ntp yes,直接管理 chronyd service这样可以避免 NetworkManager/timedatectl 对 chronyd 的干扰。