Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

          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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

          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

Slide 11

Slide 11 text

          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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

          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. 主要技術

Slide 15

Slide 15 text

          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. 主要技術

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

          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

Slide 19

Slide 19 text

          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: 実行ジョブ

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

          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/

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

          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

Slide 26

Slide 26 text

          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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

          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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

          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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

          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/

Slide 44

Slide 44 text

          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イメージタグの取得上限

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

          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

Slide 47

Slide 47 text

          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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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

Slide 50

Slide 50 text

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

Slide 51

Slide 51 text

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

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

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

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

          COLOPL, Inc. All Rights Reserved ・たまに挙動が不安定 ・仕組みが複雑 ・情報が少なめ ・障害調査が難しい ・GUIベース(jsonもできるが..) 59 7. Spinnakerの闇と光 ・宣言的にデプロイが可能 ・Pipeline構築が容易 ・GUIで進捗確認可能 ・ロールバックが容易 ・環境構築・縮小が容易に

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

          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の闇

Slide 63

Slide 63 text

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

Slide 64

Slide 64 text

          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とは別の仕組みで検討していること アプリケーションエンジニアの開発を向上させる仕組み

Slide 65

Slide 65 text

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

Slide 66

Slide 66 text

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