feat: 定期実行(CronJob)機能を追加
Helm Chart Release / release-chart (push) Successful in 5s

cron.jobs(配列)にジョブを定義すると、php-fpmと同じPHPイメージを使う
Kubernetes CronJobをジョブごとに生成する。

- templates/cronjob.yaml(新規): PVCルートを/var/wwwにマウントし、
  externalDatabase/phpEnv/extraEnv/extraEnvFrom/SELENIUM_URLをphp-fpm
  コンテナと同じ内容で注入。smtp.enabled時はmsmtpも自動導入。
- templates/_helpers.tpl: phpfpm.cron.name/selectorLabelsを追加。
  Selenium分離と同じ理由で、生成PodのラベルをDeploymentのselectorと
  衝突しないバリアント名(<chart>-cron)にする。
- values.yaml: cronセクションを追加(既定は空配列で無効)。
- README.md: パラメータ表と使用例、Composer/Pythonとの併用時の注意点
  (デフォルトの使い捨て領域はCronJobから見えないため、永続化パスへの
  変更が必要)を追加。

templates/deployment.yamlは変更していない(既存Deploymentへの影響なし)。
手動リリース 8.5.10-e。
This commit is contained in:
2026-09-27 16:26:18 +09:00
parent c7397b3c9d
commit 6cd35ce023
6 changed files with 260 additions and 1 deletions
+37
View File
@@ -187,6 +187,43 @@ v8.5.10-b以降、Seleniumは独立したDeployment/Service(`<release>-phpfpm-
`selenium.enabled: true`のとき、php-fpmコンテナの`SELENIUM_URL`環境変数は自動的にこのServiceを指す値(`http://<release>-phpfpm-selenium:4444/wd/hub`)に設定される。`phpEnv.SELENIUM_URL`を独自に指定していても、この自動注入された値が優先される。
### Cron(定期実行)設定
`cron.jobs`に1件以上定義すると、php-fpmと同じPHPイメージ(`image.php`)を使ってスケジュール実行するKubernetes CronJobが、ジョブごとに1つずつ作成される。既定は空配列で、何も作成されない。
| パラメータ | 説明 | デフォルト |
|-----------|------|-----------|
| `cron.jobs` | CronJob定義の配列 | `[]` |
| `cron.jobs[].name` | ジョブ名(英数字とハイフン、CronJob名の一部に使用) | 必須 |
| `cron.jobs[].schedule` | 標準cron形式のスケジュール | 必須 |
| `cron.jobs[].command` | 実行するシェルコマンド(文字列) | 必須 |
| `cron.jobs[].timeZone` | タイムゾーン(Kubernetes 1.27+) | 省略時UTC |
| `cron.jobs[].concurrencyPolicy` | `Allow`/`Forbid`/`Replace` | `Forbid` |
| `cron.jobs[].restartPolicy` | `OnFailure`/`Never` | `OnFailure` |
| `cron.jobs[].successfulJobsHistoryLimit` | 成功ジョブの保持数 | `3` |
| `cron.jobs[].failedJobsHistoryLimit` | 失敗ジョブの保持数 | `1` |
| `cron.jobs[].activeDeadlineSeconds` | 実行タイムアウト(秒) | 省略可 |
| `cron.jobs[].suspend` | `true`でこのジョブだけ一時停止 | `false` |
| `cron.jobs[].resources` | CPU/メモリ requests・limits | `resources.phpfpm`を流用 |
```yaml
# values.yaml
cron:
jobs:
- name: daily-report
schedule: "0 18 * * *"
timeZone: "Asia/Tokyo"
command: "php /var/www/html/cron/daily-report.php"
```
> **📌 CronJobの構成について**
> - PVCルートを`/var/www`にマウントする(php-fpmコンテナと同じ)。`html/`配下の公開コード、または非公開ディレクトリのスクリプト・出力先どちらも利用できる。
> - `externalDatabase` / `phpEnv` / `extraEnv` / `extraEnvFrom` / `SELENIUM_URL`(selenium有効時)は、php-fpmコンテナと同じ内容が渡される。
> - `smtp.enabled: true`の場合、CronJobのPodでも自動的にmsmtpを導入してmsmtprcを配置するため、PHPの`mail()`関数がそのまま使える。
> - **Composer/Pythonとの併用**: `composer.workingDir`/`python.venvDir`が既定の`/composer`・`/venv`(PVC非マウントの使い捨て領域)のままだと、php-fpmの常駐Pod内にしか存在しないためCronJobからは使えない。CronJobから使いたい場合は`composer.workingDir: "/var/www/composer"`のように`/var/www`配下へ変更し、PVC上に永続化すること。
> - CronJobの名前は52文字を超えないよう自動的に切り詰められる(Kubernetesの制約)。`cron.jobs[].name`は短く分かりやすい名前にすること。
> - 生成されるPodのラベル(`app.kubernetes.io/name`)は`<chart>-cron`というバリアント名になっており、nginx/php-fpmのDeploymentのselectorとは一致しない(Selenium分離と同じ設計)。
### 外部データベース設定
| パラメータ | 説明 | デフォルト |