fix: Seleniumを独立Deployment/Serviceに分離しresourcesの死んだ設定を修正
Helm Chart Release / release-chart (push) Successful in 6s

selenium.enabled=true構成でphp-fpmのCrashLoopBackOffとサイト完全停止が続いた件を調査し、2つの設計上の欠陥を確認した。(1) resources values キーがテンプレートで一切参照されておらず、全コンテナがQoS Class: BestEffortで動作しOOM Killされやすい状態だった。(2) nginx/php-fpm/SeleniumをすべてSelenium同一Podで起動しており、Kubernetesの Pod Ready判定(全コンテナのAND)により、Seleniumだけが不調でもPod全体がServiceのEndpointsから外れ、Seleniumを使わない静的ページ配信まで巻き込まれてサービス全体が停止していた。対応: Seleniumを独立Deployment(<release>-phpfpm-selenium)/Serviceに分離し、SELENIUM_URLを自動注入。resourcesをnginx/phpfpm/selenium個別に構造化して実際にコンテナへ反映されるよう修正。詳細はCHANGELOG-8.5.10-b.md参照。
This commit is contained in:
2026-09-26 08:05:10 +09:00
parent 6eb1c24732
commit 86cd705d06
9 changed files with 307 additions and 37 deletions
+36 -2
View File
@@ -179,9 +179,27 @@ python:
# - "python3-dev"
# - "jpeg-dev"
# Selenium設定(レガシー互換性維持)
# Selenium設定
# v8.5.10-b以降、Selenium(有効時)はnginx/php-fpmと同一Podのサイドカーではなく、
# 独立したDeployment/Service(<release>-phpfpm-selenium)として起動する。
# 理由: サイドカー方式だとSelenium単体の不調(起動失敗・OOM等)でPod全体がReady=false
# になり、Seleniumを使わない静的ページ配信まで巻き込まれてサービス全体が止まっていた。
# php-fpmコンテナのSELENIUM_URL環境変数は、enabled:true時に自動でこのServiceを指す
# (phpEnvで独自に設定しても、こちらの値が優先される)。
selenium:
enabled: false
# Selenium Deployment自体のレプリカ数
replicaCount: 1
# Chromiumはメモリを多く使う。ノードのメモリ枯渇によるOOM Killを防ぐため、
# 実運用では必ずrequests/limitsを設定することを推奨する(下記resourcesセクション参照)。
resources: {}
# trueにすると、SeleniumコンテナにもPVCのhtmlサブパスを/var/www/htmlとしてマウントする
# (ブラウザのダウンロード先を公開ディレクトリに置きたい場合など)。別Podからの同時マウント
# になるため、有効にする場合はpersistence.accessModeをReadWriteMany
# (NFSバックエンドのStorageClassなら対応可能)にする必要がある。
# 通常のスクレイピング用途(スクリーンショット等をstorage/等の非公開領域に保存する場合)
# では不要なため、既定はfalse。
mountHtml: false
externalDatabase:
enabled: false
@@ -254,7 +272,23 @@ smtp:
existingMsmtprcSecret: ""
existingMsmtprcSecretKey: "msmtprc"
resources: {}
# nginx / php-fpm コンテナの CPU/メモリ requests・limits。
# v8.5.10-b より前は本キーがテンプレート側で参照されておらず(死んだ設定)、
# 何を指定してもコンテナには一切反映されない不具合があった(既存デプロイは
# 全コンテナが requests/limits なしの QoS Class: BestEffort になっていた)。
# BestEffortはノードのメモリ逼迫時にOOM Killの対象になりやすいため、
# 本番運用では requests/limits の設定を推奨する。例:
# resources:
# nginx:
# requests: { cpu: "50m", memory: "64Mi" }
# limits: { memory: "128Mi" }
# phpfpm:
# requests: { cpu: "100m", memory: "256Mi" }
# limits: { memory: "512Mi" }
# (selenium用は selenium.resources を参照。Chromiumは256Mi等では確実に不足する)
resources:
nginx: {}
phpfpm: {}
# PHP-FPM コンテナに渡す任意の環境変数
# DB接続情報(externalDatabase)と同様に、values.yamlで設定した値がPHPに環境変数として渡される