Prerequisites
- A functional control plane running Domino 6.1 or later, with Nexus enabled.
- A Kubernetes cluster for the Data Plane. See Provision the cluster.
-
Network connectivity from the Data Plane cluster to four control plane endpoints:
- Configuration records for the RabbitMQ, Vault, and Docker registry hosts, plus any custom ports.
-
A Domain Name System (DNS) subdomain of your control plane domain. If the control plane is
example.com, the Data Plane is something likedp.example.com. - A valid Transport Layer Security (TLS) certificate for the Data Plane hostname.
-
Registry credentials for
quay.io, provided by your Domino account team.
Cluster node pools
The Data Plane cluster needs at least two node pools, labeled so Domino can schedule against them:
Size the nodes for your cloud provider:
On AKS, spread the compute pool across all 3 availability zones by creating one pool per zone. The platform pool needs no zonal distribution, because it holds no persistent storage.
The Data Plane cluster’s Kubernetes version can differ from the control plane’s, as long as it sits in the compatible range for your Domino version.
Provision the cluster
Provision an EKS, AKS, or GKE cluster that meets the node pool requirements above, then point your default Kubernetes context at it. For EKS, Domino publishes a Terraform module that provisions the whole stack. One difference from a control plane deployment is worth calling out before you start: a Data Plane does not own the S3 bucket or the Elastic Container Registry (ECR), which stay with the control plane. Deploy Domino on AWS EKS covers the samedata-plane-eks preset from the control plane installer’s perspective, including the Terraform values to pull into the configuration file.
Sample AKS node pool configuration
Create one platform pool and one compute pool per availability zone. For the compute pools, name themcompute1, compute2, and compute3, and set availabilityZones to ["1"], ["2"], and ["3"] respectively.
Provision an EKS cluster with Terraform
The terraform-aws-eks module uses a three-stage deployment driven by atf.sh wrapper script. Apply the stages in order, because each depends on the outputs of the one before it:
Beyond the tools listed under Prerequisites, Terraform provisioning needs Terraform 1.3 or later, the AWS CLI v2, Helm 3.x, and hcledit on your
PATH.
Configure AWS credentials with permission to create VPC resources, EKS clusters, EC2 instances, IAM roles, and security groups, then confirm the right account is active:
UserId, Account, and Arn.
Bootstrap the deployment directory
Rather than cloning the full repository, useterraform init -from-module to pull the examples/deploy scaffold at a specific version tag into a local directory. That also runs set-mod-version.sh, which pins all three module sources to the same tag.
-
Install
hcledit, whichset-mod-version.shrequires: -
Set
MOD_VERSIONto the module version validated for your Domino release, listed on Provision Terraform infrastructure for AWS, then bootstrap the directory:Run every later./tf.shcommand from thisdomino-deploy/directory. -
Create the SSH key pair:
The key files sit alongside the
infraTerraform configuration, which references them through thessh_pvt_key_pathvariable.
Configure the .tfvars files
The three files at terraform/infra.tfvars, terraform/cluster.tfvars, and terraform/nodes.tfvars ship as scaffolding with null values. Populate the fields below and leave the rest as they are.
The availability zone IDs in these examples (
usw2-az1, usw2-az2) are for us-west-2. Look up the IDs for your region:k8s_version to a version listed for the Nexus data plane row of the Kubernetes compatibility table for your Domino release. Disabling public_access in cluster.tfvars gives you a private cluster, which is why the bastion and the SSH tunnel below exist.
Apply the stages
-
Initialize and plan all three stages:
-
Review the plan output, then apply:
The
infrastage takes roughly 10 minutes,clusterroughly 15, andnodesroughly 10.
Reach the cluster through the bastion SSH tunnel
The EKS API endpoint is private. During thecluster stage, Terraform generates a helper script at terraform/cluster/k8s-functions.sh, pre-filled with your bastion IP, kubeconfig path, tunnel port, and SSH key path. It handles the SSH SOCKS5 tunnel and the kubeconfig setup, so you do not edit it.
Run these commands in order from domino-deploy/ in every new terminal session:
Install the Data Plane services
1
Set environment variables
Set the registry credentials and the agent version the installation uses:Get the tag for your target release from the releases page, or from your Domino account team.
2
Install the Platform Operator
Point your Kubernetes context at the Data Plane cluster, then run:Confirm the installation when prompted. This creates the
domino-operator namespace and installs the Platform Operator Helm chart, without creating the Domino custom resource. Wait until the pods in domino-operator are running before you continue.3
Create the configuration file
Generate a configuration file from the Data Plane preset:On EKS, use
--preset data-plane-eks instead. The preset sets control_plane: false and data_plane.type: remote, and omits email_notifications, telemetry, blob_storage, internal_docker_registry, external_docker_registry, and monitoring. See Data Plane deployments.If Terraform provisioned the cluster, pull its outputs into the configuration file rather than transcribing them:4
Set the required fields
Edit the generated configuration file and set these values:
The Data Plane agent and the log forwarder each need to reach the control plane’s RabbitMQ and Vault services. Your Domino account team provides both hostnames:
5
Configure ingress, TLS, and storage
Ingress configuration goes under
release_overrides. Storage classes, the metrics server, and the autoscaler are top-level keys, siblings of release_overrides. Both differ by cloud provider.storage_classes is optional on a Data Plane install. Configure it when the Data Plane needs its own block or shared storage, for example to serve Datasets.- AWS (EKS)
- Azure (AKS)
- GCP (GKE)
Attach the certificate to the load balancer with the The load balancer is deliberately open at Storage classes use Elastic Block Store (EBS) for block storage and Elastic File System (EFS) for the shared storage that Datasets need:The
aws-load-balancer-ssl-cert annotation. If you manage certificates in AWS Certificate Manager (ACM), request a certificate for the Data Plane hostname, give the DNS verification records to your Domino account team to confirm the domain, then use the resulting Amazon Resource Name (ARN):loadBalancerSourceRanges, because networkPolicy.ipCidrs is what restricts access. Adjust those CIDRs to match your VPC. EKS also needs the metrics server, and takes the cluster autoscaler:kmsKeyId parameter is optional. Include it when you require encryption with a customer-managed KMS key.If you run external-dns with IRSA, annotate its service account:6
Add optional configuration
Add any of these to the generated configuration file if your deployment needs them:
Setting
GPU support
GPU support
Node selectors
Node selectors
Istio
Istio
istio.enabled here is not sufficient on its own. Also select Enable Istio when you register the Data Plane.Monitoring
Monitoring
Datasets
Datasets
Datasets on a remote Data Plane need the volume operator and the filetask operator:
7
Apply the configuration
Create the Domino custom resource, which the Platform Operator reconciles into the running Data Plane:Watch progress with
kubectl get pods -A -w.8
Point DNS at the load balancer
If your ingress configuration set On a Domino Cloud deployment, give the load balancer IP to your Domino account team, who configure DNS for you. Confirm TLS works by opening
external-dns annotations, DNS is configured for you. Otherwise, retrieve the load balancer address and create the record yourself:https:// plus your Data Plane hostname in a browser.Verify the installation
-
Confirm no pod is stuck. This command lists only pods that are neither running nor completed, so an empty result means the cluster is healthy:
To read the detail instead, list the two Domino namespaces directly:
-
Check the
data-plane-agentpod logs. Seeing this message means the install succeeded and the agent is waiting for the bootstrap that registration provides:
Register the Data Plane
The Data Plane is installed but not yet connected to anything. Register it with the control plane to create its record in the admin portal, generate a bootstrap token, and run the bootstrap script against the cluster you just built. Registration is what turnsSecret agent-bootstrap not found; waiting... into a healthy Data Plane.