Kubernetes

linux环境中快速、准确设置时区的3种方法?k8s中的pod是怎么设置时区的?

本文主要是介绍linux环境中快速、准确设置时区的3种方法?k8s中的pod是怎么设置时区的?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一直在使用linux的操作系统,对于时间相关的操作,也就仅限于,修改时间,查看时间,通过不同的输出格式查看时间,这些很小的方面,也觉得够用了,但是······

 

昨天,一个测试的同学问了我一个知识点,让我对于linux的时间设置,又进行了一个全新的,更加深入的探索。

 

他问我:“k8s中应用的时区是怎么设置的?”

 

一时间,我语塞,只是隐隐约约的记得/etc/localtime这个数据卷的挂载,既然无法彻底的说清楚,那么就只好派上我的杀手锏-检索。

 

经过几个小时的研究、探索,我得出以下的结论:

 

  1. 首先,必须要有真正的时区信息文件
  2. 通过某种设置,将环境的时区,设置为其中的某个时区

 

接下来,我们一一展开。

 

1、安装时区文件

 

在linux的环境中,通过以下的命令,即可安装出来时区文件

 

yum install -y tzdata

 

安装完成之后,我们可以看到,在环境中,增加了如下的rpm包

[root@nccztsjb-node-23 ~]# rpm -qa | grep tzdata
tzdata-2018e-3.el7.noarch

 

既然,tzdata是为了安装时区信息文件的,那这些信息在什么地方呢,通过这个rpm包,我们可以一探究竟

rpm -ql tzdata-2018e-3.el7.noarch

 

在/usr/share/zoneinfo目录中的,就是时区信息文件,各种各样的时区,比如,美国,中国,非洲,应有尽有······

 

那我们有了这些时区信息之后,我们如何来配置,我们当前的环境具体用哪个呢?

 

2、设置要使用的时区

 

对于时区的设置,我们可以通过如下的方式:

 

  • 通过/etc/localtime建立和要使用的时区的链接

 

[root@nccztsjb-node-23 ~]# ls -l /etc/localtime 
lrwxrwxrwx. 1 root root 35 Jun 22  2018 /etc/localtime -> ../usr/share/zoneinfo/Asia/Shanghai
[root@nccztsjb-node-23 ~]# 

 

这个是目前的时区,我们可以通过timedatectl命令查看

[root@nccztsjb-node-23 ~]# timedatectl
      Local time: Thu 2022-07-07 09:37:39 CST
  Universal time: Thu 2022-07-07 01:37:39 UTC
        RTC time: Thu 2022-07-07 01:35:51
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
[root@nccztsjb-node-23 ~]# 

 

那么,咱们这里演示一个,设置为其他的时区的示例:

 

rm -f /etc/localtime

ln -s /usr/share/zoneinfo/America/Santiago /etc/localtime

[root@nccztsjb-node-23 America]# ls -l /etc/localtime 
lrwxrwxrwx 1 root root 36 Jul  6 21:39 /etc/localtime -> /usr/share/zoneinfo/America/Santiago
[root@nccztsjb-node-23 America]# 

 

此时,已经设置为“America/Santiago”

[root@nccztsjb-node-23 America]# timedatectl
      Local time: Wed 2022-07-06 21:40:15 -04
  Universal time: Thu 2022-07-07 01:40:15 UTC
        RTC time: Thu 2022-07-07 01:38:27
       Time zone: America/Santiago (-04, -0400)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: no
 Last DST change: DST ended at
                  Sat 2022-05-14 23:59:59 -03
                  Sat 2022-05-14 23:00:00 -04
 Next DST change: DST begins (the clock jumps one hour forward) at
                  Sat 2022-08-13 23:59:59 -04
                  Sun 2022-08-14 01:00:00 -03
[root@nccztsjb-node-23 America]# date
Wed Jul  6 21:40:18 -04 2022
[root@nccztsjb-node-23 America]# 

 

OK,这里就通过/etc/localtime建立和时区文件软链接的方式,设置了当前环境的时区。

 

其实,除了这种方式,还有一种更便捷的方式······

 

  • 设置TZ环境变量

 

通过设置TZ环境变量,我们获得比/etc/localtime更高的优先级,用来设置当前环境的时区

 

export TZ="Asia/Shanghai"

通过以下的前后对比图:

 

 

我们可以发现,快速的将当前环境的时区,设置为需要的时区。

 

事实上,如果你使用了redhat 7以上的版本,还有一个工具一样可以快速的设置时区

 

  • timedatectl

 

没错,就是timedatectl工具,可以用来显示、设置时区,我们来看

 

a.显示当前时间设置

[root@nccztsjb-node-23 ~]# timedatectl
      Local time: Wed 2022-07-06 21:46:28 -04
  Universal time: Thu 2022-07-07 01:46:28 UTC
        RTC time: Thu 2022-07-07 01:44:39
       Time zone: America/Santiago (-04, -0400)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: no
 Last DST change: DST ended at
                  Sat 2022-05-14 23:59:59 -03
                  Sat 2022-05-14 23:00:00 -04
 Next DST change: DST begins (the clock jumps one hour forward) at
                  Sat 2022-08-13 23:59:59 -04
                  Sun 2022-08-14 01:00:00 -03
[root@nccztsjb-node-23 ~]# 

 

b.列出所有可设置的时区

timedatectl list-timezones

 

c.最后设置需要的时区

 

timedatectl set-timezone "Asia/Shanghai"

 

 

惊奇的发现,通过timedatectl工具设置好时区后,连/etc/localtime也重新建立了和对应时区文件的连接。

 

OK,到这里就是linux环境中,如何安装、配置使用时区的方法了。

 

3、k8s中的pod如何设置时区

 

不过,那位测试同学的问题好像,还没有解决,k8s的pod如何设置时区?

 

如果我们彻底理解了上面的流程,应该是非常简单的了。

 

1、首先k8s中pod使用的镜像必须包含时区文件(可安装tzdata包,或者挂载宿主机的/usr/share/zoneinfo目录)

2、在1的基础上,通过/etc/localtime或者TZ环境变量的方式,可以实现时区的设置。

 

当然了,对于时区设置/etc/localtime的挂载,无非也就是将主机上的链接映射到容器里面而已。

 

如果,容器的镜像中,已经存在时区文件,最好直接用TZ环境变量,会更加的便利、快捷。

 

这篇关于linux环境中快速、准确设置时区的3种方法?k8s中的pod是怎么设置时区的?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!