【ろーりんぐあっぷでーと】

ローリングアップデート とは?

最終更新:
💡 サービスを止めずに1台ずつ入れ替える「無停止アップデート」

複数台のサーバーを少しずつ順番に新バージョンに更新していくデプロイ手法。全台を一斉に止めず、残りのサーバーで処理を続けながら更新するため、条件が整えばサービスを止めずに入れ替えられる。

📌 このページのポイント
ローリングアップデートの流れ Step 1 v1 → v2 更新中 v1 v1 ユーザー → v1へアクセス可 Step 2 v2 v1 → v2 更新中 v1 ユーザー → v1/v2へ分散 Step 3 v2 v2 v2 完了!停止なし
ローリングアップデートの流れ
ひよこ ひよこ
ローリングアップデートって全部一度に更新するのとどう違うの?
ペンギン先生 ペンギン先生
全台一斉更新だと、その間サービスが止まるよね。ローリングアップデートは例えば10台中2台ずつ更新して、残り8台でリクエストを処理し続けるんだ。全部終わるまで時間はかかるけど、残りの台数で負荷を支えられて、新しいサーバーが準備できてから振り分ければ、利用者は停止に気づかずに済むよ。
ひよこ ひよこ
Blue/Greenデプロイとの違いは?
ペンギン先生 ペンギン先生
Blue/Greenは旧環境と新環境を両方用意して、通信の行き先を一度に切り替える方法だよ。切り替えも戻すのも早いけど、切り替えの間は環境を2つ分動かすことになる。ローリングアップデートは追加で用意するサーバーが少なくて済むのがメリットだね。
ひよこ ひよこ
ローリングアップデートの途中で問題が起きたらどうするの?
ペンギン先生 ペンギン先生
新バージョンのサーバーが準備できたかをヘルスチェックで確認して、異常があれば更新を止めるよ。Kubernetesでは`maxUnavailable`と`maxSurge`(どちらも既定は25%)で「同時に減らしていい数」「一時的に増やしていい数」を決められる。ただ、更新が進まなくなっても状態を報告するだけで自動では戻さないから、`kubectl rollout undo`で戻すか、ほかの仕組みで自動化する必要があるんだ。
ひよこ ひよこ
ローリングアップデート中に新旧バージョンが混在するのって問題にならないの?
ペンギン先生 ペンギン先生
ここが一番気をつけたいポイントだよ。更新中はv1とv2のサーバーが同時にリクエストを受けるから、v2でAPIの形が変わると、どちらに当たったかで違う応答が返ってしまう。DBも、v2が使う新しい列をv1が知らない、といった食い違いが起きるんだ。だから新旧が同時に動いても壊れないように、項目や列はまず追加だけ行い、古いものの削除は全台が新しい版になった次のリリースで行う、という段階的な進め方をするんだよ。
もっと詳しく知りたい人へ

ローリングアップデートでも一時的にエラーが出るのはなぜ?

よくある原因は、準備が整う前のサーバーに通信が振り分けられることと、停止するサーバーが処理中のリクエストを途中で切ってしまうことだよ。Kubernetesでは、準備ができたかを確かめるreadinessProbeを設定し、停止時に処理を終えるまで待つ時間(terminationGracePeriodSeconds)やpreStopフックを適切に設定すると防ぎやすいんだ。台数が少ないと更新中に残りのサーバーへ負荷が集中するので、maxUnavailableやmaxSurgeも見直そう。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ローリングアップデート」って出てきたら「サーバーを少しずつ順番に更新して、サービスを止めずにデプロイする方法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Rolling Update」 = 回転式の更新
💬 Rolling(転がる・順繰りの)+ Update(更新)。ローラーのように端から順番に塗り替えていくイメージだよ

参考資料

← 用語集にもどる