SlideShare una empresa de Scribd logo
1 de 41
マルチクラウドでContinuous Deliveryを
実現するSpinnakerについて
本日のお話
マルチクラウドで継続的デリバリー(Continuous Delivery)を実現する
Spinnakerについて知ってもらい興味を持ってもらう
継続的デリバリー(Continuous Delivery)は何故必要なの?
・今日では、ユーザはソフトウェアやサービスに対して24時間のサービスアク
セスと100%の稼働率を期待している
・サービスの計画的あるいは計画外のダウンタイムが発生すると信頼性の低下
が著しい一方で、継続的なサービスのアップグレードも望まれる
24時間使えない検索
エンジンだなんて失望
しました。他の検索エ
ンジンを常用します
急なメンテナンスがこ
んなにあるなんて失望
しました。他の類似サ
ービスに乗り換えます
1ヶ月も更新がないな
んて失望しました。こ
んなサービス解約しま
す
Continuous Deliveryには何が必要なの?
ソフトウェアやサービスの稼働を維持しつつ継続的なアップデートをするには
何が必要か?
・アプリケーションのデプロイを短時間で自動的に行いたい
・新規アプリのデプロイを確実に行いたい。問題が発生しても即切り戻したい
・APIの差分吸収で異なるプロジェクト環境でもデプロイ方法は共通化したい
SpinnakerでContinuous Deliveryを実現しよう
・アプリケーションのデプロイを短時間で自動的に行いたい
→Pipelineによってイベントの取得やデプロイイメージ作成、インスタンス作成、
ロードバランサ配下への配置まで全て自動で行える
・新規アプリのデプロイを確実に行いたい。問題が発生しても即切り戻したい
→Blue/Green DeploymentやCanary Deploymentなど問題があったら即ロールバッ
ク可能な複数のデプロイ方法をサポート
・ APIの差分吸収で異なるプロジェクト環境でもデプロイ方法は共通化したい
→複数のクラウドAPIをサポートすることでデプロイプロセスの共通化
Spinnaker
Spinnakerとは
● マルチクラウドでContinuous Delivery(CD)を実現するプラットフォーム
● クラスタの管理やImageの作成、デプロイ管理などの Pipeline を提供
● Netflix社が開発し、OSSとして公開されているが現在はGoogleやPivotal,
Microsoft, Mirantisなども開発に参加している
● AWSやK8S, GCP全体にクラスタをデプロイして管理可能で、現在でも多くの
機能が追加されている
パイプラインはアプリケーションのコードをプロダクションにリリースするため
に必要なすべての手順を実行するプロセス
PipelineとCI/CD
Test/Build Deploy Test Approve
CI CD
Spinnaker Cloud Target
詳細はリポジトリを御覧ください
https://github.com/spinnaker/clouddriver/
● AWS (EC2)
● Docker
● GCP (AppEngine, GCE, GKE)
● Kubernetes
● Microsft Azure
● OpenStack
● etc...
Blue / Green Deployment
SpinnakerはBlue / Green Deploymentを実現
Green (new) に問題があった場合はBlue(old)にRollbackが可能
https://www.spinnaker.io/concepts/
Canary Deployment
Spinnaker ではCanary Deploymentもサポート
新規のプロダクトやサービスをデプロイした際に先に少量の実トラフィックを流
すことで、全体への影響を抑えつつ展開していくことが可能
参考:NetflixのCanary Release Process
3つのクラスタで運用しそれぞれに同じトラフィックから量を変えて流す
1. Production:本番環境 (many servers)
2. Baseline:Canaryと比較するための現行バージョン(1 + m servers)
3. Canary:新バージョン(1 + m servers)
Traffic Router
Metrics
Canary
Analysis
Production(v1.0)
Baseline(v1.0)
Canary(v2.0)
参考:NetflixのCanary Release Process
3つのクラスタで運用しそれぞれに同じトラフィックから量を変えて流す
1. Production:本番環境 (many servers)
2. Baseline:Canaryと比較するための現行バージョン(1 + m servers)
3. Canary:新バージョン(1 + m servers)
Traffic Router
Metrics
Canary
Analysis
Production(v1.0)
Baseline(v1.0)
Canary(v2.0)
指標値の取得にはStackdriver, Prometheus, DataDog, New Relicが使用可能
で応答時間やエラーレート、メモリ使用率などを取得可能
取得した多くの指標値から問題ないか評価可能、また指標値ごとに応答時間
は重要度高、リソース飽和度は重要度低など重み付けが可能
実際に動作検証
・目的:
Gitやコンテナレジストリにコードをアップするだけでデプロイ→テスト→更新や
切り戻しをできるのか確認
動作の一連の流れ
1.「Hello world」と表示する簡単なwebアプリを「Hello Spinnaker」に変更して
グーグルコンテナレジストリ(gcr)に登録
2.下記パイプラインで自動検知→自動デプロイ→canary分析→本番環境の更新が
できるか確認
3.前のバージョンにも切り戻しできるか確認
・初期状態:
簡易な文字列のみを表示するウェブアプリがデプロイ・公開されている
これをgcrにコードを上げることで自動でバージョンUPしたい
・自動検知:
GCRに新規バージョンコードをUPすると自動で検知しパイプラインを起動
・自動検知:
GCRに新規バージョンコードをUPすると自動で検知しパイプラインを起動
GCRに新規バージョンをアップロード
・自動検知:
GCRに新規バージョンコードをUPすると自動で検知しパイプラインを起動
SpinnakerがGCRにアップロードされたことを検知して、自
動的にパイプラインを起動
・自動デプロイ:
トリガーによって比較用の現行バージョン(Baseline)と投稿された新バージョン
(Canary)が自動でデプロイされる
・自動デプロイ:
トリガーによって自動的に比較用の現行バージョン(Baseline)と投稿された新
バージョン(Canary)がデプロイされる
パイプラインが走ると既存のバージョンイメージを読み取り、
新規バージョンと比較するための現行バージョンのコピーが
自動でデプロイされる
・自動デプロイ:
トリガーによって自動的に比較用の現行バージョン(Baseline)と投稿された新
バージョン(Canary)がデプロイされる
同時に投稿された新規バージョンについても自動的にデ
プロイされる
・Canary分析:
立ち上げたBaselineとCanaryバージョンについて比較確認し、問題がないかテス
トできる。一例としてWebアプリならHTTPステータスコードや例外数、応答時
間・負荷平均などに大きな差がないか確認
・Canary分析設定:
各条件については詳細に設定可能
・Fail on: increaseは増加時にFail, decreaseは減少時にFail, eitherは増減時にFail
・Criticality: この条件が失敗した場合は即Fail。特に重要な指標に用いる
・NaN Strategy:取得した値がNaNだった時の処理を指定
・Canary分析設定:
デフォルトの分析アルゴリズムはNetflixAXAJudgeである。重要度に基づいて重み
付けを行った各条件が成功した割合で成功か判定がなされる。Passの値を超えて
いれば成功。Marginalを超えていれば人目で判断。Marginal以下なら失敗。
・Canary分析設定:
デフォルトの分析アルゴリズムはNetflixAXAJudgeである。重要度に基づいて重み
付けを行った各条件が成功した割合で成功か判定がなされる。Passの値を超えて
いれば成功。Marginalを超えていれば人目で判断。Marginal以下なら失敗。
例えば、以下のようにCPURAW関連に30, 接続関係に50, processと
systemcpu関連に10の重み付けを行って、右図のように各条件の判定
結果が出た場合、全体として85%成功しておりPassの70%を超えてい
るので成功判定を出し、下流のパイプラインに進む
・本番環境の更新:
Canary分析に成功したら本番環境を新規バージョンにアップデートする。アップ
デート後立ち上げたBaselineとCanary バージョンも自動で削除
・本番環境の更新:
Canary分析に成功したら本番環境を新規バージョンにアップデートする。アップ
デート後立ち上げたBaselineとCanary バージョンも自動で削除
GCRに登録するだけで検知→デプロイ→canary分析→本番環境更新まで自動化できた
切り戻しの確認
・CLUSTERS情報から過去のバージョンに簡単にロールバックを実行可能
切り戻しの確認
切り戻し先のバージョン番号を指定 切り戻しが自動で実行される
切り戻しの確認
・容易に切り戻しを実行できることも確認できた
Spinnaker Monitoring
● Spinnakerを用いることで各アプリケーションのテストやロールバック
を容易に扱え、正常に動作させることが可能となる
● 一方でSpinnaker自体が正しく動作しているかはどう判断すれば良い
か?
● 以降では、Spinnakerの構成要素を紹介しつつPrometheusを利用して
Spinnakerの各要素から取れる主要なメトリックを紹介する。
参考
https://docs.armory.io/docs/
https://blog.spinnaker.io/monitoring-spinnaker-sla-metrics-a408754f6b7b
Spinnaker Architecture
● Deck – Spinnaker UI
● Gate – API Gateway
● Orca - Orchestrate engine
● Cloddriver - Cloud controller
● Fiat - Authorization
● Front50 - Metadata management
● Rosco - Image builder
● Kayenta - Canary Analysis
● Echo - Event bus
● Igor - Pipelines trigger
Spinnaker Architecture
● Orca - Orchestrate engine
・Spinnaker内のPipeline, Stage, Taskの
オーケストレーションを担当。
・専用の遅延分散キューライブラリ
Keikoを使用して作業を管理
・単一のスレッドで最も古い「準備が
できている」メッセージをポーリング
し、ワーカースレッドに割り当てる。
従ってスケーリング機能はワーカープ
ールのスレッド可用性に依存
Spinnaker Monitoring Orca
● Orca - Orchestrate engine
オーケストレーションを担当しているため多くの重要なメトリックスが取れる
・task.invocation.duration(count)
-個々のキューのタスクの実行時間。個数をカウントすればどのくらい処理してい
るかの指標にもなる。アプリケーションでグループ分けすることでどのサービスが
主に負荷をかけているかも確認できる
Spinnaker Monitoring Orca
・controller.invocations
-http statusの応答確認の総計などが取得可能。status=5xxでFilterして異常にスパイ
クしているようならCloudDriverで問題があるかポーリングするスレッド容量がほ
とんどないなどの問題がある。
Spinnaker Monitoring Orca
・executions.active(started,completed)
-実行中のPipelineとOrchestrationを確認可能。ほぼプログラム的に同一だが前者は
事前定義された永続的な構成であるのに対して、後者はスケジュールされていない
アドホックAPI送信アクションでありリクエスト時に任意に構成される。異常があ
れば明らかに減るので監視・アラート第一候補
また、started,completedを確認すればどれくらい成功できているか確認できる
Spinnaker Monitoring Orca
・queue.pushed/queue.acknowledged
-2つの指標を見比べて後者の応答がない場合には、ダウンストリームに問題がある
ことを示す指標として有効
・queue.depth(ready,unacted)
-readyのtaskが溜まっている場合、すぐに処理に移行可能だが払い出しを待ってい
るのが多数ある状態なのでスケールUPが必要
・queue.message.lag
-メッセージの望ましい配信時間と実際に配信された時間差。通常バックアップが
走らない限り極小であり、頻繁に何秒も待つ場合はスケールUPが必要
Spinnaker Monitoring Echo
● Echo - Event bus
・Notificationやalert、Triggerを管理。
主に外部からの通知等に問題がないかどうかの指標が取れる
・echo.triggers.count
-トリガーによって起動されたパイプライン数を確認できる。サービスの統合・
廃止をしない限り安定していることが望まれる
・echo.pubsub.messagesProcessed
-処理したPubSubトリガー数を確認できる。こちらもブレはあるが数分反応がな
いならアラートを出すようにしたりと設定できる
Spinnaker Monitoring Igor
● Igor - Pipelines trigger
・JenkinsなどのCIツールと通信するラッパーAPI
-他:Artifactory, Nexus, Concourse, GitlabCI, Google Cloud
Buile, Travis, Wercker
・pollingMonitor.failed
-SCMポーリングの失敗率。多くの場合0を超えていたらCIツール側がオフラ
インなどの問題がある。
・pollingMonitor.newItems
-ポーリングサイクル中に特定のモニターでキャッシュされたアイテム数。
想定外の値なら外部に問題あり
まとめ
・Spinnakerを使うことで、本番環境までのデプロイメントを自動化できる。
ーGithubやGitlabなど複数のリソースから更新を検知可能
・本番環境を想定したテストやロールバック機能を有する
ーBlue /GreenやCanaryなど複数のデプロイ戦略をサポート
・Prometheusと連携することでSpinnakerが正常に動作しているか確認するため
の有効な指標値を取得することができるため、より安定したCI CDを実現可能
Thank you !

Más contenido relacionado

La actualidad más candente

Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)NTT DATA Technology & Innovation
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CDYuta Matsumura
 
AWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティスAWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティスAmazon Web Services Japan
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門Yoichi Kawasaki
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGoogle Cloud Platform - Japan
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021Preferred Networks
 
Ansible AWXを導入してみた
Ansible AWXを導入してみたAnsible AWXを導入してみた
Ansible AWXを導入してみたsugoto
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門Kohei Tokunaga
 
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)NTT DATA Technology & Innovation
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINE Corporation
 
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-Yuta Imai
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
AKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたAKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたHideaki Aoyagi
 
半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)Toru Makabe
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAmazon Web Services Japan
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)NTT DATA Technology & Innovation
 

La actualidad más candente (20)

Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
Kubernetes 疲れに Azure Container Apps はいかがでしょうか?(江東区合同ライトニングトーク 発表資料)
 
.NET Core時代のCI/CD
.NET Core時代のCI/CD.NET Core時代のCI/CD
.NET Core時代のCI/CD
 
AWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティスAWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティス
 
Istioサービスメッシュ入門
Istioサービスメッシュ入門Istioサービスメッシュ入門
Istioサービスメッシュ入門
 
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps OnlineGKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
 
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
PFNのML/DL基盤を支えるKubernetesにおける自動化 / DevOpsDays Tokyo 2021
 
Ansible AWXを導入してみた
Ansible AWXを導入してみたAnsible AWXを導入してみた
Ansible AWXを導入してみた
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
乗っ取れコンテナ!!開発者から見たコンテナセキュリティの考え方(CloudNative Days Tokyo 2021 発表資料)
 
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
 
LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版LINEのMySQL運用について 修正版
LINEのMySQL運用について 修正版
 
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
EC2のストレージどう使う? -Instance Storageを理解して高速IOを上手に活用!-
 
[GKE & Spanner 勉強会] GKE 入門
[GKE & Spanner 勉強会] GKE 入門[GKE & Spanner 勉強会] GKE 入門
[GKE & Spanner 勉強会] GKE 入門
 
最近のJuju/MAAS について
最近のJuju/MAAS について最近のJuju/MAAS について
最近のJuju/MAAS について
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
AKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみたAKS と ACI を組み合わせて使ってみた
AKS と ACI を組み合わせて使ってみた
 
半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)半日でわかる コンテナー技術 (入門編)
半日でわかる コンテナー技術 (入門編)
 
ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門ゼロからはじめるKVM超入門
ゼロからはじめるKVM超入門
 
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design PatternAWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
AWS Black Belt Online Seminar 2018 Amazon DynamoDB Advanced Design Pattern
 
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
 

Más de NTT Communications Technology Development

クラウドを最大限活用するinfrastructure as codeを考えよう
クラウドを最大限活用するinfrastructure as codeを考えようクラウドを最大限活用するinfrastructure as codeを考えよう
クラウドを最大限活用するinfrastructure as codeを考えようNTT Communications Technology Development
 
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介NTT Communications Technology Development
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~NTT Communications Technology Development
 
Can we boost more HPC performance? Integrate IBM POWER servers with GPUs to O...
Can we boost more HPC performance? Integrate IBM POWER servers with GPUs to O...Can we boost more HPC performance? Integrate IBM POWER servers with GPUs to O...
Can we boost more HPC performance? Integrate IBM POWER servers with GPUs to O...NTT Communications Technology Development
 
イケてない開発チームがイケてる開発を始めようとする軌跡
イケてない開発チームがイケてる開発を始めようとする軌跡イケてない開発チームがイケてる開発を始めようとする軌跡
イケてない開発チームがイケてる開発を始めようとする軌跡NTT Communications Technology Development
 

Más de NTT Communications Technology Development (20)

クラウドを最大限活用するinfrastructure as codeを考えよう
クラウドを最大限活用するinfrastructure as codeを考えようクラウドを最大限活用するinfrastructure as codeを考えよう
クラウドを最大限活用するinfrastructure as codeを考えよう
 
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
【たぶん日本初導入!】Azure Stack Hub with GPUの性能と機能紹介
 
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
 
Argo CDについて
Argo CDについてArgo CDについて
Argo CDについて
 
SpinnakerとKayentaで 高速・安全なデプロイ!
SpinnakerとKayentaで 高速・安全なデプロイ!SpinnakerとKayentaで 高速・安全なデプロイ!
SpinnakerとKayentaで 高速・安全なデプロイ!
 
100Gbps OpenStack For Providing High-Performance NFV
100Gbps OpenStack For Providing High-Performance NFV100Gbps OpenStack For Providing High-Performance NFV
100Gbps OpenStack For Providing High-Performance NFV
 
Can we boost more HPC performance? Integrate IBM POWER servers with GPUs to O...
Can we boost more HPC performance? Integrate IBM POWER servers with GPUs to O...Can we boost more HPC performance? Integrate IBM POWER servers with GPUs to O...
Can we boost more HPC performance? Integrate IBM POWER servers with GPUs to O...
 
AWS re:Invent2017で見た AWSの強さとは
AWS re:Invent2017で見た AWSの強さとは AWS re:Invent2017で見た AWSの強さとは
AWS re:Invent2017で見た AWSの強さとは
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
Mexico ops meetup発表資料 20170905
Mexico ops meetup発表資料 20170905Mexico ops meetup発表資料 20170905
Mexico ops meetup発表資料 20170905
 
NTT Tech Conference #2 - closing -
NTT Tech Conference #2 - closing -NTT Tech Conference #2 - closing -
NTT Tech Conference #2 - closing -
 
イケてない開発チームがイケてる開発を始めようとする軌跡
イケてない開発チームがイケてる開発を始めようとする軌跡イケてない開発チームがイケてる開発を始めようとする軌跡
イケてない開発チームがイケてる開発を始めようとする軌跡
 
GPU Container as a Service を実現するための最新OSS徹底比較
GPU Container as a Service を実現するための最新OSS徹底比較GPU Container as a Service を実現するための最新OSS徹底比較
GPU Container as a Service を実現するための最新OSS徹底比較
 
SpinnakerとOpenStackの構築
SpinnakerとOpenStackの構築SpinnakerとOpenStackの構築
SpinnakerとOpenStackの構築
 
Troveコミュニティ動向
Troveコミュニティ動向Troveコミュニティ動向
Troveコミュニティ動向
 
Web rtc for iot, edge computing use cases
Web rtc for iot, edge computing use casesWeb rtc for iot, edge computing use cases
Web rtc for iot, edge computing use cases
 
OpenStack Ops Mid-Cycle Meetup & Project Team Gathering出張報告
OpenStack Ops Mid-Cycle Meetup & Project Team Gathering出張報告OpenStack Ops Mid-Cycle Meetup & Project Team Gathering出張報告
OpenStack Ops Mid-Cycle Meetup & Project Team Gathering出張報告
 
NTT Tech Conference #1 Opening Keynote
NTT Tech Conference #1 Opening KeynoteNTT Tech Conference #1 Opening Keynote
NTT Tech Conference #1 Opening Keynote
 
NTT Tech Conference #1 Closing Keynote
NTT Tech Conference #1 Closing KeynoteNTT Tech Conference #1 Closing Keynote
NTT Tech Conference #1 Closing Keynote
 
OpsからみたOpenStack Summit
OpsからみたOpenStack SummitOpsからみたOpenStack Summit
OpsからみたOpenStack Summit
 

Último

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 

Último (8)

AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

マルチクラウドでContinuous Deliveryを実現するSpinnakerについて

Notas del editor

  1. ・ユーザは基本的にソフトウェアやサービスに対して24時間のサービスアクセスと100%の稼働率を期待しています。 例えばGoogle検索はいつでも使えますし、常に表示順とかがちゃんとするようになっています またAWSやGCPが落ちて使えなくなったらTOPニュースものです。 ・従ってサービスが落ちている時間が長く発生しているとユーザ離れが加速します。しかしながらアップグレードがされないサービスに対してもユーザは見切りをつけます。 例えば、ソーシャルゲームなんかが分かりやすく、メンテナンスを頻繁に行うようではユーザはやめていきますし、なんのストーリーもキャラも追加がなくてもユーザは飽きて離れていきます。
  2. そのためソフトウェアやサービスを運用する上では、稼働を維持しつつ継続的なアップデートが必要不可欠となります。 では継続的なアップデートには何が必要でしょうか。 一つはアプリケーションのデプロイをできるだけ早く自動的に行う環境が整っていることです。 更新しようとするたびに立ち上げるサーバはどうするかなど毎回一々設定していると時間がかかるので、継続的なアップデートには自動化は不可欠です。 もう一つ重要なのはアプリケーションのデプロイを確実に行えるようにテスト環境が整っていることです。また、仮に問題が発生してもすぐに前のバージョンにロールバックできるようにしておくことが好ましいです。 最後に複数の部署でサービス・アプリを開発し運用は別の部署が一元管理するといった場合だと、開発ごとにプラットフォームなどが異なることが多いのでそれらの差分を吸収できるようなデプロイ自動化ツールが求められます。
  3. これらについてSpinnakerを用いることで実現することができます 自動化についてはリソースの更新などのイベントを取得し、デプロイイメージ作成、インスタンス生成、ロードバランサ配下への配置と行った一連のアクションを自動で行うことができます。 またブルーグリーンデプロイやカナリーデプロイなど本番環境を想定した複数のデプロイ戦略をサポートしており、問題が発生してもすぐに以前のバージョンにロールバックできます。 最後にマルチクラウドに対応しており、プロジェクトごとにプラットフォームなどが違ってもデプロイ方法については一元管理することができます
  4. ではSpinnakerについて詳しく見ていきましょう
  5. Spinnakerはマルチクラウドに対応したCDを実現するプラットフォームです。 クラスタの管理やImageの作成・デプロイ管理などを行え、トリガーを設定することで自動的に行うことができるPipelineを設定できます Netflix社が開発しOSSとして公開されており、現在ではGoogleやMicrofoftなども開発に参加しています。マルチクラウドに対応しているだけあり、AWSやK8s,GCPやAzureなどの主要なデプロイ先にはほとんど対応しており、Spinnaker自体も未だにアップデートがなされています。
  6. アプリケーション自体が正しく動作するかどうかのテストや共通レポジトリへの統合など開発者向けの自動化サポートはJenkinsなどのCIツールに任せる形となっています。(Test・Build部分)Spinnakerはそれ以降のCDを担当します CDに必要なのは新規コードの導入作業の負担を最小限にすることです。Spinnakerではイメージ作成やインスタンス・サーバグループ作成・LB配下への配置などアプリケーションコードをプロダクションにリリースするために必要な手順を実行できるパイプラインを提供しています。(図のデプロイ部分) また、CDではリポジトリなどから本番環境へ自動的にリリースし顧客が迅速に使用可能にすることも重要です。Spinnakerではリソースの更新の検知から、テスト・評価を含めたパイプラインを自動で構築できる為、開発者のアプリケーション更新から顧客へのサービス提供をスムーズに行うことができます(図のTEST・APPROVE部分)
  7. デプロイ先としては挙げているものがターゲットにできます。 AWSのEC2やGCPのGCEなどのVMを立ち上げることもできますし K8sのデプロイメントやサービスなども自動で立ち上げることように設定できます
  8. 本番環境へのリリースを想定してBlue・Greenデプロイメントをパイプラインで設定できます ブルーグリーンデプロイは簡単に言うと最新バージョンと直前バージョンでのホットスタンバイです。 問題が起こったときはアイドル状態にしている直前のバージョン環境にルータ振り分けを戻せばいいので容易にロールバックを行うことができます
  9. またSpinnakerではカナリーデプロイもサポートしています。 新規サービスをデプロイする際に少量の実トラフィックを流すことで、全体への影響を抑えつつ本番環境に近い形で問題ないか確認することができます
  10. 実際の運用の例はこのようになります。 Productionが本番環境に該当し、アプリケーションのアップデートを行う場合には既存のProductionと同様のバージョンのBaselineと 作成した新ヴァージョンのCanaryをそれぞれ少数サーバで立ち上げます そしてトラフィックの一部をBaselineとcanaryにも流して一定期間運用し、BaselineとCanaryの指標値に多くの差異や問題がないか確認した上でバージョンUPを行います
  11. 各サーバでの指標値の取得にはスタックドライバー、プロメテウス、データドッグ、ニューレリックが使用できます。 例えばWebサーバからの応答時間や処理のエラーレート、またはメモリ使用率やリソース飽和度などを見ることができます BaselineとCanaryを比較して問題がないかどうかは取得した多くの指標値を複合評価して判断させることが可能です。 また、例えば応答時間やエラーレートが伸びていたら絶対失敗、リソース飽和度の増加は多少は許容するなどの重み付けをして判定させることもできます。
  12. では実際にCDとしての機能がしっかり果たせるか簡単な例を追いながら確認していきます。 GitやコンテナレジストリにコードがUPされるだけでデプロイからテスト、更新まで自動で行え、切り戻しが容易にできるか見ていきます。 流れとしてはこのようになります。 現状ではHello Worldと表示されるWebアプリケーションがデプロイされているものとします。これを表示する文字をHello Spinnakerに変更してGCRに登録します。 そしてSpinnakerがGCRの登録を自動検知し、デブロイ、カナリーテストを行い合格していたら更新させるといった処理が行われるか確認します。 また、成功後に以前のバージョンに切り戻しできるか見ていきます。 パイプラインとしては以下のようになります。 検知後にBaselineとCanaryをデプロイしてカナリーテストを行い、成功していたら元のアプリケーションを新規アプリケーションのバージョンに更新して立ち上げたBaselineとCanaryを除去します
  13. では早速見ていきます。 初期状態としてすでにHelloWorldと表示するWebアプリケーションができている状態です。 これにGCRに新規バージョンがUPされたら自動で更新が行われるか見ていきます
  14. では最初に自動検知の部分です
  15. GCRにWEBアプリケーションの新バージョンをアップロードします
  16. パイプライン の実行トリガーにGCRのWEBアプリケーションを登録しておくことで、 自動的に検知を行いパイプラインを起動します
  17. パイプラインが起動するとBaselineとCanaryをデプロイします。普通は別のサーバに立てますが分かりやすいように同じサーバで立ててます
  18. Baselineは既存のバージョンのイメージを取得し、新規のバージョンと比較するために現行バージョンのコピーとして自動でデプロイされます
  19. 一方でCanaryについては投稿された新規バージョンに基づいてデプロイされます。プロンプトで見てもBaselineが現行バージョンと同様にバージョン1でCanaryバージョンが1.1になっているのが分かります
  20. 立ち上げて一定期間動作させて各サーバからBaselineとCanaryの指標値を取得してCanary分析を行います。 普通は数時間や数日かけて値をとりますが、図だとパパッと1分だけ回して成功させています 一般的なWebアプリケーションの場合はHTTPステータスコードの例外数、や応答時間・負荷平均などに大きな差がないか確認することになります
  21. 各取得する値の条件については詳細に決めることができます。 値が増加、減少のみに絞ったり、増減両方で変化した場合に失敗判定をするようにできますし、 特に重要となる指標値にはそれが失敗していたら他の指標値が条件を満たしても即失敗となるようにもできます また細かいですが取得した値がNanだった時の処理方法も指定できます
  22. 分析アルゴリズムはデフォルトではNetflixAXAJudgeで行われます。各条件に重み付けをしておき各条件が成功した割合が指定値を超えたかどうかで判定を行います。Passの値を超えていれば成功して次のステージに移行し、Marginalを超えていれば、人目で次のステージに進むか判断、Marginal以下ならパイプライン失敗という形になります
  23. 例えば取得する指標値群についてCPURAW関連に30、接続関係を重要とみなして50、ProcessとSYStemCPU関連の指標値は重要視せずに10の重み付けを行って、右図のような判定結果が出たとします。この場合、CPURAWと接続関係、SYSTEMCPUの片方が成功しているので重み付けを踏まえると全体の85%成功しており、PASS条件の70を超えているのでカナリー分析は成功し次のステージに進むといった形になります。
  24. 分析が成功したら新規バージョンに変更しても問題ないと判断できるので、本番環境を新規バージョンにアップデートを行います。このパイプラインでは大元のアプリケーションをアップデートした後で、立ち上げたBaselineとCanaryを削除しています
  25. 実際にプロンプトやWEBサーバを見ても更新できていることが確認できます。 以上の流れからGCRに新規コードを登録するだけで自動検知、デプロイ、カナリーテスト分析、本番環境の更新までできることが確認できました。
  26. 次に前のバージョンに切り戻しができるか確認していきます。 切り戻しはクラスター情報のUNDOROLLOUTからできます
  27. 切り戻し先のバージョンを指定してやるだけで、すぐに切り戻しに必要な諸々の処理を自動で実行してくれます。 今回は簡単なアプリケーション例なのでロールバックも非常に早いです
  28. 実際にWeb画面を見ても戻っていることが確認できます。 このように自動デプロイやテスト、切り戻しを容易に行えるので、新規コードの導入作業の負担を減らし、開発者のアプリケーション更新から顧客へのサービス提供をスムーズに行うことができます
  29. Spinnakerを用いることで各アプリケーションのテストやロールバックを容易に扱え、正常に動作させることが可能となります 一方でSpinnaker自体が正しく動作しているかはどう判断すれば良いでしょうか 以降では、Spinnakerの構成要素を紹介しつつPrometheusを利用してSpinnakerの各要素から取れる主要なメトリックを紹介します
  30. Spinnakerの構成要素は図のようになっています。 それぞれUI部分やAPI GATEWAY オーケストラエンジンなど複数のコンポーネントから成り立っています。 ここでは特にSpinnaker自体が正しく動作しているか確認できるORCAとSpinnakerと連携して動作させている外部ツールが正しく動作してるか確認できるIGORとECHOを見ていきます。
  31. ORCAはSpinnaker内の処理のオーケストレーションを担当しています。ちなみにTaskの塊がStageで一連のStageの連続がPipelineとして扱われます。 Spinnakerでは単一の共有スレッドでKEIKOと呼ばれる専用の遅延分散キューで作業を管理しており、ワーカスレッドに割り当て準備ができているTASKを割り振って行きます。スケジュールを管理している関係上作業をさせた失敗したなど有益な指標値が多く取れます。また作業が遅いとかの場合は大体ワーカープールの容量が足りないとかのケースが多いので性能向上のための指標も取れます
  32. ではどんな値が取れるか見ていきましょう。 まずはtask.invocation.duration(count)です これは個々のキュー間のタスクの実行時間であり、個数をカウントすればどれくらい処理しているかの指標になります。またアプリケーションサービスごとでフィルタリングすることでどのサービスが負担をかけているかなどが見られます
  33. 次にcontroller.invocations。これはHTTPStatusの応答確認の統計が取得できます。例えば5xxでフィルタリングして上げてこの値が異常にスパイクしているようなら例えばクラウドドライバー側で問題があるか割り当てるスレッド容量がほとんどないことが推測できます
  34. 次にexecutions.active(started,completed) 実行中のPipelineとOrchestrationを確認可能です。Pipelineとオーケストレーションはプログラム的にほぼ同一ですが前者は事前定義された永続的な構成であるのに対して、後者はスケジュールされていないアドホックAPI送信アクションでありリクエスト時に任意に構成された物を挿します。異常があれば明らかに減るので監視・アラートの第一候補となります。また、started,completedを確認すればどれくらいのレートで成功できているか確認できます
  35. またキュー関係の値も取れます。PushとACKに差異がある場合はダウンストリームに問題がある可能性を示唆しますし、 Depthやメッセージラグがある場合は処理の割り当て待ちが想定されるのでスケールUPが必要となります。
  36. 次にECHOを見ていきます。このコンポーネントは通知やアラート、検知トリガーの管理をしています トリガーの回数やPUBSUBの処理したプロセス数を見ることで起動されたパイプライン数を確認できます。普通定期的にトリガーが走るように設定するので起動周りや外部との連携に問題があるかどうか分かります。
  37. 次にIGOR これはJenkinsなどのCIツールと連携するためのAPIになります。 ちなみにSPINAkerは以下のCIツールをサポートしています。 主にCIツールとの連携が上手くいっているかの確認ができます
  38. まとめです ・Spinnakerを使うことで、本番環境までのデプロイメントを自動化できます マルチクラウドに対応しているのでGithubやGitlabなど複数のリソースから更新を検知して自動でデプロイできます ・またSpinnakerは本番環境を想定したテストやロールバック機能を有しています Blue /GreenやCanaryなど複数のデプロイ戦略をサポートしており、これによりアップデートしたアプリケーションを迅速に顧客に使ってもらえるようになります 最後にPrometheusと連携することでSpinnakerが正常に動作しているか確認するための有効な指標値を取得することができるため、より安定したCI CDを実現可能となっています