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

C174e1ef0c746f53d989b1902b4e674e?s=47 go_vargo
July 25, 2019

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

C174e1ef0c746f53d989b1902b4e674e?s=128

go_vargo

July 25, 2019
Tweet

Transcript

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

    Meetup Tokyo #21 1
  2.           COLOPL, Inc. All Rights Reserved 名前: 磯 賢大(@go_vargo) 所属:

    株式会社コロプラ インフラグループ 第2チーム 職務内容: Kubernetes環境を良い感じにする 最近の趣味: Kubernetesカスタムコントローラ作りに挑戦 執筆: 実践Helm 2 自己紹介
  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
  4.           COLOPL, Inc. All Rights Reserved 4 アジェンダ 1. 技術スタック

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

    5
  6.           COLOPL, Inc. All Rights Reserved 6 1. Game Application

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

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

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

    Tenant Multi Tenant APP1 APP2 APP3 APP1 APP2 APP3 or
  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
  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
  12.           COLOPL, Inc. All Rights Reserved 1. GKE + Spanner

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

    基本構成 13
  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. 主要技術
  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. 主要技術
  16.           COLOPL, Inc. All Rights Reserved 2. Spinnakerおさらい 16

  17.           COLOPL, Inc. All Rights Reserved Spinnakerは動画配信サービスを手がけているNetflixが開発し、 2015年にOSSとして公開しているContinuous Deliveryツールです。 GUIベースでKubernetesへのデリバリを操作できます。

    Pipelineという単位でTrigger(イベント)とStage(タスク)を設定 することで、オペレーションを定義でき、 オペレーション実行時の状態をモニタリングすることもできます 17 2. Spinnakerとは https://www.spinnaker.io/
  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
  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: 実行ジョブ
  20.           COLOPL, Inc. All Rights Reserved Spinnakerが提供しているStageを組み合わせることで Pipelineを構築します。 Kubernetes Provider

    V2ではKubernetesのマニフェスト ベースでDeploy Stageを実行できます 20 2. Spinnaker - Pipeline https://www.spinnaker.io/concepts/
  21.           COLOPL, Inc. All Rights Reserved 21 2. Spinnaker -

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

    Deploy Strategy https://www.spinnaker.io/concepts/
  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/
  24.           COLOPL, Inc. All Rights Reserved 3. CI/CD Pipeline全体概要 24

  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
  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
  27.           COLOPL, Inc. All Rights Reserved 27 3. CI/CD Flow

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

  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
  30.           COLOPL, Inc. All Rights Reserved 30 3. CI処理フロー

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

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

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

  34.           COLOPL, Inc. All Rights Reserved 34 3. CI処理フロー Spinnakerデプロイは

    5章で後述します
  35.           COLOPL, Inc. All Rights Reserved 4. ソース管理 マニフェスト管理 35

  36.           COLOPL, Inc. All Rights Reserved 36 Mono Repository Multi

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

    Repository or 4. アプリケーションソース アプリケーション ソース インフラ マニフェスト アプリケーション ソース インフラ マニフェスト
  38.           COLOPL, Inc. All Rights Reserved ソースコードはGitFlowで管理しています。 ゲームならではの特徴は、イベントのソース管理です。 38 4.

    アプリケーションソース管理 master hotfix develop feature feature/event1 feature/event2 feature/event3 and more...
  39.           COLOPL, Inc. All Rights Reserved インフラマニフェストは、アプリケーションソースとは別のリポジトリで 管理しています。 管理対象はKubernetesのマニフェストがメインになりますが、 Helmを使っているため、Chartがその対象になります。

    ・Helm Chart 39 4. インフラマニフェスト管理 ※ChartはKubernetesマニフェストを  まとめたテンプレートです https://helm.sh/ Helm: Kubernetesのパッケージマネージャー
  40.           COLOPL, Inc. All Rights Reserved 5. コロプラとSpinnaker 40

  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
  42.           COLOPL, Inc. All Rights Reserved 42 5. Spinnaker per

    Cluster K8s Cluster : Spinnaker = 1: 1 APP1 APP2 APP3 + + +
  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/
  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イメージタグの取得上限
  45.           COLOPL, Inc. All Rights Reserved Spinnakerのユーザー認証は、Google認証を使っています。 ユーザー認可(アプリケーションごとの権限)は Google Groupを用いて実現しています。

    45 5. 認証 認可
  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
  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
  48.           COLOPL, Inc. All Rights Reserved 48 5. Deploy Pipeline

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

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

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

    ProductionへはJudgementを含めたカナリアリリース ※画像はイメージ
  52.           COLOPL, Inc. All Rights Reserved 6. 複数環境の構築・管理 52

  53.           COLOPL, Inc. All Rights Reserved 環境は大きく分けて、Dev・Staging・Productionの三面があり ます。 Dev環境やStaging環境では、さらに環境内に複数のサーバー が存在します。

    例: DEV1: 共用環境 DEV2: デバッグ確認環境 DEV3: イベントA環境 DEV4: 新機能確認環境 …. 53 6. ゲーム開発・運用におけるサーバー事情 STG1: QA環境 STG2: デバッグ確認環境 STG3: アプリ申請用環境 ...
  54.           COLOPL, Inc. All Rights Reserved DEV1〜3までが存在していて、 新しい環境(DEV4)が必要になったケース 54 6.

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

    VM時代の環境引き渡し DEV1 DEV2 DEV3 サーバエンジニア DEV4 インフラエンジニア どうぞ
  56.           COLOPL, Inc. All Rights Reserved Kubernetes × Spinnakerの環境では Gitでブランチを作るだけで、新しい環境ができます。

    リードタイムが 〜数日 → 2,30分ほどに短縮されました 56 6. クラウドネイティブ時代の環境引き渡し DEV1 DEV2 DEV3 DEV4 deploy/dev4 branch作成 dev_create pipeline 作成 サーバエンジニア
  57.           COLOPL, Inc. All Rights Reserved ・Namespace作成 ・ミドルウェア(Redis, Rabbitmq, MySQLなど)構築

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

  59.           COLOPL, Inc. All Rights Reserved ・たまに挙動が不安定 ・仕組みが複雑 ・情報が少なめ ・障害調査が難しい

    ・GUIベース(jsonもできるが..) 59 7. Spinnakerの闇と光 ・宣言的にデプロイが可能 ・Pipeline構築が容易 ・GUIで進捗確認可能 ・ロールバックが容易 ・環境構築・縮小が容易に
  60.           COLOPL, Inc. All Rights Reserved たまに挙動が不安定 ・DockerイメージのタグやK8s Namespaceが表示されない →

    Clouddriverでエラーが出ている → Cloud Platform側のAPIでTimeoutが発生したため... 対象方法: ClouddriverのPodをdeleteして、プロセスを再起動 60 7. Spinnakerの闇
  61.           COLOPL, Inc. All Rights Reserved 情報が少なめ・障害調査が難しい ・不可解な挙動やエラーが発生 → Spinnakerをローカル上に構築して、

    怪しい箇所をひたすらデバッグ... 対象方法: Groovyで書かれているので、IntelliJでデバッグをします 61 7. Spinnakerの闇
  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の闇
  63.           COLOPL, Inc. All Rights Reserved インフラエンジニア ・コードを書かずにPipelineが容易に構築できる ・Immutable Infrastructureが実現

    アプリケーションエンジニア ・VM時代に比べてデプロイの仕組みが複雑になった ・昔はSSHして、直接コード修正できたのに... 63 7. Spinnaker活用した所感 VM時代 ソースをrsync 踏み台サーバー アプリケーションサーバー
  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とは別の仕組みで検討していること アプリケーションエンジニアの開発を向上させる仕組み
  65.           COLOPL, Inc. All Rights Reserved - まとめ - ・Spinnakerは主要なデプロイ戦略をPipelineで構築できます

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

    listening. We are Hiring!