{{- define "phpfpm.name" -}} {{- .Chart.Name | trunc 63 | trimSuffix "-" -}} {{- end }} {{- define "phpfpm.fullname" -}} {{- if .Release.Name -}} {{- printf "%s-%s" .Release.Name (include "phpfpm.name" .) | trunc 63 | trimSuffix "-" -}} {{- else -}} {{- include "phpfpm.name" . -}} {{- end }} {{- end }} {{- define "phpfpm.labels" -}} app.kubernetes.io/name: {{ include "phpfpm.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} {{- end }} {{- define "phpfpm.selectorLabels" -}} app.kubernetes.io/name: {{ include "phpfpm.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} {{- end }} {{/* Selenium 用の名前・セレクタラベル(v8.5.10-b)。 nginx/php-fpm の既存 Deployment は spec.selector が作成後 immutable なため、 そちらの selector には手を加えられない("field is immutable" でアップグレードが 失敗する)。そのため Selenium 側は app.kubernetes.io/name 自体を variant ("phpfpm-selenium")にして、nginx/php-fpm の Deployment の selector (name=phpfpm, instance=)とラベルの組が完全に一致しないようにする。 component ラベルだけを足す設計だと、Selenium の Pod も name=phpfpm/instance= を持つため nginx/php-fpm 側 Deployment の selector にも一致してしまい、 2つの Deployment(ReplicaSet)が同じ Pod 集合を取り合う selector 重複を起こす。 name を variant にすることで、この重複を構造的に防止する。 */}} {{- define "phpfpm.selenium.name" -}} {{- printf "%s-selenium" (include "phpfpm.name" .) | trunc 63 | trimSuffix "-" -}} {{- end }} {{- define "phpfpm.selenium.selectorLabels" -}} app.kubernetes.io/name: {{ include "phpfpm.selenium.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} {{- end }} {{/* Cron(CronJob)用の名前・ラベル(v8.5.10-e)。 Selenium と同じ理由で、CronJobが生成するPodのラベルにも nginx/php-fpm の Deployment と同じ app.kubernetes.io/name("phpfpm")+ instance を持たせては いけない。同じ組み合わせだとDeploymentのReplicaSetコントローラーが matchLabels(name=phpfpm, instance=)に一致するPodとしてCronJob由来 のPodまで対象に含めてしまい、replicaCountとの差分調整でCronJobのPodを 意図せず削除する等の事故につながる。name自体をvariant("phpfpm-cron")に することで構造的に衝突を防ぐ。 */}} {{- define "phpfpm.cron.name" -}} {{- printf "%s-cron" (include "phpfpm.name" .) | trunc 63 | trimSuffix "-" -}} {{- end }} {{- define "phpfpm.cron.selectorLabels" -}} app.kubernetes.io/name: {{ include "phpfpm.cron.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} {{- end }}