CronJob は、ポッドを直接管理しない特殊なタイプのワークロードです。代わりに、指定されたポリシーに基づいて定期的に複数の独立したジョブを作成し、それらのステータスを監視します。 CronJob は、バックアップ操作の実行やメールの送信など、定期的で反復的な操作に適しています。このトピックでは、コンソールまたは kubectl を使用して CronJob を作成する方法について説明します。
このトピックで使用されているサンプルイメージはパブリックイメージです。クラスタまたはノードは、それらをプルするためにパブリックネットワークアクセスが必要です。
既存の ACK クラスタがインターネットにアクセスできるようにする (推奨):クラスタをホストしている仮想プライベートクラウド (VPC) のパブリック NAT ゲートウェイを作成します。すべてのクラスタリソースがパブリックアクセスできるようになります。
静的パブリック IP アドレス をノードに割り当てる:パブリック IP を持つノードはパブリックイメージをプルできますが、ワークロードを実行するすべてのノードにパブリック IP を割り当てる必要があります。
Cronjob を作成する
コンソールの使用
ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、目的のクラスタを見つけて名前をクリックします。左側のペインで、 を選択します。
[CronJob] ページで、[イメージから作成] をクリックします。
[基本情報] ウィザードページで、アプリケーションの基本パラメータを設定します。次に、[次へ] をクリックして、[コンテナ] ウィザードページに進みます。
[一般] セクションで、 として
registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
イメージ名 を入力します。[ライフサイクル] セクションで、 パラメータの ボックスに/bin/sh
コマンド[開始]["-c", "echo 'starting...'; COUNTER=0; while [ $COUNTER -lt 5 ]; do sleep 2; COUNTER=$((COUNTER+1)); echo $COUNTER; done; echo 'finished'; exit 0"]
を入力し、[パラメータ] ボックスに ["-c", "echo 'starting...'; COUNTER=0; while [ $COUNTER -lt 5 ]; do sleep 2; COUNTER=$((COUNTER+1)); echo $COUNTER; done; echo 'finished'; exit 0"] を入力します。[次へ] をクリックして、詳細ウィザードページに進みます。重要registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx:latest
イメージをプルする前に、クラスタのインターネットアクセスを有効にする必要があります。クラスタの作成時に [VPC に SNAT を構成する] を選択すると、クラスタはインターネットにアクセスできます。このオプションを選択しない場合は、既存の ACK クラスタがインターネットにアクセスできるようにする を参照してください。[詳細設定] ウィザードページでは、CronJob のスケジューリングとジョブ設定を構成できます。この例では、スケジューリングルールを 2 分ごとに実行するように設定し、その他のオプションはデフォルトのままにします。次に、ページ下部にある [作成] をクリックします。
カテゴリ
パラメータ
説明
CronJob
スケジュール
時間単位、日単位、週単位、または月単位でスケジュールを指定できます。 cron 式を指定することもできます。
Cron 式の詳細については、Cron 式 を参照してください。
同時実行ポリシー
現在のジョブが完了していないときに新しいジョブを作成できるかどうかを指定します。
禁止
:新しいジョブの作成をスキップします。このオプションは、ジョブを特定の順序で実行する必要がある場合や、ジョブが相互に依存している場合に適しています。許可
:同時実行を許可し、新しいジョブを直接作成します。このオプションは、ジョブが相互に影響を与えない場合に適しています。置換
:現在のジョブを終了し、新しいジョブを作成します。このオプションは、最新の実行結果が必要な場合に適しています。
ジョブ履歴
CronJob が保持する成功および失敗したジョブの数。過剰な履歴レコードがリソースを占有するのを防ぎます。
成功ジョブ履歴制限:保持する最新の成功ジョブの数。
失敗ジョブ履歴制限:保持する最新の失敗ジョブの数。
ジョブ設定
完了
jobTemplate.spec.completions
。完了状態に入ったポッドの数を指定します。並列処理
jobTemplate.spec.parallelism
。同時実行できるポッドの数を指定します。タイムアウト
jobTemplate.spec.activeDeadlineSeconds
。単一ジョブの最大実行時間を指定します。ジョブが完了したかどうかに関係なく、実行時間がこの値を超えるとすぐにジョブは停止されます。このオプションは、時間制限が厳しいジョブや無限ループに入る可能性のあるジョブに適しています。デフォルト値は600
秒です。バックオフ制限
jobTemplate.spec.backoffLimit
:ポッドが失敗した後の最大再試行回数。これはすべてのポッドの障害の総数です。デフォルト値は6
です。再起動
jobTemplate.spec.template.spec.restartPolicy
。ポッドが失敗した後の再起動ポリシーを指定します。なし:ポッド内のコンテナが異常終了した後、システムはポッドをその場で再起動しようとします(新しいポッドを作成せずに)。再起動は
spec.backoffLimit
にカウントされません。失敗時:ポッドが失敗した後、システムはそれを置き換える新しいポッドを作成します。
ラベル、アノテーション
ポッドラベル
ワークロードが属する各ポッドにラベルを追加します。ワークロードやサービスを含むクラスタ内のすべてのリソースは、ラベルを使用してポッドと照合されます。 ACK はデフォルトで
app:(アプリケーション名)
の形式のラベルをポッドに追加します。ポッドアノテーション
ワークロードが属する各ポッドにアノテーションを追加します。 ACK の一部の機能はアノテーションを使用します。これらの機能を使用するときにアノテーションを設定できます。
CronJob が作成されると、コンソールで 2 分間隔で作成されたジョブを確認できます。
kubectl の使用
ワークロードを作成する前に、kubectl を使用してクラスタに接続していることを確認してください。詳細については、「クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する」をご参照ください。
次の YAML ファイルをコピーして cronjob.yaml として保存します。 CronJob の
jobTemplate.spec
セクションは、ジョブのspec
セクションと同じ形式です。次の例では、ジョブを作成する のジョブ例を使用しています。
apiVersion: batch/v1
kind: CronJob
metadata:
name: example-cronjob
labels:
app: cronjob
spec:
schedule: "*/2 * * * *" # 2分ごとに実行
concurrencyPolicy: Forbid # 同時実行を禁止
successfulJobsHistoryLimit: 3 # 最新の3つの成功ジョブを保持
failedJobsHistoryLimit: 2 # 最新の2つの失敗ジョブを保持
jobTemplate:
spec:
completions: 1 # 2つのポッドが完了したらジョブを停止
parallelism: 1 # 一度に1つのポッドのみを実行
template:
spec:
containers:
- name: counter
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
command:
- /bin/sh
- -c
- |
echo "starting..."; // 開始
COUNTER=0;
while [ $COUNTER -lt 5 ]; do // COUNTERが5未満の間ループ
sleep 2;
COUNTER=$((COUNTER+1));
echo "${COUNTER}";
done;
echo "finished"; // 終了
exit 0
restartPolicy: Never # ポッドを再起動しない
次のコマンドを実行して CronJob を作成します。
kubectl apply -f cronjob.yaml
予想される出力:
cronjob.batch/example-cronjob created
約 10 分待ってから、次のコマンドを実行してジョブの実行ステータスを確認します。
kubectl get job
予想される出力:
NAME STATUS COMPLETIONS DURATION AGE example-cronjob-2901**22 Complete 2/2 31s 5m13s example-cronjob-2901**23 Complete 2/2 31s 3m13s example-cronjob-2901**24 Complete 2/2 26s 73s
参照
ワークロードの作成時に発生する可能性のある問題の詳細については、「ワークロードに関するよくある質問」をご参照ください。
ポッドの例外の詳細については、「ポッドのトラブルシューティング」をご参照ください。