【Kubernetes】デプロイ戦略についてざっくり理解する
はじめに
Kubernetesにおけるデプロイ戦略をざっくりまとめてみたいと思います。
デプロイ戦略
ここで紹介するデプロイ戦略は下記になります。
- ローリングアップデート
- Recreate
- ブルーグリーンデプロイ
- レインボーデプロイ
- カナリアデプロイ
Kubernetesでは、DeploymentのマニフェストでローリングアップデートとRecreateが選択できます。
ローリングアップデート
ローリングアップデートは、全てのPodが新しいバージョンになるまで1つずつ更新されていきます。
メリット | デメリット |
---|---|
・ダウンタイムがゼロ | ・2つのバージョンが混在 ・比較的ゆっくりロールアウト |
Kubernetesでは、Deploymentのマニフェストでデプロイ戦略を指定します。ローリングアップデートはデフォルトの設定になっています。
また、maxSurge
とmaxUnavailable
というオプションがあります。アップデート中に超過できるレプリカ数と利用可能なレプリカ数の指定ができます。
【Kubernetes】ローリングアップデートをやってみる
:::affiliate-message 本ページはAmazonアフィリエイトのリンクを含みます。
Recreate
Recreateは、全てのPodを同時に終了し、新しいバージョンのPodを同時に起動します。
メリット | デメリット |
---|---|
・異なるバージョンが同時に実行されない | ・ダウンタイムがある |
Kubernetesでは、Deploymentマニフェストの.spec.strategy.type
でRecreate
を指定することで設定可能です。
【Kubernetes】Recreateをやってみる
:::affiliate-message 本ページはAmazonアフィリエイトのリンクを含みます。
ブルーグリーンデプロイ
ブルーグリーンデプロイは、新しいバージョンを実行してからトラフィックを切り替えます。
メリット | デメリット |
---|---|
・ダウンタイムがゼロ ・異なるバージョンが同時に実行されない ・すぐに旧バージョンに戻せる | ・2倍のリソースが必要 |
Kubernetesでは、PodのLabelを利用してServiceからのトラフィック送信先を指定することで実現できます。
【Kubernetes】DeploymentとServiceでブルーグリーンデプロイやってみる
はじめに Kubernetesのデプロイ戦略として、**DeploymentとServiceだけ
レインボーデプロイ
レインボーデプロイは、3つ以上のバージョンが実行される可能性があるブルーグリーンデプロイです。
アプリケーションとの接続が長時間になる場合に利用されます。古いバージョンのアプリケーションの接続がなくなると、そのバージョンを終了します。
メリット | デメリット |
---|---|
・ダウンタイムがゼロ ・すぐに旧バージョンに戻せる ・接続が長時間でもアップデート可能 | ・3倍以上のリソースが必要 |
Kubernetesでの実装は下記で解説がされています。
GitHub - bdimcheff/rainbow-deploys: 🌈 🌈 🌈
🌈 🌈 🌈. Contribute to bdimcheff/rainbow-deploys development by creating an account on GitHub.
カナリアデプロイ
カナリアデプロイは、少数の新しいバージョンをデプロイし、問題がなければ徐々に新しいバージョンを増やしていきます。
メリット | デメリット |
---|---|
・ダウンタイムがゼロ ・すぐに旧バージョンに戻せる ・新しいバージョンを本番環境で試せる ・様子を見ながら新しいバージョンに移行できる | ・ロールアウトまで時間がかかる ・モニタリングの手間がかかる |
Kubernetesでは、ブルーグリーンデプロイ同様にLabelを用いて実装します。
【Kubernetes】DeploymentとServiceでカナリアデプロイやってみる
:::affiliate-message 本ページはAmazonアフィリエイトのリンクを含みます。
参考
- Deployment | Kubernetes
- ローリングアップデートの実行 | Kubernetes
- bdimcheff/rainbow-deploys: 🌈 🌈 🌈
- Rainbow Deploys with Kubernetes | Brandon Dimcheff
- Managing Resources | Kubernetes