PAI-EAS サービスが数十または数百のレプリカにスケールする場合、バッチ制御や一時停止のメカニズムがない一括置換は、重大なデプロイメントリスクを伴います。アップデートプラン機能は、この問題に対応するため、手動バッチ (Partition) と自動バッチ (Batch Update) の 2 つのアップデートモードをサポートします。これにより、大規模デプロイメントのペースを制御し、問題発生時に迅速なロールバックが可能になります。
基本概念
-
複数のアップデートモード:手動バッチ (Partition) と 自動バッチ (Batch Update) の 2 つのモードがサポートされています。
特徴
手動バッチ (Partition)
自動バッチ (Batch Update)
制御
完全手動。各バッチを手動で進めます
設定後、システムが自動でバッチを進めます
運用オーバーヘッド
高い
低い
柔軟性
最も高い
中程度
最適な用途
重要なオンラインサービスのカナリアリリース
大規模サービスの定期的なアップデート
アップデート中の完全な制御:アップデート中の任意の時点で、一時停止、ロールバック、またはバッチ戦略の変更が可能です。プランを削除すると、デフォルトの一括置換戦略に戻ります。
リアルタイムのステータス可視性:サービス詳細ページのヘッダーにある [Update plan] ステータスタグに現在のフェーズが表示されます。タグにカーソルを合わせると、リアルタイムの進捗、バッチのカウントダウン、その他の主要情報を含むツールチップが表示されます。
クイックスタート
以下の例では、10 個のレプリカを持つサービスで手動バッチを使用して、アップデートプランを作成し、サービスアップデートを完了するまでの手順を説明します。
前提条件:アップデートプラン機能の有効化
アップデートプラン機能は、新しいサービスの作成時にのみ 有効にできます。既存のサービスを更新して有効にすることはできません。
サービスを作成する際、JSON 設定の features フィールドに "eas.aliyun.com/enable-rollout": "true" を追加します。この設定がない場合、アップデートプラン機能は利用できません。例:
{
"metadata": {
"instance": 10
},
"features": {
"eas.aliyun.com/enable-rollout": "true"
}
}
ステップ 1:アップデートプランの作成
対象のサービスをクリックして、PAI-EAS サービスの詳細ページを開きます。
ヘッダーバーにある [Update plan] タグを見つけます。デフォルトではグレーで表示され、プランが未構成であることを示します。
タグにカーソルを合わせ、表示されるツールチップで [Create update plan] をクリックします。
右側からスライドインするパネルで、[Manual batching] を選択し、最初のバッチのレプリカ数を
2に設定します。[OK] をクリックします。
アップデートプランが作成されます。タグが青色に変わり、ステータスが保留中になります。
ステップ 2:アップデートのトリガー
サービス詳細ページで Update をクリックし、新しいサービス設定を送信します。
システムはプランに従ってアップデートを開始します。まず 2 つのレプリカを更新し、その後一時停止して待機します。ツールチップには現在の進捗 (2/10) が表示されます。
ステップ 3:検証と次のバッチへの移行
ビジネスメトリクス (レイテンシー、エラー率など) を確認します。問題が見つからない場合は、プランを修正し、ターゲットレプリカ数を 10 に設定します。システムは、アップデートが完了するまで残りの 8 つのレプリカを更新します。
問題が見つかった場合は、アップデートプランを修正し、ターゲットレプリカ数を 0 に設定します。更新されたすべてのレプリカが以前のバージョンにロールバックされます。
ステータスリファレンス
アップデートプランは 2 段階のステータスモデルを使用します。トップレベルはフェーズで、セカンドレベルはステージです (ステージはフェーズがアクティブな場合にのみ存在します)。
未構成 (グレー):アップデートプランが存在しません。サービスを更新すると、一括置換がトリガーされます。
保留中 (青):プランは作成されましたが、サービスアップデートによるアクティベーションを待機しています。
-
アクティブ (青):アップデートがトリガーされ、システムがバッチでレプリカを置換しています。アクティブには 3 つのステージがあります:
現在のバッチを実行中:バッチは進行中です。更新された数はターゲットに近づいています。
現在のバッチが一時停止中:ユーザーが実行を一時停止しました。進捗は停止しています。
現在のバッチが完了:バッチのターゲットに到達しました。システムは、ユーザーが手動で進める (手動バッチ) か、カウントダウンが終了する (自動バッチ) のを待機します。
-
完了 (青):現在のラウンドのアップデートが終了しました。
サービスを再度更新すると、プランが再トリガーされ、ステータスがアクティブに変わります。
プランを修正すると、ステータスが保留中に変わり、次のサービスアップデートを待機します。
次の表は、各ステータスで利用可能な操作を示しています:
|
操作 |
未構成 |
保留中 |
アクティブ |
完了 |
||
|
現在のバッチを実行中 |
現在のバッチが一時停止中 |
現在のバッチが完了 |
||||
|
プランの作成 |
✓ |
|||||
|
プランの修正 |
✓ |
✓ |
✓ |
✓ |
✓ |
|
|
プランの削除 |
✓ |
✓ |
✓ |
✓ |
✓ |
|
|
一時停止 |
✓ |
|||||
|
再開 |
✓ |
|||||
|
サービスの更新 |
✓ |
✓ |
✓ |
✓ |
✓ |
✓ |
注意事項
アクティブなプランの修正:新しいパラメーターはすぐに有効になります。プランが現在一時停止中の場合、修正によって自動的に再開されます。
完了したプランの修正:設定は保存されますが、自動的にアップデートをトリガーしません。新しいプランを適用するには、サービスを再度更新してください。
アクティブなプランの削除:残りのレプリカは、一括置換戦略を使用して更新を続行します。ロールバックは発生しません。
アップデートプランが存在する場合のスケーリング:プランのパラメーターは変更されず、実行時の実際のレプリカ数に基づいて適用されます。
手動バッチで最初のバッチ数を 0 に設定する場合:これは有効な値です。サービスのアップデートはすぐにトリガーされますが、開始時点で一時停止し、手動で進めるのを待機します。
自動バッチでバッチサイズを総レプリカ数以上に設定する場合:すべてのレプリカが単一のバッチで更新され、これは一括置換に相当します。
JSON設定
サービスの JSON 設定の metadata.rolling_strategy フィールドにパラメーターを設定することで、アップデートプランを構成します。
完全な設定構造
{
"metadata": {
"rolling_strategy": {
"max_surge": "25%",
"max_unavailable": "20%",
"partition": 5,
"paused": false,
"batch_update": {
"interval": "5m",
"batch_size": 2
}
}
}
}
フィールドリファレンス
|
フィールド |
タイプ |
説明 |
デフォルト |
|
|
数値またはパーセンテージ |
アップデート中に許可される追加レプリカの最大数 |
0 |
|
|
数値またはパーセンテージ |
アップデート中に利用不可にできるレプリカの最大数 |
20% |
|
|
数値またはパーセンテージ |
手動バッチ:現在のバッチで更新するレプリカの数 |
— |
|
|
ブール値 |
アップデートを一時停止するかどうか。両方のモードに適用されます。 |
false |
|
|
期間文字列 (例: |
自動バッチ:1つのバッチの完了から次のバッチの開始までの待機時間 |
— |
|
|
数値またはパーセンテージ |
自動バッチ:バッチごとに更新するレプリカの数 |
|
設定例
手動バッチ:カナリアリリース
{
"metadata": {
"instance": 10,
"rolling_strategy": {
"partition": 2,
"max_unavailable": 1
}
}
}
合計 10 個のレプリカ。最初の 2 つが更新され、残りの 8 つはプランを進めるまで古いバージョンのままです。
自動バッチ:大規模サービス
{
"metadata": {
"instance": 100,
"rolling_strategy": {
"batch_update": {
"interval": "10m",
"batch_size": 5
}
}
}
}
合計 100 個のレプリカ。システムは 10 分ごとに 5 つのレプリカを自動的に更新します。
緊急一時停止
{
"metadata": {
"rolling_strategy": {
"paused": true
}
}
}
迅速なロールバック
{
"metadata": {
"rolling_strategy": {
"partition": 0
}
}
}
partition を 0 に設定すると、更新されたすべてのレプリカが以前のバージョンにロールバックされます。これは、手動バッチと自動バッチの両方のモードで機能します。
よくある質問
Q:迅速にロールバックするにはどうすればよいですか?
アップデート中に問題を発見した場合 (たとえば、V2 から V3 へのアップデート中)、最も速くロールバックするには、以下の方法を使用します:
アップデートプランを手動バッチに切り替え、ターゲットレプリカ数を 0 に設定します。更新されたすべてのレプリカが以前のバージョン (V2) にロールバックされます。
サービス設定を更新します (V4 または任意の安定バージョンに)。
必要に応じてアップデートプランを修正し、ロールアウトを続行します。
アップデートがすでに完了し、すべてのレプリカが新しいバージョン (V3) で実行されている場合、アップデートプランによるロールバックはできなくなります。サービスバージョンリストに移動し、特定のバージョンを選択してロールバックしてください。
Q:手動バッチと自動バッチのパラメーターを同時に設定できますか?
いいえ。partition パラメーター (手動バッチ) が優先されます。partition が設定されている場合、システムはすべての自動バッチパラメーターを無視します。
Q:進行中のアップデートを一時停止するにはどうすればよいですか?
paused: true に設定します。これは手動バッチと自動バッチの両方で機能します。または、コンソールの [Update plan] ツールチップで [Pause] をクリックします。
Q:自動バッチでバッチサイズを設定しない場合はどうなりますか?
システムは max_unavailable の値をバッチサイズとして使用します。
Q:自動バッチでバッチ間隔を設定しない場合はどうなりますか?
バッチサイズは適用されますが、システムは自動的に次のバッチに進みません。これは手動バッチと同等であり、各バッチを手動で進める必要があります。