Skip to main content
Installing a Data Plane is the first half of bringing one up. You provision a Kubernetes cluster, install the Domino services onto it, and verify that the Data Plane agent is waiting for its bootstrap. The second half, registering the Data Plane, connects it to the control plane and is where this page ends. Starting with Domino 6.1, Data Planes are installed with the Platform Operator, the same deployment model the control plane uses. That gives both planes one configuration format and one upgrade path.
Set the FLEETCOMMAND_AGENT_TAG and the Data Plane configuration correctly before you apply them. Incorrect values cannot be fixed or updated once the install completes: the deployment is left partially broken and recovers only through manual intervention.

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 like dp.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.
Install these tools on the workstation you run the installation from:

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 same data-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 them compute1, 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 a tf.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:
The command returns your UserId, Account, and Arn.

Bootstrap the deployment directory

Rather than cloning the full repository, use terraform 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.
  1. Install hcledit, which set-mod-version.sh requires:
  2. Set MOD_VERSION to the module version validated for your Domino release, listed on Provision Terraform infrastructure for AWS, then bootstrap the directory:
    Run every later ./tf.sh command from this domino-deploy/ directory.
  3. Create the SSH key pair:
    The key files sit alongside the infra Terraform configuration, which references them through the ssh_pvt_key_path variable.

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:
Set 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

  1. Initialize and plan all three stages:
  2. Review the plan output, then apply:
    The infra stage takes roughly 10 minutes, cluster roughly 15, and nodes roughly 10.

Reach the cluster through the bastion SSH tunnel

The EKS API endpoint is private. During the cluster 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:
Close the tunnel when you finish:
Keep this tunnel, or equivalent connectivity to the API endpoint, open while you run the bootstrap script during Data Plane registration. A private cluster is unreachable without it.

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:
Search the generated file for < to find every placeholder that needs your value.
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.
Attach the certificate to the load balancer with 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):
The load balancer is deliberately open at 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:
Storage classes use Elastic Block Store (EBS) for block storage and Elastic File System (EFS) for the shared storage that Datasets need:
The 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 istio.enabled here is not sufficient on its own. Also select Enable Istio when you register the Data Plane.
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 external-dns annotations, DNS is configured for you. Otherwise, retrieve the load balancer address and create the record yourself:
On AWS, create a canonical name (CNAME) record pointing at the load balancer address, not an address (A) record.
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 https:// plus your Data Plane hostname in a browser.

Verify the installation

  1. 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:
  2. Check the data-plane-agent pod 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 turns Secret agent-bootstrap not found; waiting... into a healthy Data Plane.