Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
K8s 上で laravel を 快適に運用する方法
Search
COLOPL Inc.
September 28, 2023
Technology
2.3k
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
420
Copilot / Claude Code 両方で使えるスキル・ハーネスの紹介 - Claude Codeスキル・ハーネス社内勉強会
colopl
0
560
実務で動くAIエージェントを作ろう!MCP×Mastraをライブコーディングで実践
colopl
0
490
Cloud Runでコロプラが挑む 生成AI×ゲーム『神魔狩りのツクヨミ』の裏側
colopl
0
2.6k
PHPStan をできる限り高速化してみる
colopl
1
1.4k
コロプラ最新作インフラ構成について
colopl
0
380
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
2.5k
コロプラのオンボーディングを採用から語りたい
colopl
7
2.9k
怖くない!ゼロから始めるPHPソースコードコンパイル入門
colopl
1
1k
Other Decks in Technology
See All in Technology
作って終わりじゃないサーバーレス 〜9年運用する大規模EC物流API基盤の設計・運用のリアル〜
zozotech
PRO
0
350
AI coding 整合正規方法
philipz
0
390
C#コードの結合を可視化する Roslyn解析による設計改善と リファクタリング判断
dora56
0
230
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
3
650
AI 時代のスタートアップエコシステ厶から考究する技術的負債との向き合い方
m3m0r7
PRO
3
2.3k
バイブコーディング時代のWebアプリ開発入門~Cloud Runで学ぶセキュアなビルドとデプロイ
waiwai2111
1
140
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2.1k
SREへの勘違いに気づいた後の話
tomodakengo
0
110
Cloudflare Workers 向けアプリを C# で構築する ~WASM Native AOT への道~
nenonaninu
1
600
Issue 駆動でスペシャリストの意図を届ける、AI 実装のアクセシビリティ向上
thkt
0
120
GoのInterface内部構造から学ぶ!最高パフォーマンスを出すコード設計
yappli_developers
1
210
登壇の自信を奪う3匹のオバケ / 3 Ghosts That Rob You of Your Confidence in Public Speaking
pauli
9
1k
Featured
See All Featured
The Spectacular Lies of Maps
axbom
PRO
1
1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
360
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
Building Adaptive Systems
keathley
44
3.2k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1k
Done Done
chrislema
186
16k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
The Language of Interfaces
destraynor
162
27k
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