linux环境中快速、准确设置时区的3种方法?k8s中的pod是怎么设置时区的?
2022/7/8 5:22:39
本文主要是介绍linux环境中快速、准确设置时区的3种方法?k8s中的pod是怎么设置时区的?,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一直在使用linux的操作系统,对于时间相关的操作,也就仅限于,修改时间,查看时间,通过不同的输出格式查看时间,这些很小的方面,也觉得够用了,但是······
昨天,一个测试的同学问了我一个知识点,让我对于linux的时间设置,又进行了一个全新的,更加深入的探索。
他问我:“k8s中应用的时区是怎么设置的?”
一时间,我语塞,只是隐隐约约的记得/etc/localtime这个数据卷的挂载,既然无法彻底的说清楚,那么就只好派上我的杀手锏-检索。
经过几个小时的研究、探索,我得出以下的结论:
- 首先,必须要有真正的时区信息文件
- 通过某种设置,将环境的时区,设置为其中的某个时区
接下来,我们一一展开。
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是怎么设置时区的?的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-23云原生周刊:利用 eBPF 增强 K8s
- 2024-12-20/kubernetes 1.32版本更新解读:新特性和变化一目了然
- 2024-12-19拒绝 Helm? 如何在 K8s 上部署 KRaft 模式 Kafka 集群?
- 2024-12-16云原生周刊:Kubernetes v1.32 正式发布
- 2024-12-13Kubernetes上运行Minecraft:打造开发者平台的例子
- 2024-12-12深入 Kubernetes 的健康奥秘:探针(Probe)究竟有多强?
- 2024-12-10运维实战:K8s 上的 Doris 高可用集群最佳实践
- 2024-12-022024年最好用的十大Kubernetes工具
- 2024-12-02OPA守门人:Kubernetes集群策略编写指南
- 2024-11-26云原生周刊:K8s 严重漏洞