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 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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View 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 Slide

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

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

    View 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 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 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 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 Slide

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

    View Slide

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

    View Slide

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

    View 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 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 Slide

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

    View Slide

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

    View Slide

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

    View 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 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 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 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 Slide

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

    View Slide

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

    View 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 Slide

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

    View Slide

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

    View Slide

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

    GKEの設定
    ߏ੒Λಉ͡ʹ
    34

    View Slide

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

    View Slide

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

    View Slide

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

    View 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 Slide

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

    View Slide

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

    View Slide

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

    View 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 Slide

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

    View Slide

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

    View Slide