Pod Preset玩转K8S容器时区自动配置

缘由

默认的情况,在K8S里启动一个容器,该容器的设置的时区是UTC0,但是对于很多客户而言,其主机环境并不在UTC0。例如中国客户在UTC8。如果不把容器的时区和主机主机设置为一致,则在查找日志等时候将非常不方便,也容易造成误解。但是K8S以及Docker容器没有一个简便的设置/开关在系统层面做配置。都需要我们从单个容器入手做设置,具体方法如下:

纯Docker的时区设置方式

Docker引擎提供了两种设置方式,分别是通过环境变量以及挂载主机文件方式来完成

方式一:设置容器的时区环境变量

先看看没有设置前,容器的情况:

docker run -it --rm centos
date
cat /etc/localtime

image

从输出可以看出,容器和主机差了8个时区

我们通过环境变量的方式来改变容器的时区:

docker run -it --rm -e "TZ=Asia/Shanghai" centos
date
cat /etc/localtime

image

从输出可以看出,虽然没有改变对应的localtime文件,但是容器和主机的时区是一致的了。

方式二:挂载主机的时区文件到容器中

docker run -it --rm -v /etc/localtime:/etc/localtime  centos
date
cat /etc/localtime

image

从输出可以看出,容器和主机的时区是一致的了,而且使用了本机的时区文件。

Kubernetes的时区设置方式

在K8S中,可以参考Docker的方式进行设置

通过环境变量设置

apiVersion: v1
kind: Pod
metadata:name: pod-env-tz
spec:containers:- name: ngximage: nginx:latestimagePullPolicy: IfNotPresentenv:- name: TZvalue: Asia/Shanghai

通过挂载主机时区文件设置

apiVersion: v1
kind: Pod
metadata:name: pod-vol-tz
spec:containers:- name: ngximage: nginx:latestimagePullPolicy: IfNotPresentvolumeMounts:- name: tz-configmountPath: /etc/localtimereadOnly: truevolumes:- name: tz-confighostPath:path: /etc/localtime

这里引出了一个问题,难道每次每个容器都要做这样的配置才可以么?可否在系统层面设置,而无需在对应yaml文件体现呢?不然yaml文件将过于啰嗦。答案是使用K8S的特性Pod Preset来控制容器启动前先配置好对应时区环境变量,或者挂载主机文件。下面我们通过配置环境变量的方式说明,挂载文件是类似的,就不重复了。

通过Pod Preset预设置时区环境变量

激活Pod Preset

Pod Preset目前还是alpha阶段,默认是没有激活的,所以需要通过以下步骤激活:

咱们以阿里云的Kubernetes服务为例(如果还没有,可以尝试一下,一键就可以开通,还免费哦)。阿里云的Kubernetes服务的master组件(API Server, Scheduler, Controller)都是通过Static Pod的方式用Kubelet启动,所以需要更改对应的yaml来激活Pod Preset:

编辑/etc/kubernetes/manifests/kube-apiserver.yaml,

  • -runtime-config增加settings.k8s.io/v1alpha1=true
  • --admission-control增加PodPreset`

保存后kubelet会自动重启kube-apiserver组件。我们需要同时更改3台机器的master才可以。在期间你将收到类似以下的告警,在api server重启成功后会自动恢复

image

验证配置成功

  • 确保api server已经恢复,如果恢复将收到如下通知信息:

image

  • kubectl可以查询Pod Preset。在开关没有开启成功前,是无法调用以下命令的
kubectl get podpresets

配置设置时区的Pod Preset

对应的Pod Preset对象创建文件如下:

apiVersion: settings.k8s.io/v1alpha1
kind: PodPreset
metadata:name: allow-tz-env
spec:selector:matchLabels:env:- name: TZvalue: Asia/Shanghai

这里需要注意的地方是,一定需要写selector...matchLabels,但是matchLabels为空,标示应用于所有容器,这个正式我们所期望的

kubectl apply -f allow-tz-env.yaml
kubectl get podpresets

可以得到创建成功的Pod Preset列表:

image

以普通的方式创建容器,但是环境变量被Pod Preset注入了

apiVersion: v1
kind: Pod
metadata:name: pod-no-tz
spec:containers:- name: ngximage: nginx:latestimagePullPolicy: IfNotPresent

进入容器看看对应的环境变量:

image

从输出可以看出,容器已经被默认配置了时区的环境变量,对应的时区是Asia/Shanghai

小结

至此,我们就完成了容器的时区的"自动"配置了。Pod Preset的预设功能还是非常便利的,目前这块还在演进中,但是已经能大大简化了相关的管理工作,将这些配置从开发者手中解脱出来,变成系统管理配置。

需要注意的是,Pod Preset是namespace级别的对象,其作用范围只能是同一个命名空间下容器。

给社区的建议

建议Kubernetes社区可以在kubelet的启动参数重,增加一个开关,用来设置容器的默认时区,毕竟这个是很常见的实践


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521075.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux通过RPM方式指定软件安装目录

#可以使用prefix参数,将abc.rpm包安装到/usr/bin目录下 rpm -i –prefix/usr/bin abc.rpm

泪目!连拿3份 offer,AI 程序员求职经历火爆 IT圈!

程序员,如果有一天,你突然“被裁员”会怎么样?最近在知乎上浏览,看到这样一则内容:2019年,被裁员怎么挺过来?来源:知乎:https://www.zhihu.com/question/314153857其中这…

java 静态方法_80后程序员,教你学Java核心技术:用户自定义类+静态域静态方法

用户自定义类在第3章中,已经开始编写了一些简单的类。但是,那些类都只有一个简单的main方法。现在让我们开始学习如何设计复杂应用程序所需要的各种“主力类”(workhorse class)。通常,这些类没有main方法,而有自定义的实例域和实…

假如古代有了云计算,延禧攻略里的各位嫔妃要如何宫斗

延禧攻略最近大火,男女老少都在疯狂追剧,就连我们一项业余爱好单一的程序员小哥也用周末时间狂刷了70多集,妥妥的延禧粉。延禧攻略主要有两大看点,一个是各种CP让人眼花缭乱,帝后cp,后璎cp,卫龙…

mysql主从复制周期_Mysql主从复制的实现

basedir /usr/local/mysqldatadir /usr/local/mysql/dataport 3306server_id 2socket /tmp/mysql.sockskip_slave_start 1read_only 1relay_logrelay_logrelay_log_index relay_log.index重启mysqld服务[rootmysql_slave ~]# service mysqld restart3.5.查看master服务器的二进…

linux rpm包,安装路径查看及改变rpm包默认安装路径

查看: easwy:~$ rpm -qpl ext3grep-0.10.0-1.el5.rf.i386.rpm/usr/bin/ext3grep/usr/share/doc/ext3grep-0.10.0/usr/share/doc/ext3grep-0.10.0/INSTALL/usr/share/doc/ext3grep-0.10.0/LICENSE.GPL2/usr/share/doc/ext3grep-0.10.0/NEWS/usr/share/do…

容器服务kubernetes弹性伸缩高级用法

前言 近期,阿里云容器服务kubernetes发布了cluster-autoscaler的支持,开发者可以通过页面简单快捷的配置节点的弹性伸缩,支持普通实例、GPU实例以及竞价实例帮助开发者实现架构弹性和运营成本之间的博弈。阿里云容器服务kubernetes的cluster…

主进程中发生javascript错误_你知道 JavaScript 中的错误对象有哪些类型吗?

每当 JavaScript 中发生任何运行时错误时,都会引发Error对象。在许多情况下,我们还可以扩展这些标准Error对象,以创建我们自己的自定义Error对象。属性Error 对象具有2个属性name ——设置或返回错误名称。具体来说,它返回错误所属…

CSDN 1024,“猿”来在等你!

戳蓝字“CSDN云计算”关注我们哦!技术深不可测、薪资难以想象、着装招人吐槽、发量让人惊叹、笑点着实密集、情商令人堪忧......在这个你我他她它通过网络紧密互联、消息实时互通的 21 世纪,人们对身处技术至高点的程序员们仍然有着以上不接地气、呆板保…

BigData:值得了解的十大数据发展趋势

当今,世界无时无刻不在发生着变化。对于技术领域而言,普遍存在的一个巨大变化就是为大数据(Big data)打开了大门,并应用大数据技相关技术来改善各行业的业务并促进经济的发展。目前,大数据的作用已经上升到…

基于FPGA的图像Robert变换实现,包括tb测试文件和MATLAB辅助验证

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 fpga的结果导入到matlab显示: 2.算法运行软件版本 vivado2019.2 matlab2022a 3.部分核心程序 ..................................…

RabbitMQ 镜像集群配置_05

接上一篇:(企业级) RabbitMQ 普通集群配置_04 文章目录一、RabbitMQ 策略实战1. 创建RabbitMQ 策略2. ly-01节点查看创建RabbitMQ 策略3. 登录ly-02管控台查看创建RabbitMQ 策略4. 登录ly-03管控台查看创建RabbitMQ 策略二、添加队列测试2.1. 添加队列2.2. Queues菜…

2018年9月杭州云栖大会Workshop - 基于日志的安全分析实战

基于日志的安全分析实战 背景 越来越多的企业开始重视构建基于日志的安全分析与防护系统。我们会讲述如何使用日志服务从0到1收集海量日志,并从中实时筛选、甄别出可疑操作并快速分析,进一步构建安全大盘与可视化。并通过实战方式,演练覆盖…

python的图书管理项目教程_基于python图书馆管理系统设计实例详解

写完这个项目后,导师说这个你完全可以当作毕业项目使用了,写的很全,很多的都设计考虑周全,但我的脚步绝不止于现在,我想要的是星辰大海!与君共勉!这个项目不是我的作业, 只是无意中被…

不服OceanBase跑分?今天起可到阿里云上一战

蚂蚁金服自研数据库OceanBase登顶TPC-C榜单的消息振奋人心,同时引起国内技术圈的广泛讨论,第一个云上跑出来的数据库分数含金量如何?其他数据库有没有可能更强? 针对这些疑惑,10月24日阿里云以一种最为直接的方式作出…

张勇:新技术是阿里“五新战略”的引擎

9月19日,云栖大会再次在杭州开幕。上千位顶级学者、行业专家,来自64个国家的CEO和CTO齐聚云栖小镇。这已经是这个盛大的年度技术大会的第十年。 阿里巴巴集团CEO张勇在主论坛致辞中表示,“阿里巴巴永远是一家技术驱动,使商业有所…

钉钉视频会议

基于 DingTalk_v5.0.0.74版本制作

java 杭州专卖店_杭州JAVA哪家有名气

针对零基础学习的人,从对计算机操作等知识的了解,延伸到Java语言的发展与开发工具的使用上。主要是让你知道怎样执行计算机命令,认识Java这门语言,感受编程语言Java怎么开发程序。1)计算机基础让零基础学习的人先了解计算机相关知…

阿里云总裁胡晓明:“这些新杭州故事,明天将会在更多城市发生”

9月19日,2018杭州云栖大会现场,杭州城市大脑2.0正式发布,管辖范围扩大28倍,覆盖面积增至420平方公里,相当于65个西湖大小。 ET城市大脑等数字化城市解决方案,掀开了“杭州故事”的新篇章。今天的杭州&…

图书馆管理系统怎么做_亚马逊erp管理系统有免费的吗?亚马逊erp管理系统怎么免费做...

我做跨境电商也有六年的时间了,在电商这个行业也有自己的一些经验。经验也许没有其他大卖家丰富,但会将我知道的都进行分享。如果有不懂得亚马逊问题可以我(V:772024802)。我这里给大家安排一堂直播课,可以系统的帮你解决做亚马逊…