前几天在使用k8s中的CronJob时发现了一个很奇怪的问题, 按照官方文档的demo跑起来是没有任何问题的,

但是当我想要设置每天一个固定时间点例如12点20执行一个job的时候,到了时间之后无论如何都不会执行。

一开始怀疑是cron表达式写的有问题,但是经过多次试验倒是没问题,然后就想到了时区的问题。

首先我先尝试使用PodPreset来修改所有容器的时区(在pod 创建时,用户可以使用 podpreset 对象将特定信息注入 pod 中,这些信息可以包括 secret、 卷、 卷挂载和环境变量)

默认k8s是没有开启PodPreset的,开启PodPreset需要修改master节点上的/etc/kubernetes/manifests/kube-apiserver.yaml文件

1
2
3
首先在CMD末尾添加一个--runtime-config=settings.k8s.io/v1alpha1=true
在--enable-admission-plugins的后面增加一个PodPreset
重启k8s systemctl restart kubelet

创建一个yml,为所有的pod挂载一个时区的环境变量

1
2
3
4
5
6
7
8
9
10
11
apiVersion: settings.k8s.io/v1alpha1
kind: PodPreset
metadata:
name: tz-env
namespace: unicode-pay
spec:
selector:
matchLabels:
env:
- name: TZ
value: Asia/Shanghai

注意:

  1. Pod Preset是namespace级别的对象,其作用范围只能是同一个命名空间下容器
  2. matchLabels为空代表选择所有

此时再次尝试CronJob之后发现还是不执行,然后进入该命名空间下的其他pod之后查看时间发现也没问题。

此时想到了虽然把pod的时区更改了,但是k8s调度器可不是按照pod的时间进行调度的,原来此时需要修改的是k8s的时区

再次来到/etc/kubernetes/manifests目录,使用如下方式修改此目录下4个k8s的组件的时间

1
2
3
4
5
6
7
8
9
10
11
12
13
14
apiVersion: v1
kind: Pod
metadata:
name: time
spec:
containers:
volumeMounts:
- name: config
mountPath: /etc/localtime
readOnly: true
volumes:
- name: config
hostPath:
path: /etc/localtime

重启k8s,搞定

systemctl restart kubelet

最新文章

  1. spring统一日志管理,切面(@Aspect),注解式日志管理
  2. OAF_开发系列11_实现OAF通过DataBoundValues动态显示表列的左右对齐
  3. BZOJ4491: 我也不知道题目名字是什么
  4. CSS 高级技巧汇总
  5. 如何修改ECShop发货单查询显示个数
  6. about_并查集
  7. mysql 查看警告
  8. IOS开发笔记 - 基于wsdl2objc调用webservice
  9. tensorflow安装相关的
  10. JVM学习之类加载
  11. 《HelloGitHub》第 18 期
  12. [物理学与PDEs]第4章第3节 一维反应流体力学方程组 3.3 一维反应流体力学方程组的数学结构
  13. Linux下导入CA证书
  14. Android学习笔记(2):build.grandle的常用设置
  15. 【PAT】B1054 求平均值(20 分)
  16. 关于在VB.NET中调用使用VC++编写的类库dll的一点笔记
  17. Solr学习笔记——导入JSON数据
  18. Sql Server中的表访问方式Table Scan, Index Scan, Index Seek
  19. Ural 2045. Richness of words 打表找规律
  20. getOutputStream() 的问题

热门文章

  1. Google开源PDF软件库
  2. Spring Boot 调度器
  3. explain慢SQL分析解释
  4. NOIP 2002 过河卒
  5. Python-numpy包中多维数组转置,transpose.swapaxes的轴编号(axis)的理解
  6. docker--发布docker镜像
  7. 公共组件及脚手架webpack模板
  8. Appium入门指南 - 环境搭建和Case编写
  9. Node.js安装使用-VueCLI安装使用-工程化的Vue.js开发
  10. TypeWriting