Skip to main content
The mogenius platform is available as a SaaS option on app.mogenius.com. If you prefer the self-hosted version of mogenius, you can install it with our Helm chart. This way you can run mogenius on your own clusters and even in air-gapped environments.

Prerequisites

  • A Kubernetes cluster with at least 1 CPU and 1 GB of memory available.
  • Credentials for pulling the mogenius images from the container registry (see below).
  • The traefik ingress controller.
  • A working local installation of Helm.
  • A MySQL server (optional).
Running the platform as a self-hosted version requires a subscription. Contact our sales team for more information.

Quickstart

For a quick installation of the mogenius platform with defaults where possible, follow these steps.

Create a Namespace

On the cluster where you’re installing the mogenius platform, create a new namespace mogenius-platform.

Create Secrets

The platform services require a few secrets containing critical credentials that aren’t created by the Helm chart. The following secrets are required for the minimum configuration. Additional secrets can be used when working with more sophisticated Helm chart configurations. 1. Container Registry
After obtaining a subscription for the self-hosted version, you will have received credentials for the container registry where the platform images are stored. In your mogenius-platform namespace create a new secret mo-registry-credentials and store the credentials as type kubernetes.io/dockerconfigjson.
2. Redis
Create a secret mo-redis-secret with the key REDIS_SECRET. Define a secure password as a value that you store in a safe place (e.g. a vault).
3. Encryption Key
Create a secret mo-platform-shared with the key MO_CORE_NEST__SSH_SYM_ENC_KEY. As a value, use openssl rand -base64 32 or a similar method on your terminal to create a base64-encrypted key.
4. MySQL
Create the secret mo-mysql-secret with the keys MYSQL_PASSWORD and MYSQL_ROOT_PASSWORD. Use secure passwords as values.
5. Admin User
Create the secret mo-platform-user-secret with the following keys and values:
MO_USER_NEST__SYSTEM_ADMIN_EMAIL
The email address to log in with your admin user.
MO_USER_NEST__SYSTEM_ADMIN_PASSWORD
The password for your admin user.
MO_CORE_NEST__SSH_SYM_ENC_KEY
Use the same value that you set in the secret mo-platform-shared.
MO_USER_NEST__JWT_PRIVATE
Create a private key using the following commands and retrieve the value from the text file.
openssl ecparam -genkey -name secp521r1 -noout -out ec512-key-pair.pem
openssl base64 -A -in ec512-key-pair.pem -out ec512-key-pair.txt
MO_USER_NEST__JWT_PUBLIC
Create a public key using the following commands and retrieve the value from the text file.
openssl ec -in ec512-key-pair.pem -pubout -out public.pem
openssl base64 -A -in public.pem -out public.txt
MO_USER_NEST__SESSION_SECRET
Define a secure secret of your choice.

Prepare your values.yaml

The Helm chart supports wide range of values that you can use to configure your installation of the mogenius platform. Skip to values for a full reference of the chart. Below is an example values.yaml for a minimal setup to install the mogenius platform in a development environment. Make sure to review the configuration and ensure that it matches your infrastructure.
values.yaml quickstart example
demo:
  enabled: false
ingress:
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-cluster-issuer
    traefik.ingress.kubernetes.io/forward-headers: "true"
    traefik.ingress.kubernetes.io/router.middlewares: mogenius-platform-cors-middleware@kubernetescrd
    traefik.ingress.kubernetes.io/secure-headers: "true"
  api_service_url: platform-api.YOURDOMAIN.com
  hostname: mogenius.YOURDOMAIN.com
  k8s_cmd_stream_url: k8s-cmd-stream.YOURDOMAIN.com
  k8s_dispatcher_url: k8s-dispatcher.YOURDOMAIN.com
  k8s_logs_url: k8s-logs.YOURDOMAIN.com
  k8s_websocket_url: k8s-ws.YOURDOMAIN.com
  rootDomain: YOURDOMAIN.com
  socket_service_url: platform-ws.YOURDOMAIN.com
  tls:
  - hosts:
    - mogenius.YOURDOMAIN.com
    - platform-api.YOURDOMAIN.com
    - platform-user.YOURDOMAIN.com
    - platform-ws.YOURDOMAIN.com
    - k8s-ws.YOURDOMAIN.com
    - k8s-logs.YOURDOMAIN.com
    - k8s-cmd-stream.YOURDOMAIN.com
    - k8s-dispatcher.YOURDOMAIN.com
    secretName: mo-platform-tls
  traefik:
    apiVersion: traefik.io/v1alpha1
  user_service_url: platform-user.YOURDOMAIN.com
mo_platform:
  metrics:
    enabled: true
    resources:
      requests:
        cpu: 10m
        memory: 50Mi
mo_platform_api:
  enableAutoRefreshToken: true
  refreshTokenTask: true
mo_platform_user:
  openid:
    enabled: false
mogenius:
  imagePullSecrets:
  - mo-platform-credentials
mysql:
  enabled: true
  ssl: false
stage: prod
storage:
  accessMode: ReadWriteOnce
  className: local-path
  persistentVolume:
    create: false
This chart configuration deploys the MySQL Docker image as part of the platform deployment. This setup is not recommended for running the mogenius platform in production scenarios. We recommend configuring the mysql values with connection to a high-availability MySQL for use in a production environment.

Deploy the Helm chart

Run the following command on your cluster to install the Helm chart with your values.yaml.
helm repo add mogenius https://helm.mogenius.com/private
helm install mogenius-platform mogenius/mo-infrastructure -n mogenius-platform -f values.yaml

Access the mogenius web interface

Check the status of the installation and make sure all Pods are starting properly.
kubectl get Pods -n mogenius-platform
When all Pods are Running, access the mogenius platform with the hostname you specified in your Ingress (e.g. mogenius.yourdomain.com). You can log in with the credentials of your admin user.

Next steps

Now that mogenius is up and running you can prepare the platform for your team. Check out the following resources as next steps:

Support

Need help setting up the mogenius platform? Contact us via [email protected].

Values

KeyTypeDefaultDescription
demo.enabledbooltrue
demo.secretNamestring"mo-platform-demo"
dockersecretsobject{}
global.imagePullSecretslist[]list(of string) set the image pull secrets for all images
global.serviceMonitor.fallbackScrapeProtocolstring"PrometheusText0.0.4"fallback scrape protocol for service monitors
ingress.annotationsobject{"traefik.ingress.kubernetes.io/forward-headers":"true","traefik.ingress.kubernetes.io/router.middlewares":"mogenius-cors-middleware@kubernetescrd","traefik.ingress.kubernetes.io/secure-headers":"true"}annotations to be placed on the ingress
ingress.api_service_urlstringnilapi hostname e.g. api-app.example.com
ingress.hostnamestringnilplatform hostname e.g. app.example.com
ingress.ingressClassNamestring"traefik"
ingress.k8s_cmd_stream_urlstringnilkubernetes cmd stream hostname e.g. k8s-cmd-stream.example.com
ingress.k8s_dispatcher_urlstringnilkubernetes dispatcher hostname e.g. k8s-dispatcher.example.com
ingress.k8s_logs_urlstringnilkubernetes log hostname e.g. k8s-logs.example.com
ingress.k8s_websocket_urlstringnilkubernetes websocket hostname e.g. k8s-ws.example.com
ingress.rootDomainstringnilRoot domain that the platorm will be hosted on, e.g. example.com
ingress.socket_service_urlstringnilwebsocket hostname e.g. ws-app.example.com
ingress.tlslist[]secret reference for tls
ingress.traefikobject{"apiVersion":"traefik.containo.us/v1alpha1"}traefik specific settings
ingress.traefik.apiVersionstring"traefik.containo.us/v1alpha1"the apiVersion that shall be used for traefik resources
ingress.user_service_urlstringniluser service hostname e.g. user-app.example.com
mo_platform.containerSecurityContext.allowPrivilegeEscalationboolfalse
mo_platform.containerSecurityContext.capabilities.drop[0]string"ALL"
mo_platform.containerSecurityContext.readOnlyRootFilesystembooltrue
mo_platform.enabledbooltrue
mo_platform.image.registrystring"ghcr.io"
mo_platform.image.repositorystring"mogenius/mo-frontend"
mo_platform.image.tagstring"v2.5.7"
mo_platform.imagePullPolicystring"IfNotPresent"
mo_platform.metricsobject{"containerSecurityContext":{"allowPrivilegeEscalation":false,"capabilities":{"drop":["ALL"]},"readOnlyRootFilesystem":true},"enabled":false,"image":{"registry":"docker.io","repository":"nginx/nginx-prometheus-exporter","tag":"1.5.1"},"port":9113,"resources":{},"serviceMonitor":{"enabled":false}}prometheus exporter for nginx
mo_platform.podSecurityContext.fsGroupint101
mo_platform.podSecurityContext.runAsUserint101
mo_platform.podSecurityContext.seccompProfile.typestring"RuntimeDefault"
mo_platform.portint8080
mo_platform.replicasint1
mo_platform.resourcesobject{}
mo_platform.tolerationsobject{}
mo_platform_api.containerSecurityContextobject{}
mo_platform_api.enableAutoRefreshTokenboolfalse
mo_platform_api.enabledbooltrue
mo_platform_api.image.registrystring"ghcr.io"
mo_platform_api.image.repositorystring"mogenius/mo-platform-api-service"
mo_platform_api.image.tagstring"v3.0.23"
mo_platform_api.imagePullPolicystring"IfNotPresent"
mo_platform_api.initContainer.containerSecurityContextobject{}
mo_platform_api.initContainer.image.registrystring"docker.io"
mo_platform_api.initContainer.image.repositorystring"alpine/curl"
mo_platform_api.initContainer.image.tagstring"8.14.1"
mo_platform_api.podSecurityContextobject{}
mo_platform_api.portint1337
mo_platform_api.port_tcpint7000
mo_platform_api.probes.enabledbooltrue
mo_platform_api.probes.livenessProbe.enabledbooltrue
mo_platform_api.probes.livenessProbe.pathstring"/core/status"
mo_platform_api.probes.portint1337
mo_platform_api.probes.readinessProbe.enabledbooltrue
mo_platform_api.probes.readinessProbe.pathstring"/core/status"
mo_platform_api.probes.startupProbe.enabledbooltrue
mo_platform_api.probes.startupProbe.pathstring"/core/status"
mo_platform_api.refreshTokenTaskboolfalseif set to true will refresh the tokens in the database
mo_platform_api.replicasint1
mo_platform_api.resourcesobject{}
mo_platform_api.sshSymEncKey.secretKeystring"MO_CORE_NEST__SSH_SYM_ENC_KEY"
mo_platform_api.sshSymEncKey.secretNamestring"mo-platform-shared"
mo_platform_api.tolerationsobject{}
mo_platform_api.ws_cmd_stream_portint7003
mo_platform_api.ws_log_portint7002
mo_platform_api.ws_portint7001
mo_platform_api_valkey.containerSecurityContext.allowPrivilegeEscalationboolfalse
mo_platform_api_valkey.containerSecurityContext.capabilities.drop[0]string"ALL"
mo_platform_api_valkey.containerSecurityContext.readOnlyRootFilesystembooltrue
mo_platform_api_valkey.containerSecurityContext.runAsGroupint999
mo_platform_api_valkey.containerSecurityContext.runAsNonRootbooltrue
mo_platform_api_valkey.containerSecurityContext.runAsUserint999
mo_platform_api_valkey.enabledbooltrue
mo_platform_api_valkey.hoststring"mo-platform-api-valkey"
mo_platform_api_valkey.image.registrystring"docker.io"
mo_platform_api_valkey.image.repositorystring"valkey/valkey"
mo_platform_api_valkey.image.tagfloat8.1
mo_platform_api_valkey.imagePullPolicystring"IfNotPresent"
mo_platform_api_valkey.password.secretKeystring"REDIS_SECRET"
mo_platform_api_valkey.password.secretNamestring"mo-redis-secret"
mo_platform_api_valkey.podSecurityContext.fsGroupint999
mo_platform_api_valkey.podSecurityContext.runAsGroupint999
mo_platform_api_valkey.podSecurityContext.runAsUserint999
mo_platform_api_valkey.podSecurityContext.seccompProfile.typestring"RuntimeDefault"
mo_platform_api_valkey.portint6379
mo_platform_api_valkey.resourcesobject{}
mo_platform_message_dispatcher.containerSecurityContextobject{}
mo_platform_message_dispatcher.enabledbooltrue
mo_platform_message_dispatcher.image.registrystring"ghcr.io"
mo_platform_message_dispatcher.image.repositorystring"mogenius/mo-platform-message-dispatcher"
mo_platform_message_dispatcher.image.tagstring"v1.1.1"
mo_platform_message_dispatcher.imagePullPolicystring"IfNotPresent"
mo_platform_message_dispatcher.listen_hoststring"0.0.0.0"
mo_platform_message_dispatcher.podSecurityContextobject{}
mo_platform_message_dispatcher.portint7060
mo_platform_message_dispatcher.redis.hoststring"localhost"
mo_platform_message_dispatcher.redis.image.registrystring"docker.io"
mo_platform_message_dispatcher.redis.image.repositorystring"redis"
mo_platform_message_dispatcher.redis.image.tagstring"7.4.6"
mo_platform_message_dispatcher.redis.imagePullPolicystring"IfNotPresent"
mo_platform_message_dispatcher.redis.password.secretKeystring"REDIS_SECRET"
mo_platform_message_dispatcher.redis.password.secretNamestring"mo-redis-secret"
mo_platform_message_dispatcher.redis.portint6379
mo_platform_message_dispatcher.redis.tlsboolfalse
mo_platform_message_dispatcher.replicasint1
mo_platform_message_dispatcher.resourcesobject{}
mo_platform_message_dispatcher.tolerationsobject{}
mo_platform_notification.containerSecurityContextobject{}
mo_platform_notification.email.fromAddressstring"[email protected]"
mo_platform_notification.email.fromNamestring"Mogenius Team"
mo_platform_notification.enabledbooltrue
mo_platform_notification.image.registrystring"ghcr.io"
mo_platform_notification.image.repositorystring"mogenius/mo-platform-notification"
mo_platform_notification.image.tagstring"v2.0.2"
mo_platform_notification.imagePullPolicystring"IfNotPresent"
mo_platform_notification.podSecurityContextobject{}
mo_platform_notification.portint7000
mo_platform_notification.replicasint1
mo_platform_notification.resourcesobject{}
mo_platform_notification.sshSymEncKey.secretKeystring"MO_CORE_NEST__SSH_SYM_ENC_KEY"
mo_platform_notification.sshSymEncKey.secretNamestring"mo-platform-shared"
mo_platform_notification.tolerationsobject{}
mo_platform_queue.containerSecurityContextobject{}
mo_platform_queue.enabledbooltrue
mo_platform_queue.image.registrystring"ghcr.io"
mo_platform_queue.image.repositorystring"mogenius/mo-platform-queue"
mo_platform_queue.image.tagstring"v2.0.4"
mo_platform_queue.imagePullPolicystring"IfNotPresent"
mo_platform_queue.podSecurityContextobject{}
mo_platform_queue.redis.hoststring"localhost"
mo_platform_queue.redis.image.registrystring"docker.io"
mo_platform_queue.redis.image.repositorystring"redis"
mo_platform_queue.redis.image.tagstring"7.4.6"
mo_platform_queue.redis.imagePullPolicystring"IfNotPresent"
mo_platform_queue.redis.password.secretKeystring"REDIS_SECRET"
mo_platform_queue.redis.password.secretNamestring"mo-redis-secret"
mo_platform_queue.redis.portint6379
mo_platform_queue.replicasint1
mo_platform_queue.resourcesobject{}
mo_platform_queue.sshSymEncKey.secretKeystring"MO_CORE_NEST__SSH_SYM_ENC_KEY"
mo_platform_queue.sshSymEncKey.secretNamestring"mo-platform-shared"
mo_platform_queue.tolerationsobject{}
mo_platform_queue_valkey.containerSecurityContext.allowPrivilegeEscalationboolfalse
mo_platform_queue_valkey.containerSecurityContext.capabilities.drop[0]string"ALL"
mo_platform_queue_valkey.containerSecurityContext.readOnlyRootFilesystembooltrue
mo_platform_queue_valkey.containerSecurityContext.runAsGroupint999
mo_platform_queue_valkey.containerSecurityContext.runAsNonRootbooltrue
mo_platform_queue_valkey.containerSecurityContext.runAsUserint999
mo_platform_queue_valkey.enabledbooltrue
mo_platform_queue_valkey.hoststring"mo-platform-queue-valkey"
mo_platform_queue_valkey.image.registrystring"docker.io"
mo_platform_queue_valkey.image.repositorystring"valkey/valkey"
mo_platform_queue_valkey.image.tagfloat8.1
mo_platform_queue_valkey.imagePullPolicystring"IfNotPresent"
mo_platform_queue_valkey.password.secretKeystring"REDIS_SECRET"
mo_platform_queue_valkey.password.secretNamestring"mo-redis-secret"
mo_platform_queue_valkey.podSecurityContext.fsGroupint999
mo_platform_queue_valkey.podSecurityContext.runAsGroupint999
mo_platform_queue_valkey.podSecurityContext.runAsUserint999
mo_platform_queue_valkey.podSecurityContext.seccompProfile.typestring"RuntimeDefault"
mo_platform_queue_valkey.portint6379
mo_platform_queue_valkey.resourcesobject{}
mo_platform_user.containerSecurityContextobject{}
mo_platform_user.enabledbooltrue
mo_platform_user.image.registrystring"ghcr.io"
mo_platform_user.image.repositorystring"mogenius/mo-platform-user"
mo_platform_user.image.tagstring"v2.0.4"
mo_platform_user.imagePullPolicystring"IfNotPresent"
mo_platform_user.openid.accessTokenLifetimeint600
mo_platform_user.openid.adminAccessTokenLifetimeint28800
mo_platform_user.openid.enabledbooltrue
mo_platform_user.openid.issuerstring"https://login-dev.mogenius.com"
mo_platform_user.openid.providerobject{"github":{"displayName":"GitHub","enabled":false,"secretKey":"github","secretName":"mo-openid-secret"},"gitlab":{"displayName":"GitLab","enabled":false,"secretKey":"gitlab","secretName":"mo-openid-secret"},"google":{"displayName":"Google","enabled":false,"secretKey":"google","secretName":"mo-openid-secret"},"linkedin":{"displayName":"LinkedIn","enabled":false,"secretKey":"linkedin","secretName":"mo-openid-secret"},"microsoft":{"displayName":"Microsoft","enabled":false,"secretKey":"microsoft","secretName":"mo-openid-secret"}}open id provider, e.g. openid.provider.gitlab.secret: <your-secret>
mo_platform_user.openid.refreshTokenLifetimeint7776000
mo_platform_user.podSecurityContextobject{}
mo_platform_user.portint1337
mo_platform_user.port_wsint7000
mo_platform_user.probes.enabledbooltrue
mo_platform_user.probes.livenessProbe.enabledbooltrue
mo_platform_user.probes.livenessProbe.pathstring"/core/status"
mo_platform_user.probes.portint1337
mo_platform_user.probes.readinessProbe.enabledbooltrue
mo_platform_user.probes.readinessProbe.pathstring"/core/status"
mo_platform_user.probes.startupProbe.enabledbooltrue
mo_platform_user.probes.startupProbe.pathstring"/core/status"
mo_platform_user.redis.hoststring"localhost"
mo_platform_user.redis.image.registrystring"docker.io"
mo_platform_user.redis.image.repositorystring"redis"
mo_platform_user.redis.image.tagstring"7.4.6"
mo_platform_user.redis.imagePullPolicystring"IfNotPresent"
mo_platform_user.redis.password.secretKeystring"REDIS_SECRET"
mo_platform_user.redis.password.secretNamestring"mo-redis-secret"
mo_platform_user.redis.portint6379
mo_platform_user.replicasint1
mo_platform_user.resourcesobject{}
mo_platform_user.sshSymEncKey.secretKeystring"MO_CORE_NEST__SSH_SYM_ENC_KEY"
mo_platform_user.sshSymEncKey.secretNamestring"mo-platform-shared"
mo_platform_user.tolerationsobject{}
mo_platform_websocket.containerSecurityContextobject{}
mo_platform_websocket.enabledbooltrue
mo_platform_websocket.image.registrystring"ghcr.io"
mo_platform_websocket.image.repositorystring"mogenius/mo-platform-websocket"
mo_platform_websocket.image.tagstring"v2.0.2"
mo_platform_websocket.imagePullPolicystring"IfNotPresent"
mo_platform_websocket.podSecurityContextobject{}
mo_platform_websocket.portint1337
mo_platform_websocket.port_wsint7000
mo_platform_websocket.replicasint1
mo_platform_websocket.resourcesobject{}
mo_platform_websocket.sshSymEncKey.secretKeystring"MO_CORE_NEST__SSH_SYM_ENC_KEY"
mo_platform_websocket.sshSymEncKey.secretNamestring"mo-platform-shared"
mo_platform_websocket.tolerationsobject{}
mogenius.imagePullSecretslist[]list(of string) set the image pull secret for mogenius images
mysql.allow_empty_root_passwordint0
mysql.containerSecurityContext.allowPrivilegeEscalationboolfalse
mysql.containerSecurityContext.capabilities.drop[0]string"ALL"
mysql.containerSecurityContext.readOnlyRootFilesystemboolfalse
mysql.containerSecurityContext.runAsGroupint999
mysql.containerSecurityContext.runAsNonRootbooltrue
mysql.containerSecurityContext.runAsUserint999
mysql.databasestring"platform"
mysql.enabledboolfalse
mysql.hoststring"mysql"
mysql.image.registrystring"docker.io"
mysql.image.repositorystring"mysql"
mysql.image.tagstring"8.4.7"
mysql.imagePullPolicystring"IfNotPresent"
mysql.mountpointstring"/var/lib/mysql"
mysql.password.secretKeystring"MYSQL_PASSWORD"
mysql.password.secretNamestring"mo-mysql-secret"
mysql.podSecurityContext.fsGroupint999
mysql.portint3306
mysql.replicasint1
mysql.resourcesobject{}
mysql.root_password.secretKeystring"MYSQL_ROOT_PASSWORD"
mysql.root_password.secretNamestring"mo-mysql-secret"
mysql.sslboolfalse
mysql.sslRejectUnauthorizedbooltrue
mysql.subpathstring"{{ tpl .Release.Namespace }}-mysql-storage"
mysql.tolerationsobject{}
mysql.userstring"platform_user"
platform_websocket_redis.containerSecurityContext.allowPrivilegeEscalationboolfalse
platform_websocket_redis.containerSecurityContext.capabilities.drop[0]string"ALL"
platform_websocket_redis.containerSecurityContext.readOnlyRootFilesystembooltrue
platform_websocket_redis.containerSecurityContext.runAsGroupint999
platform_websocket_redis.containerSecurityContext.runAsNonRootbooltrue
platform_websocket_redis.containerSecurityContext.runAsUserint999
platform_websocket_redis.enabledbooltrue
platform_websocket_redis.hoststring"mo-platform-websocket-redis"
platform_websocket_redis.image.registrystring"docker.io"
platform_websocket_redis.image.repositorystring"redis"
platform_websocket_redis.image.tagstring"7.4.6"
platform_websocket_redis.imagePullPolicystring"IfNotPresent"
platform_websocket_redis.password.secretKeystring"REDIS_SECRET"
platform_websocket_redis.password.secretNamestring"mo-redis-secret"
platform_websocket_redis.podSecurityContext.fsGroupint999
platform_websocket_redis.portint6379
platform_websocket_redis.replicasint1
platform_websocket_redis.resourcesobject{}
platform_websocket_redis.tolerationsobject{}
progressDeadlineSecondsint600
redis_master.containerSecurityContext.allowPrivilegeEscalationboolfalse
redis_master.containerSecurityContext.capabilities.drop[0]string"ALL"
redis_master.containerSecurityContext.readOnlyRootFilesystembooltrue
redis_master.containerSecurityContext.runAsGroupint999
redis_master.containerSecurityContext.runAsNonRootbooltrue
redis_master.containerSecurityContext.runAsUserint999
redis_master.enabledbooltrue
redis_master.hoststring"redis-master"
redis_master.image.registrystring"docker.io"
redis_master.image.repositorystring"redis"
redis_master.image.tagstring"7.4.6"
redis_master.imagePullPolicystring"IfNotPresent"
redis_master.password.secretKeystring"REDIS_SECRET"
redis_master.password.secretNamestring"mo-redis-secret"
redis_master.podSecurityContext.fsGroupint999
redis_master.portint6379
redis_master.queue_dbint7
redis_master.replicasint1
redis_master.resourcesobject{}
redis_master.tlsboolfalse
redis_master.tolerationsobject{}
revisionHistoryLimitint1global revisionHistorylimit for all resources
secretsobject{}secrets.<secretName>.<secretKey>.<secretValue>
stagestring"production"current environment, one of [dev, production]
storage.accessModestring"ReadWriteMany"
storage.classNamestring"default"
storage.persistentVolume.basePathstring"/data"basePath for pv’s basePath/mysqland{basePath}/mysql and /redis must be present on host machine
storage.persistentVolume.createbooltrue
storage.persistentVolume.nodeAffinityobject{}