时间不准会引发哪些故障
节点时钟漂移会带来一串看似无关的问题:证书校验失败、令牌过期判定异常、日志时间线错乱、基于时间的租约与选举判断异常。kubelet 报出证书类错误时,先核对节点时间同步状态往往比直接排查证书更快。常见的时间服务有三种:轻量的 systemd-timesyncd、带漂移补偿的 chrony,以及传统的 ntpd,检查命令各不相同。
基本信息
| 适用对象 | 集群内所有节点 |
|---|---|
| 常见时间服务 | systemd-timesyncd、chrony、ntpd |
| 检查命令 | timedatectl、chronyc tracking、ntpq -p |
| 典型症状 | 证书校验失败、令牌判定异常、日志时间错乱 |
| 排查入口 | kubelet 日志中的证书与时间相关报错 |
典型使用场景
- 新节点纳管:把时间同步状态列为上线必检项
- 证书类报错排查:排除时钟漂移这一常见诱因
- 日志分析:确认多节点日志时间线是否可比对
- 虚拟机与长期运行节点:漂移更明显,需要定期巡检
- 故障复盘:把时间偏差作为异常事件的基础检查项
检查(节点上执行)
检查(节点上执行)
timedatectl status
chronyc tracking 2>/dev/null || chronyc sources 2>/dev/null # chrony 环境
ntpq -p 2>/dev/null # ntpd 环境
journalctl -u kubelet --no-pager | grep -i -E 'certificate|x509' | tail
date -u && kubectl get --raw /healthz # 对照控制面时间与健康状态校正与验证
校正与验证
sudo chronyc makestep # chrony:立即步进校正
timedatectl status # 查看同步状态与本地时钟
chronyc sources -v | tail -5 # 核对时间源与偏移量
sudo systemctl restart systemd-timesyncd # 轻量客户端场景
sudo systemctl enable --now chronyd # 确认开机自启,避免重启后不再同步常见时间服务对照
| 服务 | 形态 | 检查入口 |
|---|---|---|
| systemd-timesyncd | 轻量时间客户端 | timedatectl 与对应服务日志 |
| chrony | 带漂移补偿的实现 | chronyc tracking 与 sources |
| ntpd | 传统守护进程 | ntpq -p |
| 校验方式 | 对照时间源偏移 | 偏移过大即需要校正 |
虚拟机与长期运行的节点更容易漂移:把时间同步状态纳入例行巡检,比事后从证书报错反推要省力得多。
只调大证书或令牌的宽限参数来掩盖时钟问题属于治标:同一根因往往会在其他组件上以另一种形式再次出现。