使用 chrony 搭建时钟同步服务器

对于容器编排系统,各个 node、pod 的时钟同步很重要,一般会在局域网搭建自己的时钟同步服务器。

使用 chrony 搭建时钟同步服务器

使用 chrony 搭建时钟同步服务器

update @2018/01/23
update @2018/12/19

对于容器编排系统,各个node、container的时钟同步很重要,一般会在局域网搭建自己的时钟同步服务器。

由于CentOS7 上默认安装了 chrony, 并且经过调研,发现 chrony 比 ntp 性能更好,安装更加方便简单,于是直接使用 chrony 作为整个集群的时钟服务器。

Chrony官方对比文章

https://chrony.tuxfamily.org/comparison.html

1. 设置时区

将所有节点设置为中国时区
echo "Asia/shanghai" > /etc/timezone && \
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

2. 安装chrony 服务端

#安装chrony
yum install chrony -y

#对于用作ntp server的服务器,需要修改server本身的时钟源,并且设置允许来这儿同步的网段 :
sed -e 's!centos.pool.ntp.org!cn.pool.ntp.org!g' -i /etc/chrony.conf
sed -e '/^#allow*/a\allow 172.20.0.0/16 \nallow 172.16.0.0/16 \nallow 10.0.0.0/8' -i /etc/chrony.conf

#设置开机自启并启动服务
systemctl enable chronyd && systemctl restart chronyd

3. 配置 chrony客户端

yum install chrony -y
#其它需要时钟同步的节点,设置从上述服务器同步时钟
 sed -i '/^server*/d' /etc/chrony.conf
 sed -i -e '/^# Please consider*/a\server ntp01.k8s' /etc/chrony.conf
 systemctl enable chronyd && systemctl restart chronyd

4. 使用方法

chronyc accheck     #检查NTP访问是否对特定主机可用  
chronyc activity    #该命令会显示有多少NTP源在线/离线  
chronyc add server  #手动添加一台新的NTP服务器  
chronyc clients     #在客户端报告已访问到服务器  
chronyc delete      #手动移除NTP服务器或对等服务器  
chronyc settime     #手动设置守护进程时间  
chronyc tracking    #显示系统时间信息  
chronyc sources -v  #查看时间同步源  
chronyc sourcestats -v    #查看时间同步源状态  

5. Docker配置chrony(目前还不支持)

根据实际调研情况, 发现在docker容器内暂不支持通过ntpdate修改时间。
因此, host主机的时钟一致性就变得尤为重要了, 而期望在Docker容器内手动时钟同步就变得没有意义了。

不过, Docker容器本身可以运行 chronyd 或者 ntpd服务作为时钟同步服务器, 但是也没什么意义了;

验证过程中截图如下:

  • 普通VM时钟同步

  • Docker容器内时钟同步

现有的测试环境中, 在Kubernetes的master节点上安装了chronyd服务, 其它节点从这里同步时间, 确保集群内host主机的时钟一致性。

master节点chronyd服务

  • node节点配置
    vim /etc/chrony.conf

参考文档

https://linux.cn/article-4764-1.html
http://blog.51cto.com/mhlinux/1892031
https://blacksaildivision.com/ntp-centos