CronJobマニフェストの検証

ネストされたジョブテンプレートとPod仕様を含むKubernetes CronJobマニフェストを検証します。バッチコンテナのリソース制限不足などの一般的な問題をチェック。

Workload Types

詳細な説明

CronJobマニフェストの構造

CronJobは深くネストされた構造を持ちます:CronJob > JobTemplate > Job > PodTemplate > PodSpec > Containers。どのレベルの問題も問題を引き起こす可能性があります。

CronJobの例

apiVersion: batch/v1
kind: CronJob
metadata:
  name: daily-cleanup
  labels:
    app: maintenance
spec:
  schedule: "0 2 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: cleanup
              image: busybox:latest
              command: ["sh", "-c", "echo cleanup done"]
          restartPolicy: OnFailure

バリデーターが検出する問題

  • 警告: コンテナ 'cleanup' が ':latest' タグを使用しています
  • 警告: コンテナ 'cleanup' にリソースリクエストと制限がありません
  • 警告: securityContext.runAsNonRootが設定されていません

CronJob固有の考慮事項

フィールド 目的 デフォルト
spec.schedule Cron式 必須
spec.concurrencyPolicy Allow、Forbid、Replace Allow
spec.successfulJobsHistoryLimit 成功ジョブをN個保持 3
spec.failedJobsHistoryLimit 失敗ジョブをN個保持 1
spec.startingDeadlineSeconds スキップ前の最大遅延 なし

CronJobのベストプラクティス

  1. restartPolicyOnFailureまたはNeverに設定(Alwaysではなく)
  2. イメージバージョンを固定(:latestなし)
  3. 短時間ジョブでもリソース制限を設定
  4. 暴走ジョブ防止のためactiveDeadlineSecondsを設定
  5. ジョブが重複してはいけない場合はconcurrencyPolicy: Forbidを使用
  6. 完了したJobオブジェクトの蓄積を避けるため適切な履歴制限を設定

ユースケース

スケジュールされたタスクをデプロイする前にバッチジョブ設定を検証する。CronJobはデータベースバックアップ、ログローテーション、定期的なデータ処理によく使用されます。

試してみる — K8s Manifest Validator

フルツールを開く