Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
KubernetesでPHPを動かした話
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
gree_tech
PRO
June 27, 2019
Technology
0
590
KubernetesでPHPを動かした話
「第139回 PHP勉強会@東京」で発表された資料です。
https://phpstudy.doorkeeper.jp/events/93038
gree_tech
PRO
June 27, 2019
Tweet
Share
More Decks by gree_tech
See All by gree_tech
変わるもの、変わらないもの :OSSアーキテクチャで実現する持続可能なシステム
gree_tech
PRO
0
3.6k
マネジメントに役立つ Google Cloud
gree_tech
PRO
0
43
今この時代に技術とどう向き合うべきか
gree_tech
PRO
3
2.5k
生成AIを開発組織にインストールするために: REALITYにおけるガバナンス・技術・文化へのアプローチ
gree_tech
PRO
0
280
安く・手軽に・現場発 既存資産を生かすSlack×AI検索Botの作り方
gree_tech
PRO
0
280
生成AIを安心して活用するために──「情報セキュリティガイドライン」策定とポイント
gree_tech
PRO
1
1.7k
あうもんと学ぶGenAIOps
gree_tech
PRO
0
420
MVP開発における生成AIの活用と導入事例
gree_tech
PRO
0
440
機械学習・生成AIが拓く事業価値創出の最前線
gree_tech
PRO
0
300
Other Decks in Technology
See All in Technology
AI時代の「本当の」ハイブリッドクラウド — エージェントが実現した、あの頃の夢
ebibibi
0
150
Cortex Code CLI と一緒に進めるAgentic Data Engineering
__allllllllez__
0
500
Copilot 宇宙へ 〜生成AIで「専門データの壁」を壊す方法〜
nakasho
0
120
生成AI活用でQAエンジニアにどのような仕事が生まれるか/Support Required of QA Engineers for Generative AI
goyoki
1
310
VPCエンドポイント意外とお金かかるなぁ。せや、共有したろ!
tommy0124
1
710
「通るまでRe-run」から卒業!落ちないテストを書く勘所
asumikam
2
400
「お金で解決」が全てではない!大規模WebアプリのCI高速化 #phperkaigi
stefafafan
4
1.8k
詳解 強化学習 / In-depth Guide to Reinforcement Learning
prinlab
0
330
品質を経営にどう語るか #jassttokyo / Communicating the Strategic Value of Quality to Executive Leadership
kyonmm
PRO
2
790
Claude Code 2026年 最新アップデート
oikon48
14
11k
Kiro Powers 入門
k_adachi_01
0
120
(Test) ai-meetup slide creation
oikon48
3
470
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
269
14k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Amusing Abliteration
ianozsvald
0
140
Six Lessons from altMBA
skipperchong
29
4.2k
Statistics for Hackers
jakevdp
799
230k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Faster Mobile Websites
deanohume
310
31k
Exploring anti-patterns in Rails
aemeredith
2
290
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
220
Testing 201, or: Great Expectations
jmmastey
46
8.1k
The Invisible Side of Design
smashingmag
302
51k
Unsuck your backbone
ammeep
672
58k
Transcript
で を動かした話 藤田貴大
自己紹介 藤田貴大(@takfjt) グリー株式会社Wright Flyer事業本部Game Publishing部Serverチーム ゲームアプリのサーバエンジニアです
はじめてGKEでゲームサーバを構築 負荷試験とその対策などで携わる 今回は、負荷試験の際に見えてきた Kubernetes上でPHPのサービスを動かしたときの躓き を紹介したいと思います はじめに
Kubernetesそのものの話はしません PHP、コンテナ、Kubernetesに関する話は ふんわりまざっています 厳密じゃないです と、いうことで
「ホストのクラスターを横断してアプリケーションコンテ ナを自動デプロイ、スケーリング、操作するためのプ ラットフォーム」 「Kubernetes」(参照 2019-03-19) 『ウィキペディア日本語版』 Kubernetesとは
Apacheパラメータ未調整問題
なんか遅いなーと思って調べたらApacheの パラメータに調整すべきところがいくつかあった
いままで、php.iniくらいまではインフラチームの担当範 囲だった コンテナを導入すると、Dockerfileくらいまではゲーム チームの担当範囲になる → chefなどからノウハウを回収
DNS Lookup溢れる問題
高負荷をかけるとDNS Lookupのエラーが頻発 kube-dnsのCPUが100%にはりついていた
Kubernetes DNS service1 kube-system DNS kubernetes cluster Cloud SQL Cloud
Spanner Cloud Memorystore The Internet
かなり仕事が多い service1 kube-system DNS kubernetes cluster Cloud SQL Cloud Spanner
Cloud Memorystore The Internet クラスタ内の名前解決 Google Cloud内の 名前解決 インターネット側の 名前解決
PHPであることによる原因 Kubernetesであることによる原因 クラウドであることによる原因 実装による原因 複合的な原因
コネクションプールができない 実際には、PDOでも各種拡張モジュールでも 持続的接続の方法はけっこうあるが、 やったことがなかった → リクエスト毎にDNS Lookup PHPであることによる原因
IPv6をdisableにするなど、OSのコアの設定に 手がだしにくい 使っていないAAAAレコードの問い合わせが多発 PHP(を含めて多くの言語)はOSがIPv6をenableにしてると 問い合わせに行く dns_get_record関数ならAレコードだけ、みたいな制御は効くが、 ext/mysqliにホスト名を渡した時などは制御できない Kubernetesであることによる原因
マネージドサービスを使うと、 基本、名前でエンドポイントが与えられる RDB memcached redis etc... クラウドであることによる原因
テーブル毎に別コネクションになっている ソーシャルゲームの事情で、DBをテーブルで 分割することがよくあり、このような実装 実装による原因
sidecarとしてdnsmasqを動かしておく 原因を1つずつつぶして行くのは厳しかった 解決案
Sidecar方式で解決 service1 kube-system DNS kubernetes cluster Cloud SQL Cloud Spanner
Cloud Memorystore The Internet DNS DNS DNS DNS ご存じの方は、この図だとDaemonSet?って 思うかもしれませんが、実際にはsidecar方式で 解決しました うまい図が浮かばなくてこうなっています。すいません
「みんなのDocker/Kubernetes」にDaemonSetでやってると書いてあっ たのですけど、どうやったらできるか知っている人がいたら教えてくだ さい
だが...
dnsmasq先に死ぬ問題
デプロイ時など、コンテナのシャットダウンが 一斉に開始 httpのコネクションが無くなるまで待機 実際はまだdnsmasqが立ち上がっていない問題もあっ た apacheの起動を53番が開くまで待つ対応も入れた
ついでに宣伝
https://github.com/gree/php-custom-environment-v ariables 連想配列の特定の値を、環境変数をつかって変更で きる コンテナは環境変数で設定したいことが多い getenvだとyamlとかjsonでつらい