Helm Chart Release / release-chart (push) Successful in 9s
既存のnginx/php-fpm Deploymentのspec.selector.matchLabelsにapp.kubernetes.io/component:webを追加していたが、Deployment.spec.selectorは作成後immutableのためhelm upgradeが'field is immutable'で失敗していた。既存Deploymentのselectorは元の内容(name+instanceのみ)に戻し、Selenium側はcomponentラベルではなくapp.kubernetes.io/name自体を<chart名>-seleniumという別名にする方式(新ヘルパーphpfpm.selenium.name/phpfpm.selenium.selectorLabels)に変更した。componentラベルだけを足す設計だとSeleniumのPodもnginx/php-fpm側Deploymentのselectorに一致してしまいReplicaSetの選択重複を起こすため、name自体をvariantにして構造的に防止する。v8.5.10-bは既存リリースへの適用不可のためスキップし、v8.5.10-c以降を使うこと。
3.1 KiB
3.1 KiB
Changelog - Version 8.5.10-c
不具合修正
v8.5.10-b の Selenium分離が既存リリースのアップグレードを壊す問題を修正
v8.5.10-b で Selenium を独立 Deployment/Service に分離した際、既存の nginx/php-fpm
Deployment の spec.selector.matchLabels に app.kubernetes.io/component: web を
追加した。しかし Deployment.spec.selector は作成後 immutable であり、
既存リリースを helm upgrade すると次のエラーで失敗する。
cannot patch "<release>-phpfpm" with kind Deployment: Deployment.apps "<release>-phpfpm"
is invalid: spec.selector: Invalid value: ...: field is immutable.
対応
- 既存の nginx/php-fpm Deployment の
spec.selector.matchLabelsは 元の内容(app.kubernetes.io/name+app.kubernetes.io/instanceのみ)に戻し、 以後も変更しない。 - Selenium 側は
app.kubernetes.io/componentラベルではなく、app.kubernetes.io/name自体を<chart名>-seleniumという別名にする方式に変更した (新ヘルパーphpfpm.selenium.name/phpfpm.selenium.selectorLabels。templates/_helpers.tpl)。component ラベルを足すだけの設計だと、Selenium の Pod も nginx/php-fpm 側 Deployment の selector(name+instance)に一致してしまい、 2つの Deployment(ReプリカSet)が同じ Pod 集合を取り合う selector 重複を起こすため、 name 自体を variant にして構造的に重複を防止する。 templates/deployment-selenium.yaml/templates/service-selenium.yamlの selector・pod template labels をこの新ヘルパーに合わせて修正。app.kubernetes.io/component: seleniumは情報用のラベルとして pod template には 引き続き付与する(selector には使わない。README のkubectl logs -l app.kubernetes.io/component=selenium等の運用コマンドはそのまま使える)。- メインの Service(
<release>-phpfpm)の selector に残したapp.kubernetes.io/component: webは Service の selector なので immutable 制約は 受けず、そのまま維持している(Selenium 側が別名になったことで実質不要になったが、 害はないため多層防御として残す)。
v8.5.10-b をまだ適用していない場合: 8.5.10-b は上記のバグを含むため、 直接 8.5.10-c 以降を適用すること。
v8.5.10-b の適用に失敗した場合(今回のエラーが出た場合): リリースは
アップグレードに失敗した時点のリビジョンのままのはずなので、Chart version を
8.5.10-c に変更して再度アップグレードすればよい(追加の手動復旧は不要)。
対象ファイル: templates/_helpers.tpl, templates/deployment.yaml,
templates/deployment-selenium.yaml, templates/service-selenium.yaml, Chart.yaml,
CHANGELOG-8.5.10-c.md
アップグレード手順
helm repo update
helm upgrade <リリース名> cafepieters/phpfpm --version 8.5.10-c -f values.yaml
リリース日: 2026-09-26 担当: プロサーバーエンジニア(Claude)