diff --git a/charts/shopsys-app/templates/pdb-storefront.yaml b/charts/shopsys-app/templates/pdb-storefront.yaml new file mode 100644 index 0000000..d981c57 --- /dev/null +++ b/charts/shopsys-app/templates/pdb-storefront.yaml @@ -0,0 +1,18 @@ +{{/* Rendered only when the storefront is guaranteed to run with 2+ replicas — a PDB with + minAvailable: 1 on a single-replica Deployment would block node drains forever. + Autoscaling counts only with minReplicas > 1 (the HPA may scale down to minReplicas). */}} +{{- $s := .Values.storefront }} +{{- if and ($s.pdb).enabled (or (and $s.autoscaling.enabled (gt (int $s.autoscaling.minReplicas) 1)) (gt (int $s.replicas) 1)) }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + {{- include "shopsys.labels" $ | nindent 4 }} + app: storefront +spec: + minAvailable: {{ $s.pdb.minAvailable | default 1 }} + selector: + matchLabels: + app: storefront +{{- end }} diff --git a/charts/shopsys-app/templates/pdb-webserver.yaml b/charts/shopsys-app/templates/pdb-webserver.yaml new file mode 100644 index 0000000..a91a22e --- /dev/null +++ b/charts/shopsys-app/templates/pdb-webserver.yaml @@ -0,0 +1,18 @@ +{{/* Rendered only when the webserver is guaranteed to run with 2+ replicas — a PDB with + minAvailable: 1 on a single-replica Deployment would block node drains forever. + Autoscaling counts only with minReplicas > 1 (the HPA may scale down to minReplicas). */}} +{{- $w := .Values.webserver }} +{{- if and ($w.pdb).enabled (or (and $w.autoscaling.enabled (gt (int $w.autoscaling.minReplicas) 1)) (gt (int $w.replicas) 1)) }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + {{- include "shopsys.labels" $ | nindent 4 }} + app: webserver-php-fpm +spec: + minAvailable: {{ $w.pdb.minAvailable | default 1 }} + selector: + matchLabels: + app: webserver-php-fpm +{{- end }} diff --git a/charts/shopsys-app/tests/component_schema_test.yaml b/charts/shopsys-app/tests/component_schema_test.yaml index 4680fe8..63174a9 100644 --- a/charts/shopsys-app/tests/component_schema_test.yaml +++ b/charts/shopsys-app/tests/component_schema_test.yaml @@ -53,6 +53,25 @@ tests: path: spec.template.spec.containers[0].env[-1].name value: FROM_FIELD + - it: propagates topologySpreadConstraints into the pod spec + template: templates/deployment-storefront.yaml + set: + storefront: + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: topology.kubernetes.io/zone + whenUnsatisfiable: ScheduleAnyway + labelSelector: + matchLabels: + app: storefront + asserts: + - equal: + path: spec.template.spec.topologySpreadConstraints[0].topologyKey + value: topology.kubernetes.io/zone + - equal: + path: spec.template.spec.topologySpreadConstraints[0].maxSkew + value: 1 + - it: allows probe overrides template: templates/deployment-storefront.yaml set: diff --git a/charts/shopsys-app/tests/pdb_test.yaml b/charts/shopsys-app/tests/pdb_test.yaml new file mode 100644 index 0000000..1cefa00 --- /dev/null +++ b/charts/shopsys-app/tests/pdb_test.yaml @@ -0,0 +1,86 @@ +suite: pod disruption budgets +values: + - ./values/required.yaml +templates: + - templates/pdb-webserver.yaml + - templates/pdb-storefront.yaml +tests: + - it: renders no PDB for single-replica components without autoscaling + asserts: + - hasDocuments: + count: 0 + + - it: renders the PDB when autoscaling is enabled + template: templates/pdb-webserver.yaml + set: + webserver: + autoscaling: + enabled: true + asserts: + - hasDocuments: + count: 1 + - equal: + path: spec.minAvailable + value: 1 + - equal: + path: spec.selector.matchLabels.app + value: webserver-php-fpm + + - it: renders no PDB when autoscaling can scale down to a single replica + template: templates/pdb-webserver.yaml + set: + webserver: + autoscaling: + enabled: true + minReplicas: 1 + asserts: + - hasDocuments: + count: 0 + + - it: renders no PDB when the pdb map is nulled by an overlay + template: templates/pdb-storefront.yaml + set: + storefront: + autoscaling: + enabled: true + pdb: null + asserts: + - hasDocuments: + count: 0 + + - it: renders the PDB when running multiple fixed replicas + template: templates/pdb-storefront.yaml + set: + storefront: + replicas: 3 + asserts: + - hasDocuments: + count: 1 + - equal: + path: spec.selector.matchLabels.app + value: storefront + + - it: honors a minAvailable override + template: templates/pdb-webserver.yaml + set: + webserver: + autoscaling: + enabled: true + pdb: + minAvailable: 2 + asserts: + - equal: + path: spec.minAvailable + value: 2 + + - it: can be disabled explicitly + template: templates/pdb-webserver.yaml + set: + webserver: + autoscaling: + enabled: true + pdb: + enabled: false + asserts: + - hasDocuments: + count: 0 diff --git a/charts/shopsys-app/values.schema.json b/charts/shopsys-app/values.schema.json index 51d2a9c..d28f2fe 100644 --- a/charts/shopsys-app/values.schema.json +++ b/charts/shopsys-app/values.schema.json @@ -100,6 +100,13 @@ } } }, + "webserver": { + "type": "object", + "properties": { + "pdb": { "$ref": "#/$defs/pdb" }, + "topologySpreadConstraints": { "type": "array" } + } + }, "storefront": { "type": "object", "properties": { @@ -110,13 +117,16 @@ "secretEnv": { "type": "object", "additionalProperties": { "type": "string" } - } + }, + "pdb": { "$ref": "#/$defs/pdb" }, + "topologySpreadConstraints": { "type": "array" } } }, "cron": { "type": "object", "properties": { "enabled": { "type": "boolean" }, + "topologySpreadConstraints": { "type": "array" }, "instances": { "type": "array", "items": { @@ -134,6 +144,12 @@ "consumers": { "type": "object", "properties": { + "defaults": { + "type": "object", + "properties": { + "topologySpreadConstraints": { "type": "array" } + } + }, "instances": { "type": "array", "items": { @@ -162,5 +178,15 @@ } }, "extraManifests": { "type": "array" } + }, + "$defs": { + "pdb": { + "type": ["object", "null"], + "additionalProperties": false, + "properties": { + "enabled": { "type": "boolean" }, + "minAvailable": { "type": ["integer", "string"] } + } + } } } diff --git a/charts/shopsys-app/values.yaml b/charts/shopsys-app/values.yaml index 2fc9f40..9c6e406 100644 --- a/charts/shopsys-app/values.yaml +++ b/charts/shopsys-app/values.yaml @@ -2,7 +2,8 @@ # # Every workload component (webserver, storefront, cron, consumers) exposes the same # standard keys: image {repository, tag, pullPolicy}, replicas, resources, podAnnotations, -# podLabels, nodeSelector, tolerations, affinity, extraEnv, extraVolumes, extraVolumeMounts, +# podLabels, nodeSelector, tolerations, affinity, topologySpreadConstraints, extraEnv, +# extraVolumes, extraVolumeMounts, # livenessProbe/readinessProbe, securityContext/podSecurityContext, lifecycle, # terminationGracePeriodSeconds, priorityClassName. Webserver and storefront additionally # expose independent `autoscaling` sections. @@ -96,6 +97,13 @@ webserver: minReplicas: 2 maxReplicas: 3 targetCPUUtilization: 120 + # PodDisruptionBudget protecting against voluntary disruptions (node drains). Rendered + # only when the component is guaranteed to run 2+ replicas (autoscaling enabled with + # minReplicas > 1, or fixed replicas > 1) - a minAvailable: 1 budget on a single + # replica would block drains forever. + pdb: + enabled: true + minAvailable: 1 progressDeadlineSeconds: 1500 terminationGracePeriodSeconds: 120 strategy: @@ -189,6 +197,7 @@ webserver: operator: In values: - redis + topologySpreadConstraints: [] podSecurityContext: {} extraEnv: [] extraVolumes: [] @@ -208,6 +217,10 @@ storefront: minReplicas: 2 maxReplicas: 3 targetCPUUtilization: 120 + # See webserver.pdb - same gating (autoscaling with minReplicas > 1, or replicas > 1). + pdb: + enabled: true + minAvailable: 1 terminationGracePeriodSeconds: 60 resources: limits: @@ -251,6 +264,7 @@ storefront: operator: In values: - storefront + topologySpreadConstraints: [] podSecurityContext: {} securityContext: {} extraEnv: [] @@ -302,6 +316,7 @@ cron: operator: In values: - background + topologySpreadConstraints: [] podSecurityContext: {} extraEnv: [] extraVolumes: [] @@ -341,6 +356,7 @@ consumers: operator: In values: - background + topologySpreadConstraints: [] podSecurityContext: {} securityContext: {} extraEnv: [] diff --git a/charts/shopsys-common/templates/_helpers.tpl b/charts/shopsys-common/templates/_helpers.tpl index 9819628..db214de 100644 --- a/charts/shopsys-common/templates/_helpers.tpl +++ b/charts/shopsys-common/templates/_helpers.tpl @@ -264,6 +264,10 @@ tolerations: affinity: {{ toYaml . | indent 2 }} {{- end }} +{{- with .component.topologySpreadConstraints }} +topologySpreadConstraints: +{{ toYaml . | indent 2 }} +{{- end }} {{- with .component.podSecurityContext }} securityContext: {{ toYaml . | indent 2 }} diff --git a/charts/shopsys-infra/values.schema.json b/charts/shopsys-infra/values.schema.json index da60154..d921201 100644 --- a/charts/shopsys-infra/values.schema.json +++ b/charts/shopsys-infra/values.schema.json @@ -17,7 +17,8 @@ "properties": { "enabled": { "type": "boolean" }, "config": { "type": "string" }, - "replicas": { "type": "integer", "minimum": 0 } + "replicas": { "type": "integer", "minimum": 0 }, + "topologySpreadConstraints": { "type": "array" } } }, "rabbitmq": { @@ -25,6 +26,7 @@ "properties": { "enabled": { "type": "boolean" }, "replicas": { "type": "integer", "minimum": 0 }, + "topologySpreadConstraints": { "type": "array" }, "auth": { "type": "object", "properties": { diff --git a/charts/shopsys-infra/values.yaml b/charts/shopsys-infra/values.yaml index 79cbe3c..3c7c46c 100644 --- a/charts/shopsys-infra/values.yaml +++ b/charts/shopsys-infra/values.yaml @@ -77,6 +77,7 @@ redis: nodeSelector: {} tolerations: [] affinity: {} + topologySpreadConstraints: [] podSecurityContext: {} securityContext: {} extraEnv: [] @@ -126,6 +127,7 @@ rabbitmq: operator: In values: - rabbitmq + topologySpreadConstraints: [] podSecurityContext: {} securityContext: {} extraEnv: [] diff --git a/docs/migrating-from-shopsys-deployment.md b/docs/migrating-from-shopsys-deployment.md index ea4e5ff..1f0396e 100644 --- a/docs/migrating-from-shopsys-deployment.md +++ b/docs/migrating-from-shopsys-deployment.md @@ -133,3 +133,11 @@ Intentional differences of the phase-1 rewrite; everything else is a 1:1 port. overcommit, and anything bursting past `1Gi` is now OOMKilled instead of merely evictable — check your crons'/consumers' peak memory usage before relying on the defaults, and set `resources: null` on a component to restore the legacy behavior. +22. **PodDisruptionBudgets for webserver and storefront**: the legacy package had none — a + node drain could evict all replicas at once. The chart now renders a + `minAvailable: 1` PDB per component whenever it is guaranteed to run 2+ replicas + (autoscaling enabled with `minReplicas > 1`, or fixed `replicas > 1`); setups that can + run a single replica get no PDB (it would block drains). Opt out + via `webserver.pdb.enabled` / `storefront.pdb.enabled`. `topologySpreadConstraints` + is also available as a standard component key (empty by default — the legacy + anti-affinity defaults are kept untouched). diff --git a/docs/values.md b/docs/values.md index 3f814a6..cab5020 100644 --- a/docs/values.md +++ b/docs/values.md @@ -25,13 +25,18 @@ Every workload component (`webserver`, `storefront`, `cron`, `consumers.defaults | `autoscaling: {enabled, minReplicas, maxReplicas, targetCPUUtilization}` | per-component HPA (webserver + storefront) | | `resources` | container resources | | `podAnnotations` / `podLabels` | extra pod metadata | -| `nodeSelector` / `tolerations` / `affinity` / `priorityClassName` | scheduling | +| `nodeSelector` / `tolerations` / `affinity` / `topologySpreadConstraints` / `priorityClassName` | scheduling | | `extraEnv` | extra env entries (raw list, supports `valueFrom`) | | `extraVolumes` / `extraVolumeMounts` | additional volumes | | `livenessProbe` / `readinessProbe` | probe overrides | | `securityContext` / `podSecurityContext` | security contexts | | `terminationGracePeriodSeconds`, `lifecycle` | shutdown behavior | +`topologySpreadConstraints` is a raw passthrough — supply complete constraints. Prefer +`whenUnsatisfiable: ScheduleAnyway` unless spread is a hard requirement (`DoNotSchedule` +can leave pods Pending on small clusters), and add `matchLabelKeys: [pod-template-hash]` +so the spread ignores old-ReplicaSet pods during rolling updates. + ## Top-level structure ```yaml @@ -74,8 +79,12 @@ app: # shared backend configuration adminUrl: admin s3Endpoint: "" -webserver: # component (see standard keys) + phpFpm/nginx sub-containers -storefront: # component + its own `env` / `secretEnv` (storefront-secret-env Secret) +webserver: # component (see standard keys) + phpFpm/nginx sub-containers; + # `pdb: {enabled: true, minAvailable: 1}` - rendered only with + # guaranteed 2+ replicas (autoscaling with minReplicas > 1, + # or replicas > 1) +storefront: # component + its own `env` / `secretEnv` (storefront-secret-env Secret); + # `pdb` - same as webserver cron: # component + `instances: [{name, schedule}]`; # default resources: requests 100m/300Mi, limits 1Gi memory consumers: # `defaults` + `instances: [{name, transports, replicas, ...}]`; diff --git a/tests/golden/scenarios/basic-production/expected/continuous.yaml b/tests/golden/scenarios/basic-production/expected/continuous.yaml index 1ef7d67..c9e0883 100644 --- a/tests/golden/scenarios/basic-production/expected/continuous.yaml +++ b/tests/golden/scenarios/basic-production/expected/continuous.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/basic-production/expected/first-deploy-with-demo-data.yaml b/tests/golden/scenarios/basic-production/expected/first-deploy-with-demo-data.yaml index 23c5333..496ab61 100644 --- a/tests/golden/scenarios/basic-production/expected/first-deploy-with-demo-data.yaml +++ b/tests/golden/scenarios/basic-production/expected/first-deploy-with-demo-data.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/basic-production/expected/first-deploy.yaml b/tests/golden/scenarios/basic-production/expected/first-deploy.yaml index 51ba23d..604024c 100644 --- a/tests/golden/scenarios/basic-production/expected/first-deploy.yaml +++ b/tests/golden/scenarios/basic-production/expected/first-deploy.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/development-single-domain/expected/continuous.yaml b/tests/golden/scenarios/development-single-domain/expected/continuous.yaml index dc8bd8b..28d68ed 100644 --- a/tests/golden/scenarios/development-single-domain/expected/continuous.yaml +++ b/tests/golden/scenarios/development-single-domain/expected/continuous.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/development-single-domain/expected/first-deploy-with-demo-data.yaml b/tests/golden/scenarios/development-single-domain/expected/first-deploy-with-demo-data.yaml index 5d8a075..dd03f83 100644 --- a/tests/golden/scenarios/development-single-domain/expected/first-deploy-with-demo-data.yaml +++ b/tests/golden/scenarios/development-single-domain/expected/first-deploy-with-demo-data.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/development-single-domain/expected/first-deploy.yaml b/tests/golden/scenarios/development-single-domain/expected/first-deploy.yaml index a7b7f04..b47ecba 100644 --- a/tests/golden/scenarios/development-single-domain/expected/first-deploy.yaml +++ b/tests/golden/scenarios/development-single-domain/expected/first-deploy.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/development-with-cloudflare/expected/continuous.yaml b/tests/golden/scenarios/development-with-cloudflare/expected/continuous.yaml index 4bf78ea..614b733 100644 --- a/tests/golden/scenarios/development-with-cloudflare/expected/continuous.yaml +++ b/tests/golden/scenarios/development-with-cloudflare/expected/continuous.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/development-with-cloudflare/expected/first-deploy-with-demo-data.yaml b/tests/golden/scenarios/development-with-cloudflare/expected/first-deploy-with-demo-data.yaml index 8796d71..6b5df52 100644 --- a/tests/golden/scenarios/development-with-cloudflare/expected/first-deploy-with-demo-data.yaml +++ b/tests/golden/scenarios/development-with-cloudflare/expected/first-deploy-with-demo-data.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/development-with-cloudflare/expected/first-deploy.yaml b/tests/golden/scenarios/development-with-cloudflare/expected/first-deploy.yaml index 95c04cd..07583c9 100644 --- a/tests/golden/scenarios/development-with-cloudflare/expected/first-deploy.yaml +++ b/tests/golden/scenarios/development-with-cloudflare/expected/first-deploy.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/escaping-env/expected/continuous.yaml b/tests/golden/scenarios/escaping-env/expected/continuous.yaml index 74f043c..2bf2fbe 100644 --- a/tests/golden/scenarios/escaping-env/expected/continuous.yaml +++ b/tests/golden/scenarios/escaping-env/expected/continuous.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/escaping-env/expected/first-deploy-with-demo-data.yaml b/tests/golden/scenarios/escaping-env/expected/first-deploy-with-demo-data.yaml index 9e5fb09..46d8f35 100644 --- a/tests/golden/scenarios/escaping-env/expected/first-deploy-with-demo-data.yaml +++ b/tests/golden/scenarios/escaping-env/expected/first-deploy-with-demo-data.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/escaping-env/expected/first-deploy.yaml b/tests/golden/scenarios/escaping-env/expected/first-deploy.yaml index 821b5cb..0a3d09f 100644 --- a/tests/golden/scenarios/escaping-env/expected/first-deploy.yaml +++ b/tests/golden/scenarios/escaping-env/expected/first-deploy.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/production-with-cloudflare/expected/continuous.yaml b/tests/golden/scenarios/production-with-cloudflare/expected/continuous.yaml index c4ad252..3757348 100644 --- a/tests/golden/scenarios/production-with-cloudflare/expected/continuous.yaml +++ b/tests/golden/scenarios/production-with-cloudflare/expected/continuous.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/production-with-cloudflare/expected/first-deploy-with-demo-data.yaml b/tests/golden/scenarios/production-with-cloudflare/expected/first-deploy-with-demo-data.yaml index 91bdb74..b3bfe0e 100644 --- a/tests/golden/scenarios/production-with-cloudflare/expected/first-deploy-with-demo-data.yaml +++ b/tests/golden/scenarios/production-with-cloudflare/expected/first-deploy-with-demo-data.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1 diff --git a/tests/golden/scenarios/production-with-cloudflare/expected/first-deploy.yaml b/tests/golden/scenarios/production-with-cloudflare/expected/first-deploy.yaml index c7fae9e..dd354a2 100644 --- a/tests/golden/scenarios/production-with-cloudflare/expected/first-deploy.yaml +++ b/tests/golden/scenarios/production-with-cloudflare/expected/first-deploy.yaml @@ -372,6 +372,42 @@ spec: path: '/' pathType: Prefix +--- +# Source: shopsys-app/templates/pdb-storefront.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: storefront + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: storefront +spec: + minAvailable: 1 + selector: + matchLabels: + app: storefront + +--- +# Source: shopsys-app/templates/pdb-webserver.yaml +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + name: webserver-php-fpm + labels: + app.kubernetes.io/name: shopsys-app + app.kubernetes.io/instance: shopsys-app + app.kubernetes.io/managed-by: Helm + helm.sh/chart: shopsys-app-1.0.0 + app: webserver-php-fpm +spec: + minAvailable: 1 + selector: + matchLabels: + app: webserver-php-fpm + --- # Source: shopsys-app/templates/secret-app-env.yaml apiVersion: v1