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
K8s 上で laravel を 快適に運用する方法
Search
COLOPL Inc.
September 28, 2023
Technology
2.2k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
K8s 上で laravel を 快適に運用する方法
COLOPL Inc.
September 28, 2023
More Decks by COLOPL Inc.
See All by COLOPL Inc.
Claude Code 再入門 会話の渡し方の4つの道具 - Claude Codeスキル・ハーネス社内勉強会
colopl
0
310
Copilot / Claude Code 両方で使えるスキル・ハーネスの紹介 - Claude Codeスキル・ハーネス社内勉強会
colopl
0
330
実務で動くAIエージェントを作ろう!MCP×Mastraをライブコーディングで実践
colopl
0
440
Cloud Runでコロプラが挑む 生成AI×ゲーム『神魔狩りのツクヨミ』の裏側
colopl
0
2.5k
PHPStan をできる限り高速化してみる
colopl
1
1.3k
コロプラ最新作インフラ構成について
colopl
0
350
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
2.4k
コロプラのオンボーディングを採用から語りたい
colopl
7
2.9k
怖くない!ゼロから始めるPHPソースコードコンパイル入門
colopl
1
970
Other Decks in Technology
See All in Technology
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
140
20分でわかるセキュアAPI
nwiizo
2
260
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
1.2k
FPGAが実現する遠方宇宙の高空間分解能天体撮影 -大型地上望遠鏡の視力を補正する「補償光学」とは?-
komei_mt
0
230
今こそ聞きたいソフトウェア設計 ドメイン駆動設計再入門
masuda220
PRO
17
7.2k
Webアクセシビリティ入門 2026
recruitengineers
PRO
3
560
ガバメント AI 源内を地方自治体は活用できるのか可能性と課題、期待について
takeda_h
1
400
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.8k
FDEの心得
noriakioji
4
5k
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
250
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
0
270
Agent 時代の Kaggle 展望 / kaggle-in-the-agentic-era
upura
1
710
Featured
See All Featured
Tell your own story through comics
letsgokoyo
1
1k
Designing Powerful Visuals for Engaging Learning
tmiket
1
490
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
230
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
The Pragmatic Product Professional
lauravandoore
37
7.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
25k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
66
57k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
640
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
Docker and Python
trallard
47
4.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Transcript
K8s 上で laravel を 快適に 運用する方法 尾山貴康 2023年9月27日 (水) 1
氏名 : 部署 : 自己紹介 尾山 貴康 2 • コロプラ(8年目)
• 日々の業務 ◦ 社内ライブラリのメンテ ◦ OSSへのコントリビュート ◦ コンテナのチューニング 技術基盤本部 第3バックエンドエンジニア部 サーバー基盤グループ PEチーム
基盤開発チームではゲーム開発側に極力ゲームのロジックに 集中してもらえるように様々なをサポートしています • 大規模なトラフィックに耐えられる設計の検証と実装 • 共通処理や便利機能などのライブラリー化 • バージョンアップのフォロー • 共通コンテナや
Kubernetes 設定の整備 3
目次 4 • Kubernetes で使用しているPHPコンテナの紹介 • アプリに入れている Kubernetes 向けの工夫
社内専用のPHPコンテナ • Alpine Linux ベースのコンテナにゲーム開発に必要なものを詰め込んだもの • プロジェクト側ではこのイメージをベースに固有のものをいれていく • 簡単に拡張したり調整できるような工夫が入っている •
そのなかでも特徴的なものを5つ紹介 5
自社コンテナの特徴1 • docker-php-ext-install の pecl 版 • pecl install の代わりにこれを使う
• pecl install との違い ◦ インストールオプションが渡せる ▪ redis の --enable-redis-igbinary など ◦ バイナリのデバッグシンボルを strip する ▪ grpc などは 140MB → 7MB docker-php-pecl-install というスクリプトの追加 6
自社コンテナの特徴2 PHP の設定ファイル (.ini) の一部を環境変数で指定可能にしている opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMP} FROM colopl/php:latest AS local-build
ENV PHP_OPCACHE_VALIDATE_TIMESTAMP=on ローカルでは validate_timestamps を on それ以外は off など簡単に切り替え可能 opcache.ini Dockerfile 7 余談)PHP 8.3 からはデフォルトフォールバックも使えるらしい opcache.validate_timestamps=${PHP_OPCACHE_VALIDATE_TIMESTAMP:-off}
自社コンテナの特徴 3 • ENTRYPOINT に docker-entrypoint.sh を登録する • /etc/entrypoint.d というパスにある
スクリプトを上から順番に実行するスクリプト • ENTRYPOINT を上書きせずに処理を追加できるので便利 • nginx のオフィシャルコンテナのを参考にした ※ K8s の preStop 時に同じことをする docker-exitpoint.sh も配置しています entrypoint.d によるマルチステップな起動 8
自社コンテナの特徴 4 • ヘルスチェック系 • メトリクス系 Kubernetes で必要なエンドポイントを追加している 9
自社コンテナの特徴 4 ヘルスチェック系 /var/www/readyz.php if (@file_exists('/run/nginx.health') === false) { header('HTTP/1.1
404 Not Found'); } touch /run/nginx.health /etc/entrypoint.d/99-ready.sh 10 • livez • readyz readyz の仕組み
• 以下をデフォルトで提供 ◦ nginx ◦ php-fpm / opcache / apcu
自社コンテナの特徴 4 メトリクス系 11
• メトリクス取得フロー ◦ /metrics を叩く ◦ /var/www/metrics/all.php が実行される ◦ /var/www/metrics
配下の php ファイルが include される • 独自のメトリクスを追加したかったら /var/www/metrics に php ファイルを追加するだけでOK 自社コンテナの特徴 4 メトリクスも拡張可能 12
自社コンテナの特徴 5 13 Supervisor を使って複数のプロセスを管理 • アプリの役割に応じて 起動したいものを /etc/supervisor.d に追加
• デフォルトでは nginx / php-fpm を起動 • G社的にはアンチパターンらしい1 • Docker 社は推奨している2 • G社の言いたいことはわかるが 利便性&パフォーマンス優先 1. https://cloud.google.com/architecture/best-practices-for-building-containers#package_a_single_app_per_container 2. https://docs.docker.com/config/containers/multi-service_container
アプリ側に入れている工夫 1 Server Roles • バックエンドアプリの役割は API への Request 処理だけではない
◦ キューの処理 / バッチ処理 / 管理ツール など • 同じコードをデプロイするが役割によって起動するものが違う ◦ キューワーカー → php artisan queue:work ◦ バッチ処理 → supercronic (cron) 14
Server Roles • 弊社では役割を環境変数に定義しコンテナ内で区別できるようにしている ◦ ROLES=[cron,queue] • 具体的には各役割毎に K8s の
Deployment 定義を分けている ◦ app, queue, cron, tool, etc... • Deployment に ROLES を定義してコンテナに渡す アプリ側に入れている工夫 1 15
Server Roles 活用例 • Role が cron の時だけ supercronic を
supervisor に登録 • Role が queue の時だけ artisan queue:work を supervisor に登録 • Role が tool の時だけ管理ツール用の route を出力 アプリ側に入れている工夫 1 16
アプリ側に入れている工夫 2 app:prepare コマンド 17 使い方 • entrypoint.d に app:prepare
を呼び出すスクリプトを追加しておく • プロジェクト側でApplicationPreparing にフックして起動時に実行したい 処理を追加する container 起動時に app:prepare というコマンドが実行される app:prepare コマンドとは? • ApplicationPreparing というイベントを発行するだけのコマンド
アプリ側に入れている工夫 2 app:prepare コマンド 18 ApplicationPreparing イベントで行っていることの一例 • Twemproxy (sidecar)
の疎通待ち • Cloud Spanner のコネクションプールの初期化 ※ app:shutdown もある
19 Fin