SlideShare ist ein Scribd-Unternehmen logo
1 von 38
ゲームインフラ
コンテナ実践導入
エンジニア 田宮 弘樹
FiveStarsGame Inc.
自己紹介
・田宮 弘樹(たみや ひろき)
・ファイブスターズゲーム(株)でチーフエンジニアをやっています
・担当範囲はインフラ、サーバープログラム、アプリプログラムなど
・サーバープログラムが一番得意
今日のおはなし
・自社ゲームアプリでコンテナを試用
・大手ゲームパブリッシャー受託開発案件でのコンテナ導入
・まとめ
自社ゲームアプリでコンテナを試用
このアプリのインフラを
dockerで構築してみた
サーバーで管理するのは
課金と補填用データだけ
サーバー構成
・GCP上のComputeEngineでCoreOSを使用
・ロードバランサ(GCP)
・Webサーバー(Nginx)x1台
・Appサーバー(Unicorn, Ruby on Rails 4)x1台
・MySQL5.6(マスター・スレーブ構成。※スレーブはバックアップ用)各1台
・コンテナ管理はdocker-compose
Nginx
Unicorn
サーバー#1
サーバー#2
サーバー#3
データコンテナ
MySQL Master
データコンテナ
MySQL Slave
GCPロードバランサ
Cloud StorageへBackupデータコンテナ
docker
compose
docker
compose
HTTPS
HTTPS
datastore:
container_name: data
mem_limit: 268435456
build: datastore
tty: true
restart: always
nginx:
container_name: web
mem_limit: 268435456
restart: always
build: nginx
ports:
- '80:80'
- '443:443'
volumes_from:
- datastore
links:
- rails_blue
- rails_green
rails_blue:
container_name: app_blue
mem_limit: 4294967296
restart: always
build: .
ports:
- '3000:3000'
tty: true
environment:
RAILS_ENV: production
MYSQL_ROOT_PASSWORD: '********'
DATABASE_URL:
mysql2://****:********@10.240.0.3:3306
UNICORN_WORKER_PROCESS: 8
UNICORN_PORT: 3000
volumes_from:
- datastore
rails_green:
container_name: app_green
mem_limit: 2147483648
build: .
ports:
- '3001:3001'
tty: true
environment:
RAILS_ENV: production
MYSQL_ROOT_PASSWORD: ‘********’
DATABASE_URL:
mysql2://****:********@10.240.0.3:3306
UNICORN_WORKER_PROCESS: 8
UNICORN_PORT: 3001
volumes_from:
- datastore
datastore:
container_name: data
mem_limit: 268435456
build: datastore
tty: true
restart: always
nginx:
container_name: web
mem_limit: 268435456
restart: always
build: nginx
ports:
- '80:80'
- '443:443'
volumes_from:
- datastore
links:
- rails_blue
- rails_green
rails_blue:
container_name: app_blue
mem_limit: 4294967296
restart: always
build: .
ports:
- '3000:3000'
tty: true
environment:
RAILS_ENV: production
MYSQL_ROOT_PASSWORD:'********'
DATABASE_URL:
mysql2://****:********@10.240.0.3:3306
UNICORN_WORKER_PROCESS: 8
UNICORN_PORT: 3000
volumes_from:
- datastore
rails_green:
container_name: app_green
mem_limit: 2147483648
build: .
ports:
- '3001:3001'
tty: true
environment:
RAILS_ENV: production
MYSQL_ROOT_PASSWORD:'********'
DATABASE_URL:
mysql2://****:********@10.240.0.3:3306
UNICORN_WORKER_PROCESS: 8
UNICORN_PORT: 3001
volumes_from:
- datastore
旧
Appコンテナ
新
Appコンテナ
Port:3000 Port:3001
Nginx
80/443番を
3000にProxy
新
Appコンテナ
新
Appコンテナ
Port:3000 Port:3001
Nginx
80/443番を
3000にProxy
旧→新
Appコンテナ
新
Appコンテナ
Port:3000 Port:3001
Nginx
80/443番を
3001にProxy
1)デプロイ用の
Appコンテナ起動
2)3001にProxyし直し
旧コンテナを更新
2)再度3000にProxyし直し
3001のコンテナを停止
デプロイ デプロイ ストップ
MySQL
=
MySQLサーバーコンテナ + busybox
MySQLサーバー
コンテナ
busyboxコンテナ
MySQLサーバーコンテナからdocker -vでアタッチされる
datadirの指定先。
MySQLコンテナの構成
MySQLの設定(my.cnf)を行ったものを含めて
ビルドしたコンテナイメージ
バックアップ時には、このコンテナのデータを丸ごと固めている
Cloud Storageへ転送
サーバー#2, サーバー#3
特に問題なく稼働しています
大手ゲームパブリッシャー受託開発案件で
コンテナ導入
商用を意識した構成
≒マルチホスト
クラスタ構成
・全てCoreOSを使用。
・3台のetcd2マスターを構築。他はそれらのproxy
・デプロイはfleet
・コンテナ間の通信はflannel
・構築ツールはAnsible2※ローカル環境は
Vagrant+VirtualBox
※但し、政治的な都合上、国産サーバー業者を使用
サーバー構成
・ロードバランサ(某国内クラウド業者)
・APIサーバー(Go言語:JSON-RPC2.0)x1台
・マッチングサーバー(Go言語:UDP+Websocket)x1台
・バトルサーバー(Go言語:UDP+Websocket)x1台
・MariaDB(マスター)x1台
・MariaDB(スレーブ)x1台
・RedisCluster 3.2.1(マスター3台、スレーブ3台)
・その他HAProxyコンテナ x3台
データ
コンテナ
MariaDB
Master
データ
コンテナ
MariaDB
Slave
APIサーバー
コンテナ
データコンテナ
マッチングサーバー
コンテナ
データコンテナ
HAProxy
コンテナ
HAProxy
コンテナ
バトルサーバー
コンテナ
データコンテナ
HAProxy
コンテナ
データ
コンテナ
Redis Cluster
Master
データ
コンテナ
Redis Cluster
Slave
Fail overReplication
http:// ws:// ws://
ホストを跨ぐコンテナを
どう繋ぐか?
docker-composeでは
シングルホストでのコンテナ連携までしか
使えない
さらにコンテナIPアドレスは
起動されまで確定しない
flannel
(from https://github.com/coreos/flannel/blob/master/packet-01.png)
起動の度に変化する
コンテナIPをどう管理するか?
consul(サービスディスカバリー)
registrator(consulの登録・削除制御)
苦労したところ
Redis Clusterは
クラスタ設定にドメインが使えない
IPアドレス指定のみ
※version 3.2.1現在
RedisCluster
Master
node#1
RedisCluster
Master
node#2
RedisCluster
Master
node#3
RedisCluster
Slave
node#4
RedisCluster
Slave
node#5
RedisCluster
Slave
node#6
etcdクラスタ
ノードごとの
IPアドレスを記録
起動時に
対象ノード管理ファイル
node.confを新しいIPで更新
node.conf node.conf node.conf
node.conf node.conf node.conf
IP更新 IP更新 IP更新
IP更新 IP更新 IP更新
Redis Cluster 3.2.1
fleet によるデプロイ
CoreOS
Machine
metadata=redis
CoreOS
Machine
metadata=api
CoreOS
Machine
metadata=db
CoreOS
Machine
metadata=match
CoreOS
Machine
metadata=battle
fleetctl
Ansible2
deploy 先
metadata=XXX
これにて構築完了
で、ぶっちゃけ
コンテナっていいの?
メリット
・サーバーごとに環境を疎結合にできる
・サーバーリソースを有効に活用できる
・ポータビリティ
・一度コンテナベースにしてしまえば、OSの引っ越しな
どが用意(dockerが使える環境ならば)
・コンテナでインフラを構築したという満足感が得られる
デメリット
・管理の複雑化
・DBなどのクラスタリング構成をコンテナで組むのは大変
・本格運用には、Kubernetesなどのオーケストレーションツ
ールが必要不可欠な気がする。。。
まとめ
無理に全てコンテナにせず、
状況に応じて使い分けることも必要
今後はKubernetesを採用する予定
ご清聴ありがとうございました

Weitere ähnliche Inhalte

Was ist angesagt?

Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]DeNA
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOGame Tools & Middleware Forum
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法モノビット エンジン
 
通信対戦ゲームを作った話
通信対戦ゲームを作った話通信対戦ゲームを作った話
通信対戦ゲームを作った話mipsparc
 
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事Manabu Koga
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~UnityTechnologiesJapan002
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法モノビット エンジン
 
KubernetesとSpannerで 進化し続けるコロプラのゲーム開発
KubernetesとSpannerで 進化し続けるコロプラのゲーム開発KubernetesとSpannerで 進化し続けるコロプラのゲーム開発
KubernetesとSpannerで 進化し続けるコロプラのゲーム開発Google Cloud Platform - Japan
 
Amazon Game Tech Night #20 ゲームバックエンド開発関連セッションのre:cap
Amazon Game Tech Night #20 ゲームバックエンド開発関連セッションのre:capAmazon Game Tech Night #20 ゲームバックエンド開発関連セッションのre:cap
Amazon Game Tech Night #20 ゲームバックエンド開発関連セッションのre:capAmazon Web Services Japan
 
はじめてのAI~ 愛のあるAIを作ろう
はじめてのAI~ 愛のあるAIを作ろうはじめてのAI~ 愛のあるAIを作ろう
はじめてのAI~ 愛のあるAIを作ろうMasahiko Nakamura
 
DeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャDeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャHaruto Otake
 
個人からトリプル A タイトルのゲーム開発者まで。Azure PlayFab で LiveOps しよう
個人からトリプル A タイトルのゲーム開発者まで。Azure PlayFab で LiveOps しよう個人からトリプル A タイトルのゲーム開発者まで。Azure PlayFab で LiveOps しよう
個人からトリプル A タイトルのゲーム開発者まで。Azure PlayFab で LiveOps しようDaisuke Masubuchi
 
はじめてのUnreal Engine 4
はじめてのUnreal Engine 4はじめてのUnreal Engine 4
はじめてのUnreal Engine 4Shun Sasaki
 
Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料Daisuke Masubuchi
 
Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...
Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...
Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...Google Cloud Platform - Japan
 
監視 Overview
監視 Overview監視 Overview
監視 OverviewIIJ
 
トラブルから理解するHyper vの基礎
トラブルから理解するHyper vの基礎トラブルから理解するHyper vの基礎
トラブルから理解するHyper vの基礎Naoki Abe
 

Was ist angesagt? (20)

Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
 
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYOFINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
FINAL FANTASY XVにおけるPhoton利用事例 - Photon運営事務局 GTMF 2018 OSAKA / TOKYO
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
【CEDEC2013】20対20リアルタイム通信対戦オンラインゲームのサーバ開発&運営技法
 
通信対戦ゲームを作った話
通信対戦ゲームを作った話通信対戦ゲームを作った話
通信対戦ゲームを作った話
 
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
サーバー未経験者がソーシャルゲームを通して知ったサーバーの事
 
Online MultiPlay Game Design
Online MultiPlay Game DesignOnline MultiPlay Game Design
Online MultiPlay Game Design
 
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
【Unite Tokyo 2019】Unityだったら簡単!マルチプレイ用ゲームサーバ開発 ~実践編~
 
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
Unityネットワーク通信の基盤である「RPC」について、意外と知られていないボトルネックと、その対策法
 
KubernetesとSpannerで 進化し続けるコロプラのゲーム開発
KubernetesとSpannerで 進化し続けるコロプラのゲーム開発KubernetesとSpannerで 進化し続けるコロプラのゲーム開発
KubernetesとSpannerで 進化し続けるコロプラのゲーム開発
 
Amazon Game Tech Night #20 ゲームバックエンド開発関連セッションのre:cap
Amazon Game Tech Night #20 ゲームバックエンド開発関連セッションのre:capAmazon Game Tech Night #20 ゲームバックエンド開発関連セッションのre:cap
Amazon Game Tech Night #20 ゲームバックエンド開発関連セッションのre:cap
 
はじめてのAI~ 愛のあるAIを作ろう
はじめてのAI~ 愛のあるAIを作ろうはじめてのAI~ 愛のあるAIを作ろう
はじめてのAI~ 愛のあるAIを作ろう
 
DeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャDeNAのサーバー"コード"レスアーキテクチャ
DeNAのサーバー"コード"レスアーキテクチャ
 
個人からトリプル A タイトルのゲーム開発者まで。Azure PlayFab で LiveOps しよう
個人からトリプル A タイトルのゲーム開発者まで。Azure PlayFab で LiveOps しよう個人からトリプル A タイトルのゲーム開発者まで。Azure PlayFab で LiveOps しよう
個人からトリプル A タイトルのゲーム開発者まで。Azure PlayFab で LiveOps しよう
 
はじめてのUnreal Engine 4
はじめてのUnreal Engine 4はじめてのUnreal Engine 4
はじめてのUnreal Engine 4
 
Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料Azure PlayFab トレーニング資料
Azure PlayFab トレーニング資料
 
Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...
Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...
Spanner から GKE、Spinnaker、そして SRE まで、コロプラが今挑戦していること[Google Cloud INSIDE Games ...
 
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
 
監視 Overview
監視 Overview監視 Overview
監視 Overview
 
トラブルから理解するHyper vの基礎
トラブルから理解するHyper vの基礎トラブルから理解するHyper vの基礎
トラブルから理解するHyper vの基礎
 

Andere mochten auch

ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方Daisaku Mochizuki
 
Cedec2015 ゲームサーバー基盤の新しい選択肢
Cedec2015 ゲームサーバー基盤の新しい選択肢Cedec2015 ゲームサーバー基盤の新しい選択肢
Cedec2015 ゲームサーバー基盤の新しい選択肢Maho Takara
 
大ヒットソーシャルアプリの裏側
大ヒットソーシャルアプリの裏側大ヒットソーシャルアプリの裏側
大ヒットソーシャルアプリの裏側KLab株式会社
 
Grani's way of thinking infrastructure
Grani's way of thinking infrastructureGrani's way of thinking infrastructure
Grani's way of thinking infrastructureSaito Ryuichi
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活をRyunosuke SATO
 
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方光晶 上原
 
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみたKubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた祐磨 堀
 
Red Hat Enterprise Linux 7.1 Kubernetes入門
Red Hat Enterprise Linux 7.1 Kubernetes入門Red Hat Enterprise Linux 7.1 Kubernetes入門
Red Hat Enterprise Linux 7.1 Kubernetes入門Etsuji Nakai
 
DockerとKubernetesが作る未来
DockerとKubernetesが作る未来DockerとKubernetesが作る未来
DockerとKubernetesが作る未来Kazuto Kusama
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみたKatsutoshi Nagaoka
 
最近のKubernetesとDocker Machine/Swarmの話
最近のKubernetesとDocker Machine/Swarmの話最近のKubernetesとDocker Machine/Swarmの話
最近のKubernetesとDocker Machine/Swarmの話Kazuto Kusama
 
年の瀬!リアルタイム通信ゲームサーバ勉強会
年の瀬!リアルタイム通信ゲームサーバ勉強会年の瀬!リアルタイム通信ゲームサーバ勉強会
年の瀬!リアルタイム通信ゲームサーバ勉強会monobit
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装infinite_loop
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニックinfinite_loop
 
Cuadernillo III prefijos y sufijos-2011
Cuadernillo III prefijos y sufijos-2011Cuadernillo III prefijos y sufijos-2011
Cuadernillo III prefijos y sufijos-2011dcenterd
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話Takahiro YAMAGUCHI
 
データに振り回されて失敗した あんなことやこんなこと ~ゲームのために必要な本当の ビジネス・アナリティクス~
データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~
データに振り回されて失敗した あんなことやこんなこと ~ゲームのために必要な本当の ビジネス・アナリティクス~Daisuke Nogami
 

Andere mochten auch (20)

ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方ゲームサーバ開発現場の考え方
ゲームサーバ開発現場の考え方
 
Cedec2015 ゲームサーバー基盤の新しい選択肢
Cedec2015 ゲームサーバー基盤の新しい選択肢Cedec2015 ゲームサーバー基盤の新しい選択肢
Cedec2015 ゲームサーバー基盤の新しい選択肢
 
俺とKubernetes
俺とKubernetes俺とKubernetes
俺とKubernetes
 
大ヒットソーシャルアプリの裏側
大ヒットソーシャルアプリの裏側大ヒットソーシャルアプリの裏側
大ヒットソーシャルアプリの裏側
 
Amazon ECSアップデート
Amazon ECSアップデートAmazon ECSアップデート
Amazon ECSアップデート
 
Grani's way of thinking infrastructure
Grani's way of thinking infrastructureGrani's way of thinking infrastructure
Grani's way of thinking infrastructure
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活を
 
自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方自宅で出来る!ゲームサーバの作り方
自宅で出来る!ゲームサーバの作り方
 
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみたKubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
Kubernetes & Google Container Engine; DockerコンテナをGKEでクラスタリングしてみた
 
Red Hat Enterprise Linux 7.1 Kubernetes入門
Red Hat Enterprise Linux 7.1 Kubernetes入門Red Hat Enterprise Linux 7.1 Kubernetes入門
Red Hat Enterprise Linux 7.1 Kubernetes入門
 
DockerとKubernetesが作る未来
DockerとKubernetesが作る未来DockerとKubernetesが作る未来
DockerとKubernetesが作る未来
 
GKEで半年運用してみた
GKEで半年運用してみたGKEで半年運用してみた
GKEで半年運用してみた
 
最近のKubernetesとDocker Machine/Swarmの話
最近のKubernetesとDocker Machine/Swarmの話最近のKubernetesとDocker Machine/Swarmの話
最近のKubernetesとDocker Machine/Swarmの話
 
年の瀬!リアルタイム通信ゲームサーバ勉強会
年の瀬!リアルタイム通信ゲームサーバ勉強会年の瀬!リアルタイム通信ゲームサーバ勉強会
年の瀬!リアルタイム通信ゲームサーバ勉強会
 
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
 
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
大規模ソーシャルゲーム開発から学んだPHP&MySQL実践テクニック
 
Cuadernillo III prefijos y sufijos-2011
Cuadernillo III prefijos y sufijos-2011Cuadernillo III prefijos y sufijos-2011
Cuadernillo III prefijos y sufijos-2011
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
CEDEC2013 ソーシャルゲームの開発現場でUXについて思いっきりあがいてみた1年間の話
 
データに振り回されて失敗した あんなことやこんなこと ~ゲームのために必要な本当の ビジネス・アナリティクス~
データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~データに振り回されて失敗したあんなことやこんなこと~ゲームのために必要な本当のビジネス・アナリティクス~
データに振り回されて失敗した あんなことやこんなこと ~ゲームのために必要な本当の ビジネス・アナリティクス~
 

Ähnlich wie ゲームインフラコンテナ実践導入

【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現UnityTechnologiesJapan002
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Yoshifumi Kawai
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編Fixstars Corporation
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Makoto Haruyama
 
[CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう!
[CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう![CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう!
[CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう!Samir Hammoudi
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platformToru Yamaguchi
 
Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜Kazuki Morozumi
 
GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境Yasutomo Uemori
 
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Appsグリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & AppsGoogle Cloud Platform - Japan
 
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由gree_tech
 
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57Takakiyo Tanaka
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術dena_study
 
OSS強化学習向けゲーム環境の動向
OSS強化学習向けゲーム環境の動向OSS強化学習向けゲーム環境の動向
OSS強化学習向けゲーム環境の動向gree_tech
 
AWS GDC アップデート - Amazon GameLift
AWS GDC アップデート - Amazon GameLiftAWS GDC アップデート - Amazon GameLift
AWS GDC アップデート - Amazon GameLiftAmazon Web Services Japan
 
Game Jamで Asset Serverを使ってみよう♪
Game Jamで Asset Serverを使ってみよう♪Game Jamで Asset Serverを使ってみよう♪
Game Jamで Asset Serverを使ってみよう♪Takashi Jona
 
20180220 AWS Black Belt Online Seminar - Amazon Container Services
20180220 AWS Black Belt Online Seminar - Amazon Container Services20180220 AWS Black Belt Online Seminar - Amazon Container Services
20180220 AWS Black Belt Online Seminar - Amazon Container ServicesAmazon Web Services Japan
 
Amazon Game Tech アマゾンゲームテクノロジー - Amazon Game Tech - GTMF 2018 OSAKA
Amazon Game Tech アマゾンゲームテクノロジー - Amazon Game Tech - GTMF 2018 OSAKAAmazon Game Tech アマゾンゲームテクノロジー - Amazon Game Tech - GTMF 2018 OSAKA
Amazon Game Tech アマゾンゲームテクノロジー - Amazon Game Tech - GTMF 2018 OSAKAGame Tools & Middleware Forum
 
Windows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトWindows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトnormalian
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイントKentaro Matsui
 
Web サービス インフラの近未来
Web サービス インフラの近未来Web サービス インフラの近未来
Web サービス インフラの近未来Syuichi Murashima
 

Ähnlich wie ゲームインフラコンテナ実践導入 (20)

【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
【Unity道場京都スペシャル4】Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
 
Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介Rails on GKEで運用するWebアプリケーションの紹介
Rails on GKEで運用するWebアプリケーションの紹介
 
[CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう!
[CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう![CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう!
[CEDEC 2018] グローバル スケール コネクテッドゲームを GCP で作ろう!
 
ngCore engine for mobage platform
ngCore engine for mobage platformngCore engine for mobage platform
ngCore engine for mobage platform
 
Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜Shiva 〜Nextremerをscale upする機械学習環境〜
Shiva 〜Nextremerをscale upする機械学習環境〜
 
GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境GCP・GKEで作るスケーラブルなゲーム開発環境
GCP・GKEで作るスケーラブルなゲーム開発環境
 
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Appsグリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
グリー株式会社『私たちが GCP を使い始めた本当の理由』第 9 回 Google Cloud INSIDE Game & Apps
 
私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由私たちがGCPを使い始めた本当の理由
私たちがGCPを使い始めた本当の理由
 
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
JJUG CCC 2014 Spring IBM SDK for Java 8の全貌 #jjug_ccc #ccc_r57
 
FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術FFRKを支えるWebアプリケーションフレームワークの技術
FFRKを支えるWebアプリケーションフレームワークの技術
 
OSS強化学習向けゲーム環境の動向
OSS強化学習向けゲーム環境の動向OSS強化学習向けゲーム環境の動向
OSS強化学習向けゲーム環境の動向
 
AWS GDC アップデート - Amazon GameLift
AWS GDC アップデート - Amazon GameLiftAWS GDC アップデート - Amazon GameLift
AWS GDC アップデート - Amazon GameLift
 
Game Jamで Asset Serverを使ってみよう♪
Game Jamで Asset Serverを使ってみよう♪Game Jamで Asset Serverを使ってみよう♪
Game Jamで Asset Serverを使ってみよう♪
 
20180220 AWS Black Belt Online Seminar - Amazon Container Services
20180220 AWS Black Belt Online Seminar - Amazon Container Services20180220 AWS Black Belt Online Seminar - Amazon Container Services
20180220 AWS Black Belt Online Seminar - Amazon Container Services
 
Amazon Game Tech アマゾンゲームテクノロジー - Amazon Game Tech - GTMF 2018 OSAKA
Amazon Game Tech アマゾンゲームテクノロジー - Amazon Game Tech - GTMF 2018 OSAKAAmazon Game Tech アマゾンゲームテクノロジー - Amazon Game Tech - GTMF 2018 OSAKA
Amazon Game Tech アマゾンゲームテクノロジー - Amazon Game Tech - GTMF 2018 OSAKA
 
Windows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイトWindows Azure Media Serviceで作成する割と普通な動画サイト
Windows Azure Media Serviceで作成する割と普通な動画サイト
 
地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント地方企業がソーシャルゲーム開発を成功させるための10のポイント
地方企業がソーシャルゲーム開発を成功させるための10のポイント
 
Web サービス インフラの近未来
Web サービス インフラの近未来Web サービス インフラの近未来
Web サービス インフラの近未来
 

ゲームインフラコンテナ実践導入

Hinweis der Redaktion

  1. みなさんこんばんは。 私からは、ゲームインフラコンテナ実践導入ということで 皆様の酒の肴となるお話になればと思います 私の前にとてもスマートなLTをされてしまいましたが、 私からは、現場レベルでのコンテナ導入についての まあ、なんというか、経験をお話する形になるかと思います。 なので、もっと泥臭い。 現場レベルでのお話、現実的なお話になるかなと思います(笑)
  2. まずは、簡単な自己紹介から
  3. 今日お話ですが、 自社ゲームアプリでコンテナを試用は、GCPですが、 大手ゲームパブリッシャー受託開発案件でのコンテナ導入の項はGCPではなく国内クラウド業者での事例となります。 で、最後にまとめという流れになります
  4. まずは自社ゲームアプリでコンテナ活用について、 えー、若干のアプリの宣伝も兼ねてご紹介したいと思います
  5. このゲームは弊社がR&Dとして開発したフル3Dのレールシューティングゲームで、 タイトルは、ロストニアと言います。 いわゆる雰囲気ゲーに近いものですかね。 七つの大罪をテーマにした世界を、少女が駆け抜けるというゲームです。
  6. 基本的に、少女は攻撃をする術というものは持ち合わせておらず、 プレイヤーは少女を守護する堕天使という位置から様々な敵の襲撃を乗り越えなら進めていきます
  7. 是非、ダウンロードしてみてください。。。と言いたいところなのですが、 現在、カナダ、オーストラリア、イギリスといった限定的な地域でのみ配信しており、 日本での配信はまだ行っておりません。
  8. 自社R&Dのゲームということで、サーバー側もR&Dとしてトライするということで dockerコンテナを使用してみました。
  9. サーバーで管理するデータは、課金履歴とレシートの検証、及び、 ユーザーサポートのための補填データ(いわゆるプレゼントボックスにあたるもの)です。 アプリの性質からアクセス数、頻度ともにそれほど多くないだろうということが予想できましたので、 シンプルな構成にしました。
  10. 構成はこんな感じです。 サーバー構成はGCP上のCompueteEngineを使用し、CoreOSを使用しています この構成からわかるように、割と規模の小さい構成ですので、 コンテナの管理にdocker-composeを使用いたしました。
  11. 構成を簡単に図にするとこのような形になります。 この構成だとロードバランサを使う意味はあまりないのですが、 念のため、将来的な拡張性を考えて、入れています docker-composeはマルチホスト間のコンテナのリンクには対応できませんから、 必然的にサーバー#1やサーバー#2,3といったホスト単位での構築となります。 dockerコンテナ間でlinkを指定している部分は、サーバー#1のNginx->Unicornの部分のみで、 サーバー#1とサーバー#2の接続はサーバー#2のホスト情報をdocker-composeに直に記載してあります。
  12. これは先ほどのサーバー#1にあたるdocker-composeの設定ファイルです。 パスワードはアスタリスクで伏せてあります。 サービスディスカバリーなど使用していませんので、接続先ホストのIPアドレスも直に記述しています。 このように、docker-composeの設定はYAMLで記述でき、ポート情報や環境変数、リソースの使用制限、 再起動時の挙動などを一通り指定することができます。 シングルホスト構成であれば、ほぼこれでこと足りるかと思います。 例えば、restartではコンテナが落ちた時の振る舞いを設定できますし、 mem_limitなどでは使用メモリを制限したり、ボリュームとしてアタッチするコンテナであったり、 リンクするコンテナなども指定できます。
  13. なお、この青と緑の枠はローリングアップデート用の設定です。 docker-composeのYAMLにはこのように、rails_blueとrails_greenという2つのコンテナ情報を記述しています。 rails_blueはポート3000、rails_greenはポート3001として 予め、nginxのconfigの方に80番と443番からのアクセス時にリバースプロキシーするように登録してあります。
  14. Appコンテナのデプロイの手順は大まかに説明しますと、こんな感じになります。 ・ポート3001で待ち受けるAppコンテナを新たに立ち上げます。 ・立ち上がったら、ポート3001(rails_green)に一旦トラフィックを切り替えます。 (これはnginxのコンフィグを書き換えてリロードします) ・次にポート3000にあたるrails_blueコンテナを落とし、新しくしたものを起動します。 ・ポート3000のコンテナの再起動が完了したあと、nginxのコンフィグを元の3000に通していた設定に戻し、リロードします。 ・ポート3001(rails_green)をシャットダウンします Blue/Greenを交互に切り替える、ポートをインクリメントしていくなどの方式もありますが、 どちらも、その状態を管理する必要が出てくるので、3000>3001>3000と戻すことでこの管理をせずに済むようにしてあります。 という流れになります。
  15. 次にMySQLのコンテナですが、MySQLサーバーコンテナとbusyboxを使ったデータコンテナで構成しました。
  16. MySQLサーバーコンテナは、my.cnfを設定したものをビルドしてコンテナイメージです。 busyboxコンテナはmysqlのdatadirの保存先として使用し、このコンテナはMySQLサーバーコンテナからボリュームとしてアタッチされます。 バックアップの時は、busyboxの中にあるdatadirを丸ごと固めて、ホストOSに保存し、それをCloud Storageに転送しています。 busyboxをデータコンテナとして使用する理由は2つあって、 ・仮にMySQLサーバーコンテナがダウンした時に、一緒にdatadirの中身も失われてしまうリスクを避けるため ・ホストOSの環境を汚さないという点 という点ですね。
  17. Lostniaというアプリは大体こんな感じで、特に問題もなく安定稼働している状況です。 もともと、R&Dでスタートしたプロジェクトでしたので、新しいここみの一環として インフラにコンテナ使った事例となります。 docker-composeは導入が非常に簡単なので、 あまりつまづかずにすんなり導入できると思います。
  18. 次に、コンテナを大手パブリッシャーの受託開発案件で導入した話をしたいと思います。 こちらはプロトタイプの開発での事例ということになります。 内容については、NDAに触れる部分がありますので、ちょっとご紹介はできないのですが、 こちらの案件では、全面的なコンテナベースのインフラを構築したものなります。 この事例はクライアントがいる案件で、初のコンテナ導入ですので、とてもチャレンジングでした。 今回のお話の本丸はこちらです。
  19. 構築するにあたり、商用を意識するということで行いました。 つまり、マルチホスト構成です。
  20. Lostniaのケースとは打って変わった構成です。 まずはCoreOSのクラスタをしっかり構築しています。 クラスタ全体の情報を管理するためのetcd2を、3台マスター専用として立て、他はそのproxyとして参加としました。 サーバー側のプログラムには、より実行速度とメモリ効率のよりプログラム言語、そして何よりdockerと相性が良いGo言語を採用することに。 これは以前、ブラウザゲームをRails4で組んだのですが、メモリの消費が富豪的でサーバーコストが肥大化したことがありましたので、 速度的にもネイティブとして実行できるGO言語を選択しました。 また、バトルサーバーはリアルタイム通信を要求するものでしたので、WebSocketを使用し、クライアントとのデータのやり取りには FlatBuffersを使用しています。
  21. 先ほどの構成をざっくり図にするとこのような形になります。 詳細まで説明していると、時間が足りませんので、主要な部分だけ。 App/マッチング/バトルサーバーコンテナがいるホストにはHAProxyコンテナも同居させ、 そのHAProxyを介してDBやRedisにアクセスするようになっています。 RedisClusterのマスタは落ちるとSlaveが自動的にマスタに昇格するようにしていますが、 この時のどのノードがマスタなのかをHAProxyで管理することにしたのですが、 これを実現するためには解決しなければいけない問題がいくつかありました。
  22. まず、ホストをまたぐコンテナをどう繋ぐか?です。
  23. docker-composeではdockerのlink機能を使ってコンテナ間の接続していましたが、 別ホストにいるコンテナに繋ぐことはできません。
  24. さらに、dockerコンテナは起動されるまでIPアドレスが確定しません。 これも合わせてなんとかする必要があります
  25. 最初に、ホストをまたぐコンテナ間の通信についてですが、 これはflannelを使用しています flannelを導入するとflannel0というネットワークデバイスが出現します。(ipコマンドなどで確認できます) これによりコンテナを起動する時に、flannel0のサブネット内IPアドレスが割てられるようになり、 このIPアドレスを使用してコンテナ間で通信することができるようになります。 これで、ホストを跨いだコンテナ間の通信ができるようになりました。
  26. 次に、起動の度に変化するコンテナIPをどう管理するか?という点です。 これはサービスディスカバリーの機能があれば対応できます。
  27. 具体的にはconsulをサービスディスカバリーとして使用しました。 また、これだけですと、consulへの登録/削除は自前で行わなければいけませんので、 dockerの起動/終了を検知してconsulに登録/削除を行ってくれるregistratorも合わせて起動させます。 consulに登録されたサービスは、.service.consulという名前で引けるようになり、 これで自ホスト内のconsulに問い合わせれば、目的のコンテナを発見できるようになりました。 先のホスト間の疎通はflannelで既に可能になっているので、晴れてどのホストにいようとも 目的のコンテナに対してアクセスすることができるようになりました!
  28. 苦労した点が幾つかあるのですが、 これはその中でも特に苦労した点をご紹介したいと思います。
  29. 実は、Redis Clusterにはクラスタリング設定をする際、 ドメイン名で設定できないという仕様があります。注)3.2.1現在。 サービスディスカバリーでせっかくドメインで管理できるようになったのにもかかわらず、 RedisClusterだけはIPオンリーなんですね。
  30. これは、どうやって解決したかと言うと、 こんな風に頑張りました。 etcd2でクラスタ構成を記録しておき、コンテナが再起動する度に、 クラスタ管理情報である、node.confを動的に書き換えて起動するという、かなーり泥臭いことをしています もしRedisClusterにドメインが使えていたら、この対応がまるっと削れていた部分です。 これは非常に複雑になりました。 ちなみに、こんなことしなくてもいい方法があるよ。ってのをご存知の方がいましたら、 後でこっそり私に教えてくださいw なお、MariaDBの方は、ドメイン指定ができますので、 別段話すこともないかなと思い、割愛いたしました。
  31. コンテナのデプロイですが、 これにはfleetを使用しています。 構築ツールはAnsibleを使用していまして、 Ansibleからfleetctlを使ってデプロイします。 各サーバーは幾つか依存するコンテナもありますので、 関連のあるコンテナごとに振り分けていきます。 振り分けは、あらかじめマシンごとにmetadataを設定しておき、 この情報を元に、デプロイしていきます。 例えば、apiサーバーをデプロイする場合は、metadata=apiに対して、と行った感じです。
  32. これで、なんとか目標の構成通りになりました。
  33. で、ぶっちゃけコンテナっていいの?って話なんですが、、、
  34. 私個人の感想としては、主なメリットとデメリットはこんな感じかと。 やはりDBのクラスタリングが大変。 クラスタを初期化するために、期待する数のコンテナを立ち上げる必要性があるとか、 そういった部分ですね。 立ち上がりさえすれば、クラスタリング構成が正常に動作するように 調整する必要がありますので。
  35. 先の例ですと、RedisClusterはコンテナ化する方が大変でしたので。 コンテナである方が都合が良いものとそうでないものがあると思います。 従って、適材適所で使っていくのがいいのかなと思っています。
  36. と、ここまででいろいろお話させていただきましたが、 フェイルオーバー、スケーリング、ロードバランス、サービスディスカバリー、ローリングアップデート などなどをKubernetesでカバーできますので、 本当に一からコンテナベースでインフラを組む場合は、頑張ってくださいって感じになりますね(笑) なので、私は今後はKubernetesを使っていくことを考えています。 なんか、Kubernetesがどれだけ良いかみたいなLTになってしまいましたけど、 まあ、1から組んだ苦労があったからこそ、Kubernetesの有り難さを実感できたのということです。 短い時間で、説明しきれなかった部分がもあり、駆け足でしたが、 私からは以上となります。
  37. ご清聴ありがとうございました。