はじめに
背景
メンテナンス除外とは
-
除外の期間
-
自動メンテナンスの実行が禁止される期間
-
-
除外するアップグレードの範囲
-
アップグレードなし(デフォルト)
-
マイナーアップグレードなし
-
マイナー・ノードアップグレードなし
-
メンテナンス除外設定をシェルスクリプトで実行しよう
仕様
-
除外期間:20日
-
開始日:設定日
-
終了日:設定日の20日後
-
-
除外するアップグレードの範囲:アップグレードなし(デフォルト)
-
既に除外設定が存在する場合は、新規で除外設定を作成したのちに既存の除外設定を削除する(除外設定が1つもない状態にしない)
スクリプト
#!/bin/bash
#エラー検知でスクリプト停止
set -e
CLUSTER_NAME="gke-maintenance-ex" #クラスターの名前
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 [ "${#EXCLUSION_NAMES_ARRAY[@]}" -ge "2" ]; then
for EXCLUSION_NAME in $EXCLUSION_NAMES; do
if [ "$EXCLUSION_NAME" != "$NEW_EXCLUSION_NAME" ]; then
echo "Removing maintenance exclusion: $EXCLUSION_NAME"
gcloud container clusters update $CLUSTER_NAME \
--zone $ZONE \
--remove-maintenance-exclusion $EXCLUSION_NAME
fi
done
fi
エラー検知でスクリプト停止
#エラー検知でスクリプト停止
set -e
変数設定
CLUSTER_NAME="gke-maintenance-ex" #クラスターの名前
ZONE="asia-northeast1" #ゾーン
NEW_EXCLUSION_NAME="exclusion-$(date '+%Y%m%d')" #除外の名前
PERIOD="20 days" #除外期間
-
CLUSTER_NAME:対象とするGKEクラスターの名前
-
ZONE:クラスターが存在するゾーン(リージョン指定でも大丈夫です)
-
NEW_EXCLUSION_NAME:除外の名前。名前に一意性をもたせるため設定日を付けています(例:exclusion-20241209)
-
PERIOD:除外期間(本当は30日にしたかったんですが、メンテナンスポリシーによる制約があったので20日に変更)
メンテナンスポリシーの制約:32 日間のローリング ウィンドウ内で少なくとも 48 時間はメンテナンスが可能な状態にする必要があります。メンテナンスに 4 時間以上連続する時間を用意してください。
ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Error validating maintenance policy: maintenance policy would go longer than 32d without 48h maintenance availability of >= 4h contiguous duration (in time range [2024-11-04T02:20:43Z, 2024-12-06T02:20:43Z]).
メンテナンス除外の新規作成
#メンテナンス除外期間を新規作成
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 [ "${#EXCLUSION_NAMES_ARRAY[@]}" -ge "2" ]; then
for EXCLUSION_NAME in $EXCLUSION_NAMES; do
if [ "$EXCLUSION_NAME" != "$NEW_EXCLUSION_NAME" ]; then
echo "Removing maintenance exclusion: $EXCLUSION_NAME"
gcloud container clusters update $CLUSTER_NAME \
--zone $ZONE \
--remove-maintenance-exclusion $EXCLUSION_NAME
fi
done
fi
実行結果
結果はコンソールでGKEクラスターの詳細画面から確認します。先にコンソール上、またはコマンドでメンテナンス除外を作成します。
Updating gke-maintenance-ex...done.
Updated [https://container.googleapis.com/v1/projects/[プロジェクトID]/zones/asia-northeast1/clusters/gke-maintenance-ex].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/asia-northeast1/gke-maintenance-ex?project=[プロジェクトID]
Removing maintenance exclusion: blackout-1
Updating gke-maintenance-ex...done.
Updated [https://container.googleapis.com/v1/projects/[プロジェクトID]/zones/asia-northeast1/clusters/gke-maintenance-ex].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/asia-northeast1/gke-maintenance-ex?project=[プロジェクトID]
まとめ
参考
Google Cloud、Google Workspace に関するご相談はXIMIXへ!
Google Cloud、Google Workspaceに関する お問い合わせはこちら
- カテゴリ:
- Google Cloud