How it works

The Domino Platform Operator is a Kubernetes operator that manages the lifecycle of Domino on Kubernetes.

It reads from a custom resource definition (CRD) to understand the desired state of the Domino Platform. It then orchestrates Kubernetes Jobs to install and upgrade Domino using a fleetcommand-agent image that is coupled with every release version of Domino.

Unlike fleetcommand-agent, the Platform Operator’s reconciliation logic is not tied to a specific Domino version, so it can be used to upgrade across multiple versions of Domino unless otherwise specified in the release notes. Upgrading the operator itself, however, does not necessitate any downtime for a Domino cluster.

Whenever the Domino custom resource definition is updated in the cluster, a reconciliation is triggered that evaluates whether the change materially alters the state of the Domino platform (i.e. the version of the agent was changed, the version of the cluster was changed, configuration values were changed, etc.).

If the change is found to be material, the operator will provision a new Kubernetes job that uses the fleetcommand-agent version set in the Domino specification with the configuration values mounted from the .spec.config field.

Note
You may recognize the structure of the .spec.config field from previous Domino versions as the domino.yml file or agent.yaml file. More on the configuration options available in the Domino custom resource definition can be found in the configuration reference topic.

The operator ships with a companion command line tool named ddlctl which can be used not only to interact with the Domino custom resource in your cluster, but also to create and manage the definitions. More information on ddlctl can be found in the ddlctl section.

As Domino is reconciled like any other Kubernetes resource, the success or failure of its reconciliation will be reflected in the status.

Let’s look at an example of what this looks like using ddlctl.

  • With ddlctl, you can easily fetch the status of domino in your cluster:

    $ ddlctl get domino
  • This will parse the conditions of the domino resource within the domino-operator namespace and report on it in a human readable format:

    VERSION   	READY	MESSAGE                              	JOB STATE   	AGENT VERSION                	DRY RUN	SUSPENDED
    6.0.0   	True 	job platform-operator-s5lfx succeeded	JobSucceeded	6.0.0.catalog-xxxx          	false  	false