关注分享主机优惠活动
国内外VPS云服务器

用k8tz解决pod中的时区问题(坑解)

使用k8tz优雅地解决pod中的时区问题。

1.问题引入容器运行在主机的内核上并获得时钟,但是时区来自用户空间而不是内核。在大多数情况下,默认使用协调世界时(UTC)。时区不一致会带来很多麻烦。即使代码与时区无关,解决容器日志和系统日志时间之间的关系也是一件令人头疼的事情。一些应用程序使用机器的时区作为默认时区,并希望用户设置时区。当集群中容器的时区不一致时,将很难管理它们。

2.k8tzk8tz开源地址:https://github.com/k8tz/k8tz

K8tz是一个Kubernetes准入控制器,也是一个将时区注入Pod的CLI工具。可用作自动转换部署和Pod的手动工具。可以作为准入控制器安装,并使用注释来完全自动化创建Pod的过程。

K8tz可以使用hostPath,或者将emptyDir注入initContainer并用TZif(时区信息格式)文件填充卷。然后将emptyDir挂载到每个Pod容器的/etc/localtime和/usr/share/zoneinfo。为了确保所需的时区有效,它向所有容器添加了TZ环境变量。

3.安装k8t#头盔回购添加K8TZ https://k8tz.github.io/k8tz/helm安装K8TZ K8TZ/k8t --设置时区=亚洲/北京# # #除了头盔安装,官方还提供了其他方式,可以查看官方文档。#检查Pod状态、Mutatingwebhookconfigurations、Service等资源是否正常:[root @ master ~]# ku bectl get mutating webhook configuration S . admission registration . k8s . ioname web hooks age k8 ZT -k8tz 1 2m[root @ master ~]# ku bectl get all -n k8tz name READY状态重启age Pod/k8zt -k8tz -7559 df 766-zlxdz 1/1 Running 0 2 m36 sname TYPE cluster -IP external -无& gt443/TCP 2 m36名称准备就绪UP-到-日期提供AGEdeployment.apps/k8zt-k8tz 1月1日1 2m36s名称所需当前准备就绪AGEreplicaset.apps/k8zt-k8tz-7559df766 1 1 1 2 m36 s

4.注入策略官方提供了三种策略:hostpath、initcontainer和annotations。

这里主要说注释。

#注解主要有三个键值对#k8tz.io/inject: true/false。当注入时区和禁止注入操作同时存在时,注入时区的优先级会高于禁止注入# k8tz.io/timezone:亚洲/北京。根据自己的需要选择时区# k8tz.io/strategy: host path/init container提供了两种挂载本地文件和init containers的方式# test # deploy a test ng[root @ master k8 tz]# catng 1 . yamlapipversion:apps/v1 kind:deployment metadata:name:nginxspec:replicas:1 selector:matchLabels:app:nginx template:metadata:labels:app:nginx spec:containers:-name:nginx image:nginx:alpine ports:-container port:80[root @ master k8 tz请改用kubectl exec [POD] -- [COMMAND]。/# dateMon Oct 10 07:02:54 UTC 2022 # #添加注释k8tz.io/timezone:亚洲/北京[root @ master k8 tz]# catng 2 . yamlapipversion:apps/v1k ind:deployment metadata:name:nginx 2批注:k8tz.io/timezone:亚洲/北京spec: replicas: 1选择器:matchLabels: app: nginx2模板:元数据:标签:app:nginx 2 spec:containers:-name:nginx 2 image:nginx:alpine ports:-container port:80[root @ master k8请改用kubectl exec [POD] -- [COMMAND]。/ # dateMon Oct 10 07:06:25 UTC 2022#检查nginx2的启动过程, 你可以看到一个k8tz init容器Events:type reason age from message -------------------------------正常调度111s default -调度器成功地将default/nginx 2-67b 5 db 4568-ZP S7分配给192 . 168 . 130 . 171 下面的测试命名空间是为了测试而创建的:#因为k8tz会默认更改新创建的pod的时区,上海和北京才用于此处测试[root @ master ~] # kubectl创建ns测试[root @ master ~] # kubectl批注ns测试k8tz.io/strategy=hostPathnamespace/test批注[root@master ~]# kubectl批注ns测试k8tz.io/timezone=Asia/ Shanghai namespace/test批注#可以看到新创建的nginx2的时区是上海名称:nginx 2-67 b5 db 4568-9zjbnamespace:测试优先级:0

坑和解决方案

1.helm安装失败#有时安装会因网络问题而失败。错误:下载“K8TZ/K8TZ”失败(提示:运行` helm Repo Update `可能有帮助)#可以先把helm拉到本地再安装。尝试安装几次[root @ masterroot]# helm install k8zt --set time zone = Asia/Beijing k8tz -0 . 8 . 0 . tgz name:k8zt上次部署时间:mon oct 10 14: 46: 55 2022命名空间:默认状态:部署版本:1

2.检查时间顺序。检查pod时区时,必须在安装k8tz之前操作。当安装k8tz时,您将默认添加时区,并自动将k8tz.io/timezone添加到新创建的pod中。

关于使用k8tz优雅地解决pod中的时区问题的这篇文章到此为止。关于解决k8tz时区问题的更多信息,请搜索主机频道zhujipindao之前的文章。或者继续浏览下面的相关文章。希望大家支持主机频道zhujipindao。以后多来com!

未经允许不得转载:主机频道 » 用k8tz解决pod中的时区问题(坑解)

相关推荐

评论 抢沙发

评论前必须登录!