Submit Search
Upload
GCP・GKEで作るスケーラブルなゲーム開発環境
•
3 likes
•
5,189 views
Yasutomo Uemori
Follow
GCPUG Kansai Summit Day 2018での登壇スライドです https://gcpug-osaka.connpass.com/event/103023/
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 73
Download now
Download to read offline
Recommended
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
gree_tech
マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話
natsumi_ishizaka
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
インフラ領域の技術スタックや業務内容について紹介
インフラ領域の技術スタックや業務内容について紹介
MicroAd, Inc.(Engineer)
Google Cloud で実践する SRE
Google Cloud で実践する SRE
Google Cloud Platform - Japan
20分でわかるgVisor入門
20分でわかるgVisor入門
Shuji Yamada
Recommended
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
[SAPPORO CEDEC] サービスの効果を高めるグリー内製ツールの技術と紹介
gree_tech
マスターデータの キャッシュシステムの改善の話
マスターデータの キャッシュシステムの改善の話
natsumi_ishizaka
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
インフラ領域の技術スタックや業務内容について紹介
インフラ領域の技術スタックや業務内容について紹介
MicroAd, Inc.(Engineer)
Google Cloud で実践する SRE
Google Cloud で実践する SRE
Google Cloud Platform - Japan
20分でわかるgVisor入門
20分でわかるgVisor入門
Shuji Yamada
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
増田 亨
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
Koichiro Matsuoka
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
Ito Takayuki
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
Git Flowを運用するために
Git Flowを運用するために
Shun Tsunoda
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
2018/1/30 Django勉強会
2018/1/30 Django勉強会
虎の穴 開発室
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
Masahito Zembutsu
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
Makoto Haruyama
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
ShionITO1
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
gree_tech
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
Satoshi Yamafuji
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Yasutomo Uemori
More Related Content
What's hot
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
増田 亨
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
Koichiro Matsuoka
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
torisoup
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
Ito Takayuki
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
sairoutine
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Seiya Mizuno
Git Flowを運用するために
Git Flowを運用するために
Shun Tsunoda
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
2018/1/30 Django勉強会
2018/1/30 Django勉強会
虎の穴 開発室
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
モノビット エンジン
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Yoshifumi Kawai
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
Masahito Zembutsu
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
Makoto Haruyama
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
ShionITO1
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
gree_tech
What's hot
(20)
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
レガシーコードの複雑さに立ち向かう~ドメイン駆動設計のアプローチ
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
境界付けられたコンテキスト 概念編 (ドメイン駆動設計用語解説シリーズ)
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CircleCIのinfrastructureを支えるTerraformのCI/CDパイプラインの改善
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
CEDEC2019 大規模モバイルゲーム運用におけるマスタデータ管理事例
Apache Avro vs Protocol Buffers
Apache Avro vs Protocol Buffers
Git Flowを運用するために
Git Flowを運用するために
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
2018/1/30 Django勉強会
2018/1/30 Django勉強会
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
GHE導入から社内普及までの軌跡 - エバンジェリストとしての取り組みについて -
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Docker と ECS と WebSocket で最強のマルチプレイ・ゲームサーバを構築
Similar to GCP・GKEで作るスケーラブルなゲーム開発環境
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
Satoshi Yamafuji
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
Yasutomo Uemori
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
Amazon Web Services Japan
20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka
beyond Co., Ltd.
ゲームインフラコンテナ実践導入
ゲームインフラコンテナ実践導入
Hiroki Tamiya
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
Takehara Ryo
[CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう!
[CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう!
Samir Hammoudi
Aiming のクラウド採用基準
Aiming のクラウド採用基準
Takahiro Hozumi
ネットワークエンジニアがWeb開発をやってみて思ったこと
ネットワークエンジニアがWeb開発をやってみて思ったこと
gree_tech
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
UnityTechnologiesJapan002
俺とCiとinfrastructure as code(未完)
俺とCiとinfrastructure as code(未完)
Masayuki KaToH
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Kazumi IWANAGA
KLabのゲーム開発を支える開発環境
KLabのゲーム開発を支える開発環境
KLab Inc. / Tech
捕鯨!詳解docker
捕鯨!詳解docker
雄哉 吉田
20150127 jawsug京王線 ec2_config
20150127 jawsug京王線 ec2_config
Takayoshi Tanaka
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
Developers Summit
アカツキはどのようにAWSを活用しているか #jawsug
アカツキはどのようにAWSを活用しているか #jawsug
aktsk
~ Build と言えば やっぱり Developer! ~ Microsoft 開発ツール最新アップデート
~ Build と言えば やっぱり Developer! ~ Microsoft 開発ツール最新アップデート
Akira Inoue
Effective web performance tuning for smartphone
Effective web performance tuning for smartphone
dena_study
20180119_AIを支えるクラウド技術
20180119_AIを支えるクラウド技術
康平 秋山
Similar to GCP・GKEで作るスケーラブルなゲーム開発環境
(20)
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
剣と魔法のログレス いにしえの女神 〜スマホ時代の MMORPG を支える技術
オンラインゲームのRails複数db戦略
オンラインゲームのRails複数db戦略
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
20191120 beyondstudy#21 kitaoka
20191120 beyondstudy#21 kitaoka
ゲームインフラコンテナ実践導入
ゲームインフラコンテナ実践導入
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
自動化ーニバルだよ!GDC16に見る自動化技術とテストのトレンド
[CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう!
[CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう!
Aiming のクラウド採用基準
Aiming のクラウド採用基準
ネットワークエンジニアがWeb開発をやってみて思ったこと
ネットワークエンジニアがWeb開発をやってみて思ったこと
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
俺とCiとinfrastructure as code(未完)
俺とCiとinfrastructure as code(未完)
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
Developers Summit 2023 9-D-1「もう悩まされない開発環境、プロジェクトで統一した環境をいつでもどこでも」
KLabのゲーム開発を支える開発環境
KLabのゲーム開発を支える開発環境
捕鯨!詳解docker
捕鯨!詳解docker
20150127 jawsug京王線 ec2_config
20150127 jawsug京王線 ec2_config
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
【17-E-2】Ruby PaaS「MOGOK」 ~ ソフトウェアエンジニアのためのクラウドサービス ~ 藤原秀一氏
アカツキはどのようにAWSを活用しているか #jawsug
アカツキはどのようにAWSを活用しているか #jawsug
~ Build と言えば やっぱり Developer! ~ Microsoft 開発ツール最新アップデート
~ Build と言えば やっぱり Developer! ~ Microsoft 開発ツール最新アップデート
Effective web performance tuning for smartphone
Effective web performance tuning for smartphone
20180119_AIを支えるクラウド技術
20180119_AIを支えるクラウド技術
More from Yasutomo Uemori
Active job meets kubernetes
Active job meets kubernetes
Yasutomo Uemori
Ruby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDD
Yasutomo Uemori
サービスクラス、その前に
サービスクラス、その前に
Yasutomo Uemori
Rails on Dockerとの戦い
Rails on Dockerとの戦い
Yasutomo Uemori
Rubocopとの付き合い方
Rubocopとの付き合い方
Yasutomo Uemori
Rails api way in aiming
Rails api way in aiming
Yasutomo Uemori
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
Yasutomo Uemori
More from Yasutomo Uemori
(7)
Active job meets kubernetes
Active job meets kubernetes
Ruby/Rails Benchmarking and Profiling with TDD
Ruby/Rails Benchmarking and Profiling with TDD
サービスクラス、その前に
サービスクラス、その前に
Rails on Dockerとの戦い
Rails on Dockerとの戦い
Rubocopとの付き合い方
Rubocopとの付き合い方
Rails api way in aiming
Rails api way in aiming
ゲーム会社でのRuby : rails活用事例
ゲーム会社でのRuby : rails活用事例
GCP・GKEで作るスケーラブルなゲーム開発環境
1.
GCP・GKEで作る スケーラブルな開発環境
2.
自己紹介 植森 康友 株式会社Aiming所属のソフトウェアエンジニア 主な仕事 Game Web
API(Rails) CI デプロイ Kubernetes/Docker GCPUG初参加で発表...
3.
Aimingについて 企画、開発、運営までを社内で行う 社内にはPCゲーム時代からの古参エンジニアが在籍 MMORPGを始めとしたリアルタイムプレイ可能なゲームが得意
4.
代表作 剣と魔法のログレス いにしえの女神 CARAVAN STORIES ゲシュタルト・オーディン
5.
アジェンダ 以前の開発環境構成 以前の開発環境での問題点 現在のプロジェクトでの開発環境 デプロイフロー ログインフロー
6.
イントロダクション
7.
ゲームでよくあるサーバ構成 データベースにはWebAPI経由でアクセス リアルタイムサーバにセッションを張ってリアルタイム処理 リアルタイムサーバ同士のやりとりはバックエンドサーバが管理
8.
ゲームでの開発用環境の必要性 ゲーム開発では様々な目的で開発用環境が求められる エンジニア、プランナーがプレイして面白さを確認する デザイナーがゲーム内でリソースの雰囲気を確認する プランナーが次期アップデートのための設定を行う エンジニアが新規コンテンツの開発を行う 外部協力会社にプレイしてもらう etc...
9.
以前の開発環境構成
10.
開発環境構成例
11.
開発環境構成例
12.
開発環境構成例
13.
開発環境構成例
14.
開発環境構成例
15.
以前の開発環境構成 一つの物理サーバに各種サーバが相乗り 各物理サーバには様々なリビジョンでデプロイできる 接続情報はクライアントに埋め込んであり、接続先を選択できる マスターデータはsambaなどを使ってプランナーが直接更新 → いくつかの問題点が発生した
16.
以前の社内環境での問題点
17.
以前の社内環境での問題点
18.
以前の社内環境での問題点
19.
その結果、
20.
以前の社内環境での問題点 サーバの数が物理サーバの数に依存している 社内のサーバなので簡単に増やせない場合もある セットアップはゲーム側のエンジニアの手が必要 さらにホスト名が固定で用途がわかりにくい 環境の追加、削減にコストが掛かりすぎる 社内サーバの空きがない場合は物理サーバの追加が必要 社内DNSへの登録、DMZの設定(GIPの数とかも……) だいたいの場合「環境数<プランナーの数」 複数のプランナーで一つの環境を共用することになる どの環境が何の用途で誰が使っているのかの管理が必要 → サーバの台数や環境の数が制約になりスケールしにくかった
21.
あるあるネタ 環境追加にひと手間 「環境増やしたいです」 → インフラさんに注文 「サーバ準備しました」
→ エンジニアがセットアップ 環境の更新に待ちが入る 「01環境更新しまーす」 「こっちのデータ上げるからちょっとまって」 データアップロードのコンフリクト 「あれ? なんか設定が反映されてないぞ……」 「あ、こっちで同じデータあげちゃった」
22.
エンジニアのローカル開発環境の問題点 クライアント、サーバ、Webの各セクションのエンジニアが存在 各エンジニアともにVM上にサーバを構築して開発 結果として、 ローカルでも全サーバが動作するよう保守し続ける必要がある クライアントエンジニアもローカルでVMを動かす必要がある
23.
現在のプロジェクトでの開発環境
24.
要件 目指すはスケーラブルな開発環境 リビジョンをあわせた各サーバをワンセットとしてデプロイする プランナーがマスターデータを手軽に作成・更新できる 物理マシンの数に制約されずに環境数を増減できる
25.
利用したもの
26.
27.
28.
29.
30.
やったこと Kubernetesとdockerによるサーバリソースの抽象化 KubernetesのAPIを利用したログインフローの構築 helmによる環境のパッケージ管理 自作デプロイツールとJenkinsによるデプロイの実行 Unityのエディタ拡張によるマスターデータアップローダの作成
31.
デプロイフロー
32.
デプロイで利用している関連ツール、サービス GCPのサービス Google Kubernetes Engine Google
Cloud Registory Google Cloud Storage デプロイ Jenkins helm デプロイツール(Railsアプリ) クライアント Unity Unityエディタ拡張
33.
Google Kubernetes Engine KubernetesはDockerのオーケストレーションツール GKEはKubernetesのフルマネージドサービス 高いスケーラビリティと可用性が特徴 Docker/Kubernetesによるサーバリソースの抽象化 バックエンドにGCEを使った自由なノードの増減 ロギング、モニタリングなどのGCPサービスとの連携性 最初のセットアップの手間がほぼないのも 最初はDocker
Swarmを使っていたが、運用コストが高かった 停電によるswarmのcrashを契機にGKEへ移行
34.
35.
36.
37.
デプロイツール Ruby on Rails製のWebアプリ 環境管理ツールと各種リンクのダッシュボードを兼ねている 「環境を配膳する人」ということでOKAMIと名付けられた
38.
デプロイツールの機能 アカウント、権限管理 環境の一覧
39.
デプロイツールの機能 クライアントのダウンロード Google Cloud Storageの閲覧
40.
デプロイツールの機能 各環境で利用できる各種サービスへのリンク集 WebAPIのswagger UI デバッグツール(Ruby on
Railsアプリ) Cloud Logging
41.
デプロイツールの機能 デプロイの実行 環境作成時にUUIDを使ったIDの発行 環境情報のDBへの永続化 実際のデプロイなどはWebAPI経由でJenkinsジョブへ
42.
43.
44.
Jenkinsジョブの実行 Unityを使い、AssetBundleとマスターデータを生成 Excelとassetファイルからsqliteファイルを生成している Unityでのみ設定可能なものがあるためUnityを利用 DockerイメージはJenkins Slaveで直接ビルド ビルドしたイメージはコミットハッシュでタグをつけてGCRへ Helm Chartによる環境のデプロイ masterブランチはデイリーで毎日自動更新
45.
46.
47.
Helm Kubernetesのパッケージマネージャ 各種リソースをChartと呼ばれる単位でパッケージングする Chartは公式のものの他に自作することも可能 現在のプロジェクトでは専用のdevelopパッケージを自作 kustomizeと比較したメリット 変数による自由なinjectionが可能 公開されているchartを使えば自分で書かなくてすむ manifestファイルの動的な展開が可能 デメリットとしては複雑化しやすく、chartの管理などに少しクセがある
48.
Helmの実行 コマンドで実行時に変数に対し指定が可能 helm upgrade --install
develop-[環境ID] ./develop --namespace develop-[環境ID] --set imageTag=[コミットハッシュ] --set environment_id=[環境ID] --set environment_name=[環境名] --set realtime_server_replica_count=1 --namepsace でインストールするnamespaceを指定 --set で環境固有のパラメータを動的に割り当てる
49.
Helm template helm templateはgo
templateで記述 apiVersion: v1 kind: Service metadata: name: api-server annotations: environment_name: {{ .Values.environment_name }} labels: app: api-server environment_id: {{ .Values.environment_id }} ここでは環境名と環境IDをlabelとannotationにinjectionしている → 後述するログインフローで利用するため
50.
51.
52.
環境数のスケール Kubernetesのnamespaceを利用することで柔軟にスケール可能 環境の最大数は、 「ノードのスペック☓ノードの台数/ 環境あたりの利用リソース」 GKEの場合、ノードのバックエンドにGCEを利用しているためリソ ースを簡単に追加可能 現在は5台のノードで10~15環境以上が稼働。 以前から比べるとホスト台数の3倍以上が稼働可能になった
53.
54.
Unity 統合開発環境を内蔵したクロスプラットフォームなゲームエンジン Unityは自前でスクリプトを書いてエディタを拡張することが可能 Unity上からマスターデータの生成と、GCSへのアップロードを行 えるようにしている
55.
Unity Editor拡張 プランナーはこのエディタ拡張を利用し、ExcelやUnityで設定を行 った後にマスターデータをビルド アップロードしたい環境を選択してデータをアップロードする
56.
ログインフロー
57.
58.
59.
60.
RubyによるKubernetesマスタへの問い合わせ https://github.com/abonas/kubeclient を利用 selector =
selectors.map{|k, v| "#{k}=#{v}"}.join(',') client.get_services(label_selector: selector).map do |service| OpenStruct.new( # labelから環境IDを取得 environment_id: service.dig( :metadata, :labels, :environment_id ), # annotationから環境名を取得 environment_name: service.dig( :metadata, :annotations, :environment_name ), # serviceの基本情報からLBのIPと割り当てPortを取得 ip: service.dig(:status, :loadBalancer, :ingress, 0, :ip port: service.dig(:spec, :ports, 0, :port) ) end
61.
クライアントの環境選択 WebAPIが返した環境情報を元にプルダウンメニューを表示 選択した環境のエンドポイント情報を自動で選択する
62.
63.
64.
65.
66.
67.
68.
こうしてスケーラブルな開発環境ができた
69.
以前の開発環境よりも改善された点 プランナーが自由に環境を増やすことができるようになった ノードの追加だけでスケールするようになった 社内からGCPへの移行によりリソースの増減が柔軟になった エンジニアの作業フローも変化 クライアントエンジニアもGCP上のサーバを利用するように デプロイ・ログインして動作確認して削除するなどが可能に GCP、GKEを利用した仕組みづくりによって、 エンジニア・プランナーの作業フローが格段に改善された
70.
今後の課題 JenkinsのGCPへの移行 社内にあるためにスレーブの追加が一手間 UnityのためにMacが必須となっており簡単に移行できない DockerビルドのGoogle Cloud Buildへの移行 一台のスレーブで全イメージを並列ビルドしているため遅い Jenkins
SlaveがDockerビルドに専有される うまく行った点の社内への共有 他プロジェクトでも再利用できる点は多いハズ
71.
まとめ "開発環境がスケールすることで開発もスケールできる"
72.
73.
ご静聴ありがとうございました
Download now