Kubernetes

Available charts

Memgraph can be deployed on Kubernetes. Currently, supported deployment methods for Memgraph are:

There is also support for deploying Memgraph Lab on Kubernetes:

For details on the implementation of the Helm charts, you can go to Memgraph Helm charts repository (opens in a new tab). Due to numerous possible use cases and deployment setups via Kubernetes, the provided Helm charts are a starting point you can modify according to your needs.

This docs page contains the basic information on how to deploy Memgraph or Memgraph Lab on Kubernetes using Helm charts.

Helm chart for standalone Memgraph

Since Helm chart for standalone Memgraph (opens in a new tab) is configured to deploy Memgraph as a Kubernetes StatefulSet workload, it is also necessary to define a PersistentVolumeClaims to store the data directory (/var/lib/memgraph). This enables the data to be persisted even if the pod is restarted or deleted.

If you don't require data persistence or your dataset is static, using the StatefulSet workload is unnecessary. Stateful applications are more complex to set up and maintain, as they require more attention when handling storage information and security.

To include a standalone Memgraph as a part of your Kubernetes cluster, you need to add the repository and install Memgraph.

Add the repository

Add the Memgraph Helm chart repository to your local Helm setup by running the following command:

helm repo add memgraph https://memgraph.github.io/helm-charts

Make sure to update the repository to fetch the latest Helm charts available:

helm repo update

Install Memgraph

To install Memgraph Helm Chart, run the following command:

helm install <release-name> memgraph/memgraph

Replace <release-name> with the name of the release you chose.

Access Memgraph

Once Memgraph is installed, you can access it using the provided services and endpoints, such as various client libraries, command-line interface mgconsole or visual user interface Memgraph Lab.

Configuration options

The following table lists the configurable parameters of the Memgraph chart and their default values.

ParameterDescriptionDefault
image.repositoryMemgraph Docker image repositorymemgraph/memgraph
image.tagSpecific tag for the Memgraph Docker image. Overrides the image tag whose default is chart version."" (Defaults to chart's app version)
image.pullPolicyImage pull policyIfNotPresent
useImagePullSecretsOverride the default imagePullSecretsfalse
imagePullSecretsSpecify image pull secrets- name: regcred
replicaCountNumber of Memgraph instances to run. Note: no replication or HA support.1
affinity.nodeKeyKey for node affinity (Preferred)""
affinity.nodeValueValue for node affinity (Preferred)""
nodeSelectorConstrain which nodes your Memgraph pod is eligible to be scheduled on, based on the labels on the nodes. Left empty by default.{}
tolerationsA toleration is applied to a pod and allows the pod to be scheduled on nodes with matching taints. Left empty by default.[]
service.typeKubernetes service typeClusterIP
service.enableBoltEnable Bolt protocoltrue
service.boltPortBolt protocol port7687
service.boltProtocolProtocol used by BoltTCP
service.enableWebsocketMonitoringEnable WebSocket monitoringfalse
service.websocketPortMonitoringWebSocket monitoring port7444
service.websocketPortMonitoringProtocolProtocol used by WebSocket monitoringTCP
service.enableHttpMonitoringEnable HTTP monitoringfalse
service.httpPortMonitoringHTTP monitoring port9091
service.httpPortMonitoringProtocolProtocol used by HTTP monitoringhttp
service.annotationsAnnotations to add to the service{}
persistentVolumeClaim.createStorageClaimEnable creation of a Persistent Volume Claim for storagetrue
persistentVolumeClaim.storageClassNameStorage class name for the persistent volume claim""
persistentVolumeClaim.storageSizeSize of the persistent volume claim for storage10Gi
persistentVolumeClaim.existingClaimUse an existing Persistent Volume Claimmemgraph-0
persistentVolumeClaim.storageVolumeNameName of an existing Volume to create a PVC for""
persistentVolumeClaim.createLogStorageEnable creation of a Persistent Volume Claim for logstrue
persistentVolumeClaim.logStorageClassNameStorage class name for the persistent volume claim for logs""
persistentVolumeClaim.logStorageSizeSize of the persistent volume claim for logs1Gi
memgraphConfigList of strings defining Memgraph configuration settings["--also-log-to-stderr=true"]
secrets.enabledEnable the use of Kubernetes secrets for Memgraph credentialsfalse
secrets.nameThe name of the Kubernetes secret containing Memgraph credentialsmemgraph-secrets
secrets.userKeyThe key in the Kubernetes secret for the Memgraph user, the value is passed to the MEMGRAPH_USER envUSER
secrets.passwordKeyThe key in the Kubernetes secret for the Memgraph password, the value is passed to the MEMGRAPH_PASSWORDPASSWORD
memgraphEnterpriseLicenseMemgraph Enterprise License""
memgraphOrganizationNameOrganization name for Memgraph Enterprise License""
statefulSetAnnotationsAnnotations to add to the stateful set{}
podAnnotationsAnnotations to add to the pod{}
resourcesCPU/Memory resource requests/limits. Left empty by default.{}
serviceAccount.createSpecifies whether a service account should be createdtrue
serviceAccount.annotationsAnnotations to add to the service account{}
serviceAccount.nameThe name of the service account to use. If not set and create is true, a name is generated.""
container.terminationGracePeriodSecondsGrace period for pod termination1800
probes.liveliness.initialDelaySecondsInitial delay for liveliness probe10
probes.liveliness.periodSecondsPeriod seconds for liveliness probe60
probes.liveliness.failureThresholdFailure threshold for liveliness probe3
probes.readiness.initialDelaySecondsInitial delay for readiness probe10
probes.readiness.periodSecondsPeriod seconds for readiness probe30
probes.readiness.failureThresholdFailure threshold for readiness probe3
probes.startup.initialDelaySecondsInitial delay for startup probe10
probes.startup.periodSecondsPeriod seconds for startup probe10
probes.startup.failureThresholdFailure threshold for startup probe30

To change the default chart values, provide your own values.yaml file during the installation:

helm install <resource-name> memgraph/memgraph -f values.yaml

Default chart values can also be changed by setting the values of appropriate parameters:

helm install <resource-name> memgraph/memgraph --set <flag1>=<value1>,<flag2>=<value2>,...

Memgraph will start with the --also-log-to-stderr=true flag, meaning the logs will also be written to the standard error output and you can access logs using the kubectl logs command. To modify other Memgraph database settings, you should update the memgraphConfig parameter. It should be a list of strings defining the values of Memgraph configuration settings. For example, this is how you can define memgraphConfig parameter in your values.yaml:

memgraphConfig: 
  - "--also-log-to-stderr=true"
  - "--log-level=TRACE"

For all available database settings, refer to the Configuration settings reference guide.

Since Memgraph Docker image has root privileges on the data located on volumes and log directories, it is necessary that runAsUser is set to 0 in the securityContext section of the pod to override the memgraph user from the Docker image. Currently, Memgraph must have root privileges on the volumes.

Helm chart for Memgraph high availability cluster (Enterprise)

A Helm Chart for deploying Memgraph in high availability setup (opens in a new tab). This helm chart requires an enterprise version of Memgraph.

Memgraph HA cluster includes 3 coordinators, 2 data instances by default. The cluster setup is performed via the cluster-setup job. The HA cluster is still work in progress and started with --experimental-enabled=high-availability. The cluster is started in the configuration without the node selector, which means that in the current configuration, it is not highly available if the node fails.

Installing the Memgraph HA Helm Chart

To install the Memgraph HA Helm Chart, follow the steps below:

helm install <release-name> memgraph/memgraph-high-availability --set memgraph.env.MEMGRAPH_ENTERPRISE_LICENSE=<your-license>,memgraph.env.MEMGRAPH_ORGANIZATION_NAME=<your-organization-name>

Replace <release-name> with a name of your choice for the release and set the enterprise license.

Changing the default chart values

To change the default chart values, run the command with the specified set of flags:

helm install <resource-name> memgraph/memgraph-high-availability --set <flag1>=<value1>,<flag2>=<value2>,...

Or you can modify a values.yaml file and override the desired values:

helm install <resource-name> memgraph/memgraph-high-availability-f values.yaml

Configuration Options

The following table lists the configurable parameters of the Memgraph chart and their default values.

ParameterDescriptionDefault
memgraph.image.repositoryMemgraph Docker image repositorymemgraph/memgraph
memgraph.image.tagSpecific tag for the Memgraph Docker image. Overrides the image tag whose default is chart version.2.17.0
memgraph.image.pullPolicyImage pull policyIfNotPresent
memgraph.env.MEMGRAPH_ENTERPRISE_LICENSEMemgraph enterprise license<your-license>
memgraph.env.MEMGRAPH_ORGANIZATION_NAMEOrganization name<your-organization-name>
memgraph.probes.startup.failureThresholdStartup probe failure threshold30
memgraph.probes.startup.periodSecondsStartup probe period in seconds10
memgraph.probes.readiness.initialDelaySecondsReadiness probe initial delay in seconds5
memgraph.probes.readiness.periodSecondsReadiness probe period in seconds5
memgraph.probes.liveness.initialDelaySecondsLiveness probe initial delay in seconds30
memgraph.probes.liveness.periodSecondsLiveness probe period in seconds10
memgraph.data.volumeClaim.storagePVCEnable storage PVCtrue
memgraph.data.volumeClaim.storagePVCSizeSize of the storage PVC1Gi
memgraph.data.volumeClaim.logPVCEnable log PVCfalse
memgraph.data.volumeClaim.logPVCSizeSize of the log PVC256Mi
memgraph.coordinators.volumeClaim.storagePVCEnable storage PVC for coordinatorstrue
memgraph.coordinators.volumeClaim.storagePVCSizeSize of the storage PVC for coordinators1Gi
memgraph.coordinators.volumeClaim.logPVCEnable log PVC for coordinatorsfalse
memgraph.coordinators.volumeClaim.logPVCSizeSize of the log PVC for coordinators256Mi
memgraph.affinity.enabledEach pod and instance is deployed to unique node in the clustertrue
dataConfiguration for data instancesSee data section
coordinatorsConfiguration for coordinator instancesSee coordinators section

For the data and coordinators sections, each item in the list has the following parameters:

ParameterDescriptionDefault
idID of the instance0 for data, 1 for coordinators
boltPortBolt port of the instance7687
managementPort (data only)Management port of the data instance10000
replicationPort (data only)Replication port of the data instance20000
coordinatorPort (coordinators only)Coordinator port of the coordinator instance12000
argsList of arguments for the instanceSee args section

The args section contains a list of arguments for the instance. The default values are the same for all instances:

- "--also-log-to-stderr"
- "--log-level=TRACE"
- "--replication-restore-state-on-startup=true"

For all available database settings, refer to the Configuration settings reference guide (opens in a new tab).

Helm Chart for Memgraph Lab

A Helm Chart for deploying Memgraph Lab on Kubernetes.

Installing the Memgraph Lab Helm Chart

To install the Memgraph Lab Helm Chart, follow the steps below:

helm install <release-name> memgraph/memgraph-lab

Replace <release-name> with a name of your choice for the release.

Changing the default chart values

To change the default chart values, run the command with the specified set of flags:

helm install <resource-name> memgraph/memgraph-lab --set <flag1>=<value1>,<flag2>=<value2>,...

Or you can modify a values.yaml file and override the desired values:

helm install <resource-name> memgraph/memgraph-lab -f values.yaml

Configuration Options

The following table lists the configurable parameters of the Memgraph Lab chart and their default values.

ParameterDescriptionDefault
image.repositoryMemgraph Lab Docker image repositorymemgraph/memgraph-lab
image.tagSpecific tag for the Memgraph Lab Docker image. Overrides the image tag whose default is chart version."" (Defaults to chart's app version)
image.pullPolicyImage pull policyIfNotPresent
replicaCountNumber of Memgraph Lab instances to run.1
service.typeKubernetes service typeClusterIP
service.portKubernetes service port3000
service.targetPortKubernetes service target port3000
service.protocolProtocol used by the serviceTCP
service.annotationsAnnotations to add to the service{}
podAnnotationsAnnotations to add to the pod{}
resourcesCPU/Memory resource requests/limits. Left empty by default.{} (See note on uncommenting)
serviceAccount.createSpecifies whether a service account should be createdtrue
serviceAccount.annotationsAnnotations to add to the service account{}
serviceAccount.nameThe name of the service account to use. If not set and create is true, a name is generated.""

Memgraph Lab can be further configured with environment variables in your values.yaml file.

env:
  - name: QUICK_CONNECT_MG_HOST
    value: memgraph
  - name: QUICK_CONNECT_MG_PORT
    value: "7687"
  - name: KEEP_ALIVE_TIMEOUT_MS
    value: 65000

In case you added Nginx Ingress service or web server for a reverse proxy, update the following proxy timeout annotations to avoid potential timeouts:

proxy_read_timeout X;
proxy_connect_timeout X;
proxy_send_timeout X;

where X is the number of seconds the connection (request query) can be alive. Additionally, update the Memgraph Lab KEEP_ALIVE_TIMEOUT_MS environment variable to a higher value to ensure that Memgraph Lab stays connected to Memgraph when running queries over 65 seconds.

Refer to the Memgraph Lab documentation for details on how to connect to and interact with Memgraph.