SlideShare a Scribd company logo
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Jun 9, 2018
Spring_MT
DeNA Co., Ltd.
Rails on GKEで運用するWebアプリケーションの紹介
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
自己紹介
• 自己紹介
2
 2008年 DeNA入社
 2010年 エンジニアになる
 2011年 DeNA退社 -> 福岡へ
 2013年 DeNAに出戻り
 2016年 ゲーム事業本部
 2017年 コマース&インキュベーション事業本部
GitHub https://github.com/SpringMT
Twitter https://twitter.com/Spring_MT
@Spring_MT
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
開発チーム
スモールスタート
• フロント1名
• サーバー・インフラ1名
3
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
機能開発に集中するために
4
• 機能開発以外のやることを減らしたい
• 運用業務をシンプルにしたい
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
5
今回お話する内容
https://builderscon.io/tokyo/2018/session/b87465f5-4a05-4a6b-85c6-a50ab205dc27
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
今回お話する内容
6
モノリシックな作り
APIファースト
本番環境と同じ開発環境
サービスのコンテンツデータの運用
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
目次
環境のギャップをなくす
• Dockerを使ったイメージベースの成果物
• 設定ファイルの管理
• 反映方法
構成のギャップをなくす
• Kubernetes(GKE)
• その他
まとめ
7
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
コードベースを同じに
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Dockerを使ったイメージベースの成果物管理
コードベースを同じに
• イメージを作成したら変えない
• ビルドは一回
• ddとか使ってバイナリをいじるようなことはしない
• 起動時にコードを追加するなどもしない
• 検証環境・本番環境でも動くようなイメージの構成にする
• なにも手を加えずに検証環境から本番環境にイメージを
移行させる
9
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
検証環境と本番環境でGCPのプロジェクトをわける
コードベースを同じに
• 検証環境と本番環境を完全に分離する
• 検証環境はQA専任チームなど別チームも閲覧・操作する
• 本番環境は開発者のみ
• この2つを行き来できるのはDockerのイメージのみ
アプリケーションのデータ運用(マスターデータ・アセット)は
最初から考えておく
10
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Dockerのイメージの構成
コードベースを同じに
• 3種類のイメージにわけて作成
• 設定ファイルなどは全てのイメージに含まれる
11
├ api
├ DB_Schema
├ 管理ツール
├ config(subtree)
├ shared
API DB Schema 管理ツール
├ api
├ config(subtree)
├ shared
├ DB Schema
├ config(subtree)
├ shared
├ 管理ツール
├ config(subtree)
├ shared
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Dockerのイメージの構成
コードベースを同じに
• stretchベース (NOT alpine)
glibcがなくて、stackdriver(の中のgrpc)のgemがビルドできない
12
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Docker registry
コードベースを同じに
Dockerの社内registryは自前で用意はしない
Googleのパワーを借りる
• Google Container Builder
• Google Container Registry
13
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
社内リソースとの連携
コードベースを同じに
Container Builderを使うための調整
• GitHub:Enterprise、CircleCI Enterprise、社内rubygemsがある
• Container BuilderはGH:EにはアクセスできないのでGoogle Source
Repositoryを経由する
• 社内rubygemsは利用しない(社内gemは使わない)
• 使う場合はレポジトリに直接subtree等で取り込むことを想定
14
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
15
Dockerのイメージ作成フロー
コードベースを同じに
テストが通ったブランチは全部イメージを作る
Developers
Cloud Source
Repositories
Container
Registry
Container
Builder
HookPush
テスト実行
Push
DeNA
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Dockerのイメージ作成
コードベースを同じに
CircleCIからSource Repositoryへpush
16
deploy:
machine:
enabled: true
steps:
- checkout
- run:
command: echo "${LIVE_SB_NETRC}" > ~/.netrc
- run:
command: git remote add google https://source.developers.google.com/p/sample/r/server
- run:
command: git push google "${CIRCLE_BRANCH}"
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Dockerのイメージ作成
17
コードベースを同じに
Container BuilderではDockerfile指定だけ
• 凝ったことは特にしていない
• 1プロジェクトあたり10件の同時ビルドが可能
• 本プロジェクトでは3つは同時にビルドしたい
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
本番環境へのイメージの移行
コードベースを同じに
検証環境でテストしたイメージをそのまま本番環境に移行
• gcloudコマンドでGCPのプロジェクトを超えて持っていける
• gcloud container images add-tag
18
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Rails
コードベースを同じに
RAILS_ENV
• 検証環境・本番環境はproductionで統一
• 環境を規定するために別の環境変数を用意
• Docker起動時に設定を読み込む
19
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Rails
コードベースを同じに
20
ENV RAILS_ENV production
# Use EntryKit
ENTRYPOINT [ 
"prehook", "ruby -v", "--", 
"prehook", "bundle exec ruby shared/scripts/setup.rb", "--",
"switch", 
"shell=/bin/sh", 
"rails_c=bundle exec rails c", 
"rails_db=bundle exec rails db", 
"rails_s=bundle exec rails s -b 0.0.0.0", "--", 
"bundle", "exec", "unicorn_rails", "-c", "config/unicorn/production.rb" ]
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
Rails
コードベースを同じに
サーバーの設定
config用のレポジトリを用意し、subtreeで取り込み
Logは標準出力に
stackdriver loggingで回収 -> exportして各処理へ
パフォーマンス測定
本番環境はstackdriver trace
検証環境はstackdriver traceに加えてstackprofでも確認する
21
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
22
Rails
コードベースを同じに
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
構成を同じに
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
サーバーの構成を同じに
構成を同じに
kubernetes(GKE)を使った構築
Dockerのイメージの動作環境という視点でまずは選定
その上で
• 構成をそろえやすい
• 少人数でも管理・運用しやすい
24
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
kubernetesの管理
構成を同じに
設定はyamlで管理
• 規模感的にまだHemlとかを導入するほどでもない
• kustomizeは検討中
• Service + HPA + Deploymentで一つのyamlにまとめている
• 環境ごとの差分はなるべく少なく
• replicasの数くらいが差分になっている
25
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
kubernetesの構成
構成を同じに
ConfigMapとSecret
• 環境変数(ConfigMap、Secret)とアプリ内でもつ設定の分離
• 秘密情報は全てSecretを使って環境変数経由で受け渡す
• アプリケーションの設定情報はコードに含め環境変数で受け渡すことは基
本的にしない
• unicornのworker数などこまめに調整する数値のみ環境変数で管理
26
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
kubernetesの構成
構成を同じに
Service、HPA、Deployment
• API、管理ツール等ではreplicas以外の差はない
• HPAの設定、deploymentのProbeの設定を忘れずに
• graceful shutdownとスケーリングをちゃんと設定しておく
• 負荷試験時にイメージの更新を挟むことで確認
27
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
28
全体の構成
構成を同じに
Monitoring
Logging
Cloud Load
Balancing Cloud
SQL
Trace
Error
Reporting
Frontend
API
管理ツール
Cloud
Storage
Container Engine
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
GKEの設定
構成を同じに
バージョン
• v1.10.5を利用
• stackdriver monitoring v2を利用したかった
29
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
GKEの設定
構成を同じに
本番環境ではマスター承認済みのネットワークを設定
• 社内のgatewayサーバーからのみアクセスできる
deployサーバー(GCE)を用意してそこからのみkubectlが打てる
• gatewayサーバーにはttyrecが仕込んであり
監査用にログが残してある
• 検証環境はローカルマシンからkubectlを打てる
30
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
GKEの設定
構成を同じに
限定公開クラスタは無効
• CloudSQLがプライベートGoogleアクセスに対応していない
• https://cloud.google.com/vpc/docs/private-google-access
• アプリケーションからは結局Cloud SQL Proxy経由でアクセス
31
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
GKEの設定
構成を同じに
ノードの自動スケーリングは開発環境はon 本番環境はoff
• スケールするときにサービス断の可能性あり
32
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
GKEの設定
構成を同じに
権限管理
• google group + IAMで管理が基本
• 本番環境と検証環境を分けており、本番環境には入れる人を絞っている
• kubernetesのRBACはまだ使ってない
33
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
GKEの設定
構成を同じに
Preemptible VM
• 検証環境は全てPreemptible
• コストダウンともに、環境が常に新しくdisposableであることの確認が可
能
34
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
kubernetesを使ったメリット
構成を同じに
DNSの管理からの開放
• MyDNSと決別
プロセスがおちたら自動的に再起動
• daemontoolsと決別
35
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
kubernetesを使ったメリット
構成を同じに
Horizonatal Pod Autoscaler
• 自動でpodの数を調整してくれる
• 負荷試験ではテストしているが、リリース後からは発動してない
36
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
kubernetesのデメリット
構成を同じに
比較になるが、GAE/Goほどシンプルではないかも…
• 管理するものが多い印象
37
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
ハマったこと
構成を同じに
CronJob
• sidecarがあるとsidecarが終わらない問題
• v1.10.5未満だと失敗したjobが延々とリトライし続ける問題があった(解消済)
graceful shutdownできていない
• CloudSQL ProxyのpreStopの設定
38
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
ハマったこと
構成を同じに
DBスキーマの適用
• スキーマ管理はridgepoleを採用
• スキーマ適用用のpodを上げてそこのpodに入ってコマンドを打つ
39
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
改善したいポイント
構成を同じに
検証環境のクラスターをまとめる
• 検証環境毎にクラスターを作っているので、ここをまとめて環境を作りや
すくする
40
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
GCPで使っているサービス(GKE以外)
構成を同じに
• CloudSQL
• stackdriver
• dataflow
• BigQuery
• GCS
• CloudFunction
41
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
GCP以外に使っているサービス
構成を同じに
AWS
• SES
• メールだけはどうしようもなかった。。
Fastly
• CDNとimage optimizer
• image optimizerで画像の配信を柔軟に行っている
42
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
実績
まとめ
コードの差によるバグ
• 1件
• デバッグ機能をoffにする条件分岐
構成の差によるバグ
• なし
運用は今の所一人でも大丈夫
43
Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
まとめ
まとめ
• Dockerやkubernetesを使って簡単に一貫性のある環境を
構築することができた
• その結果、環境起因による不具合を抑えることができて
いる(と思う)
44

More Related Content

PDF
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11
PPTX
システム制御とディープラーニング
PDF
CycleGANについて
PDF
【DL輪読会】NeRF-VAE: A Geometry Aware 3D Scene Generative Model
PDF
NIPS2013読み会 DeViSE: A Deep Visual-Semantic Embedding Model
PDF
Convolutional Neural Netwoks で自然言語処理をする
PDF
[DL輪読会] Adversarial Skill Chaining for Long-Horizon Robot Manipulation via T...
PPTX
Neo4j の「データ操作プログラミング」から 「ビジュアライズ」まで
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11
システム制御とディープラーニング
CycleGANについて
【DL輪読会】NeRF-VAE: A Geometry Aware 3D Scene Generative Model
NIPS2013読み会 DeViSE: A Deep Visual-Semantic Embedding Model
Convolutional Neural Netwoks で自然言語処理をする
[DL輪読会] Adversarial Skill Chaining for Long-Horizon Robot Manipulation via T...
Neo4j の「データ操作プログラミング」から 「ビジュアライズ」まで

What's hot (20)

PDF
オブジェクト指向の設計と実装の学び方のコツ
PPTX
XXE、SSRF、安全でないデシリアライゼーション入門
PDF
TypeScript製フレームワーク「Nest」のご紹介
PDF
イマドキのExcelスクショの撮り方
PDF
ドメインオブジェクトの設計ガイドライン
PPTX
Deep Learningで似た画像を見つける技術 | OHS勉強会#5
PDF
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
PDF
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
PDF
DynamoDBを導入した話
PPT
社会人博士入試面接スライド(ヘテロ加速器環境でのデータストリームグラフ処理フレームワーク)
PPTX
GANの簡単な理解から正しい理解まで
PDF
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
PDF
顕著性マップの推定手法
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
PDF
Graph Attention Network
PDF
「ドメイン駆動設計」の複雑さに立ち向かう
PDF
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
PDF
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
PPTX
20160526 依存関係逆転の原則
オブジェクト指向の設計と実装の学び方のコツ
XXE、SSRF、安全でないデシリアライゼーション入門
TypeScript製フレームワーク「Nest」のご紹介
イマドキのExcelスクショの撮り方
ドメインオブジェクトの設計ガイドライン
Deep Learningで似た画像を見つける技術 | OHS勉強会#5
Aws Dev Day2021 「ドメイン駆動設計のマイクロサービスへの活用とデベロッパーに求められるスキル」参考資料(松岡パート)
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
DynamoDBを導入した話
社会人博士入試面接スライド(ヘテロ加速器環境でのデータストリームグラフ処理フレームワーク)
GANの簡単な理解から正しい理解まで
「内積が見えると統計学も見える」第5回 プログラマのための数学勉強会 発表資料
顕著性マップの推定手法
ドメイン駆動設計 ( DDD ) をやってみよう
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
Graph Attention Network
「ドメイン駆動設計」の複雑さに立ち向かう
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
20160526 依存関係逆転の原則
Ad

Similar to Rails on GKEで運用するWebアプリケーションの紹介 (20)

PPTX
Dangerでpull requestレビューの指摘事項を減らす
PPTX
技術選択とアーキテクトの役割
PDF
Airflowを広告データのワークフローエンジンとして運用してみた話
PPTX
サーバーレスで ガチ本番運用までやってるお話し
PDF
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
PDF
Gaming cicd-pipeline gaming-technight-2
PDF
YJTC18 A-1 大規模サーバの戦略
PDF
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
PDF
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
PPTX
「私のkintone 連携には何が最適?」CData Software ソリューションを使うケースは?
PPTX
devsami kansai 2012 #c2
PDF
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
PDF
2014-04-22 Ques #4 Automation Testing of Mobage Platform
PDF
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
PPTX
CData API Server ハンズオン
PDF
cndjp: 「Microclimate」by capsmalt
PDF
DeNA流cocos2d xとの付き合い方
PDF
GitHub Actions で CI/CD
PDF
Participation report of data stax accelerate 2019
PDF
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
Dangerでpull requestレビューの指摘事項を減らす
技術選択とアーキテクトの役割
Airflowを広告データのワークフローエンジンとして運用してみた話
サーバーレスで ガチ本番運用までやってるお話し
2021/03/19 パブリッククラウドを活かす運用プロセス自動化
Gaming cicd-pipeline gaming-technight-2
YJTC18 A-1 大規模サーバの戦略
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Spring Boot on Kubernetes : Yahoo!ズバトク事例 #jjug_ccc
「私のkintone 連携には何が最適?」CData Software ソリューションを使うケースは?
devsami kansai 2012 #c2
[External] 2021.12.15 コンテナ移行の前に知っておきたいこと @ gcpug 湘南
2014-04-22 Ques #4 Automation Testing of Mobage Platform
Java クライント実装におけるAPIスタイル頂上決戦! 野良REST vs GraphQL vs OData vs OpenAPI (Swagger)
CData API Server ハンズオン
cndjp: 「Microclimate」by capsmalt
DeNA流cocos2d xとの付き合い方
GitHub Actions で CI/CD
Participation report of data stax accelerate 2019
【17-E-4】GitHub Enterpriseユーザ企業登壇!企業文化にイノベーションを起こすモダンなソフトウェア開発環境とは?
Ad

More from Makoto Haruyama (14)

PDF
マイクロサービスっぽい感じの話
PDF
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
PDF
DeNAのゲーム開発を支える Game Backend as a Service
PDF
backbone.jsの使用例 その1
PDF
Fluentd in Co-Work
PDF
fluent-plugin-resque_stat
PDF
初心者エンジニアのシステム構築失敗談
KEY
初心者エンジニアの システム構築 失敗談
KEY
Mysql casual fukuoa_vlo_2
KEY
Yapc2012 ltthon
KEY
分散ファイルストレージ
KEY
Automation tech casual_talks_1_20120717
KEY
My sql casual_in_fukuoka_vol1
PPTX
20110622 haruyama webso]cket
マイクロサービスっぽい感じの話
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAのゲーム開発を支える Game Backend as a Service
backbone.jsの使用例 その1
Fluentd in Co-Work
fluent-plugin-resque_stat
初心者エンジニアのシステム構築失敗談
初心者エンジニアの システム構築 失敗談
Mysql casual fukuoa_vlo_2
Yapc2012 ltthon
分散ファイルストレージ
Automation tech casual_talks_1_20120717
My sql casual_in_fukuoka_vol1
20110622 haruyama webso]cket

Rails on GKEで運用するWebアプリケーションの紹介

  • 1. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Jun 9, 2018 Spring_MT DeNA Co., Ltd. Rails on GKEで運用するWebアプリケーションの紹介
  • 2. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 自己紹介 • 自己紹介 2  2008年 DeNA入社  2010年 エンジニアになる  2011年 DeNA退社 -> 福岡へ  2013年 DeNAに出戻り  2016年 ゲーム事業本部  2017年 コマース&インキュベーション事業本部 GitHub https://github.com/SpringMT Twitter https://twitter.com/Spring_MT @Spring_MT
  • 3. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 開発チーム スモールスタート • フロント1名 • サーバー・インフラ1名 3
  • 4. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 機能開発に集中するために 4 • 機能開発以外のやることを減らしたい • 運用業務をシンプルにしたい
  • 5. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 5 今回お話する内容 https://builderscon.io/tokyo/2018/session/b87465f5-4a05-4a6b-85c6-a50ab205dc27
  • 6. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 今回お話する内容 6 モノリシックな作り APIファースト 本番環境と同じ開発環境 サービスのコンテンツデータの運用
  • 7. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 目次 環境のギャップをなくす • Dockerを使ったイメージベースの成果物 • 設定ファイルの管理 • 反映方法 構成のギャップをなくす • Kubernetes(GKE) • その他 まとめ 7
  • 8. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. コードベースを同じに
  • 9. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Dockerを使ったイメージベースの成果物管理 コードベースを同じに • イメージを作成したら変えない • ビルドは一回 • ddとか使ってバイナリをいじるようなことはしない • 起動時にコードを追加するなどもしない • 検証環境・本番環境でも動くようなイメージの構成にする • なにも手を加えずに検証環境から本番環境にイメージを 移行させる 9
  • 10. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 検証環境と本番環境でGCPのプロジェクトをわける コードベースを同じに • 検証環境と本番環境を完全に分離する • 検証環境はQA専任チームなど別チームも閲覧・操作する • 本番環境は開発者のみ • この2つを行き来できるのはDockerのイメージのみ アプリケーションのデータ運用(マスターデータ・アセット)は 最初から考えておく 10
  • 11. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Dockerのイメージの構成 コードベースを同じに • 3種類のイメージにわけて作成 • 設定ファイルなどは全てのイメージに含まれる 11 ├ api ├ DB_Schema ├ 管理ツール ├ config(subtree) ├ shared API DB Schema 管理ツール ├ api ├ config(subtree) ├ shared ├ DB Schema ├ config(subtree) ├ shared ├ 管理ツール ├ config(subtree) ├ shared
  • 12. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Dockerのイメージの構成 コードベースを同じに • stretchベース (NOT alpine) glibcがなくて、stackdriver(の中のgrpc)のgemがビルドできない 12
  • 13. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Docker registry コードベースを同じに Dockerの社内registryは自前で用意はしない Googleのパワーを借りる • Google Container Builder • Google Container Registry 13
  • 14. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 社内リソースとの連携 コードベースを同じに Container Builderを使うための調整 • GitHub:Enterprise、CircleCI Enterprise、社内rubygemsがある • Container BuilderはGH:EにはアクセスできないのでGoogle Source Repositoryを経由する • 社内rubygemsは利用しない(社内gemは使わない) • 使う場合はレポジトリに直接subtree等で取り込むことを想定 14
  • 15. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 15 Dockerのイメージ作成フロー コードベースを同じに テストが通ったブランチは全部イメージを作る Developers Cloud Source Repositories Container Registry Container Builder HookPush テスト実行 Push DeNA
  • 16. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Dockerのイメージ作成 コードベースを同じに CircleCIからSource Repositoryへpush 16 deploy: machine: enabled: true steps: - checkout - run: command: echo "${LIVE_SB_NETRC}" > ~/.netrc - run: command: git remote add google https://source.developers.google.com/p/sample/r/server - run: command: git push google "${CIRCLE_BRANCH}"
  • 17. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Dockerのイメージ作成 17 コードベースを同じに Container BuilderではDockerfile指定だけ • 凝ったことは特にしていない • 1プロジェクトあたり10件の同時ビルドが可能 • 本プロジェクトでは3つは同時にビルドしたい
  • 18. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 本番環境へのイメージの移行 コードベースを同じに 検証環境でテストしたイメージをそのまま本番環境に移行 • gcloudコマンドでGCPのプロジェクトを超えて持っていける • gcloud container images add-tag 18
  • 19. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Rails コードベースを同じに RAILS_ENV • 検証環境・本番環境はproductionで統一 • 環境を規定するために別の環境変数を用意 • Docker起動時に設定を読み込む 19
  • 20. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Rails コードベースを同じに 20 ENV RAILS_ENV production # Use EntryKit ENTRYPOINT [ "prehook", "ruby -v", "--", "prehook", "bundle exec ruby shared/scripts/setup.rb", "--", "switch", "shell=/bin/sh", "rails_c=bundle exec rails c", "rails_db=bundle exec rails db", "rails_s=bundle exec rails s -b 0.0.0.0", "--", "bundle", "exec", "unicorn_rails", "-c", "config/unicorn/production.rb" ]
  • 21. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. Rails コードベースを同じに サーバーの設定 config用のレポジトリを用意し、subtreeで取り込み Logは標準出力に stackdriver loggingで回収 -> exportして各処理へ パフォーマンス測定 本番環境はstackdriver trace 検証環境はstackdriver traceに加えてstackprofでも確認する 21
  • 22. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 22 Rails コードベースを同じに
  • 23. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 構成を同じに
  • 24. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. サーバーの構成を同じに 構成を同じに kubernetes(GKE)を使った構築 Dockerのイメージの動作環境という視点でまずは選定 その上で • 構成をそろえやすい • 少人数でも管理・運用しやすい 24
  • 25. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. kubernetesの管理 構成を同じに 設定はyamlで管理 • 規模感的にまだHemlとかを導入するほどでもない • kustomizeは検討中 • Service + HPA + Deploymentで一つのyamlにまとめている • 環境ごとの差分はなるべく少なく • replicasの数くらいが差分になっている 25
  • 26. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. kubernetesの構成 構成を同じに ConfigMapとSecret • 環境変数(ConfigMap、Secret)とアプリ内でもつ設定の分離 • 秘密情報は全てSecretを使って環境変数経由で受け渡す • アプリケーションの設定情報はコードに含め環境変数で受け渡すことは基 本的にしない • unicornのworker数などこまめに調整する数値のみ環境変数で管理 26
  • 27. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. kubernetesの構成 構成を同じに Service、HPA、Deployment • API、管理ツール等ではreplicas以外の差はない • HPAの設定、deploymentのProbeの設定を忘れずに • graceful shutdownとスケーリングをちゃんと設定しておく • 負荷試験時にイメージの更新を挟むことで確認 27
  • 28. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 28 全体の構成 構成を同じに Monitoring Logging Cloud Load Balancing Cloud SQL Trace Error Reporting Frontend API 管理ツール Cloud Storage Container Engine
  • 29. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. GKEの設定 構成を同じに バージョン • v1.10.5を利用 • stackdriver monitoring v2を利用したかった 29
  • 30. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. GKEの設定 構成を同じに 本番環境ではマスター承認済みのネットワークを設定 • 社内のgatewayサーバーからのみアクセスできる deployサーバー(GCE)を用意してそこからのみkubectlが打てる • gatewayサーバーにはttyrecが仕込んであり 監査用にログが残してある • 検証環境はローカルマシンからkubectlを打てる 30
  • 31. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. GKEの設定 構成を同じに 限定公開クラスタは無効 • CloudSQLがプライベートGoogleアクセスに対応していない • https://cloud.google.com/vpc/docs/private-google-access • アプリケーションからは結局Cloud SQL Proxy経由でアクセス 31
  • 32. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. GKEの設定 構成を同じに ノードの自動スケーリングは開発環境はon 本番環境はoff • スケールするときにサービス断の可能性あり 32
  • 33. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. GKEの設定 構成を同じに 権限管理 • google group + IAMで管理が基本 • 本番環境と検証環境を分けており、本番環境には入れる人を絞っている • kubernetesのRBACはまだ使ってない 33
  • 34. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. GKEの設定 構成を同じに Preemptible VM • 検証環境は全てPreemptible • コストダウンともに、環境が常に新しくdisposableであることの確認が可 能 34
  • 35. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. kubernetesを使ったメリット 構成を同じに DNSの管理からの開放 • MyDNSと決別 プロセスがおちたら自動的に再起動 • daemontoolsと決別 35
  • 36. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. kubernetesを使ったメリット 構成を同じに Horizonatal Pod Autoscaler • 自動でpodの数を調整してくれる • 負荷試験ではテストしているが、リリース後からは発動してない 36
  • 37. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. kubernetesのデメリット 構成を同じに 比較になるが、GAE/Goほどシンプルではないかも… • 管理するものが多い印象 37
  • 38. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. ハマったこと 構成を同じに CronJob • sidecarがあるとsidecarが終わらない問題 • v1.10.5未満だと失敗したjobが延々とリトライし続ける問題があった(解消済) graceful shutdownできていない • CloudSQL ProxyのpreStopの設定 38
  • 39. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. ハマったこと 構成を同じに DBスキーマの適用 • スキーマ管理はridgepoleを採用 • スキーマ適用用のpodを上げてそこのpodに入ってコマンドを打つ 39
  • 40. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 改善したいポイント 構成を同じに 検証環境のクラスターをまとめる • 検証環境毎にクラスターを作っているので、ここをまとめて環境を作りや すくする 40
  • 41. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. GCPで使っているサービス(GKE以外) 構成を同じに • CloudSQL • stackdriver • dataflow • BigQuery • GCS • CloudFunction 41
  • 42. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. GCP以外に使っているサービス 構成を同じに AWS • SES • メールだけはどうしようもなかった。。 Fastly • CDNとimage optimizer • image optimizerで画像の配信を柔軟に行っている 42
  • 43. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. 実績 まとめ コードの差によるバグ • 1件 • デバッグ機能をoffにする条件分岐 構成の差によるバグ • なし 運用は今の所一人でも大丈夫 43
  • 44. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved. まとめ まとめ • Dockerやkubernetesを使って簡単に一貫性のある環境を 構築することができた • その結果、環境起因による不具合を抑えることができて いる(と思う) 44