Skip to content

Commit 2ce78eb

Browse files
authored
Merge pull request #27699 from shuuji3/shuuji3/translate-tasks-job-automated-27691
Translate tasks/job/automated-tasks-with-cron-jobs/ into Japanese
2 parents b91aa03 + e7545c9 commit 2ce78eb

File tree

1 file changed

+175
-0
lines changed

1 file changed

+175
-0
lines changed
Lines changed: 175 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,175 @@
1+
---
2+
title: CronJobを使用して自動化タスクを実行する
3+
min-kubernetes-server-version: v1.21
4+
content_type: task
5+
weight: 10
6+
---
7+
8+
<!-- overview -->
9+
10+
CronJobは、Kubernetes v1.21で一般利用(GA)に昇格しました。古いバージョンのKubernetesを使用している場合、正確な情報を参照できるように、使用しているバージョンのKubernetesのドキュメントを参照してください。古いKubernetesのバージョンでは、`batch/v1` CronJob APIはサポートされていません。
11+
12+
{{< glossary_tooltip text="CronJob" term_id="cronjob" >}}を使用すると、{{< glossary_tooltip text="Job" term_id="job" >}}を時間ベースのスケジュールで実行できるようになります。この自動化されたJobは、LinuxまたはUNIXシステム上の[Cron](https://ja.wikipedia.org/wiki/Cron)のように実行されます。
13+
14+
CronJobは、バックアップやメールの送信など、定期的なタスクや繰り返しのタスクを作成する時に便利です。CronJobはそれぞれのタスクを、たとえばアクティビティが少ない期間など、特定の時間にスケジューリングすることもできます。
15+
16+
CronJobには制限と特性があります。たとえば、特定の状況下では、1つのCronJobが複数のJobを作成する可能性があるため、Jobは冪等性を持つようにしなければいけません。
17+
18+
制限に関する詳しい情報については、[CronJob](/ja/docs/concepts/workloads/controllers/cron-jobs/)を参照してください。
19+
20+
## {{% heading "prerequisites" %}}
21+
22+
* {{< include "task-tutorial-prereqs.md" >}}
23+
24+
<!-- steps -->
25+
26+
## CronJobを作成する
27+
28+
CronJobには設定ファイルが必要です。次の例のCronJobの`.spec`は、現在の時刻とhelloというメッセージを1分ごとに表示します。
29+
30+
{{< codenew file="application/job/cronjob.yaml" >}}
31+
32+
次のコマンドで例のCronJobを実行します。
33+
34+
```shell
35+
kubectl create -f https://k8s.io/examples/application/job/cronjob.yaml
36+
```
37+
38+
出力は次のようになります。
39+
40+
```
41+
cronjob.batch/hello created
42+
```
43+
44+
CronJobを作成したら、次のコマンドで状態を取得します。
45+
46+
```shell
47+
kubectl get cronjob hello
48+
```
49+
50+
出力は次のようになります。
51+
52+
```
53+
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
54+
hello */1 * * * * False 0 <none> 10s
55+
```
56+
57+
コマンドの結果からわかるように、CronJobはまだスケジュールされておらず、まだ何のJobも実行していません。約1分以内にJobが作成されるのを見てみましょう。
58+
59+
```shell
60+
kubectl get jobs --watch
61+
```
62+
63+
出力は次のようになります。
64+
65+
```
66+
NAME COMPLETIONS DURATION AGE
67+
hello-4111706356 0/1 0s
68+
hello-4111706356 0/1 0s 0s
69+
hello-4111706356 1/1 5s 5s
70+
```
71+
72+
"hello"CronJobによってスケジュールされたJobが1つ実行中になっていることがわかります。Jobを見るのをやめて、再度CronJobを表示して、Jobがスケジュールされたことを確認してみます。
73+
74+
```shell
75+
kubectl get cronjob hello
76+
```
77+
78+
出力は次のようになります。
79+
80+
```
81+
NAME SCHEDULE SUSPEND ACTIVE LAST SCHEDULE AGE
82+
hello */1 * * * * False 0 50s 75s
83+
```
84+
85+
CronJob`hello`が、`LAST SCHEDULE`で指定された時間にJobを正しくスケジュールしたことが確認できるはずです。現在、activeなJobの数は0です。つまり、Jobは完了または失敗したことがわかります。
86+
87+
それでは、最後にスケジュールされたJobの作成と、Podの1つの標準出力を表示してみましょう。
88+
89+
{{< note >}}
90+
Jobの名前とPodの名前は異なります。
91+
{{< /note >}}
92+
93+
```shell
94+
# "hello-4111706356" の部分は、あなたのシステム上のJobの名前に置き換えてください。
95+
pods=$(kubectl get pods --selector=job-name=hello-4111706356 --output=jsonpath={.items[*].metadata.name})
96+
```
97+
98+
Podのログを表示します。
99+
100+
```shell
101+
kubectl logs $pods
102+
```
103+
104+
出力は次のようになります。
105+
106+
```
107+
Fri Feb 22 11:02:09 UTC 2019
108+
Hello from the Kubernetes cluster
109+
```
110+
111+
## CronJobの削除
112+
113+
CronJobが必要なくなったときは、`kubectl delete cronjob <cronjob name>`で削除します。
114+
115+
```shell
116+
kubectl delete cronjob hello
117+
```
118+
119+
CronJobを削除すると、すべてのJobと、そのJobが作成したPodが削除され、追加のJobの作成が停止されます。Jobの削除について詳しく知りたい場合は、[ガベージコレクション](/ja/docs/concepts/workloads/controllers/garbage-collection/)を読んでください。
120+
121+
## CronJobのspecを書く {#writing-a-cron-job-spec}
122+
123+
すべてのKubernetesの設定と同じように、CronJobにも`apiVersion``kind``metadata`のフィールドが必要です。設定ファイルの扱い方についての一般的な情報については、[アプリケーションのデプロイ](/ja/docs/tasks/run-application/run-stateless-application-deployment/)[kubectlを使用してリソースを管理する](/ja/docs/concepts/overview/working-with-objects/object-management/)を読んでください。
124+
125+
CronJobの設定には、[`.spec`セクション](https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#spec-and-status)も必要です。
126+
127+
{{< note >}}
128+
CronJobの特に`spec`へのすべての修正は、それ以降の実行にのみ適用されます。
129+
{{< /note >}}
130+
131+
### Schedule
132+
133+
`.spec.schedule`は、`.spec`には必須のフィールドです。`0 * * * *``@hourly`などの[Cron](https://ja.wikipedia.org/wiki/Cron)形式の文字列を取り、Jobの作成と実行のスケジュール時間を指定します。
134+
135+
フォーマットにはVixie cronのステップ値(step value)も指定できます。[FreeBSDのマニュアル](https://www.freebsd.org/cgi/man.cgi?crontab%285%29)では次のように説明されています。
136+
137+
> ステップ値は範囲指定と組み合わせて使用できます。範囲の後ろに`/<number>`を付けると、範囲全体で指定したnumberの値ごとにスキップすることを意味します。たとえば、`0-23/2`をhoursフィールドに指定すると、2時間毎にコマンド実行を指定することになります(V7標準では代わりに`0,2,4,6,8,10,12,14,16,18,20,22`と指定する必要があります)。ステップはアスタリスクの後ろにつけることもできます。そのため、「2時間毎に実行」したい場合は、単純に`*/2`と指定できます。
138+
139+
{{< note >}}
140+
スケジュール内の疑問符`?`はアスタリスク`*`と同じ意味を持ちます。つまり、与えられたフィールドには任意の値が使えるという意味になります。
141+
{{< /note >}}
142+
143+
### Job Template
144+
145+
`.spec.jobTemplate`はJobのテンプレートであり、必須です。[Job](/docs/concepts/workloads/controllers/job/)と完全に同一のスキーマを持ちますが、フィールドがネストされている点と、`apiVersion``kind`が存在しない点だけが異なります。Jobの`.spec`を書くための情報については、[JobのSpecを書く](/docs/concepts/workloads/controllers/job/#writing-a-job-spec)を参照してください。
146+
147+
### Starting Deadline
148+
149+
`.spec.startingDeadlineSeconds`フィールドはオプションです。何かの理由でスケジュールに間に合わなかった場合に適用される、Jobの開始のデッドライン(締め切り)を秒数で指定します。デッドラインを過ぎると、CronJobはJobを開始しません。この場合にデッドラインに間に合わなかったJobは、失敗したJobとしてカウントされます。もしこのフィールドが指定されなかった場合、Jobはデッドラインを持ちません。
150+
151+
`.spec.startingDeadlineSeconds`フィールドがnull以外に設定された場合、CronJobコントローラーはJobの作成が期待される時間と現在時刻との間の時間を計測します。もしその差が制限よりも大きかった場合、その実行はスキップされます。
152+
153+
たとえば、この値が`200`に設定された場合、実際のスケジュールの最大200秒後までに作成されるJobだけが許可されます。
154+
155+
### Concurrency Policy
156+
157+
`.spec.concurrencyPolicy`フィールドもオプションです。このフィールドは、このCronJobで作成されたJobの並列実行をどのように扱うかを指定します。specには以下のconcurrency policyのいずれかを指定します。
158+
159+
* `Allow` (デフォルト): CronJobがJobを並列に実行することを許可します。
160+
* `Forbid`: CronJobの並列実行を禁止します。もし新しいJobの実行時に過去のJobがまだ完了していなかった場合、CronJobは新しいJobの実行をスキップします。
161+
* `Replace`: もし新しいJobの実行の時間になっても過去のJobの実行が完了していなかった場合、CronJobは現在の実行中のJobを新しいJobで置換します。
162+
163+
concurrency policyは、同じCronJobが作成したJobにのみ適用されます。もし複数のCronJobがある場合、それぞれのJobの並列実行は常に許可されます。
164+
165+
### Suspend
166+
167+
`.spec.suspend`フィールドもオプションです。このフィールドを`true`に設定すると、すべての後続の実行がサスペンド(一時停止)されます。この設定はすでに実行開始したJobには適用されません。デフォルトはfalseです。
168+
169+
{{< caution >}}
170+
スケジュールされた時間中にサスペンドされた実行は、見逃されたJob(missed job)としてカウントされます。[starting deadline](#starting-deadline)が設定されていない既存のCronJob`.spec.suspend``true`から`false`に変更されると、見逃されたJobは即座にスケジュールされます。
171+
{{< /caution >}}
172+
173+
### Job History Limit
174+
175+
`.spec.successfulJobsHistoryLimit``.spec.failedJobsHistoryLimit`フィールドはオプションです。これらのフィールドには、完了したJobと失敗したJobをいくつ保持するかを指定します。デフォルトでは、それぞれ3と1に設定されます。リミットを`0`に設定すると、対応する種類のJobを実行完了後に何も保持しなくなります。

0 commit comments

Comments
 (0)