デプロイ戦略:Blue-GreenとCanary
ローリングアップデートの先に進み、KubernetesでBlue-GreenとCanaryのデプロイパターンを使って安全にリリースする方法を学びます。
「デプロイ戦略:Blue-GreenとCanary」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
ローリングアップデートだけでは不十分な理由
ローリングアップデートではPodを段階的に置き換えますが、移行中は古いバージョンと新しいバージョンが混在します。リスクの高いリリースでは、どのユーザーに新しいバージョンを見せるかを完全に制御したい場合があります。
ブルーグリーンとカナリアの戦略を使えば、その制御が可能です。
ブルーグリーンの考え方
ブルーグリーンデプロイでは、同一構成の環境を2つ実行します。
- Blue = 現在稼働中のバージョン
- Green = 新しいバージョン。完全にデプロイ済みですが、まだトラフィックを受け取っていません
BlueからGreenへ一度にすべてのトラフィックを切り替えます。
2つのDeploymentと1つのService
各バージョンを、バージョンラベルを持つ独自のDeploymentとして定義します。1つのServiceが、現在稼働中の色のDeploymentを選択します。
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-blue
spec:
replicas: 3
selector:
matchLabels:
app: web
version: blue
template:
metadata:
labels:
app: web
version: blue
spec:
containers:
- name: web
image: myapp:1.0トラフィックを切り替える
Greenを稼働させるには、ServiceのセレクターをGreenバージョンを指すようにパッチするだけです。切り替えは即座に行われます。
kubectl patch service web -p '{"spec":{"selector":{"app":"web","version":"green"}}}'ブルーグリーンの長所と短所
- 長所: Blueに戻すことで即座にロールバックできます
- 長所: リリース中にバージョンが混在しません
- 短所: 重複期間中は通常の2倍のリソースが必要です
カナリアの考え方
カナリアリリースでは、まず少量のトラフィックを新しいバージョンに送ります。メトリクスが正常であれば、徐々に規模を拡大します。
この名前は、鉱山作業員が危険を早期に検知するために使ったカナリアに由来します。
レプリカ数によるカナリア
単純なカナリアでは、同じServiceラベルを共有する2つのDeploymentを使用します。トラフィックは、おおよそレプリカ数の比率で分割されます。
# stable: 9 replicas, canary: 1 replica => ~10% to canary
kubectl scale deployment app-stable --replicas=9
kubectl scale deployment app-canary --replicas=1カナリアを昇格させる
確信が高まるにつれて、カナリアへの比率を増やします。その後、すべてのトラフィックを処理するようになったら、古いバージョンを停止します。
kubectl scale deployment app-canary --replicas=5
kubectl scale deployment app-stable --replicas=5
# later, fully promote
kubectl scale deployment app-canary --replicas=10
kubectl scale deployment app-stable --replicas=0カナリアを観測する
カナリアの目的は観測です。昇格させる前に、エラー率、レイテンシ、ログを確認してください。
kubectl get pods -l version=canary
kubectl logs -l version=canary --tail=50戦略を選択する
- ブルーグリーン: すっきりした即時切り替えと迅速なロールバックが必要な場合に最適です
- カナリア: 影響範囲を抑え、実際のトラフィックで検証したい場合に最適です
- ローリング: リスクの低い通常のアップデートに適したデフォルトです
kubectl以外のツール
細かいトラフィック分割(たとえば正確に5%)には、Istioなどのサービスメッシュや、Argo Rollouts、Flaggerなどのプログレッシブデリバリーツールを使用します。これらのツールはカナリア分析を自動化します。
クイックチェック
カナリアリリースを最も適切に説明している文を選択します。
まとめ
高度なリリース戦略を比較しました。ブルーグリーンは2つの環境間ですべてのトラフィックを即座に切り替えるため、迅速なロールバックが可能です。一方、カナリアはリスクを抑えるためにトラフィックを徐々に移行します。どちらも、すでに学んだDeploymentとServiceという基本要素を基盤としています。
よくある質問
「デプロイ戦略:Blue-GreenとCanary」レッスンは無料ですか?
はい。「デプロイ戦略:Blue-GreenとCanary」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「デプロイ戦略:Blue-GreenとCanary」で何を学びますか?
ローリングアップデートの先に進み、KubernetesでBlue-GreenとCanaryのデプロイパターンを使って安全にリリースする方法を学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「デプロイ戦略:Blue-GreenとCanary」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Deploymentを理解する
- ReplicaSetによるアプリケーションのスケーリング
- ローリングアップデートとロールバック
- デプロイ戦略:Blue-GreenとCanary