1
/
5

【TECH BLOG】カナリアリリースを自動化!Flaggerでプログレッシブデリバリーを実現した話

はじめに

こんにちは。SRE部ECプラットフォーム基盤SREブロックの大澤と立花です。

本記事ではマイクロサービスのカナリアリリースに関して私達が抱えていた課題と、それをFlaggerによるプログレッシブデリバリー導入でどのように改善したのかを紹介します。

ZOZOTOWNのマイクロサービス基盤におけるカナリアリリース手段の変遷については以下のテックブログで紹介しておりますので気になった方はご参照ください。現在はIstio VirtualServiceの加重ルーティングを用いたカナリアリリースに一本化しております。


ZOZOTOWNマイクロサービスの段階的移行を支えるカナリアリリースとサービス間通信における信頼性向上の取り組み - ZOZO TECH BLOG
SRE部プラットフォームSREチームの川崎 @yokawasa です。 ZOZOTOWNではモノリシックなアーキテクチャーから、優先度と効果が高い機能から段階的にマイクロサービス化を進めています。本記事では、そのZOZOTOWNの段階的なマイクロサービス移行で実践しているカナリアリリースとサービス間通信の信頼性向上の取り組みについてご紹介します。 ...
https://techblog.zozo.com/entry/zozotown-microservices-alb-istio


ZOZOTOWNにおける段階的なIstioサービスメッシュ化戦略 - ZOZO TECH BLOG
こんにちは、SRE部 ECプラットフォーム基盤SREブロックの亀井です。 ZOZOTOWNのマイクロサービスプラットフォーム基盤(以下、プラットフォーム基盤)ではサービス間通信におけるトラフィック制御・カナリアリリース実装のため、 Istio によるサービスメッシュを導入しました。現在は初期段階としてBFF機能を司るZOZO Aggregation ...
https://techblog.zozo.com/entry/zozotown-phased-istio-service-meshing-strategy


カナリアリリースの運用課題

カナリアリリースすることで、新しいアプリケーションにバグがあった場合でもユーザへの影響を最小限に抑えられます。一方で、通常のリリースと比較して運用負荷が大きくなるデメリットも存在します。

こちらの図はカナリアリリースの進行を示したものです。



以下を繰り返すことでカナリア用Pod(以下、Canary Podとする)への加重を増やしていきます。

・n%デプロイ
 ・Canary Podのreplicas拡張・加重増加の設定変更
・分析
 ・Canary Podに流れたリクエストが問題なく処理されているか、レイテンシが悪化していないか判断
  ・問題がない場合、n%デプロイを進行する
  ・問題があった場合、旧バージョンにロールバックする

従来のカナリアリリースでは、これらのサイクルを人が担うことになります。Canary Podへの加重変更プルリクエスト作成、レビュー、CI/CDの待ち時間、エラー発生やレイテンシ悪化の監視といったことが加重変更の都度発生します。このため、カナリアリリースだけでリリース担当者の稼働を半日費やしてしまうことも珍しくなく負担が非常に大きい状態でした。

また、私達のチームではメインのリソースとカナリアのリソースでKubernetesのDeploymentのマニフェストを分けて管理していました。これら2つのマニフェストを日頃からメンテナンスすることになりますので、変更やレビュー対象の増加に繋がり、設定漏れといった人的ミスのリスク要因になりがちです。

解決手段としてのプログレッシブデリバリー

私達のチームが管理する検索APIはリリース頻度が比較的高く、カナリアリリースによる時間的拘束が顕著でしたので改善を目指すことにしました。

そこで挙がったのがプログレッシブデリバリーです。

プログレッシブデリバリーはリリースプロセスを自動化するために、メトリクスの取得・分析を行い、問題がなければデプロイの進行、基準を満たさなければロールバック、といった判断と実行を備えた仕組みです。



このプログレッシブデリバリー用ツールには、Argo Rollouts、Flagger、Spinnakerなどがありますが、私達のチームではFlaggerを採用することにしました。

Flaggerとは?

Flaggerとはプログレッシブデリバリーを実現するKubernetes Operatorです。

私達のマイクロサービス基盤で採用しているツール(Istio, Datadog, Slack)の場合ですと、Flaggerはカナリアリリースを自動で進めるために次のように連携します。

  • 加重変更 : Istio VirtualServiceの設定変更
  • スケールアウト/イン : DeploymentをオートスケールするためのHorizontalPodAutoscalerの設定変更
  • メトリクス取得 : Datadogにクエリ発行
  • 通知・アラート : Slackに通知



連携可能なツールについては公式ドキュメントのIntroductionで紹介されております。

続きはこちら

株式会社ZOZOでは一緒に働く仲間を募集しています
1 いいね!
1 いいね!
同じタグの記事
今週のランキング
株式会社ZOZOからお誘い
この話題に共感したら、メンバーと話してみませんか?