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

コロプラが実践しているSpinnakerを用いたデプロイ戦略 / Deploy Strategy with Spinnaker at Colopl

go_vargo
July 25, 2019

コロプラが実践しているSpinnakerを用いたデプロイ戦略 / Deploy Strategy with Spinnaker at Colopl

go_vargo

July 25, 2019
Tweet

More Decks by go_vargo

Other Decks in Technology

Transcript

  1.           COLOPL, Inc. All Rights Reserved
    コロプラが実践している
    Spinnakerを用いた
    デプロイ戦略
    Kubernetes Meetup Tokyo #21
    1

    View Slide

  2.           COLOPL, Inc. All Rights Reserved
    名前: 磯 賢大(@go_vargo)
    所属: 株式会社コロプラ
    インフラグループ 第2チーム
    職務内容: Kubernetes環境を良い感じにする
    最近の趣味: Kubernetesカスタムコントローラ作りに挑戦
    執筆: 実践Helm
    2
    自己紹介

    View Slide

  3.           COLOPL, Inc. All Rights Reserved
    GCE, GAE, GKEにSpinnakerをデプロイ可能
    https://cloud.google.com/blog/products/devops-sre/introducing-spinnaker-for-google-cloud-platform-co
    ntinuous-delivery-made-easy
    セキュアなインストールや自動バックアップやモニタリング連携
    にも対応
    今回の発表では触れませんが、
    お試し記事を書いていますのでご参考までに
    https://qiita.com/go_vargo/items/3e37c0a2a1abdbf9e231
    3
    Spinnaker for GCP

    View Slide

  4.           COLOPL, Inc. All Rights Reserved
    4
    アジェンダ
    1. 技術スタック + 構成
    2. Spinnakerおさらい
    3. CI/CD Pipeline全体概要
    4. ソース管理・マニフェスト管理
    5. コロプラとSpinnaker
    6. 複数環境の構築・管理
    7. Spinnakerの闇と光

    View Slide

  5.           COLOPL, Inc. All Rights Reserved
    1. 技術スタック + 構成
    5

    View Slide

  6.           COLOPL, Inc. All Rights Reserved
    6
    1. Game Application Constitution
    クライアントサイド サーバーサイド
    スマートフォン端末
    Storage(S3)
    ゲームアプリケーション
    動画・音声・キャラデータなどのリ
    ソース(アセット)
    Kuberntes
    サーバーアプリケーション・ミドルウェア

    View Slide

  7.           COLOPL, Inc. All Rights Reserved
    7
    1. Game Application Constitution
    クライアントサイド サーバーサイド
    Kuberntes
    スマートフォン端末
    Storage(S3)
    サーバーアプリケーション・ミドルウェア
    ゲームアプリケーション
    動画・音声・キャラデータなどのリ
    ソース(アセット)

    View Slide

  8.           COLOPL, Inc. All Rights Reserved
    8
    1. Cluster
    Single
    Tenant
    Multi Tenant
    APP1 APP2 APP3 APP1 APP2 APP3
    or

    View Slide

  9.           COLOPL, Inc. All Rights Reserved
    9
    1. Cluster
    Single
    Tenant
    Multi Tenant
    APP1 APP2 APP3 APP1 APP2 APP3
    or

    View Slide

  10.           COLOPL, Inc. All Rights Reserved
    10
    1. Application
    Monolithic Micro Service
    APP
    Feature2
    or
    Feature1
    Feature3 Feature4
    Feature6
    Feature5
    APP1
    APP6 APP2
    APP5 APP3
    APP4

    View Slide

  11.           COLOPL, Inc. All Rights Reserved
    11
    1. Application
    Monolithic Micro Service
    APP
    Feature2
    or
    Feature1
    Feature3 Feature4
    Feature6
    Feature5
    APP1
    APP6 APP2
    APP5 APP3
    APP4

    View Slide

  12.           COLOPL, Inc. All Rights Reserved
    1. GKE + Spanner 基本構成
    12

    View Slide

  13.           COLOPL, Inc. All Rights Reserved
    1. GKE + Spanner 基本構成
    13

    View Slide

  14.           COLOPL, Inc. All Rights Reserved
    14
    ● Google Kubernetes Engine
    ● Cloud Spanner
    ● Spinnaker
    ● GitLab CI
    ● Stackdriver
    ● BigQuery
    ● Prometheus
    ● Grafana
    チームがカバーするプロダクト・言語
    ● Docker
    ● Kubernetes
    ● Helm
    ● PHP / Laravel
    ● Golang
    ● Redis (Cluster)
    ● RabbitMQ
    … and more.
    1. 主要技術

    View Slide

  15.           COLOPL, Inc. All Rights Reserved
    15
    ● Google Kubernetes Engine
    ● Cloud Spanner
    ● Spinnaker
    ● GitLab CI
    ● Stackdriver
    ● BigQuery
    ● Prometheus
    ● Grafana
    チームがカバーするプロダクト・言語
    ● Docker
    ● Kubernetes
    ● Helm
    ● PHP / Laravel
    ● Golang
    ● Redis (Cluster)
    ● RabbitMQ
    … and more.
    1. 主要技術

    View Slide

  16.           COLOPL, Inc. All Rights Reserved
    2. Spinnakerおさらい
    16

    View Slide

  17.           COLOPL, Inc. All Rights Reserved
    Spinnakerは動画配信サービスを手がけているNetflixが開発し、
    2015年にOSSとして公開しているContinuous Deliveryツールです。
    GUIベースでKubernetesへのデリバリを操作できます。
    Pipelineという単位でTrigger(イベント)とStage(タスク)を設定
    することで、オペレーションを定義でき、
    オペレーション実行時の状態をモニタリングすることもできます
    17
    2. Spinnakerとは
    https://www.spinnaker.io/

    View Slide

  18.           COLOPL, Inc. All Rights Reserved
    Appendix) 参考書籍
    2019/7/12に発売された
    「Kubernetes実践ガイド(インプレス ブックス)」が
    日本語で一番Spinnakerに詳しく書かれています。
    Spinnakerの構築から始まり、
    Red/Black(Blue/Green) デプロイメント
    Canary デプロイメント
    について詳しく載っています。
    18
    https://book.impress.co.jp/books/1118101053

    View Slide

  19.           COLOPL, Inc. All Rights Reserved
    19
    2. Spinnaker - ApplicationとPipeline
    Application 1
    Pipeline 1
    Stage 1
    Stage 2
    Pipeline 2
    Stage 1
    Stage 2
    Application 2
    Pipeline 1
    Stage 1
    Stage 2
    Pipeline 2
    Stage 1
    Stage 2
    Application:
    Webサービス
    Pipeline:
    Stageの固まり
    Stage:
    実行ジョブ

    View Slide

  20.           COLOPL, Inc. All Rights Reserved
    Spinnakerが提供しているStageを組み合わせることで
    Pipelineを構築します。
    Kubernetes Provider V2ではKubernetesのマニフェスト
    ベースでDeploy Stageを実行できます
    20
    2. Spinnaker - Pipeline
    https://www.spinnaker.io/concepts/

    View Slide

  21.           COLOPL, Inc. All Rights Reserved
    21
    2. Spinnaker - ClusterとServerGroup
    https://www.spinnaker.io/concepts/
    Cluster:
    Kubernetesでいう
    Deployment
    Server Group:
    Kubernetesでいう
    Replicaset

    View Slide

  22.           COLOPL, Inc. All Rights Reserved
    22
    2. Spinnaker - Deploy Strategy
    https://www.spinnaker.io/concepts/

    View Slide

  23.           COLOPL, Inc. All Rights Reserved
    Deck: UI
    Gate: API Gateway
    Rosco: Image Baker
    Igor: Trigger
    Echo: Event Bus
    Orca: Orchestrator
    Front50: Metadata Holder
    Clouddriver: Cloud Resource
    Fiat: Authn / Authz
    23
    2. Spinnaker - MicroService Archtecture
    https://www.spinnaker.io/reference/architecture/

    View Slide

  24.           COLOPL, Inc. All Rights Reserved
    3. CI/CD Pipeline全体概要
    24

    View Slide

  25.           COLOPL, Inc. All Rights Reserved
    25
    Image Build
    GitLab + Runner
    Push
    Image Bake
    Deploy
    Google Container Registry
    Spinnaker
    GKE
    3. Server Side CI/CD Overview

    View Slide

  26.           COLOPL, Inc. All Rights Reserved
    CIの改善として、Docker Meetup Tokyo #31で取り組んだ
    Dockerビルドの改善について次のタイトルで話しました。
    BuildKitを利用して、複数環境向けのイメージをステージで分割
    した内容やマルチステージ×Buildkitについて紹介しています。
    職場のDocker環境の改善(by Buildkit)
    26
    Appendix) Dockerビルドの改善について
    https://speakerdeck.com/govargo/improve-docker-image-by-buildkit

    View Slide

  27.           COLOPL, Inc. All Rights Reserved
    27
    3. CI/CD Flow

    View Slide

  28.           COLOPL, Inc. All Rights Reserved
    28
    3. CI処理フロー

    View Slide

  29.           COLOPL, Inc. All Rights Reserved
    • アプリケーションのソースコードをDockerイメージ化
    • ビルドした Dockerイメージをレジストリ(GCR)にPush
    • Helm templateで生成したK8sマニフェスト郡をストレージ
    (GCS)へアップロード
    ※ Spinnakerが参照するマニフェスト
    • アセット(キャラデータ・背景・音声などのゲームリソース)をスト
    レージ(S3)にアップロード
    29
    3. CI処理フロー詳細
    GCR: Google Container Registry
    GCS: Google Cloud Storage

    View Slide

  30.           COLOPL, Inc. All Rights Reserved
    30
    3. CI処理フロー

    View Slide

  31.           COLOPL, Inc. All Rights Reserved
    31
    3. CI処理フロー

    View Slide

  32.           COLOPL, Inc. All Rights Reserved
    32
    3. CI処理フロー

    View Slide

  33.           COLOPL, Inc. All Rights Reserved
    33
    3. CI処理フロー

    View Slide

  34.           COLOPL, Inc. All Rights Reserved
    34
    3. CI処理フロー
    Spinnakerデプロイは 5章で後述します

    View Slide

  35.           COLOPL, Inc. All Rights Reserved
    4. ソース管理
    マニフェスト管理
    35

    View Slide

  36.           COLOPL, Inc. All Rights Reserved
    36
    Mono Repository Multi Repository
    or
    4. アプリケーションソース
    アプリケーション ソース
    インフラ マニフェスト
    アプリケーション ソース
    インフラ マニフェスト

    View Slide

  37.           COLOPL, Inc. All Rights Reserved
    37
    Mono Repository Multi Repository
    or
    4. アプリケーションソース
    アプリケーション ソース
    インフラ マニフェスト
    アプリケーション ソース
    インフラ マニフェスト

    View Slide

  38.           COLOPL, Inc. All Rights Reserved
    ソースコードはGitFlowで管理しています。
    ゲームならではの特徴は、イベントのソース管理です。
    38
    4. アプリケーションソース管理
    master
    hotfix
    develop
    feature
    feature/event1
    feature/event2
    feature/event3
    and more...

    View Slide

  39.           COLOPL, Inc. All Rights Reserved
    インフラマニフェストは、アプリケーションソースとは別のリポジトリで
    管理しています。
    管理対象はKubernetesのマニフェストがメインになりますが、
    Helmを使っているため、Chartがその対象になります。
    ・Helm Chart
    39
    4. インフラマニフェスト管理
    ※ChartはKubernetesマニフェストを
     まとめたテンプレートです
    https://helm.sh/
    Helm: Kubernetesのパッケージマネージャー

    View Slide

  40.           COLOPL, Inc. All Rights Reserved
    5. コロプラとSpinnaker
    40

    View Slide

  41.           COLOPL, Inc. All Rights Reserved
    41
    5. Spinnakerとの出会い
    GKE + Spanner環境
    開発スタート
    2018年から利用し始めて、本番運用も含めて1年くらいが
    経過しました。
    2018/03 2018/08
    GKE + Spanner環境
    本番環境開始
    2019/07
    2018/10
    V1 V2
    GKE + Spanner2作目以降... 鋭意運用中
    検証開始
    V1
    V2(beta)
    2017

    View Slide

  42.           COLOPL, Inc. All Rights Reserved
    42
    5. Spinnaker per Cluster
    K8s Cluster : Spinnaker = 1: 1
    APP1 APP2 APP3
    + + +

    View Slide

  43.           COLOPL, Inc. All Rights Reserved
    Spinnakerの代表的な構築方法には
    1. Halyardでインストール
    2. Helm Chartでインストール
    の2種類があります。
    コロプラでは1のHalyardでSpinnakerの構築を行なっており、
    HA構成をとっています。
    ※GCPでは「Spinnaker for GCP」を利用する方法もあります
    43
    5. Spinnaker構築方法
    HA構成:
    https://www.spinnaker.io/reference/halyard/high-availability/

    View Slide

  44.           COLOPL, Inc. All Rights Reserved
    コロプラではSpinnakerのパラメータをチューニングしています
    (以下、抜粋)。
    その他 Clouddriver・EchoのHA化
    RedisのMaster/Slave構成化などを行なっています
    44
    5. カスタマイズ
    kubernetes.kubectl.poll.timeoutMillis: 1000000
    window.spinnakerSettings.onDemandClusterThreshold = 10000
    spinnaker.pollingSafeguard.itemUpperThreshold: 10000
    .hal/default/profiles/clouddriver-local.yaml
    .hal/default/profiles/settings-local.js
    .hal/default/profiles/igor-local.yaml
    kubectlの操作タイムアウト時間
    画面表示の上限
    Dockerイメージタグの取得上限

    View Slide

  45.           COLOPL, Inc. All Rights Reserved
    Spinnakerのユーザー認証は、Google認証を使っています。
    ユーザー認可(アプリケーションごとの権限)は
    Google Groupを用いて実現しています。
    45
    5. 認証
    認可

    View Slide

  46.           COLOPL, Inc. All Rights Reserved
    Fiatは認証/認可を司るコンポーネントです。
    次の認証方法と連携可能です。
    ・Google Groups
    ・GitHub Teams
    ・LDAP
    ・File based role provider
    参考: https://www.spinnaker.io/setup/security/authorization/
    46
    アプリケーションごとのパーミッション設定
    Appendix) Fiat

    View Slide

  47.           COLOPL, Inc. All Rights Reserved
    一番多いタイトルでは、27ものPipelineがあります...
    コロプラで構築しているPipelineには次のものがあります。
    ・Dev, Staging, Prodなどの環境を構築するPipeline
    ・Dev, Staging, Prodなどの環境をスケールインするPipeline
    ・KubernetesへアプリケーションをデプロイするPipeline
    ・DBの洗い替え(スキーマ・マスタデータ)をするPipeline
    環境を構築するPipelineについては6章にて後述します
    47
    5. Pipelines

    View Slide

  48.           COLOPL, Inc. All Rights Reserved
    48
    5. Deploy Pipeline

    View Slide

  49.           COLOPL, Inc. All Rights Reserved
    5. Deploy Pipeline
    49
    GCRにdevXXまたはstgXXといったタグのついたDocker
    イメージがPushされると、Spinnakerが自動検知しPipelineがス
    タートします。
    ※ Pipelineの手動実行も可能

    View Slide

  50.           COLOPL, Inc. All Rights Reserved
    5. Deploy Pipeline(Dev/Stg)
    50
    RollingUpdateによるカナリアリリースが実行されます。
    マニフェストはGCS上
    を読み込む

    View Slide

  51.           COLOPL, Inc. All Rights Reserved
    5. Deploy Pipeline(Prod)
    51
    ProductionへはJudgementを含めたカナリアリリース
    ※画像はイメージ

    View Slide

  52.           COLOPL, Inc. All Rights Reserved
    6. 複数環境の構築・管理
    52

    View Slide

  53.           COLOPL, Inc. All Rights Reserved
    環境は大きく分けて、Dev・Staging・Productionの三面があり
    ます。
    Dev環境やStaging環境では、さらに環境内に複数のサーバー
    が存在します。
    例:
    DEV1: 共用環境
    DEV2: デバッグ確認環境
    DEV3: イベントA環境
    DEV4: 新機能確認環境
    ….
    53
    6. ゲーム開発・運用におけるサーバー事情
    STG1: QA環境
    STG2: デバッグ確認環境
    STG3: アプリ申請用環境
    ...

    View Slide

  54.           COLOPL, Inc. All Rights Reserved
    DEV1〜3までが存在していて、
    新しい環境(DEV4)が必要になったケース
    54
    6. VM時代の環境引き渡し
    DEV1 DEV2 DEV3
    サーバエンジニア
    環境ください

    View Slide

  55.           COLOPL, Inc. All Rights Reserved
    インフラエンジニアがサーバを新しく立てて
    引き渡しをしていました。
    55
    6. VM時代の環境引き渡し
    DEV1 DEV2 DEV3
    サーバエンジニア
    DEV4
    インフラエンジニア
    どうぞ

    View Slide

  56.           COLOPL, Inc. All Rights Reserved
    Kubernetes × Spinnakerの環境では
    Gitでブランチを作るだけで、新しい環境ができます。
    リードタイムが 〜数日 → 2,30分ほどに短縮されました
    56
    6. クラウドネイティブ時代の環境引き渡し
    DEV1
    DEV2
    DEV3
    DEV4
    deploy/dev4 branch作成
    dev_create pipeline
    作成
    サーバエンジニア

    View Slide

  57.           COLOPL, Inc. All Rights Reserved
    ・Namespace作成
    ・ミドルウェア(Redis, Rabbitmq, MySQLなど)構築
    ・アプリケーションデプロイ
    ・DB洗い替え(スキーマ作成・初期データ投入)
    ・Ingressデプロイ
    ・待ち合わせ処理
    静的アドレスの予約やDNSの登録などはGitLab CIと組み合わせて実行しておく
    57
    6. dev_create pipeline

    View Slide

  58.           COLOPL, Inc. All Rights Reserved
    7. Spinnakerの闇と光
    58

    View Slide

  59.           COLOPL, Inc. All Rights Reserved

    ・たまに挙動が不安定
    ・仕組みが複雑
    ・情報が少なめ
    ・障害調査が難しい
    ・GUIベース(jsonもできるが..)
    59
    7. Spinnakerの闇と光

    ・宣言的にデプロイが可能
    ・Pipeline構築が容易
    ・GUIで進捗確認可能
    ・ロールバックが容易
    ・環境構築・縮小が容易に

    View Slide

  60.           COLOPL, Inc. All Rights Reserved
    たまに挙動が不安定
    ・DockerイメージのタグやK8s Namespaceが表示されない
    → Clouddriverでエラーが出ている
    → Cloud Platform側のAPIでTimeoutが発生したため...
    対象方法:
    ClouddriverのPodをdeleteして、プロセスを再起動
    60
    7. Spinnakerの闇

    View Slide

  61.           COLOPL, Inc. All Rights Reserved
    情報が少なめ・障害調査が難しい
    ・不可解な挙動やエラーが発生
    → Spinnakerをローカル上に構築して、
    怪しい箇所をひたすらデバッグ...
    対象方法:
    Groovyで書かれているので、IntelliJでデバッグをします
    61
    7. Spinnakerの闇

    View Slide

  62.           COLOPL, Inc. All Rights Reserved
    ServiceAccount(kubeconfig)道連れ問題
    KubernetesクラスタのServiceAccountが追加された状態で、
    そのクラスタを一度消して作り直すと、Spinnakerが参照する他の
    クラスタも含めて道連れで、デプロイができなくなる
    例)DEV Custer/STG Clusterがある時に、DEV Clusterを削除すると
    STG Clusterにもデプロイできなくなる
    対象方法:
    該当のサービスアカウントをSpinnakerから消して、
    hal deploy apply
    62
    7. Spinnakerの闇

    View Slide

  63.           COLOPL, Inc. All Rights Reserved
    インフラエンジニア
    ・コードを書かずにPipelineが容易に構築できる
    ・Immutable Infrastructureが実現
    アプリケーションエンジニア
    ・VM時代に比べてデプロイの仕組みが複雑になった
    ・昔はSSHして、直接コード修正できたのに...
    63
    7. Spinnaker活用した所感
    VM時代
    ソースをrsync
    踏み台サーバー アプリケーションサーバー

    View Slide

  64.           COLOPL, Inc. All Rights Reserved
    64
    Git Push
    CI
    CD
    AS-IS
    Source
    Change
    Confirmation
    a few minitues
    TO-BE
    Source
    Change
    Good: Immutable Infrastructure
    Bad: Long Lead Time

    Confirmation
    Git Push
    CI
    CD

    Good: Immutable Infrastructure
    Bad: Long Lead Time
    a few minitues
    7. CI/CDとは別の仕組みで検討していること
    アプリケーションエンジニアの開発を向上させる仕組み

    View Slide

  65.           COLOPL, Inc. All Rights Reserved
    - まとめ -
    ・Spinnakerは主要なデプロイ戦略をPipelineで構築できます
    ・インフラの環境提供が簡潔化しました
    ・パッチではなくマニフェストベースなので、宣言的な
     デプロイが可能です
    ・不可解な挙動やエラーとは闘っていく覚悟が必要です
    - 今後取り組みたいこと -
    ・自動カナリア分析を導入したいです
    → まずは取るべきメトリクスの選定から
    65
    7. まとめ +今後取り組みたいこと

    View Slide

  66.           COLOPL, Inc. All Rights Reserved
    66
    Thank you for listening.
    We are Hiring!

    View Slide