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.
実務で動くAIエージェントを作ろう!MCP×Mastraをライブコーディングで実践
colopl
0
350
Cloud Runでコロプラが挑む 生成AI×ゲーム『神魔狩りのツクヨミ』の裏側
colopl
0
2.3k
PHPStan をできる限り高速化してみる
colopl
1
840
コロプラ最新作インフラ構成について
colopl
0
320
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
2.4k
コロプラのオンボーディングを採用から語りたい
colopl
7
2.8k
怖くない!ゼロから始めるPHPソースコードコンパイル入門
colopl
1
910
大規模トラフィックを支える ゲームバックエンドの課題と構成の変遷 ~安定したゲーム体験を実現するために~
colopl
3
8.7k
長期運用プロジェクトでのMySQLからTiDB移行の検証
colopl
3
2k
Other Decks in Technology
See All in Technology
【セミナー資料】Claude Code をセキュアに使うための考え方と設定の勘どころ / Claude Code Webinar 20260616
masahirokawahara
2
350
不要なレビューをAIにまかせて AIコーディングの環境改善を加速した
shoota
1
110
MCP Appsを作ってみよう
iwamot
PRO
4
660
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
270
SONiCの統計情報を取得したい
sonic
0
170
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
4
2.4k
AmazonRoute 53ではじめてのドメイン取得!HTTPS化までの道のりを整理してみた
usanchuu
3
140
ACE-Step-1.5で見る 音楽生成AIのしくみと“破綻だけ直す”Retake機能の開発【zennfes spring 2026 登壇資料】
personabb
1
480
手塩にかけりゃいいってもんじゃない
ming_ayami
0
580
Claude Code の Sandbox 機能を Anthropic Sandbox Runtime(srt) で試そう!/lets-play-anthropic-sandbox-runtime
tomoki10
1
610
AIソロプレナー時代に2ヶ月で20人増員した事業創造会社の開発組織の話
miyatakoji
0
670
機械学習を「社会実装」するということ 2026年夏版 / Social Implementation of Machine Learning June 2026 Version
moepy_stats
5
2.4k
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
390
How to Talk to Developers About Accessibility
jct
2
230
Leo the Paperboy
mayatellez
7
1.8k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
330
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
270
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.3k
HDC tutorial
michielstock
2
710
ラッコキーワード サービス紹介資料
rakko
1
3.6M
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
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