ブログ | XIMIX

Google Kubernetes Engine(GKE)クラスタのメンテナンス除外設定を定期更新するCronJobを作成してみた

作成者: XIMIX 山田|2025.02.14

はじめに

今回の記事では、KubernetesのワークロードリソースであるCronJobを取り上げます。まず、公式ドキュメントを参考にCronJobの概要について説明します。その後、Google Cloud上でCronJobをデプロイする方法を解説します。
 
前回のブログ記事では、GKEクラスタの詳細設定の1つであるメンテナンス除外の設定をシェルスクリプトで実行する方法について解説しました。また、メンテナンス除外設定の自動更新を行う背景についても触れています。詳細が気になる方は、ぜひ前回の記事をご覧ください。
 

CronJobとは

CronJobは、Kubernetesのワークロードリソースの1つであり、定期的に実行したいジョブがある場合に使用されます。例えば、バックアップの実行やメール送信といった定期的、または頻繁に発生するタスクの解決に役立ちます。

参考:CronJob公式ドキュメント(日本語)

ソースコード

本章では、実装に使用するyamlファイルの内容を解説します。
  • CronJob
  • Kubernetes Namespace、Kubernetes ServiceAccount

 CronJobのyamlファイル

apiVersion: batch/v1
kind: CronJob
metadata:
  name: cronjob-maintenance-ex
  namespace: ns-maintenance-ex
spec:
  schedule: "0 15 * * 0"
  jobTemplate:
    spec:
      backoffLimit: 0
      template:
        spec:
          serviceAccountName: sa-maintenance-ex
          containers:
          - name: c-maintenance-ex
            image: google/cloud-sdk:latest
            command:
            - "/bin/bash"
            - "-c"
            - |
              set -e;
              apt-get update;
              apt-get install -y jq;
              apt-get clean;
              CLUSTER_NAME='gke-pilot-versionup-dev-autopilot';
              ZONE='asia-northeast1';
              NEW_EXCLUSION_NAME="exclusion-$(date '+%Y%m%d')";
              PERIOD='20 days';
              gcloud container clusters update $CLUSTER_NAME --zone $ZONE --add-maintenance-exclusion-name $NEW_EXCLUSION_NAME --add-maintenance-exclusion-start $(date +"%Y-%m-%dT%H:%M:%S%z") --add-maintenance-exclusion-end $(date -d "$PERIOD" +"%Y-%m-%dT%H:%M:%S%z");
              echo 'New maintenance exclusion created successfully.';
              EXCLUSION_NAMES=$(gcloud container clusters describe $CLUSTER_NAME --zone $ZONE --format='json' | jq -r '.maintenancePolicy.window.maintenanceExclusions | keys[]');
              EXCLUSION_NAMES_ARRAY=($EXCLUSION_NAMES);
              if [ $