Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

Spinnakerで実践するマイクロサービスの 安全なリリースフローとベストプラクティス

Keke
July 30, 2020

Spinnakerで実践するマイクロサービスの 安全なリリースフローとベストプラクティス

Cloud Operators Days Tokyo 2020
7/30 11:00~11:40

Keke

July 30, 2020
Tweet

More Decks by Keke

Other Decks in Technology

Transcript

  1. 2 自己紹介 Keisuke Yamashita(@_k_e_k_e) Merpay SRE ・Microservices Platform CI/CD Team

    Like Kubernetes, Hashicorp Products(Terraform, Vault) Spinnaker , Open Policy Agent, CircleCI, GitHub Actions, Istio, Envoy, etc...
  2. 8 そもそも継続的デリバリー(CD)って? Developers Feedback Container Registry GKE Cluster Artifacts Trigger

    Deploy 継続的インテグレーション(CI)によってできた成果物を継続的に、より高速にデプロイ をするための仕組み
  3. 9 そもそも継続的インテグレーション(CI)って? GitHub Developers PR & Review Unit Test Integration

    Test Build Code Analysis Continuous Integration Trigger Feedback コードの変更を行うと、自動的にユニットテスト・結合テスト・ビルド・コード解析などが 行われ、Developerにその結果がフィードバックされる仕組み
  4. 11 マイクロサービスアーキテクチャ Nodes Microservice B Namespace B Microservice B Microservice

    B Microservice B Microservice C Namespace C Microservice C Microservice C Microservice A Namespace A Service A Team Service B Team Service C Team RBAC RBAC RBAC
  5. 12 継続的デリバリー Service A Team Service B Team Service C

    Team Service C Application Service A Application Service B Application Trigger Trigger Trigger Microservice A Namespace A Microservice B Namespace B Microservice C Namespace C Deploy Deploy Deploy
  6. 13 継続的デリバリー Item Item Listing DB Team C User DB

    Team E Item DB Team B Shipping DB Team D Timeline DB Team A
  7. 15 継続的デリバリー Service A Team Service B Team Service C

    Team Service C Application Service A Application Service B Application Trigger Trigger Trigger Microservice A Namespace A Microservice B Namespace B Microservice C Namespace C Deploy Deploy Deploy
  8. 32 Red/Black Deployの懸念点 V1 V1 V1 V1 V2 V2 V2

    V2 Load Balancer ❌ ❌ ❌ ❌
  9. 45 デプロイが失敗する • Red/Black Deploy • Rolling update • Canary

    Deploy デプロイの速度 早い 遅い 安全性 低い 高い
  10. 46 デプロイが失敗する • Red/Black Deploy • Rolling update • Canary

    Deploy デプロイの速度 早い 遅い 安全性 低い 高い ユースケースに応じて、デプロイ手法を選択する
  11. 54 パイプラインのベストプラクティス Item Item Listing DB Team C User DB

    Team E Item DB Team B Shipping DB Team D Timeline DB Team A ✅ カナリアデプロイ ✅ Red/Blackデプロイ ✅ Red/Blackデプロイ ❌ リリースフローに 沿わないデプロイ ❌ 雑なデプロイ
  12. 55 パイプラインのベストプラクティス Item Item Listing DB Team C User DB

    Team E Item DB Team B Shipping DB Team D Timeline DB Team A ✅ カナリアデプロイ ✅ Red/Blackデプロイ ✅ Red/Blackデプロイ ❌ リリースフローに 沿わないデプロイ ❌ 雑なデプロイ それぞれのマイクロサービスにデプロイ手法が委ねられていると ”デプロイの質” にも差が生じ、サービス全体の質へ影響する
  13. 56 パイプラインのベストプラクティス Item Item Listing DB Team C User DB

    Team E Item DB Team B Shipping DB Team D Timeline DB Team A ✅ カナリアデプロイ ✅ Red/Blackデプロイ ✅ Red/Blackデプロイ ❌ リリースフローに 沿わないデプロイ ❌ 雑なデプロイ それぞれのマイクロサービスにデプロイ手法が委ねられていると ”デプロイの質” にも差が生じ、サービス全体の質へ影響する → Spinnaker Manage Pipelineを使う
  14. 57 Spinnaker Managed Pipeline Managed Pipelineとは、Managed Pipelineの雛形になるManaged Pipeline Template(MPT)に設定情報 であるPipeline

    Configurationsを渡してできるPipelineのこと Managed Pipeline Template(JSON) JSON Pipeline Configurations JSON Managed Pipeline = + ・変数を定義 ・どのMPTを使うか指定 ・変数を値を定義 ・GUIで定義可能
  15. 58 Spinnaker Managed Pipeline 主要な機能 ・Sync機能: MPTが更新すると、そのMPTから生成された全てのPipelineも同時に変更できる。 想定ユースケース : Platform

    Teamが各マイクロサービスのデプロイ手法を更新したい ・Immutable機能: Managed Pipelineは直接、変更をすることができない。 ・Configuration機能: 必要な部分だけMPTの一部を変数化をして、Managed Pipelineを生成時に Pipeline Configurationsとして設定できる。 (変数はImmutableではなく、いつでも変更できる ) Managed Pipelineを使えば、Managed Pipeline Templateを管理するだけで横断的に 全マイクロサービスのPipelineを管理することができる。
  16. 59 Service A Team Service B Team Service C Team

    Configure Configure Configure Managed Pipeline Application A Application B Sync機能 Managed Pipeline Template Pipeline Configurations Pipeline Configurations Pipeline Configurations Spinnaker Application C Managed Pipeline Managed Pipeline
  17. 60 Service A Team Service B Team Service C Team

    Configure Configure Configure Managed Pipeline Application A Application B Sync機能 Managed Pipeline Template Pipeline Configurations Pipeline Configurations Pipeline Configurations Spinnaker Application C Managed Pipeline Managed Pipeline V2 Platform Team デプロイ先を変更
  18. 61 Service A Team Service B Team Service C Team

    Configure Configure Configure Managed Pipeline Application A Application B Sync機能 Managed Pipeline Template Pipeline Configurations Pipeline Configurations Pipeline Configurations Spinnaker Application C Managed Pipeline Managed Pipeline V2 V2 V2 V2 Platform Team デプロイ先を変更
  19. 62 Service A Team Service B Team Service C Team

    Configure Configure Configure Managed Pipeline Application A Application B Sync機能 Managed Pipeline Template Pipeline Configurations Pipeline Configurations Pipeline Configurations Spinnaker Application C Managed Pipeline Managed Pipeline
  20. 63 Service A Team Service B Team Service C Team

    Configure Configure Configure Managed Pipeline Application A Application B Sync機能 Managed Pipeline Template Pipeline Configurations Pipeline Configurations Pipeline Configurations Spinnaker Application C Managed Pipeline Managed Pipeline Platform Team ベストプラクティスを追加 ✅
  21. 64 Service A Team Service B Team Service C Team

    Configure Configure Configure Managed Pipeline Application A Application B Sync機能 Managed Pipeline Template Pipeline Configurations Pipeline Configurations Pipeline Configurations Spinnaker Application C Managed Pipeline Managed Pipeline Platform Team ベストプラクティスを追加 ✅ ✅ ✅ ✅
  22. 66 Service Team Configure Application Configuration機能 Pipeline Configurations Spinnaker Managed

    Pipeline containerPort: 8000 Managed Pipeline Template “containerPort”: 8000 各マイクロサービスに依存する設定値だけは Pipeline生成時に設定をすることができる。
  23. 68 Spinnaker Managed Pipeline 主要な機能 ・Sync機能 Platform TeamはMPTを管理するだけど全マイクロサービスのデプロイを管理することできる ・Immutable機能 PipelineをDeveloperに変更されて、壊されるリスクもない

    ・Configuration機能 必要な部分だけDeveloperに設定してもらえる マイクロサービスに必要な最小限の設定だけを公開して、あとから変更されることもなく、全マイクロサービス のデプロイの標準化・管理することができ る。
  24. 73 Spinnaker Managed Pipeline Managed PipelineはSpinnakerのAPI経由で作成をすることができる Managed Pipeline Template(JSON) JSON

    Pipeline Configurations(JSON) JSON Managed Pipeline = + ・変数を定義 ・どのMPTを使うか指定 ・変数を値を定義 Platform Team
  25. 74 Spinnaker Managed Pipeline パイプラインをコード管理する ”Pipeline as Code”。 • コストの削減

    ◦ 自動化によって、作業工数をへらすことができる • スピードの向上 ◦ 自動化・効率化しやすくなって、開発がより高速になる • リスクを低減 ◦ 同じコードをかけば誰がやっても同じ結果になる。 Snowflakeパイプラインを防ぐことができる。属 人性もなくなる。 • 管理のしやすさ ◦ 実際のリソースではなく、コードを管理するだけで済むので楽
  26. 76 まとめ マイクロサービスの継続的デリバリーの中で、 Spinnakerが実装しているデプロイ手法を使うことによって、よ り安全なリリースフローを設計することができる。 SpinnakerのManaged Pipelineという機能をつかうことによって、マイクロサービスのデプロイの質の担保を することができる。Managed Pipelineの中でも”Pipeline as

    Code”のプラクティスもメリットが多い。パイプラ インをコード管理をすることによって管理のしやすく、リスクを低減できる。 Spinnakerという継続的デリバリープラットフォームの多くの機能を使うことによって、よりアプリケーションのリ リースフローが安全で、開発効率などを上げることが出来るようになると思います。