Validator Custom Resource Definition

This page provides an overview of the Validator Custom Resource Definition (CRD) used by Catalyst Blockchain Manager to deploy and manage Canton validators using Kubernetes. It describes the structure of the CRD and explains how each validator component is defined and configured.

A Custom Resource Definition (CRD) in Kubernetes is a way to extend the Kubernetes API by defining new, custom object types, allowing you to manage application-specific data.

Structure of the specification

The CRD specification defines each validator component separately. The following sections describe where each component is configured within the CRD.

Validator

The core Validator configuration is defined at the top level of the specification.

ANS/CNS UI

The Amulet/ Canton Name Service (ANS/CNS) UI configuration is located at:

spec.applicationCantonNameServer.spec

Wallet UI

The Wallet UI application configuration is located at:

spec.walletUI.spec

Participant Node

The Participant Node configuration is located at:

spec.participant.spec

Provisioned Postgres Database

The PostgreSQL database provisioned for the validator is not explicitly represented in the CRD specification. To increase the database storage size (note that decreases are ignored), use:

spec.storageSize

Modifying components specification

Environment Variables

For all components, the environment variables are defined under spec.envVars

They follow the same structure and format used in Kubernetes Pods and Deployments.

Resources

Each component has a resource specification like this:

resources:
    cpuLimit: '2'
    cpuRequested: '1'
    imagePullSecret: intellecteu-gitlab-access
    memoryLimit: 2Gi
    memoryRequested: 1Gi
    replicas: 1
  • cpuLimit: Maximum CPU allocation.

  • cpuRequested: Minimum CPU allocation.

  • memoryLimit: Maximum memory allocation.

  • memoryRequested: Minimum memory allocation.

  • replicas: Number of instances (can be set to 0 or 1).

To scale down a validator, set the 'replicas' field to 0 for all components.

Example

apiVersion: catalyst.manager.canton/v1
kind: Validator
metadata:
  name: validator1st
  namespace: canton-dev
spec:
  application:
    spec:
      domain: participant-validator1st
      resources:
        cpuLimit: '2'
        cpuRequested: '1'
        imagePullSecret: intellecteu-gitlab-access
        memoryLimit: 2Gi
        memoryRequested: 1Gi
        replicas: 1
      type: backend
      validatorParent: validator1st
    status:
      phase: Pending
  applicationCantonNameServer:
    spec:
      domain: cns-validator1st
      envVars:
        - name: SPLICE_APP_CNS_UI_AUTH_URL
          valueFrom:
# <removed for brevity>
      image: >-
        digitalasset-canton-network-docker.jfrog.io/digitalasset/ans-web-ui:0.3.15
      resources:
        cpuLimit: '1'
        cpuRequested: '0.1'
        imagePullSecret: intellecteu-gitlab-access
        memoryLimit: 1536Mi
        memoryRequested: 240Mi
        replicas: 1
      type: ui
    status:
      phase: Pending
  applicationWallet:
    spec:
      domain: wallet-validator1st
      envVars:
        - name: SPLICE_APP_WALLET_UI_AUTH_URL
          valueFrom:
# <removed for brevity>
      image: >-
        digitalasset-canton-network-docker.jfrog.io/digitalasset/wallet-web-ui:0.3.15
      resources:
        cpuLimit: '1'
        cpuRequested: '0.1'
        imagePullSecret: intellecteu-gitlab-access
        memoryLimit: 1536Mi
        memoryRequested: 240Mi
        replicas: 1
      type: ui
    status:
      phase: Pending
  customAuth: false
  disableAutoInit: false
  envVars:
    - name: ADDITIONAL_CONFIG_NO_ONBOARDING
      value: canton.validator-apps.validator_backend.onboarding = null
# <removed for brevity>
  image: digitalasset-canton-network-docker.jfrog.io/digitalasset/validator-app:0.3.15
  imageRepo: digitalasset-canton-network-docker.jfrog.io/digitalasset
  imageTag: 0.3.15
  migrationAttachPVC: 'false'
  migrationId: '0'
  migrationMigrating: false
  onboardingSecretName: cn-app-validator1st-onboarding-validator
  participant:
    spec:
      adminPort: '5002'
      auth: true
      authProvider: keycloak
      authorization:
        jwksUrl: >-
          https://keycloak.testing.catalyst.intellecteu.io/auth/realms/canton-dev/protocol/openid-connect/certs
      daemon: false
      enterprise: true
      envVars:
        - name: JAVA_TOOL_OPTIONS
          value: '-Xms1152M -Xmx1152M -Dscala.concurrent.context.minThreads=4'
# <removed for brevity>
      ha: false
      image: >-
        digitalasset-canton-network-docker.jfrog.io/digitalasset/canton-participant:0.3.15
      jsonapi: false
      jsonapiQueryStore: false
      ledgerPort: '5001'
      logLevel: INFO
      navigator: false
      resources:
        cpuLimit: '2'
        cpuRequested: '1'
        imagePullSecret: intellecteu-gitlab-access
        memoryLimit: 2Gi
        memoryRequested: 1Gi
        replicas: 1
      storage: {}
      storageType: Shared Postgres
    status:
      phase: Pending
  resources:
    cpuLimit: '2'
    cpuRequested: '1'
    imagePullSecret: intellecteu-gitlab-access
    memoryLimit: 2Gi
    memoryRequested: 1Gi
    replicas: 1
  storageSize: 20Gi
  walletEnabled: true