計画メンテナンスを使用して Azure Kubernetes Service クラスターのアップグレードをスケジュールおよび制御する
[アーティクル] 2024/11/08
14 人の共同作成者
フィードバック
この記事の内容
開始する前に
考慮事項
計画メンテナンスのスケジュール構成の種類
メンテナンス期間の作成
メンテナンス期間の構成を追加する
既存のメンテナンス期間を更新する
既存のクラスター内のすべてのメンテナンス期間を一覧表示する
既存のクラスター内の特定のメンテナンス構成期間を表示する
既存のクラスターのメンテナンス構成期間を削除する
よく寄せられる質問
次のステップ
さらに 7 個を表示
この記事では、計画メンテナンスを使用して、Azure Kubernetes Service (AKS) でクラスターとノード イメージのアップグレードをスケジュールおよび制御する方法について説明します。
AKS クラスターでは、定期的なメンテナンスが自動的に実行されます。 次の 2 種類のメンテナンス操作があります。
AKS の計画メンテナンスの機能を使用する場合、両方の種類のメンテナンスを任意の頻度で実行し、ワークロードへの影響を最小限に抑えることができます。 計画メンテナンスを使用して自動アップグレードのタイミングをスケジュールできますが、計画メンテナンスを有効または無効にしても、自動アップグレードは有効または無効になりません。
この記事は、AKS クラスターがすでに存在していることを前提としています。 AKS クラスターがない場合は、AKS クラスターの作成 に関するページを参照してください。
Azure CLI を使用する場合、az upgrade
コマンドを使用して最新バージョンにアップグレードしてください。
計画メンテナンスを使用する場合は、次の考慮事項が適用されます。
AKS は、緊急または重大な計画外または事後対応のメンテナンス操作のために、計画メンテナンス期間を中断する権利を留保します。 これらのメンテナンス操作は、構成で定義されている notAllowedTime
または notAllowedDates
の期間中に実行される場合もあります。
メンテナンス操作はベストエフォートのみ と見なされており、指定した期間内に行われる保証はありません。
計画メンテナンスには、スケジュール構成の種類が 3 つあります。
default
は、AKS リリースを制御するための基本的な構成です。 これらのリリースは、Azure の安全なデプロイ プラクティス のため、最初の出荷時点からすべてのリージョンに展開されるまで最大 2 週間かかることがあります。
最も中断が少ない方法でこれらの更新プログラムをスケジュールするには、default
を選びます。 週間リリース トラッカー で、リージョン別に進行中の AKS リリースの状態を監視できます。
aksManagedAutoUpgradeSchedule
は、ユーザーが指定した自動アップグレード チャネルによってスケジュールされたクラスターのアップグレードをいつ実行するかを制御します。 この構成では、default
構成と比較して、より細かく制御された頻度と繰り返しの設定を構成できます。 クラスターの自動アップグレードについて詳しくは、Azure Kubernetes Service クラスターの自動アップグレード に関する記事をご覧ください。
aksManagedNodeOSUpgradeSchedule
は、ノード OS の自動アップグレード チャネルによってスケジュールされたノード OS のセキュリティ パッチ適用をいつ実行するかを制御します。 この構成では、default
構成と比較して、より細かく制御された頻度と繰り返しの設定を構成できます。 ノード OS の自動アップグレード チャネルについて詳しくは、AKS クラスター ノード イメージの自動的なパッチと更新 に関する記事をご覧ください。
すべてのクラスター アップグレード シナリオには aksManagedAutoUpgradeSchedule
を使い、すべてのノード OS セキュリティ パッチ適用シナリオには aksManagedNodeOSUpgradeSchedule
を使うことをお勧めします。
default
オプションは、AKS の毎週のリリース専用です。 default
の構成は、az aks maintenanceconfiguration update
コマンドを使用して aksManagedAutoUpgradeSchedule
または aksManagedNodeOSUpgradeSchedule
構成に切り替えることができます。
注意
自動アップグレードを使用する場合は、機能が確実に働くように、メンテナンス期間を 4 時間以上の期間に設定してください。
計画メンテナンスの期間は、協定世界時 (UTC) で指定します。
default
メンテナンス期間には、次のレガシ プロパティがあります (非推奨になりました)。
テーブルを展開する
名前
Description
規定値
timeInWeek
default
構成内のこのプロパティには、メンテナンス期間を定義する値として、day
と hourSlots
が含まれています。
適用なし
timeInWeek.day
default
構成でメンテナンスを実行する曜日。
適用なし
timeInWeek.hourSlots
default
構成で特定の日にメンテナンスを実行する場合の、1 時間のタイム スロットのリスト。
適用なし
notAllowedTime
メンテナンスを実行できない日付の範囲。これは子プロパティ start
と end
で決定されます。 このプロパティは、構成ファイルを使用してメンテナンス期間を作成する場合にのみ適用されます。
適用なし
注意
2023-05-01 API バージョン以降では、default
構成に次のプロパティを使用してください。
2023-05-01 API バージョン以降の aksManagedAutoUpgradeSchedule
または aksManagedNodeOSUpgradeSchedule
メンテナンス期間と default
構成には、以下のプロパティがあります。
テーブルを展開する
名前
Description
規定値
utcOffset
クラスター メンテナンスのタイム ゾーン。
+00:00
startDate
メンテナンス期間が有効になる日付。
作成時刻の現在の日付
startTime
utcOffset
によって決定されたタイムゾーンに基づいてメンテナンスが開始される時刻。
適用なし
schedule
アップグレードの頻度。 次の 3 種類から選択できます: Weekly
、AbsoluteMonthly
、RelativeMonthly
。
適用なし
intervalDays
メンテナンス実行の間隔 (日数)。 aksManagedNodeOSUpgradeSchedule
にのみ適用できます。
適用なし
intervalWeeks
メンテナンス実行の間隔 (週単位)。
適用なし
intervalMonths
メンテナンス実行の間隔 (月単位)。
適用なし
dayOfWeek
メンテナンスを開始する指定曜日。
適用なし
durationHours
メンテナンスを実行するための期間の長さ。
適用なし
notAllowedDates
メンテナンスを実行できない日付の範囲。これは子プロパティ start
と end
で決定されます。 構成ファイルを使用してメンテナンス期間を作成する場合にのみ適用されます。
適用なし
使用できるスケジュールは、Daily
、Weekly
、AbsoluteMonthly
、RelativeMonthly
の4 種類です。
Weekly
、AbsoluteMonthly
、RelativeMonthly
のスケジュールの種類は、aksManagedClusterAutoUpgradeSchedule
と aksManagedNodeOSUpgradeSchedule
の構成にのみ適用されます。 Daily
のスケジュールは、aksManagedNodeOSUpgradeSchedule
の構成にのみ適用されます。
スケジュールの種類ごとに表示されるすべてのフィールドが必須です。
Daily
のスケジュールは、"3 日ごと" のようになります。
"schedule": {
"daily": {
"intervalDays": 3
}
}
Weekly
のスケジュールは "2 週間ごとの金曜日" のようになります。
"schedule": {
"weekly": {
"intervalWeeks": 2,
"dayOfWeek": "Friday"
}
}
AbsoluteMonthly
のスケジュールは、"3 か月ごとに月の初日" のようになります。
"schedule": {
"absoluteMonthly": {
"intervalMonths": 3,
"dayOfMonth": 1
}
}
RelativeMonthly
のスケジュールは、"2 か月ごとに最後の月曜日" のようになります。
"schedule": {
"relativeMonthly": {
"intervalMonths": 2,
"dayOfWeek": "Monday",
"weekIndex": "Last"
}
}
weekIndex
の有効な値には、First
、Second
、Third
、Fourth
、Last
が含まれます。
az aks maintenanceconfiguration add
コマンドを使用して、AKS クラスターにメンテナンス期間の構成を追加します。
最初の例では、毎週月曜日の午前 1 時から午前 2 時までメンテナンスを実行するようにスケジュールする新しい default
構成を追加します。 2 番目の例では、UTC+5:30
タイムゾーンで毎月第 3 金曜日の午前 12 時から午前 8 時の間にメンテナンスを実行するようにスケジュールする、新しい aksManagedAutoUpgradeSchedule
構成を追加します。
# Add a new default configuration
az aks maintenanceconfiguration add --resource-group myResourceGroup --cluster-name myAKSCluster --name default --weekday Monday --start-hour 1
# Add a new aksManagedAutoUpgradeSchedule configuration
az aks maintenanceconfiguration add --resource-group myResourceGroup --cluster-name myAKSCluster --name aksManagedAutoUpgradeSchedule --schedule-type Weekly --day-of-week Friday --interval-weeks 3 --duration 8 --utc-offset +05:30 --start-time 00:00
注意
default
構成の種類を使用している場合は、1 日中いつでもメンテナンスを行えるように、--start-time
パラメータを省略することができます。
Azure portal で、AKS クラスターに移動します。
サービス メニューの [設定] で、[クラスターの構成] を選択します。
[アップグレード] >[自動アップグレード スケジューラ] で、[スケジュールの追加] を選びます。
[メンテナンス スケジュールの追加] ページで、次のメンテナンス期間の設定を構成します。
繰り返し : メンテナンス期間の頻度を選択します。 [毎週] を選択することをお勧めします。
頻度 : メンテナンス期間の曜日を選択します。 [日曜日] を選択することをお勧めします。
メンテナンスの開始日 : メンテナンス期間の開始日を選択します。
メンテナンスの開始時刻 : メンテナンス期間の開始時刻を選択します。
UTC オフセット : メンテナンス期間の UTC オフセットを選択します。 既定値は +00:00 です。
[保存] >[適用] を選びます。
パラメータを使用するのでなく、JSON ファイルを使用して、メンテナンス期間を作成できます。 この方法を使用する場合、default
構成に notAllowedTimes
を指定し、aksManagedAutoUpgradeSchedule
構成に notAllowedDates
を指定することで、一定の日付範囲内のメンテナンスを防ぐことができます。
メンテナンス期間の設定を使用して JSON ファイルを作成します。
次の例では、UTC
タイムゾーンで毎週火曜日と水曜日の午前 1 時から午前 3 時までメンテナンスを実行するようにスケジュールする、default.json
ファイルを作成します。 また、2021-05-26T03:00:00Z
から 2021-05-30T12:00:00Z
までの例外もあり、この間はメンテナンス期間と重なっていてもメンテナンスは許可されません。
{
"timeInWeek": [
{
"day": "Tuesday",
"hour_slots": [
1,
2
]
},
{
"day": "Wednesday",
"hour_slots": [
1,
6
]
}
],
"notAllowedTime": [
{
"start": "2021-05-26T03:00:00Z",
"end": "2021-05-30T12:00:00Z"
}
]
}
次の例では、3 か月ごとの月初めに、UTC-08
タイムゾーンの午前 9 時から午後 1 時までの間にメンテナンスを実行するようにスケジュールする autoUpgradeWindow.json
ファイルを作成します。 また、2023-12-23
から 2024-01-05
までの例外もあり、この間はメンテナンス期間と重なっていてもメンテナンスは許可されません。
{
"properties": {
"maintenanceWindow": {
"schedule": {
"absoluteMonthly": {
"intervalMonths": 3,
"dayOfMonth": 1
}
},
"durationHours": 4,
"utcOffset": "-08:00",
"startTime": "09:00",
"notAllowedDates": [
{
"start": "2023-12-23",
"end": "2024-01-05"
}
]
}
}
}
--config-file
パラメータを指定した az aks maintenanceconfiguration add
コマンドを使用して、メンテナンス期間の構成を追加します。
最初の例では、default.json
ファイルを使用して新しい default
構成を追加します。 2 番目の例では、autoUpgradeWindow.json
ファイルを使用して新しい aksManagedAutoUpgradeSchedule
構成を追加します。
# Add a new default configuration
az aks maintenanceconfiguration add -g myResourceGroup --cluster-name myAKSCluster --name default --config-file ./default.json
# Add a new aksManagedAutoUpgradeSchedule configuration
az aks maintenanceconfiguration add -g myResourceGroup --cluster-name myAKSCluster --name aksManagedAutoUpgradeSchedule --config-file ./autoUpgradeWindow.json
az aks maintenanceconfiguration update
コマンドを使用して、既存のメンテナンス構成を更新します。
次の例では、default
構成を更新して、毎週月曜日の午前 2 時から午前 3 時までメンテナンスを実行するようにスケジュールします。
az aks maintenanceconfiguration update --resource-group myResourceGroup --cluster-name myAKSCluster --name default --weekday Monday --start-hour 2
Azure portal で、AKS クラスターに移動します。
サービス メニューの [設定] で、[クラスターの構成] を選択します。
[アップグレード] >[自動アップグレード スケジューラ] で、[スケジュールの編集] を選びます。
[メンテナンス スケジュールの編集] ウィンドウで、必要に応じてメンテナンス期間の設定を更新します。
[保存] >[適用] を選びます。
構成 JSON ファイルを新しいメンテナンス期間の設定で更新します。
次の例では、前のセクション の default.json
ファイルを更新して、毎週月曜日の午前 2 時から午前 3 時までメンテナンスを実行するようにスケジュールします。
{
"timeInWeek": [
{
"day": "Monday",
"hour_slots": [
2,
3
]
}
],
"notAllowedTime": [
{
"start": "2021-05-26T03:00:00Z",
"end": "2021-05-30T12:00:00Z"
}
]
}
--config-file
パラメータを指定した az aks maintenanceconfiguration update
コマンドを使用して、メンテナンス期間の構成を更新します。
az aks maintenanceconfiguration update --resource-group myResourceGroup --cluster-name myAKSCluster --name default --config-file ./default.json
既存のクラスター内のすべてのメンテナンス期間を一覧表示する
az aks maintenanceconfiguration list
コマンドを使用して、AKS クラスターの現在のメンテナンス構成期間を一覧表示します。
az aks maintenanceconfiguration list --resource-group myResourceGroup --cluster-name myAKSCluster
既存のクラスター内の特定のメンテナンス構成期間を表示する
--name
パラメータを指定した az aks maintenanceconfiguration show
コマンドを使用して、AKS クラスター内の特定のメンテナンス構成期間を表示します。
az aks maintenanceconfiguration show --resource-group myResourceGroup --cluster-name myAKSCluster --name aksManagedAutoUpgradeSchedule
次の出力例では、aksManagedAutoUpgradeSchedule
のメンテナンス期間が示されています。
{
"id": "/subscriptions/<subscription>/resourceGroups/myResourceGroup/providers/Microsoft.ContainerService/managedClusters/myAKSCluster/maintenanceConfigurations/aksManagedAutoUpgradeSchedule",
"maintenanceWindow": {
"durationHours": 4,
"notAllowedDates": [
{
"end": "2024-01-05",
"start": "2023-12-23"
}
],
"schedule": {
"absoluteMonthly": {
"dayOfMonth": 1,
"intervalMonths": 3
},
"daily": null,
"relativeMonthly": null,
"weekly": null
},
"startDate": "2023-01-20",
"startTime": "09:00",
"utcOffset": "-08:00"
},
"name": "aksManagedAutoUpgradeSchedule",
"notAllowedTime": null,
"resourceGroup": "myResourceGroup",
"systemData": null,
"timeInWeek": null,
"type": null
}
az aks maintenanceconfiguration delete
コマンドを使用して、AKS クラスター内のメンテナンス構成期間を削除します。
次の例では、autoUpgradeSchedule
メンテナンス構成を削除します。
az aks maintenanceconfiguration delete --resource-group myResourceGroup --cluster-name myAKSCluster --name autoUpgradeSchedule
Azure portal で、AKS クラスターに移動します。
サービス メニューの [設定] で、[クラスターの構成] を選択します。
[アップグレード] >[自動アップグレード スケジューラ] で、[スケジュールの編集] を選びます。
[メンテナンス スケジュールの編集] ウィンドウで、[スケジュールの削除] を選びます。
az aks maintenanceconfiguration delete
コマンドを使用して、AKS クラスター内のメンテナンス構成期間を削除します。
次の例では、autoUpgradeSchedule
メンテナンス構成を削除します。
az aks maintenanceconfiguration delete --resource-group myResourceGroup --cluster-name myAKSCluster --name autoUpgradeSchedule
クラスターの既存のメンテナンス構成を確認するにはどうすればよいですか?
az aks maintenanceconfiguration show
コマンドを使用します。
事後対応型で計画外のメンテナンスは、notAllowedTime
または notAllowedDates
の期間中にも行われますか?
はい。 AKS では、緊急または重大な計画外または事後対応のメンテナンス操作のために、これらの期間を無効にする権利を留保します。
メンテナンス イベントが発生したかどうかを確認するにはどうすればよいですか?
リリースの場合は、クラスターのリージョンを確認し、毎週のリリース で情報を検索し、メンテナンス スケジュールと一致するかどうかを確認します。 自動アップグレードの状態を表示するには、クラスターのアクティビティ ログ を検索します。 AKS クラスターのアップグレード に関する記事で説明されているように、特定のアップグレード関連イベントを検索することもできます。
AKS は、アップグレード関連の Azure Event Grid イベントも生成します。 詳細については、「Event Grid ソースとしての AKS 」を参照してください。
同時に複数のメンテナンス構成を使用できますか?
はい。3 つの構成 (default
、aksManagedAutoUpgradeSchedule
、aksManagedNodeOSUpgradeSchedule
) をすべて同時に実行できます。 ウィンドウが重なる場合、AKS によって実行順序が決定されます。
メンテナンス期間を構成しましたが、アップグレードが行われませんでした。 なぜですか?
AKS の自動アップグレードでは、メンテナンス期間を考慮に入れるのに一定の時間 (通常は 15分以下) が必要です。 メンテナンス構成の作成または更新からスケジュールされた開始日時まで、少なくとも 15 分は空けることをお勧めします。
また、計画メンテナンス期間の開始時にクラスターが起動していることを確認してください。 クラスターが停止している場合、そのコントロール プレーンは割り当てが解除され、操作は実行できません。
エージェント プールの 1 つがメンテナンス期間外にアップグレードされたのはなぜですか?
エージェント プールがアップグレードされていない場合 (たとえば、ポッド中断バジェットによってそれが妨げられたため)、後でメンテナンス期間外にアップグレードされる可能性があります。 このシナリオは、"キャッチアップ アップグレード" と呼ばれます。これにより、AKS コントロール プレーンとは異なるバージョンでエージェント プールがアップグレードされることが回避されます。
エージェント プールが予期せずアップグレードされるその他の理由は、定義されたメンテナンス構成がない場合、または削除された場合です。 その場合、自動アップグレードを使用するが、"メンテナンス構成がない" クラスターは、不定期 ("フォールバック スケジュール") にアップグレードされ、これが望ましくない期間である場合があります。
メンテナンス構成のベスト プラクティスはありますか?
NodeImage
チャネルを使用している場合、新しいノード イメージが毎週発行されるため、 ノード OS のセキュリティ更新プログラム のスケジュールを週単位に設定することをお勧めします。 また、SecurityPatch
チャネルをオプトインして、セキュリティ更新プログラムを毎日受け取ることもできます。
自動アップグレード スケジュールを月単位に設定して、Kubernetes N-2 サポート ポリシー を最新の状態に保ちます。
アップグレードのベスト プラクティスとその他の考慮事項の詳細については、AKS のパッチとアップグレード ガイダンス のページを参照してください。
同じメンテナンス構成を使用するように 1 つのサブスクリプション内のすべてのクラスターを構成できますか?
1 つのサブスクリプション内の複数のクラスターに同じメンテナンス構成を使用することはお勧めしません。そのように構成すると ARM 調整エラーが発生して、クラスターのアップグレードが失敗する可能性があります。 これらのエラーを回避するために、各クラスターのメンテナンス期間をずらすことをお勧めします。