From e293ca7dda4b447980d022bfdfdd9cc26378d367 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 1 Dec 2022 21:21:29 +0800 Subject: [PATCH] [zh] sync /controllers/cron-jobs.md --- .../workloads/controllers/cron-jobs.md | 68 +++++++++---------- 1 file changed, 33 insertions(+), 35 deletions(-) diff --git a/content/zh-cn/docs/concepts/workloads/controllers/cron-jobs.md b/content/zh-cn/docs/concepts/workloads/controllers/cron-jobs.md index fa48cbf0e7..16203a0550 100644 --- a/content/zh-cn/docs/concepts/workloads/controllers/cron-jobs.md +++ b/content/zh-cn/docs/concepts/workloads/controllers/cron-jobs.md @@ -5,6 +5,10 @@ weight: 80 --- -_CronJob_ 创建基于时隔重复调度的 {{< glossary_tooltip term_id="job" text="Jobs" >}}。 +**CronJob** 创建基于时隔重复调度的 {{< glossary_tooltip term_id="job" text="Job" >}}。 -一个 CronJob 对象就像 _crontab_ (cron table) 文件中的一行。 +一个 CronJob 对象就像 **crontab** (cron table) 文件中的一行。 它用 [Cron](https://en.wikipedia.org/wiki/Cron) 格式进行编写, 并周期性地在给定的调度时间执行 Job。 +{{< caution >}} - -{{< caution >}} 所有 **CronJob** 的 `schedule:` 时间都是基于 -{{< glossary_tooltip term_id="kube-controller-manager" text="kube-controller-manager" >}}. +{{< glossary_tooltip term_id="kube-controller-manager" text="kube-controller-manager" >}} 的时区。 如果你的控制平面在 Pod 或是裸容器中运行了 kube-controller-manager, 那么为该容器所设置的时区将会决定 Cron Job 的控制器所使用的时区。 {{< /caution >}} +{{< caution >}} - -{{< caution >}} 如 [v1 CronJob API](/zh-cn/docs/reference/kubernetes-api/workload-resources/cron-job-v1/) 所述,官方并不支持设置时区。 Kubernetes 项目官方并不支持设置如 `CRON_TZ` 或者 `TZ` 等变量。 @@ -101,8 +103,7 @@ This example CronJob manifest prints the current time and a hello message every {{< codenew file="application/job/cronjob.yaml" >}} -[使用 CronJob 运行自动化任务](/zh-cn/docs/tasks/job/automated-tasks-with-cron-jobs/) -一文会为你详细讲解此例。 +[使用 CronJob 运行自动化任务](/zh-cn/docs/tasks/job/automated-tasks-with-cron-jobs/)一文会为你详细讲解此例。 | 输入 | 描述 | 相当于 | | ------------- | ------------- |------------- | -| @yearly (or @annually) | 每年 1 月 1 日的午夜运行一次 | 0 0 1 1 * | +| @yearly (或 @annually) | 每年 1 月 1 日的午夜运行一次 | 0 0 1 1 * | | @monthly | 每月第一天的午夜运行一次 | 0 0 1 * * | | @weekly | 每周的周日午夜运行一次 | 0 0 * * 0 | -| @daily (or @midnight) | 每天午夜运行一次 | 0 0 * * * | +| @daily (或 @midnight) | 每天午夜运行一次 | 0 0 * * * | | @hourly | 每小时的开始一次 | 0 * * * * | +## 时区 {#time-zones} + +对于没有指定时区的 CronJob,kube-controller-manager 基于本地时区解释排期表(Schedule)。 {{< feature-state for_k8s_version="v1.25" state="beta" >}} + - -## 时区 {#time-zones} -对于没有指定时区的 CronJob,kube-controller-manager 基于本地时区解释排期表(Schedule)。 - -{{< feature-state for_k8s_version="v1.25" state="beta" >}} - 如果启用了 `CronJobTimeZone` [特性门控](/zh-cn/docs/reference/command-line-tools-reference/feature-gates/), 你可以为 CronJob 指定一个时区(如果你没有启用该特性门控,或者你使用的是不支持试验性时区功能的 Kubernetes 版本,集群中所有 CronJob 的时区都是未指定的)。 启用该特性后,你可以将 `spec.timeZone` -设置为有效[时区](https://zh.wikipedia.org/wiki/%E6%97%B6%E5%8C%BA%E4%BF%A1%E6%81%AF%E6%95%B0%E6%8D%AE%E5%BA%93)名称。 +设置为有效[时区](https://zh.wikipedia.org/wiki/%E6%97%B6%E5%8C%BA%E4%BF%A1%E6%81%AF%E6%95%B0%E6%8D%AE%E5%BA%93)名称。 例如,设置 `spec.timeZone: "Etc/UTC"` 指示 Kubernetes 采用 UTC 来解释排期表。 Go 标准库中的时区数据库包含在二进制文件中,并用作备用数据库,以防系统上没有可用的外部数据库。 - 对于每个 CronJob,CronJob {{< glossary_tooltip term_text="控制器" term_id="controller" >}} 检查从上一次调度的时间点到现在所错过了调度次数。如果错过的调度次数超过 100 次, 那么它就不会启动这个任务,并记录这个错误: -```` +``` Cannot determine if job needs to be started. Too many missed start time (> 100). Set or decrease .spec.startingDeadlineSeconds or check clock skew. -```` +``` 如果未能在调度时间内创建 CronJob,则计为错过。 例如,如果 `concurrencyPolicy` 被设置为 `Forbid`,并且当前有一个调度仍在运行的情况下, @@ -245,16 +243,16 @@ be down from `08:29:00` to `10:21:00`, the job will not start as the number of m --> 例如,假设一个 CronJob 被设置为从 `08:30:00` 开始每隔一分钟创建一个新的 Job, 并且它的 `startingDeadlineSeconds` 字段未被设置。如果 CronJob 控制器从 -`08:29:00` 到 `10:21:00` 终止运行,则该 Job 将不会启动,因为其错过的调度 -次数超过了 100。 +`08:29:00` 到 `10:21:00` 终止运行,则该 Job 将不会启动, +因为其错过的调度次数超过了 100。 为了进一步阐述这个概念,假设将 CronJob 设置为从 `08:30:00` 开始每隔一分钟创建一个新的 Job, -并将其 `startingDeadlineSeconds` 字段设置为 200 秒。 +并将其 `startingDeadlineSeconds` 字段设置为 200 秒。 如果 CronJob 控制器恰好在与上一个示例相同的时间段(`08:29:00` 到 `10:21:00`)终止运行, 则 Job 仍将从 `10:22:00` 开始。 造成这种情况的原因是控制器现在检查在最近 200 秒(即 3 个错过的调度)中发生了多少次错过的 @@ -271,7 +269,7 @@ CronJob 仅负责创建与其调度时间相匹配的 Job,而 Job 又负责管 Starting with Kubernetes v1.21 the second version of the CronJob controller is the default implementation. To disable the default CronJob controller -and use the original CronJob controller instead, one pass the `CronJobControllerV2` +and use the original CronJob controller instead, pass the `CronJobControllerV2` [feature gate](/docs/reference/command-line-tools-reference/feature-gates/) flag to the {{< glossary_tooltip term_id="kube-controller-manager" text="kube-controller-manager" >}}, and set this flag to `false`. For example: @@ -289,6 +287,7 @@ and set this flag to `false`. For example: ``` ## {{% heading "whatsnext" %}} + - * 了解 CronJob 所依赖的 [Pod](/zh-cn/docs/concepts/workloads/pods/) 与 [Job](/zh-cn/docs/concepts/workloads/controllers/job/) 的概念。 * 阅读 CronJob `.spec.schedule` 字段的[格式](https://pkg.go.dev/github.com/robfig/cron/v3#hdr-CRON_Expression_Format)。 -* 有关创建和使用 CronJob 的说明及示例规约文件,请参见 - [使用 CronJob 运行自动化任务](/zh-cn/docs/tasks/job/automated-tasks-with-cron-jobs/)。 +* 有关创建和使用 CronJob 的说明及示例规约文件, + 请参见[使用 CronJob 运行自动化任务](/zh-cn/docs/tasks/job/automated-tasks-with-cron-jobs/)。 * 有关自动清理失败或完成作业的说明,请参阅[自动清理作业](/zh-cn/docs/concepts/workloads/controllers/job/#clean-up-finished-jobs-automatically) * `CronJob` 是 Kubernetes REST API 的一部分, 阅读 {{< api-reference page="workload-resources/cron-job-v1" >}}