如何在 k8s cron 作业中指定 cron 时区?

问题描述 投票:0回答:1

根据文档(https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/)我可以在k8s中创建带有指定时区的cron作业,例如:

"CRON_TZ=UTC 0 23 * * *"

我的部署文件是:

apiVersion: batch/v1
kind: CronJob
metadata:
  name: scheduler
spec:
  schedule: "CRON_TZ=UTC 0 23 * * *"
...

在部署过程中我收到错误:

CronJob“调度程序”无效:spec.schedule:无效值:“CRON_TZ=UTC 0 23 * * *”:预期正好 5 个字段,找到 6 个:CRON_TZ=UTC 0 23 * * *

Cron 在没有完美时区的情况下工作 (

schedule: "0 23 * * *"
)

集群版本是:

Kubernetes 1.21.2-do.2
- digitalocean。

出了什么问题?

kubernetes cron digital-ocean cron-task k8s-cronjobber
1个回答
12
投票

CRON_TZ=<timezone>
前缀尚不可用,要到 1.22 为止。 1.21 版本文档中的包含内容是一个错误。

最初,添加语法的更改是包含在 1.22 中,但似乎有人感到困惑并将文档移至 1.21。 支持

CRON_TZ=<timezone>
语法是偶然的,纯粹是因为用于处理调度的最近升级到了版本3,增加了对该语法的支持。该包是使语法成为可能的关键组件,并且只是 1.22 的一部分。

截至

2021 年 11 月,文档中的措辞已调整为声明 CRON_TZ

 不受官方支持:

注意

v1 CronJob API 不正式支持设置时区,如上所述。

设置

CRON_TZ

TZ
 等变量不受 Kubernetes 项目官方支持。 
CRON_TZ
TZ
是用于解析和计算下一个Job创建时间的内部库的实现细节。不建议在生产集群中使用它。

如果您可以升级到 1.24,则可以使用新的

CronJobTimeZone

 功能门
来启用通过 KEP 3140 添加的新的官方时区支持。请注意,这仍然是 alpha 级别的功能;它在 1.25 中达到测试状态,并在 1.27 版本中达到成熟状态。

启用功能门后,您可以将

timeZone

 字段添加到您的 CronJob 
spec
:

apiVersion: batch/v1 kind: CronJob metadata: name: scheduler spec: schedule: "0 23 * * *" timeZone: "Etc/UTC"
    
© www.soinside.com 2019 - 2024. All rights reserved.