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
gree_tech
PRO
June 27, 2019
Technology
0
280
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
コミュニケーションに鍵を見いだす、エンジニア1年目の経験談
gree_tech
PRO
0
130
REALITY株式会社における開発生産性向上の取り組み: 失敗と成功から学んだこと
gree_tech
PRO
2
1.8k
『ヘブンバーンズレッド』におけるフィールドギミックの裏側
gree_tech
PRO
2
600
セキュリティインシデント対応の体制・運用の試行錯誤 / greetechcon2024-session-a1
gree_tech
PRO
1
610
『アナザーエデン 時空を超える猫』国内海外同時運営実現への道のり ~別々で開発されたアプリを安定して同時リリースするまでの取り組み~
gree_tech
PRO
1
580
『アサルトリリィ Last Bullet』におけるクラウドストリーミング技術を用いたブラウザゲーム化の紹介
gree_tech
PRO
1
660
UnityによるPCアプリの新しい選択肢。「PC版 Google Play Games」への対応について
gree_tech
PRO
1
1k
実機ビルドのエラーによる検証ブロッカーを0に!『ヘブンバーンズレッド』のスモークテスト自動化の取り組み
gree_tech
PRO
1
690
"ゲームQA業界の技術向上を目指す! 会社を超えた研究会の取り組み"
gree_tech
PRO
1
820
Other Decks in Technology
See All in Technology
興味の胞子を育て 業務と技術に広がる”きのこ力”
fumiyasac0921
0
290
「手を動かした者だけが世界を変える」ソフトウェア開発だけではない開発者人生
onishi
15
7.6k
人と生成AIの協調意思決定/Co‑decision making by people and generative AI
moriyuya
0
160
複数のGemini CLIが同時開発する狂気 - Jujutsuが実現するAIエージェント協調の新世界
gunta
13
3.8k
Shadow DOM & Security - Exploring the boundary between light and shadow
masatokinugawa
0
760
「AI駆動開発」のボトルネック『言語化』を効率化するには
taniiicom
1
210
激動の時代、新卒エンジニアはAIツールにどう向き合うか。 [LayerX Bet AI Day Countdown LT Day1 ツールの選択]
tak848
0
610
Snowflake のアーキテクチャは本当に筋がよかったのか / Data Engineering Study #30
indigo13love
0
280
なぜAI時代に 「イベント」を中心に考えるのか? / Why focus on "events" in the age of AI?
ytake
2
800
増え続ける脆弱性に立ち向かう: 事前対策と優先度づけによる 持続可能な脆弱性管理 / Confronting the Rise of Vulnerabilities: Sustainable Management Through Proactive Measures and Prioritization
nttcom
1
210
Webの技術とガジェットで那須の子ども達にワクワクを! / IoTLT_20250720
you
PRO
0
130
自分がLinc’wellで提供しているプロダクトを理解するためにやったこと
murabayashi
1
170
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Become a Pro
speakerdeck
PRO
29
5.4k
The World Runs on Bad Software
bkeepers
PRO
70
11k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
110
19k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Six Lessons from altMBA
skipperchong
28
3.9k
Navigating Team Friction
lara
187
15k
GraphQLとの向き合い方2022年版
quramy
49
14k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
283
13k
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でつらい