【リクリエイトデプロイ】

Recreateデプロイ とは?

最終更新:
💡 お店を一度完全閉店してからリニューアルオープンする改装工事方式

更新対象の旧バージョンをすべて停止してから、新バージョンを起動するデプロイ方式。対象の処理をほかの稼働環境で引き受けない場合、停止から新バージョンが利用可能になるまでダウンタイムが生じる。

📌 このページのポイント
旧版を全停止してから新版を起動 ① 旧版稼働 旧Pod 利用可能 ② 全停止 停止・起動準備 利用できない ③ 新版稼働 新Pod 利用可能 ダウンタイム .spec.strategy.type: Recreate Kubernetes Deploymentの更新設定
対象の処理を別の環境で引き受けず、新Podが正常に利用可能になる例。旧版の停止から新版の準備完了まで処理できず、起動に失敗すると停止が長引く。
ひよこ ひよこ
Recreateデプロイってどういうやり方なの?
ペンギン先生 ペンギン先生
更新する範囲の旧バージョンをすべて止めてから、新バージョンを起動する方法だよ。その処理を引き受ける別の環境がなければ、新バージョンが利用できるまでダウンタイムが生じる。Kubernetesでは、対象のDeploymentに属する旧Podを止めてから新Podを作るんだ。
ひよこ ひよこ
それって困らないの?
ペンギン先生 ペンギン先生
停止できる時間を確保した社内ツールや開発・検証環境などで検討できるよ。ただし、新バージョンの起動失敗で停止が長引くこともある。事前の検証と、失敗時に戻す手順を考えておこう。
ひよこ ひよこ
なぜわざわざ全部止めるの?
ペンギン先生 ペンギン先生
旧版と新版を同時に動かしたくない場合があるからだよ。ただし、互換性のないデータベース変更があるから必ずRecreate、というわけではない。アプリを止めるだけでデータ移行が安全になるわけでもないので、移行と復旧の手順は別に検証するんだ。
ひよこ ひよこ
ブルーグリーンデプロイとはどう違うの?
ペンギン先生 ペンギン先生
ブルーグリーンは旧環境を稼働させたまま新環境を準備・検証し、トラフィックを切り替える方式だよ。停止時間を抑えやすい反面、新旧を並行して用意する資源が必要になる。「必ず停止ゼロ」「費用は必ず2倍」という意味ではなく、構成や切り替え方法にもよるよ。
ひよこ ひよこ
Kubernetesだとどう設定するの?
ペンギン先生 ペンギン先生
Deploymentの .spec.strategy.type に Recreate を指定する。既定値は RollingUpdate だよ。Recreateで旧Podの終了を待ってから新Podを作るのはDeployment更新時の動作で、Podを手動で削除したときは、旧Podが終了中でもReplicaSetが代わりを作る場合がある。設定名だけで、どんな操作でも同時稼働しないとは考えないようにしよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Recreateデプロイ」って出てきたら「更新対象を一度全停止し、新バージョンを起動するデプロイ方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「Recreate Deployment」 = 再作成デプロイ
💬 Recreateは「再作成する」。旧バージョンの実行環境を停止して、新しいものを作り直すという名前だよ。データベースのデータまで削除するという意味ではないんだ

参考資料

← 用語集にもどる