Upgrade to Pro — share decks privately, control downloads, hide ads and more …

デプロイメント手法を選択する/Decide the way of deployment

デプロイメント手法を選択する/Decide the way of deployment

Hiroki Matsumoto

March 11, 2021
Tweet

More Decks by Hiroki Matsumoto

Other Decks in Technology

Transcript

  1. Title Name 松本 宏紀 ( まつもと ひろき ) • Application

    Engineer • 2020年3月 楽天株式会社入社。 Platformとなるサービス群の開発・運用を担当。 • 2020年12月 Passenger Go ExporterをOSSとして公開。 • 前職は、自動車業界における業務システムの開発・運用を担当。 • GKE + Java → Ruby + PHP + golang + Kubernetes ( Azure, 社内クラスタ) Twitter:@hirokimatsumo13 自己紹介
  2. Title Name Progressive Delivery デプロイメント戦略の方法論 CD(Continuous Delivery)の次のステップ。 新しいバージョンをデプロイする際、一部のユーザーにロールアウトを行い、性能、正確性等の観点から評価を 行い、問題があればロールバックします。 Progressive

    Deliveryには、下記のデプロイメント手法が含まれています。 • Canary Release • A/B/ Testing • Blue/Green 負荷がいきなり急上昇し、システム全体が停止してしまうリスクを防ぎます。 Development Feature Tests Release Stress Test
  3. Title Name How to achieve it ? Istio Linkerd Nginx

    Ingress Prometheus トラフィック 制御 観測 手順 Flagger Argo Rollouts
  4. Title Name Deployment Strategies a) 通常リリース。Hot Fix ( Bug, Security

    ) 頻度: 数回/月 Canaryしたい。すごい楽したい。その都度監視したくない。 b) エラーバジェット使い果たした悲しいとき 頻度:恐らく無い 開発者でテストを行った後、 Blue/Green or Canary したい。 c) 破壊的変更が発生したメジャーリリース 頻度: 1回/数年 開発者は新バージョン、ユーザーはメンテナンス画面となるようにしたい。 ( Blue/Green, A/B Testing ) 一般的にエラーバジェットが無い (≒管理していない)場合、確実なテストによる品質保証が求められ ることが多いと思います。 他にもシステム間連携がある場合においても e2eテストが難しい場合があります。
  5. Title Name Flagger with Istio Flagger Canary app Service app-canary

    Service Mesh or Ingress Deployment app-canary Deployment app Service app-primary Deployment app-primary Istio reference, replicas=0 mange gateway Virtual Service app Metric Provider control change weight check metrics
  6. Title Name Argo Rollouts with Istio Argo Rollouts Rollouts app

    Service app-canary Service Mesh or Ingress ReplicaSet app-canary Service app-primary ReplicaSet app-primary Istio mange gateway Virtual Service app Metric Provider control change weight change selector
  7. Title Name Canary Workflow: Flagger with Istio Virtual Service app

    weightによるtrafficのコントロール Rolling Upgrade Deployment app Primary: 100 Canary: 0 Primary: v1 Canary: none Primary: 50 Canary: 50 Primary: v1 Canary: v2 Primary: 100 - (max weight ) Canary: max weight Primary: v1 → v2 Canary: v2 Primary:100 Canary: 0 Primary: v2 Canary: none 1 2 3 4 5 6
  8. Title Name Argo Rollouts Workflow with Istio Service app-primary selectorによる切り替え

    Primary: hash=v1 Canary: hash=v1 Primary: hash=v1 Canary: hash=v2 Primary: hash=v2 Canary: hash=v2 Virtual Service app weightによるtrafficのコントロール Primary: 100 Canary: 0 Primary: 50 Canary: 50 Primary: 100 Canary: 2 4 1 3
  9. Title Name 簡易比較 ( Delivery ) どこまで制御できるか?は、利用している Service Mesh,Ingressに依存します。 よくドキュメントを確認しておく必要があります。

    https://github.com/fluxcd/flagger#features https://argoproj.github.io/argo-rollouts/features/traffic-management/ Flagger Argo Rollouts Note Deployment: Canary ✔ ✔ Deployment: Blue/Green ✔ ✔ Deployment: A/B Testing ✔ ✔ Manual Abort ✔ ✔ Manual Approval ✔ ✔ UI ( CLI ) ✔ Notification ✔ argoproj/argo-rollouts/issues#369
  10. Title Name Release After Manual Test with Flagger 開発者でテストを行った後、 Blue/Green

    or Canary したい。 User Primary : v1 Canary : v2 Developer Canary前にテストを実施することは Flagggerの機能としては提供されていません。 アプリケーション側の対応 ( CanaryへのトラフィックはHTTPヘッダで制御など)が必要となります。 Webhook: confirm-promotion Canary : v2 Waiting for approval User Developer Custom HTTP Header
  11. Title Name Manual Rollback with Flagger メトリクスだけでは判断できない部分があるのでロールバックも行えるようにしておきたい。 User Primary :

    v1 Canary : v2 Developer Webhook: rollback confirm-promotion Canary : v2 Waiting for approval User Developer Custom HTTP Header
  12. Title Name Flaggerのloadtesterで全て事足りる? おそらく運用は難しいです。 /gate/機能も、open/close状態を保持するため、リリースする度にリセットさせなくてはならない。CD側の仕組みで事前にPOST するなどの考慮は必要です。 Tips 安定してる? バージョンアップで動かなくなることはある。でも修正できると思います。 •

    https://github.com/fluxcd/flagger/pull/781 • https://github.com/fluxcd/flagger/pull/777 Progressive Deliveryをするべき? 安定しているシステムなら、導入しない方がコストパフォーマンスは良いかもしれないです。 ただ、利用しているライブラリ、言語、Frameworkがそんなに安定しているものがあればという部分があります。