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

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

Spring_MT
August 31, 2018

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

Spring_MT

August 31, 2018
Tweet

More Decks by Spring_MT

Other Decks in Technology

Transcript

  1. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    Jun 9, 2018
    Spring_MT
    3BJMTPO(,&Ͱӡ༻͢Δ
    8FCΞϓϦέʔγϣϯͷ঺հ

    View full-size slide

  2. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    ࣗݾ঺հ
    • ⾃⼰紹介
    2
    l 2008年 DeNA⼊社
    l 2010年 エンジニアになる
    l 2011年 DeNA退社 -> 福岡へ
    l 2013年 DeNAに出戻り
    l 2016年 ゲーム事業本部
    l 2017年 コマース&インキュベーション事業本部
    GitHub https://github.com/SpringMT
    Twitter https://twitter.com/Spring_MT
    @Spring_MT

    View full-size slide

  3. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • フロント1名
    • サーバー・インフラ1名
    開発チーム
    εϞʔϧελʔτ
    3

    View full-size slide

  4. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    4
    • 機能開発以外のやることを減らしたい
    • 運⽤業務をシンプルにしたい
    ػೳ։ൃʹूத͢ΔͨΊʹ

    View full-size slide

  5. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    5
    ࠓճ͓࿩͢Δ಺༰
    https://builderscon.io/tokyo/2018/session/b87465f5-4a05-4a6b-85c6-a50ab205dc27

    View full-size slide

  6. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    6
    • モノリシックな作り
    • APIファースト
    • 本番環境と同じ開発環境
    • サービスのコンテンツデータの運⽤
    ࠓճ͓࿩͢Δ಺༰

    View full-size slide

  7. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • 環境のギャップをなくす
    w Dockerを使ったイメージベースの成果物
    w 設定ファイルの管理
    w 反映⽅法
    • 構成のギャップをなくす
    w Kubernetes(GKE)
    w その他
    • まとめ
    ໨࣍

    View full-size slide

  8. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    コードベースを同じに

    View full-size slide

  9. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    wイメージを作成したら変えない
    w ビルドは⼀回
    w ddとか使ってバイナリをいじるようなことはしない
    w 起動時にコードを追加するなどもしない
    w検証環境・本番環境でも動くようなイメージの構成にする
    wなにも⼿を加えずに検証環境から本番環境にイメージを
    移⾏させる
    Dockerを使ったイメージベースの成果物管理
    ίʔυϕʔεΛಉ͡ʹ
    9

    View full-size slide

  10. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    w検証環境と本番環境を完全に分離する
    w 検証環境はQA専任チームなど別チームも閲覧・操作する
    w 本番環境は開発者のみ
    wこの2つを⾏き来できるのはDockerのイメージのみ
    w アプリケーションのデータ運⽤(マスターデータ・アセット)は
    最初から考えておく
    検証環境と本番環境でGCPのプロジェクトをわける
    ίʔυϕʔεΛಉ͡ʹ
    10

    View full-size slide

  11. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    Dockerのイメージの構成
    • コードベースを同じに
    • 3種類のイメージにわけて作成
    • 設定ファイルなどは全てのイメージに含まれる
    11
    ᵓBQJ
    ᵓ%#@4DIFNB
    ᵓ؅ཧπʔϧ
    ᵓDPOGJH TVCUSFF

    ᵓTIBSFE
    API DB Schema 管理ツール
    ᵓBQJ
    ᵓDPOGJH TVCUSFF

    ᵓTIBSFE
    ᵓ%#4DIFNB
    ᵓDPOGJH TVCUSFF

    ᵓTIBSFE
    ᵓ؅ཧπʔϧ
    ᵓDPOGJH TVCUSFF

    ᵓTIBSFE

    View full-size slide

  12. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • TUSFUDIϕʔε /05BMQJOF

    w glibcがなくて、stackdriver(の中のgrpc)のgemがビルドできない
    Dockerのイメージの構成
    ίʔυϕʔεΛಉ͡ʹ
    12

    View full-size slide

  13. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • Dockerの社内registryは⾃前で⽤意はしない
    w Googleのパワーを借りる
    w Google Container Builder
    w Google Container Registry
    Docker registry
    ίʔυϕʔεΛಉ͡ʹ
    13

    View full-size slide

  14. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • Container Builderを使うための調整
    w GitHub:Enterprise、CircleCI Enterprise、社内rubygemsがある
    w Container BuilderはGH:EにはアクセスできないのでGoogle Source
    Repositoryを経由する
    w 社内rubygemsは利⽤しない(社内gemは使わない)
    w 使う場合はレポジトリに直接subtree等で取り込むことを想定
    社内リソースとの連携
    ίʔυϕʔεΛಉ͡ʹ
    14

    View full-size slide

  15. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    15
    テストが通ったブランチは全部イメージを作る
    Dockerのイメージ作成フロー
    ίʔυϕʔεΛಉ͡ʹ
    Developers
    Cloud Source
    Repositories
    Container
    Registry
    Container
    Builder
    Hook
    Pus
    h
    ςετ実⾏
    Push
    DeNA

    View full-size slide

  16. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    %PDLFSͷΠϝʔδ࡞੒
    ίʔυϕʔεΛಉ͡ʹ
    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}"

    View full-size slide

  17. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    17
    • Container BuilderではDockerfile指定だけ
    w ڽͬͨ͜ͱ͸ಛʹ͍ͯ͠ͳ͍
    w ϓϩδΣΫτ͋ͨΓ݅ͷಉ࣌Ϗϧυ͕Մೳ
    w ຊϓϩδΣΫτͰ͸ͭ͸ಉ࣌ʹϏϧυ͍ͨ͠
    Dockerのイメージ作成
    ίʔυϕʔεΛಉ͡ʹ

    View full-size slide

  18. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • 検証環境でテストしたイメージを
    そのまま本番環境に移⾏
    w HDMPVEίϚϯυͰ($1ͷϓϩδΣΫτΛ௒͍͚͑ͯ࣋ͬͯΔ
    w HDMPVE DPOUBJOFSJNBHFTBEEUBH
    本番環境へのイメージの移⾏
    ίʔυϕʔεΛಉ͡ʹ
    18

    View full-size slide

  19. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • RAILS_ENV
    w 検証環境・本番環境はproductionで統⼀
    w 環境を規定するために別の環境変数を⽤意
    w Docker起動時に設定を読み込む
    Rails
    ίʔυϕʔεΛಉ͡ʹ
    19

    View full-size slide

  20. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    3BJMT
    ίʔυϕʔεΛಉ͡ʹ
    20
    ENV RAILS_ENV production
    # Use EntryKit
    ENTRYPOINT [ \
    "prehook", "ruby -v", "--", \
    QSFIPPL CVOEMFFYFDSVCZTIBSFETDSJQUTTFUVQSC
    "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" ]

    View full-size slide

  21. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • サーバーの設定
    w config⽤のレポジトリを⽤意し、subtreeで取り込み
    • Logは標準出⼒に
    w stackdriver loggingで回収 -> exportして各処理へ
    • パフォーマンス測定
    w 本番環境はstackdriver trace
    w 検証環境はstackdriver traceに加えてstackprofでも確認する
    Rails
    ίʔυϕʔεΛಉ͡ʹ
    21

    View full-size slide

  22. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    22
    3BJMT
    ίʔυϕʔεΛಉ͡ʹ

    View full-size slide

  23. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    構成を同じに

    View full-size slide

  24. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • kubernetes(GKE)を使った構築
    w Dockerのイメージの動作環境という視点でまずは選定
    • その上で
    w 構成をそろえやすい
    w 少⼈数でも管理・運⽤しやすい
    サーバーの構成を同じに
    ߏ੒Λಉ͡ʹ
    24

    View full-size slide

  25. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • 設定はyamlで管理
    w 規模感的にまだHemlとかを導⼊するほどでもない
    w kustomizeは検討中
    w Service + HPA + Deploymentで⼀つのyamlにまとめている
    w 環境ごとの差分はなるべく少なく
    w replicasの数くらいが差分になっている
    kubernetesの管理
    ߏ੒Λಉ͡ʹ
    25

    View full-size slide

  26. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • ConfigMapとSecret
    w 環境変数(ConfigMap、Secret)とアプリ内でもつ設定の分離
    w 秘密情報は全てSecretを使って環境変数経由で受け渡す
    w アプリケーションの設定情報はコードに含め環境変数で受け渡すことは基
    本的にしない
    w unicornのworker数などこまめに調整する数値のみ環境変数で管理
    kubernetesの構成
    ߏ੒Λಉ͡ʹ
    26

    View full-size slide

  27. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • Service、HPA、Deployment
    w API、管理ツール等ではreplicas以外の差はない
    w HPAの設定、deploymentのProbeの設定を忘れずに
    w graceful shutdownとスケーリングをちゃんと設定しておく
    w 負荷試験時にイメージの更新を挟むことで確認
    kubernetesの構成
    ߏ੒Λಉ͡ʹ
    27

    View full-size slide

  28. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    28
    શମͷߏ੒
    ߏ੒Λಉ͡ʹ
    Monitoring
    Logging
    Cloud Load
    Balancing Cloud
    SQL
    Trace
    Error
    Reporting
    Frontend
    "1*
    ؅ཧπʔϧ
    Cloud
    Storage
    Container Engine

    View full-size slide

  29. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • バージョン
    w v1.10.5を利⽤
    w stackdriver monitoring v2を利⽤したかった
    GKEの設定
    ߏ੒Λಉ͡ʹ
    29

    View full-size slide

  30. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • 本番環境ではマスター承認済みのネットワークを設定
    w 社内のgatewayサーバーからのみアクセスできる
    deployサーバー(GCE)を⽤意してそこからのみkubectlが打てる
    w gatewayサーバーにはttyrecが仕込んであり
    監査⽤にログが残してある
    w 検証環境はローカルマシンからkubectlを打てる
    GKEの設定
    ߏ੒Λಉ͡ʹ
    30

    View full-size slide

  31. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • 限定公開クラスタは無効
    w CloudSQLがプライベートGoogleアクセスに対応していない
    w https://cloud.google.com/vpc/docs/private-google-access
    w アプリケーションからは結局Cloud SQL Proxy経由でアクセス
    GKEの設定
    ߏ੒Λಉ͡ʹ
    31

    View full-size slide

  32. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • ノードの⾃動スケーリングは
    開発環境はon 本番環境はoff
    w スケールするときにサービス断の可能性あり
    GKEの設定
    ߏ੒Λಉ͡ʹ
    32

    View full-size slide

  33. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • 権限管理
    w google group + IAMで管理が基本
    w 本番環境と検証環境を分けており、本番環境には⼊れる⼈を絞っている
    w kubernetesのRBACはまだ使ってない
    GKEの設定
    ߏ੒Λಉ͡ʹ
    33

    View full-size slide

  34. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • Preemptible VM
    w ݕূ؀ڥ͸શͯPreemptible
    w ίετμ΢ϯͱ΋ʹɺ؀ڥ͕ৗʹ৽͘͠disposableͰ͋Δ͜ͱͷ֬ೝ͕Մ

    GKEの設定
    ߏ੒Λಉ͡ʹ
    34

    View full-size slide

  35. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • DNSの管理からの開放
    w MyDNSと決別
    • プロセスがおちたら⾃動的に再起動
    w daemontoolsと決別
    kubernetesを使ったメリット
    ߏ੒Λಉ͡ʹ
    35

    View full-size slide

  36. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • Horizonatal Pod Autoscaler
    w ⾃動でpodの数を調整してくれる
    w 負荷試験ではテストしているが、リリース後からは発動してない
    kubernetesを使ったメリット
    ߏ੒Λಉ͡ʹ
    36

    View full-size slide

  37. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • ⽐較になるが、GAE/Goほどシンプルではないかも…
    w 管理するものが多い印象
    kubernetesのデメリット
    ߏ੒Λಉ͡ʹ
    37

    View full-size slide

  38. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • CronJob
    w sidecarがあるとsidecarが終わらない問題
    w v1.10.5未満だと失敗したjobが延々とリトライし続ける問題があった(解消
    済)
    • graceful shutdownできていない
    w CloudSQL ProxyのpreStopの設定
    ハマったこと
    ߏ੒Λಉ͡ʹ
    38

    View full-size slide

  39. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • DBスキーマの適⽤
    w スキーマ管理はridgepoleを採⽤
    w スキーマ適⽤⽤のpodを上げてそこのpodに⼊ってコマンドを打つ
    ハマったこと
    ߏ੒Λಉ͡ʹ
    39

    View full-size slide

  40. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • 検証環境のクラスターをまとめる
    w 検証環境毎にクラスターを作っているので、ここをまとめて環境を作りや
    すくする
    改善したいポイント
    ߏ੒Λಉ͡ʹ
    40

    View full-size slide

  41. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • CloudSQL
    • stackdriver
    • dataflow
    • BigQuery
    • GCS
    • CloudFunction
    GCPで使っているサービス(GKE以外)
    ߏ੒Λಉ͡ʹ
    41

    View full-size slide

  42. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • AWS
    w SES
    w メールだけはどうしようもなかった。。
    • Fastly
    w CDNとimage optimizer
    w image optimizerで画像の配信を柔軟に⾏っている
    GCP以外に使っているサービス
    ߏ੒Λಉ͡ʹ
    42

    View full-size slide

  43. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • コードの差によるバグ
    w 1件:デバッグ機能をoffにする条件分岐
    • 構成の差によるバグ
    w なし
    • 運⽤は今の所⼀⼈でも⼤丈夫
    実績
    ·ͱΊ
    43

    View full-size slide

  44. Copyright (C) 2018 DeNA Co.,Ltd. All Rights Reserved.
    • Dockerやkubernetesを使って簡単に⼀貫性のある環境
    を構築することができた
    • その結果、環境起因による不具合を抑えることができて
    いる(と思う)
    まとめ
    ·ͱΊ
    44

    View full-size slide