Cluster requirements

You can deploy Domino into a Kubernetes cluster that meets the following requirements.

Cluster permissions

Domino needs permission to install and configure pods in the cluster through Helm. The Domino installer is delivered as a containerized Python utility that operates Helm through a kubeconfig that provides service account access to the cluster.

Namespaces

Domino creates one dedicated namespace for Platform nodes, one for Compute nodes, and one for installer metadata and secrets.

Nodes

The recommended node requirements for Domino are one platform node and one compute node.

If you are upgrading to 5.0 or higher, and the platform cluster does not support autoscaling, you must increase the number of nodes to support the increased node requirements.

Storage requirements

Storage classes

Domino requires at least two storage classes.

  1. Dynamic block storage

    Domino requires high-performance block storage for the following types of data:

    • Ephemeral volumes attached to user execution

    • High-performance databases for Domino application object data

    This storage must be backed by a storage class with the following properties:

    • Supports dynamic provisioning

    • Can be mounted on any node in the cluster

    • SSD-backed recommended for fast I/O

    • Capable of provisioning volumes of at least 100GB

    • Underlying storage provider can support ReadWriteOnce semantics

    • Are backed by true, fully POSIX-compliance block storage (i.e., NOT NFS)

    Note
    If this storage does not meet these requirements — or if you override critical services that rely on block storage (mongo, postgres, Git) to use a different storage class — you may see performance degradations, catastrophic failures, and unexpected data loss.

    + In AWS, EBS is used to back this storage class. The following is an example configuration for a compatible EBS storage class:

    +

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: domino-compute-storage
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
  fsType: ext4

+ In GCP, compute engine persistent disks are used to back this storage class. The following is an example configuration for a compatible GCEPD storage class:

+

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: dominodisk
parameters:
  replication-type: none
  type: pd-standard
provisioner: kubernetes.io/gce-pd
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
  1. Long-term shared storage

    Domino needs a separate storage class for long-term storage for:

    • Project data uploaded or created by users

    • Domino Datasets

    • Docker images

    • Domino backups

    This storage needs to be backed by a storage class with the following properties:

    • Dynamically provisions Kubernetes PersistentVolume

    • Can be accessed in ReadWriteMany mode from all nodes in the cluster

    • Uses a VolumeBindingMode of Immediate

    In AWS for example, these storage requirements are handled by a class that is backed by EFS for Domino Datasets, and a class that is backed by S3 for project data, backups, and Docker images.