Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
178 changes: 89 additions & 89 deletions charts/camunda-platform-8.8/README.md

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
{{- fail "webModeler.persistence.deploymentStrategy value must be one of 'RollingUpdate', 'Recreate'" -}}
{{- end -}}
{{- if and (eq $deploymentStrategy "Recreate") (not .Values.webModeler.persistence.enabled) -}}
{{- fail "webModeler.persistence.deploymentStrategy: Recreate requires webModeler.persistence.enabled: true (it avoids a Multi-Attach deadlock on the chart-managed RWO PVC; without persistence it only adds upgrade downtime)" -}}
{{- fail "webModeler.persistence.deploymentStrategy: Recreate requires webModeler.persistence.enabled: true. The default chart-managed path uses a per-pod ephemeral volume with no Multi-Attach contention, so Recreate is only useful when existingClaim points to a ReadWriteOnce volume; without persistence it only adds upgrade downtime" -}}
{{- end -}}
apiVersion: apps/v1
kind: Deployment
Expand Down Expand Up @@ -202,8 +202,23 @@ spec:
persistentVolumeClaim:
claimName: {{ .Values.webModeler.persistence.existingClaim }}
{{- else if .Values.webModeler.persistence.enabled }}
persistentVolumeClaim:
claimName: {{ include "camundaPlatform.fullname" . }}-webmodeler-data
ephemeral:
volumeClaimTemplate:
{{- with .Values.webModeler.persistence.annotations }}
metadata:
annotations: {{- toYaml . | nindent 18 }}
{{- end }}
spec:
Comment on lines +205 to +211
accessModes: {{ .Values.webModeler.persistence.accessModes | default (list "ReadWriteOnce") | toYaml | nindent 18 }}
{{- with .Values.webModeler.persistence.storageClassName }}
storageClassName: {{ . | quote }}
{{- end }}
{{- with .Values.webModeler.persistence.selector }}
selector: {{- toYaml . | nindent 18 }}
{{- end }}
resources:
requests:
storage: {{ .Values.webModeler.persistence.size | default "1Gi" | quote }}
{{- else }}
emptyDir: {}
{{- end }}
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -107,9 +107,12 @@ func (s *PersistenceTemplateTest) TestPersistenceConfiguration() {

// then
s.Require().NotNil(tmpVolume, "tmp volume should exist")
s.Require().NotNil(tmpVolume.PersistentVolumeClaim, "should use PVC when persistence is enabled")
s.Require().NotNil(tmpVolume.Ephemeral, "should use a per-pod ephemeral volume when persistence is enabled")
s.Require().Nil(tmpVolume.EmptyDir, "should not use emptyDir when persistence is enabled")
s.Require().Equal("camunda-platform-test-webmodeler-data", tmpVolume.PersistentVolumeClaim.ClaimName)
s.Require().Nil(tmpVolume.PersistentVolumeClaim, "should not reference a shared PVC when persistence is enabled")
spec := tmpVolume.Ephemeral.VolumeClaimTemplate.Spec
s.Require().Equal("5Gi", spec.Resources.Requests.Storage().String())
s.Require().Equal(corev1.ReadWriteOnce, spec.AccessModes[0])
},
},
{
Expand Down Expand Up @@ -178,39 +181,10 @@ func (s *PersistenceTemplateTest) TestPersistenceConfiguration() {
}
}

func TestPVCManifestCreated(t *testing.T) {
t.Parallel()

chartPath, err := filepath.Abs("../../../")
require.NoError(t, err)

testCase := testhelpers.TestCase{
Name: "TestPVCManifestCreated",
Values: map[string]string{
"identity.enabled": "true",
"webModeler.enabled": "true",
"webModeler.restapi.mail.fromAddress": "test@test.com",
"webModeler.persistence.enabled": "true",
"webModeler.persistence.size": "5Gi",
"webModeler.persistence.accessModes[0]": "ReadWriteOnce",
},
Verifier: func(t *testing.T, output string, err error) {
var pvc corev1.PersistentVolumeClaim
helm.UnmarshalK8SYaml(t, output, &pvc)
require.Equal(t, "camunda-platform-test-webmodeler-data", pvc.Name)
require.Equal(t, "5Gi", pvc.Spec.Resources.Requests.Storage().String())
require.Equal(t, corev1.ReadWriteOnce, pvc.Spec.AccessModes[0])
},
}

testhelpers.RunTestCasesE(t, chartPath, "camunda-platform-test", "camunda-platform-webmodeler", []string{"templates/web-modeler/persistentvolumeclaim-restapi.yaml"}, []testhelpers.TestCase{testCase})
}

// TestDeploymentStrategyDefaultsToRollingUpdate asserts the default strategy
// is RollingUpdate (preserves zero-downtime upgrade for users with RWX/
// existingClaim setups). Users with chart-managed RWO PVCs hit a Multi-Attach
// deadlock with RollingUpdate and must opt into "Recreate" — see
// TestDeploymentStrategyRecreateOptIn.
// is RollingUpdate. The restapi /tmp volume is a per-pod ephemeral volume, so
// rollouts never contend for a shared RWO volume and zero-downtime RollingUpdate
// is always safe.
func TestDeploymentStrategyDefaultsToRollingUpdate(t *testing.T) {
t.Parallel()
chartPath, err := filepath.Abs("../../../")
Expand Down
2 changes: 1 addition & 1 deletion charts/camunda-platform-8.8/values.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -4617,7 +4617,7 @@
},
"deploymentStrategy": {
"type": "string",
"description": "update strategy for the restapi Deployment. Defaults to RollingUpdate (zero-downtime), which only works when the PVC supports concurrent attach (RWX storage, or accessModes including ReadWriteMany). For chart-managed PVCs on RWO storage, set to \"Recreate\" to avoid Multi-Attach deadlocks during helm upgrade (introduces brief downtime per upgrade).",
"description": "update strategy for the restapi Deployment. Defaults to RollingUpdate, which is always safe because the default chart-managed persistence path uses a per-pod ephemeral volume (no concurrent-attach contention). Set to \"Recreate\" only when using existingClaim with a ReadWriteOnce volume that cannot tolerate concurrent attach during a rollout (introduces brief downtime per upgrade).",
"default": "RollingUpdate",
"enum": [
"RollingUpdate",
Expand Down
2 changes: 1 addition & 1 deletion charts/camunda-platform-8.8/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2141,7 +2141,7 @@ webModeler:
annotations: {}
## @param webModeler.persistence.selector can be used to define a label selector for the persistent volume claim
selector: {}
## @param webModeler.persistence.deploymentStrategy update strategy for the restapi Deployment. Defaults to RollingUpdate (zero-downtime), which only works when the PVC supports concurrent attach (RWX storage, or accessModes including ReadWriteMany). For chart-managed PVCs on RWO storage, set to "Recreate" to avoid Multi-Attach deadlocks during helm upgrade (introduces brief downtime per upgrade).
## @param webModeler.persistence.deploymentStrategy update strategy for the restapi Deployment. Defaults to RollingUpdate, which is always safe because the default chart-managed persistence path uses a per-pod ephemeral volume (no concurrent-attach contention). Set to "Recreate" only when using existingClaim with a ReadWriteOnce volume that cannot tolerate concurrent attach during a rollout (introduces brief downtime per upgrade).
deploymentStrategy: RollingUpdate

## @extra webModeler.serviceAccount configuration for the service account the WebModeler pods are assigned to
Expand Down
Loading