From 78f5e6c0b9ce4c938136bb2ff45e0a7eaaab1db3 Mon Sep 17 00:00:00 2001 From: Pascal Sthamer Date: Tue, 2 Dec 2025 10:09:42 +0100 Subject: [PATCH] use top-level apps value instead of app.deployViaHelm, add enabled toggle Signed-off-by: Pascal Sthamer --- functions/kubernetes/charts/shuffle/README.md | 51 +- .../kubernetes/charts/shuffle/values.yaml | 624 +++++++++++++++++- 2 files changed, 648 insertions(+), 27 deletions(-) diff --git a/functions/kubernetes/charts/shuffle/README.md b/functions/kubernetes/charts/shuffle/README.md index 5e3d7728..71fa2563 100644 --- a/functions/kubernetes/charts/shuffle/README.md +++ b/functions/kubernetes/charts/shuffle/README.md @@ -131,30 +131,41 @@ If you want full control, you can deploy apps using helm. This has the following - granular control per app and version (e.g. have more replicas and resources for frequently used apps) - avoid problems with on-demand started apps (see https://github.com/Shuffle/Shuffle/issues/1739) -To deploy apps using helm, use the `app.deployViaHelm` value. Here is an example, which deploys the shuffle-tools app and 2 versions of the opensearch app: +To deploy apps using helm, set `apps.enabled=true`. By default, this deploys the `shuffle-tools`, `shuffle-subflow` and `http` apps. +You can also deploy your own apps. See the following values file for an example. ```yaml app: replicas: 1 # default to 1 replica per app - deployViaHelm: - tools: - app: shuffle-tools - version: 1.2.0 - opensearchOld: - app: opensearch - version: 1.0.0 # Also deploy OpenSearch version 1.0.0, because some workflows still use it. - opensearch: - app: opensearch - version: 1.1.0 - replicas: 3 # use 3 replicas for OpenSearch app - resources: # Custom resources for OpenSearch app - limits: - memory: 512Mi -``` -The key of an app in the `deployViaHelm` map does not matter. We are not using an array here, to allow overriding values in stage-specific value files or using the command line, e.g. -`helm upgrade ... --set app.deployViaHelm.tools.replicas=3`. + resources: {} # default resources for apps +# ... configure default options for all apps here -See the app Paramters section below for a complete list of helm values, that can be used to customize app deployments. -Take a look at the `app.deployViaHelm.MY_APP.*` parameters for a complete list of helm values that can be set on every app. +apps: + enabled: true # Deploy apps using helm. + +# Configure default apps + shuffleTools: + enabled: true # default + shuffleSubflow: + enabled: true # default + http: + enabled: true # default +# optionally override defaults from app values: + replicas: 1 + resources: {} + +# Deploy additional apps (e.g. opensearch) + opensearch: + enabled: true # required to actually deploy the app + name: opensearch # required. The name and version must match the values of the `api.yaml` file of the app. + version: 1.1.0 # required. +# optionally change app configuration: + replicas: 3 + resources: {} +``` +The key of an app in the `apps` map does not matter, as long as it is unique. We are not using an array here, to allow overriding values in stage-specific value files or using the command line, e.g. +`helm upgrade ... --set apps.shuffleTools.replicas=3`. + +See the "Parameters to deploy apps using helm" section below for a complete list of helm values, that can be used to customize app deployments. It is possible to use a hybrid approach - deploy some apps using helm, while still allowing Worker to create additional apps on-demand. diff --git a/functions/kubernetes/charts/shuffle/values.yaml b/functions/kubernetes/charts/shuffle/values.yaml index a97e5168..748cdd72 100644 --- a/functions/kubernetes/charts/shuffle/values.yaml +++ b/functions/kubernetes/charts/shuffle/values.yaml @@ -1735,7 +1735,7 @@ worker: ## extraEgress: [] - ## @param worker.manageAppDeployments Whether apps are deployed and managed by worker. When disabled, every used app is expected to to be already deployed (see app.deployViaHelm). + ## @param worker.manageAppDeployments Whether apps are deployed and managed by worker. When disabled, every used app is expected to to be already deployed (see apps.enabled). ## This effectively removes required RBAC permissions from the shuffle-worker service account to create deployments and services. ## The worker might still attempt to create kubernetes objects, resulting in an error. There is currently no way to tell the worker, that it should not manage k8s resources. manageAppDeployments: true @@ -1743,6 +1743,86 @@ worker: ## @section app Parameters ## app: + ## @param app.image.pullPolicy default image pull policy for app deployments. Only effective for helm-deployed apps (see apps.enabled). + ## @param app.image.pullSecrets default image pull secrets for app deployments. Only effective for helm-deployed apps (see apps.enabled). + ## + image: + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: https://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images + ## + pullPolicy: IfNotPresent + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## pullSecrets: + ## - myRegistryKeySecretName + ## + pullSecrets: [] + ## @param app.replicaCount Default number of replicas to deploy for each app. Only effective for helm-deployed apps (see apps.enabled). + ## + replicaCount: 1 + ## @param app.extraContainerPorts Optionally specify extra list of additional ports for app containers. Only effective for helm-deployed apps (see apps.enabled). + ## e.g: + ## extraContainerPorts: + ## - name: myservice + ## containerPort: 9090 + ## + extraContainerPorts: [] + ## Configure extra options for app containers' liveness and readiness probes + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes + ## @param app.livenessProbe.enabled Enable livenessProbe on app containers. Only effective for helm-deployed apps (see apps.enabled). + ## @param app.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe + ## @param app.livenessProbe.periodSeconds Period seconds for livenessProbe + ## @param app.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe + ## @param app.livenessProbe.failureThreshold Failure threshold for livenessProbe + ## @param app.livenessProbe.successThreshold Success threshold for livenessProbe + ## + livenessProbe: + enabled: false + initialDelaySeconds: 0 + periodSeconds: 15 + timeoutSeconds: 1 + failureThreshold: 4 + successThreshold: 1 + ## @param app.readinessProbe.enabled Enable readinessProbe on app containers. Only effective for helm-deployed apps (see apps.enabled). + ## @param app.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe + ## @param app.readinessProbe.periodSeconds Period seconds for readinessProbe + ## @param app.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe + ## @param app.readinessProbe.failureThreshold Failure threshold for readinessProbe + ## @param app.readinessProbe.successThreshold Success threshold for readinessProbe + ## + readinessProbe: + enabled: false + initialDelaySeconds: 0 + periodSeconds: 5 + timeoutSeconds: 1 + failureThreshold: 3 + successThreshold: 1 + ## @param app.startupProbe.enabled Enable startupProbe on app containers. Only effective for helm-deployed apps (see apps.enabled). + ## @param app.startupProbe.initialDelaySeconds Initial delay seconds for startupProbe + ## @param app.startupProbe.periodSeconds Period seconds for startupProbe + ## @param app.startupProbe.timeoutSeconds Timeout seconds for startupProbe + ## @param app.startupProbe.failureThreshold Failure threshold for startupProbe + ## @param app.startupProbe.successThreshold Success threshold for startupProbe + ## + startupProbe: + enabled: false + initialDelaySeconds: 0 + periodSeconds: 1 + timeoutSeconds: 1 + failureThreshold: 60 + successThreshold: 1 + ## @param app.customLivenessProbe Custom livenessProbe that overrides the default one. Only effective for helm-deployed apps (see apps.enabled). + ## + customLivenessProbe: {} + ## @param app.customReadinessProbe Custom readinessProbe that overrides the default one. Only effective for helm-deployed apps (see apps.enabled). + ## + customReadinessProbe: {} + ## @param app.customStartupProbe Custom startupProbe that overrides the default one. Only effective for helm-deployed apps (see apps.enabled). + ## + customStartupProbe: {} ## app resource requests and limits ## ref: http://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ ## @param app.resourcesPreset Set app container resources according to one common preset (allowed values: none, nano, small, medium, large, xlarge, 2xlarge). This is ignored if app.resources is set (app.resources is recommended for production). @@ -1802,7 +1882,183 @@ app: drop: ["ALL"] seccompProfile: type: "RuntimeDefault" - + + ## @param app.automountServiceAccountToken Mount Service Account token in app pods. Only effective for helm-deployed apps (see apps.enabled). + ## + automountServiceAccountToken: false + + ## @param app.hostAliases app pods host aliases. Only effective for helm-deployed apps (see apps.enabled). + ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ + ## + hostAliases: [] + ## @param app.deploymentAnnotations Annotations for app deployment. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + ## + deploymentAnnotations: {} + ## @param app.podLabels Extra labels for app pods. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + ## + podLabels: {} + ## @param app.podAnnotations Annotations for app pods. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + ## + podAnnotations: {} + ## @param app.podAffinityPreset Pod affinity preset. Ignored if `app.affinity` is set. Allowed values: `soft` or `hard`. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAffinityPreset: "" + ## @param app.podAntiAffinityPreset Pod anti-affinity preset. Ignored if `app.affinity` is set. Allowed values: `soft` or `hard`. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAntiAffinityPreset: soft + ## Node app.affinity preset + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity + ## + nodeAffinityPreset: + ## @param app.nodeAffinityPreset.type Node affinity preset type. Ignored if `app.affinity` is set. Allowed values: `soft` or `hard`. Only effective for helm-deployed apps (see apps.enabled). + ## + type: "" + ## @param app.nodeAffinityPreset.key Node label key to match. Ignored if `app.affinity` is set + ## + key: "" + ## @param app.nodeAffinityPreset.values Node label values to match. Ignored if `app.affinity` is set + ## E.g. + ## values: + ## - e2e-az1 + ## - e2e-az2 + ## + values: [] + ## @param app.affinity Affinity for app pods assignment. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## NOTE: `app.podAffinityPreset`, `app.podAntiAffinityPreset`, and `app.nodeAffinityPreset` will be ignored when it's set + ## + affinity: {} + ## @param app.nodeSelector Node labels for app pods assignment. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ + ## + nodeSelector: {} + ## @param app.tolerations Tolerations for app pods assignment. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + ## + tolerations: [] + ## @param app.updateStrategy.type app deployment strategy type. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy + ## + updateStrategy: + ## Can be set to RollingUpdate or Recreate + ## + type: RollingUpdate + ## @param app.priorityClassName app pods' priorityClassName. Only effective for helm-deployed apps (see apps.enabled). + ## + priorityClassName: "" + ## @param app.topologySpreadConstraints Topology Spread Constraints for app pod assignment spread across your cluster among failure-domains. Only effective for helm-deployed apps (see apps.enabled). + ## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods + ## + topologySpreadConstraints: [] + ## @param app.schedulerName Name of the k8s scheduler (other than default) for app pods. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ + ## + schedulerName: "" + ## @param app.terminationGracePeriodSeconds Seconds app pods need to terminate gracefully. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods + ## + terminationGracePeriodSeconds: "" + ## @param app.lifecycleHooks for app containers to automate configuration before or after startup. Only effective for helm-deployed apps (see apps.enabled). + ## + lifecycleHooks: {} + ## @param app.extraEnvVars Array with extra environment variables to add to app containers. Only effective for helm-deployed apps (see apps.enabled). + ## e.g: + ## extraEnvVars: + ## - name: FOO + ## value: "bar" + ## + extraEnvVars: [] + ## @param app.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for app containers. Only effective for helm-deployed apps (see apps.enabled). + ## + extraEnvVarsCM: "" + ## @param app.extraEnvVarsSecret Name of existing Secret containing extra env vars for app containers. Only effective for helm-deployed apps (see apps.enabled). + ## + extraEnvVarsSecret: "" + ## @param app.extraVolumes Optionally specify extra list of additional volumes for the app pods. Only effective for helm-deployed apps (see apps.enabled). + ## + extraVolumes: [] + ## @param app.extraVolumeMounts Optionally specify extra list of additional volumeMounts for the app containers. Only effective for helm-deployed apps (see apps.enabled). + ## + extraVolumeMounts: [] + ## @param app.sidecars Add additional sidecar containers to the app pods. Only effective for helm-deployed apps (see apps.enabled). + ## e.g: + ## sidecars: + ## - name: your-image-name + ## image: your-image + ## imagePullPolicy: Always + ## ports: + ## - name: portname + ## containerPort: 1234 + ## + sidecars: [] + ## @param app.initContainers Add additional init containers to the app pods. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ + ## e.g: + ## initContainers: + ## - name: your-image-name + ## image: your-image + ## imagePullPolicy: Always + ## command: ['sh', '-c', 'echo "hello world"'] + ## + initContainers: [] + ## Pod Disruption Budget configuration + ## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb + ## @param app.pdb.create Enable/disable a Pod Disruption Budget creation. Only effective for helm-deployed apps (see apps.enabled). + ## @param app.pdb.minAvailable Minimum number/percentage of pods that should remain scheduled + ## @param app.pdb.maxUnavailable Maximum number/percentage of pods that may be made unavailable. Defaults to `1` if both `app.pdb.minAvailable` and `app.pdb.maxUnavailable` are empty. + ## + pdb: + create: true + minAvailable: "" + maxUnavailable: "" + ## Autoscaling configuration + ## ref: https://kubernetes.io/docs/concepts/workloads/autoscaling/ + ## + autoscaling: + ## @param app.autoscaling.vpa.enabled Enable VPA for app pods. Only effective for helm-deployed apps (see apps.enabled). + ## @param app.autoscaling.vpa.annotations Annotations for VPA resource + ## @param app.autoscaling.vpa.controlledResources VPA List of resources that the vertical pod autoscaler can control. Defaults to cpu and memory + ## @param app.autoscaling.vpa.maxAllowed VPA Max allowed resources for the pod + ## @param app.autoscaling.vpa.minAllowed VPA Min allowed resources for the pod + ## + vpa: + enabled: false + annotations: {} + controlledResources: [] + maxAllowed: {} + minAllowed: {} + ## @param app.autoscaling.vpa.updatePolicy.updateMode Autoscaling update policy + ## Specifies whether recommended updates are applied when a Pod is started and whether recommended updates are applied during the life of a Pod + ## Possible values are "Off", "Initial", "Recreate", and "Auto". + ## + updatePolicy: + updateMode: Auto + ## @param app.autoscaling.hpa.enabled Enable HPA for app pods. Only effective for helm-deployed apps (see apps.enabled). + ## @param app.autoscaling.hpa.minReplicas Minimum number of replicas + ## @param app.autoscaling.hpa.maxReplicas Maximum number of replicas + ## @param app.autoscaling.hpa.targetCPU Target CPU utilization percentage + ## @param app.autoscaling.hpa.targetMemory Target Memory utilization percentage + ## + hpa: + enabled: false + minReplicas: "" + maxReplicas: "" + targetCPU: "" + targetMemory: "" + + ## Service configuration + ## + service: + ## @param app.service.labels Extra labels for app service. Only effective for helm-deployed apps (see apps.enabled). + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + ## + labels: {} + ## ServiceAccount configuration ## serviceAccount: @@ -1863,7 +2119,10 @@ app: ## disableLogs: false - ## @param app.deployViaHelm [object] A list of apps that should be deployed using helm. +## @section Parameters to deploy apps using helm +## +apps: + ## @param apps.enabled Whether apps should be deployed using helm. ## By default, workers create deployments and services for apps when they are first needed (or during startup for some selected apps). ## Deploying apps via workers has some drawbacks, such as: ## - A workflow fails when the app is not deployed when the workflow gets executed (see https://github.com/Shuffle/Shuffle/issues/1739) @@ -1871,9 +2130,361 @@ app: ## - Worker needs elevated permissions in Kubernetes ## Note that you can deploy some apps via helm, while keeping the flexibility of letting workers deploy apps if they are not already deployed. ## If you deploy all needed apps via helm and dont want workers to create additional deployments, set worker.manageAppDeployments to false. - ## The key of the app does not matter. - ## @extra app.deployViaHelm.MY_APP.app [string] The name of the app (required, e.g. shuffle-tools) - ## @extra app.deployViaHelm.MY_APP.version [string] The version of the app (required, e.g. 1.2.0) + ## + enabled: false + + shuffleTools: + ## @param apps.shuffleTools.enabled Whether the app is enabled + ## + enabled: true + ## app image + ## @param apps.shuffleTools.image.registry app image registry + ## @param apps.shuffleTools.image.repository app image repository + ## @param apps.shuffleTools.image.tag app image tag (immutable tags are recommended, defaults to appVersion) + ## @param apps.shuffleTools.image.digest app image digest in the way sha256:aa.... Please note this parameter, if set, will override the tag image tag (immutable tags are recommended) + ## @param apps.shuffleTools.image.pullPolicy app image pull policy + ## @param apps.shuffleTools.image.pullSecrets app image pull secrets + ## + image: + registry: ghcr.io + repository: shuffle/shuffle-app + tag: "" + digest: "" + ## Specify a imagePullPolicy + ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' + ## ref: https://kubernetes.io/docs/concepts/containers/images/#pre-pulled-images + ## + pullPolicy: IfNotPresent + ## Optionally specify an array of imagePullSecrets. + ## Secrets must be manually created in the namespace. + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/ + ## e.g: + ## pullSecrets: + ## - myRegistryKeySecretName + ## + pullSecrets: [] + ## @param apps.shuffleTools.replicaCount [number, nullable] Number of app replicas to deploy + ## + replicaCount: null + ## @param apps.shuffleTools.extraContainerPorts Optionally specify extra list of additional ports for app containers + ## e.g: + ## extraContainerPorts: + ## - name: myservice + ## containerPort: 9090 + ## + extraContainerPorts: [] + ## Configure extra options for app containers' liveness and readiness probes + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/#configure-probes + ## @param apps.shuffleTools.livenessProbe.enabled Enable livenessProbe on app containers + ## @param apps.shuffleTools.livenessProbe.initialDelaySeconds Initial delay seconds for livenessProbe + ## @param apps.shuffleTools.livenessProbe.periodSeconds Period seconds for livenessProbe + ## @param apps.shuffleTools.livenessProbe.timeoutSeconds Timeout seconds for livenessProbe + ## @param apps.shuffleTools.livenessProbe.failureThreshold Failure threshold for livenessProbe + ## @param apps.shuffleTools.livenessProbe.successThreshold Success threshold for livenessProbe + ## + livenessProbe: + enabled: false + initialDelaySeconds: 0 + periodSeconds: 15 + timeoutSeconds: 1 + failureThreshold: 4 + successThreshold: 1 + ## @param apps.shuffleTools.readinessProbe.enabled Enable readinessProbe on app containers + ## @param apps.shuffleTools.readinessProbe.initialDelaySeconds Initial delay seconds for readinessProbe + ## @param apps.shuffleTools.readinessProbe.periodSeconds Period seconds for readinessProbe + ## @param apps.shuffleTools.readinessProbe.timeoutSeconds Timeout seconds for readinessProbe + ## @param apps.shuffleTools.readinessProbe.failureThreshold Failure threshold for readinessProbe + ## @param apps.shuffleTools.readinessProbe.successThreshold Success threshold for readinessProbe + ## + readinessProbe: + enabled: false + initialDelaySeconds: 0 + periodSeconds: 5 + timeoutSeconds: 1 + failureThreshold: 3 + successThreshold: 1 + ## @param apps.shuffleTools.startupProbe.enabled Enable startupProbe on app containers + ## @param apps.shuffleTools.startupProbe.initialDelaySeconds Initial delay seconds for startupProbe + ## @param apps.shuffleTools.startupProbe.periodSeconds Period seconds for startupProbe + ## @param apps.shuffleTools.startupProbe.timeoutSeconds Timeout seconds for startupProbe + ## @param apps.shuffleTools.startupProbe.failureThreshold Failure threshold for startupProbe + ## @param apps.shuffleTools.startupProbe.successThreshold Success threshold for startupProbe + ## + startupProbe: + enabled: false + initialDelaySeconds: 0 + periodSeconds: 1 + timeoutSeconds: 1 + failureThreshold: 60 + successThreshold: 1 + ## @param apps.shuffleTools.customLivenessProbe Custom livenessProbe that overrides the default one + ## + customLivenessProbe: {} + ## @param apps.shuffleTools.customReadinessProbe Custom readinessProbe that overrides the default one + ## + customReadinessProbe: {} + ## @param apps.shuffleTools.customStartupProbe Custom startupProbe that overrides the default one + ## + customStartupProbe: {} + ## app resource requests and limits + ## ref: http://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/ + ## @param apps.shuffleTools.resourcesPreset Set app container resources according to one common preset (allowed values: none, nano, small, medium, large, xlarge, 2xlarge). This is ignored if app.resources is set (app.resources is recommended for production). + ## More information: https://github.com/bitnami/charts/blob/main/bitnami/common/templates/_resources.tpl#L15 + ## Shuffle gets OOM killed with 256M memory during startup. Up to 360MiB of memory usage were observed during testing. + ## The small preset grants 512M. + ## + resourcesPreset: "small" + ## @param apps.shuffleTools.resources Set app container requests and limits for different resources like CPU or memory (essential for production workloads) + ## Example: + ## resources: + ## requests: + ## cpu: 2 + ## memory: 512Mi + ## limits: + ## cpu: 3 + ## memory: 1024Mi + ## + resources: {} + ## Configure Pods Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + ## @param apps.shuffleTools.podSecurityContext.enabled Enable app pods' Security Context + ## @param apps.shuffleTools.podSecurityContext.fsGroupChangePolicy Set filesystem group change policy for app pods + ## @param apps.shuffleTools.podSecurityContext.sysctls Set kernel settings using the sysctl interface for app pods + ## @param apps.shuffleTools.podSecurityContext.supplementalGroups Set filesystem extra groups for app pods + ## @param apps.shuffleTools.podSecurityContext.fsGroup Set fsGroup in app pods' Security Context + ## + podSecurityContext: + enabled: true + fsGroupChangePolicy: Always + sysctls: [] + supplementalGroups: [] + fsGroup: 1001 + ## Configure Container Security Context + ## ref: https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + ## @param apps.shuffleTools.containerSecurityContext.enabled Enabled app container' Security Context + ## @param apps.shuffleTools.containerSecurityContext.seLinuxOptions [object,nullable] Set SELinux options in app container + ## @param apps.shuffleTools.containerSecurityContext.runAsUser Set runAsUser in app container' Security Context + ## @param apps.shuffleTools.containerSecurityContext.runAsGroup Set runAsGroup in app container' Security Context + ## @param apps.shuffleTools.containerSecurityContext.runAsNonRoot Set runAsNonRoot in app container' Security Context + ## @param apps.shuffleTools.containerSecurityContext.readOnlyRootFilesystem Set readOnlyRootFilesystem in app container' Security Context + ## @param apps.shuffleTools.containerSecurityContext.privileged Set privileged in app container' Security Context + ## @param apps.shuffleTools.containerSecurityContext.allowPrivilegeEscalation Set allowPrivilegeEscalation in app container' Security Context + ## @param apps.shuffleTools.containerSecurityContext.capabilities.drop List of capabilities to be dropped in app container + ## @param apps.shuffleTools.containerSecurityContext.seccompProfile.type Set seccomp profile in app container + ## + containerSecurityContext: + enabled: true + seLinuxOptions: {} + runAsUser: 1001 + runAsGroup: 1001 + runAsNonRoot: true + readOnlyRootFilesystem: true + privileged: false + allowPrivilegeEscalation: false + capabilities: + drop: ["ALL"] + seccompProfile: + type: "RuntimeDefault" + ## @param apps.shuffleTools.command Override default app container command (useful when using custom images) + ## + command: [] + ## @param apps.shuffleTools.args Override default app container args (useful when using custom images) + ## + args: [] + ## @param apps.shuffleTools.automountServiceAccountToken Mount Service Account token in app pods + ## NOTE: app requires the service account credentials to be mounted + ## + automountServiceAccountToken: true + ## @param apps.shuffleTools.hostAliases app pods host aliases + ## https://kubernetes.io/docs/concepts/services-networking/add-entries-to-pod-etc-hosts-with-host-aliases/ + ## + hostAliases: [] + ## @param apps.shuffleTools.deploymentAnnotations Annotations for app deployment + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + ## + deploymentAnnotations: {} + ## @param apps.shuffleTools.podLabels Extra labels for app pods + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + ## + podLabels: {} + ## @param apps.shuffleTools.podAnnotations Annotations for app pods + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ + ## + podAnnotations: {} + ## @param apps.shuffleTools.podAffinityPreset Pod affinity preset. Ignored if `app.affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAffinityPreset: "" + ## @param apps.shuffleTools.podAntiAffinityPreset Pod anti-affinity preset. Ignored if `app.affinity` is set. Allowed values: `soft` or `hard` + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#inter-pod-affinity-and-anti-affinity + ## + podAntiAffinityPreset: soft + ## Node app.affinity preset + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/#node-affinity + ## + nodeAffinityPreset: + ## @param apps.shuffleTools.nodeAffinityPreset.type Node affinity preset type. Ignored if `app.affinity` is set. Allowed values: `soft` or `hard` + ## + type: "" + ## @param apps.shuffleTools.nodeAffinityPreset.key Node label key to match. Ignored if `app.affinity` is set + ## + key: "" + ## @param apps.shuffleTools.nodeAffinityPreset.values Node label values to match. Ignored if `app.affinity` is set + ## E.g. + ## values: + ## - e2e-az1 + ## - e2e-az2 + ## + values: [] + ## @param apps.shuffleTools.affinity Affinity for app pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/#affinity-and-anti-affinity + ## NOTE: `app.podAffinityPreset`, `app.podAntiAffinityPreset`, and `app.nodeAffinityPreset` will be ignored when it's set + ## + affinity: {} + ## @param apps.shuffleTools.nodeSelector Node labels for app pods assignment + ## ref: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/ + ## + nodeSelector: {} + ## @param apps.shuffleTools.tolerations Tolerations for app pods assignment + ## ref: https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/ + ## + tolerations: [] + ## @param apps.shuffleTools.updateStrategy.type app deployment strategy type + ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/deployment/#strategy + ## + updateStrategy: + ## Can be set to RollingUpdate or Recreate + ## app uses ReadWriteOnce volumes by default, which is incompatible with RollingUpdate + ## + type: Recreate + ## @param apps.shuffleTools.priorityClassName app pods' priorityClassName + ## + priorityClassName: "" + ## @param apps.shuffleTools.topologySpreadConstraints Topology Spread Constraints for app pod assignment spread across your cluster among failure-domains + ## Ref: https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/#spread-constraints-for-pods + ## + topologySpreadConstraints: [] + ## @param apps.shuffleTools.schedulerName Name of the k8s scheduler (other than default) for app pods + ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ + ## + schedulerName: "" + ## @param apps.shuffleTools.terminationGracePeriodSeconds Seconds app pods need to terminate gracefully + ## ref: https://kubernetes.io/docs/concepts/workloads/pods/pod/#termination-of-pods + ## + terminationGracePeriodSeconds: "" + ## @param apps.shuffleTools.lifecycleHooks for app containers to automate configuration before or after startup + ## + lifecycleHooks: {} + ## @param apps.shuffleTools.extraEnvVars Array with extra environment variables to add to app containers + ## e.g: + ## extraEnvVars: + ## - name: FOO + ## value: "bar" + ## + extraEnvVars: [] + ## @param apps.shuffleTools.extraEnvVarsCM Name of existing ConfigMap containing extra env vars for app containers + ## + extraEnvVarsCM: "" + ## @param apps.shuffleTools.extraEnvVarsSecret Name of existing Secret containing extra env vars for app containers + ## + extraEnvVarsSecret: "" + ## @param apps.shuffleTools.extraVolumes Optionally specify extra list of additional volumes for the app pods + ## + extraVolumes: [] + ## @param apps.shuffleTools.extraVolumeMounts Optionally specify extra list of additional volumeMounts for the app containers + ## + extraVolumeMounts: [] + ## @param apps.shuffleTools.sidecars Add additional sidecar containers to the app pods + ## e.g: + ## sidecars: + ## - name: your-image-name + ## image: your-image + ## imagePullPolicy: Always + ## ports: + ## - name: portname + ## containerPort: 1234 + ## + sidecars: [] + ## @param apps.shuffleTools.initContainers Add additional init containers to the app pods + ## ref: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/ + ## e.g: + ## initContainers: + ## - name: your-image-name + ## image: your-image + ## imagePullPolicy: Always + ## command: ['sh', '-c', 'echo "hello world"'] + ## + initContainers: [] + ## Pod Disruption Budget configuration + ## ref: https://kubernetes.io/docs/tasks/run-application/configure-pdb + ## @param apps.shuffleTools.pdb.create Enable/disable a Pod Disruption Budget creation + ## @param apps.shuffleTools.pdb.minAvailable Minimum number/percentage of pods that should remain scheduled + ## @param apps.shuffleTools.pdb.maxUnavailable Maximum number/percentage of pods that may be made unavailable. Defaults to `1` if both `app.pdb.minAvailable` and `app.pdb.maxUnavailable` are empty. + ## + pdb: + create: true + minAvailable: "" + maxUnavailable: "" + ## Autoscaling configuration + ## ref: https://kubernetes.io/docs/concepts/workloads/autoscaling/ + ## + autoscaling: + ## @param apps.shuffleTools.autoscaling.vpa.enabled Enable VPA for app pods + ## @param apps.shuffleTools.autoscaling.vpa.annotations Annotations for VPA resource + ## @param apps.shuffleTools.autoscaling.vpa.controlledResources VPA List of resources that the vertical pod autoscaler can control. Defaults to cpu and memory + ## @param apps.shuffleTools.autoscaling.vpa.maxAllowed VPA Max allowed resources for the pod + ## @param apps.shuffleTools.autoscaling.vpa.minAllowed VPA Min allowed resources for the pod + ## + vpa: + enabled: false + annotations: {} + controlledResources: [] + maxAllowed: {} + minAllowed: {} + ## @param apps.shuffleTools.autoscaling.vpa.updatePolicy.updateMode Autoscaling update policy + ## Specifies whether recommended updates are applied when a Pod is started and whether recommended updates are applied during the life of a Pod + ## Possible values are "Off", "Initial", "Recreate", and "Auto". + ## + updatePolicy: + updateMode: Auto + ## @param apps.shuffleTools.autoscaling.hpa.enabled Enable HPA for app pods + ## @param apps.shuffleTools.autoscaling.hpa.minReplicas Minimum number of replicas + ## @param apps.shuffleTools.autoscaling.hpa.maxReplicas Maximum number of replicas + ## @param apps.shuffleTools.autoscaling.hpa.targetCPU Target CPU utilization percentage + ## @param apps.shuffleTools.autoscaling.hpa.targetMemory Target Memory utilization percentage + ## + hpa: + enabled: false + minReplicas: "" + maxReplicas: "" + targetCPU: "" + targetMemory: "" + + ## Service configuration + ## + service: + ## @param apps.shuffleTools.service.labels Extra labels for app service + ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ + ## + labels: {} + + shuffleSubflow: + enabled: true + + http: + enabled: true + + # replicas, image, etc. + + ## @extra apps.MY_APP.app [string] The name of the app (required, e.g. shuffle-tools) + ## @extra apps.MY_APP.version [string] The version of the app (required, e.g. 1.2.0) + ## TODO: Add more extras + ## Add your own apps here. The key of the app does not matter, as long as it is unique. + ## myApp: + ## enabled: true + ## name: my-app + ## version: 1.0.0 + ## ... # TODO: Convert sample value to @extra. ## Sample value: @@ -1890,7 +2501,6 @@ app: ## containerSecurityContext: null # optional, defaults to app.containerSecurityContext ## TODO: allow to override resources, serviceAccount, mounts, env, security Contexts. Fall back to app defaults as defined above. ## - deployViaHelm: {} ## @section Traffic Exposure Parameters ##