Skip to content

Rate this page
Thanks for your feedback
Thank you! The feedback has been submitted.

Get free database assistance or contact our experts for personalized support.

Manage database clusters with CRD

At the core of Percona Everest is the DatabaseCluster CRD, which defines and manages database clusters.

Example: Basic database cluster
apiVersion: everest.percona.com/v1alpha1
kind: DatabaseCluster
metadata:
  labels:
    clusterName: my-database-cluster
  name: my-database-cluster
spec:
  backup:
    pitr:
      enabled: false
  engine:
    replicas: 1
    resources:
      cpu: "1"
      memory: 2G
    storage:
      class: standard-rwo
      size: 25Gi
    type: postgresql # Can be pxc, psmdb, postgresql
    userSecretsName: everest-secrets-my-database-cluster
    version: "17.4"
  monitoring:
    resources: {}
  proxy:
    expose:
      type: ClusterIP
    replicas: 1
    resources:
      cpu: "1"
      memory: 30M
    type: pgbouncer

Supported database engine types

Percona Everest supports three database engines:

  • Percona Distribution for PostgreSQL

  • Percona XtraDB Cluster (MySQL)

  • Percona Server for MongoDB

DatabaseEngine CRD

The DatabaseEngine Custom Resource Definition (CRD) manages the lifecycle of database engines in your Kubernetes cluster.

It handles the following:

  • Operator installation
  • Upgrades
  • Version management
Example: DatabaseEngine CRD
apiVersion: everest.percona.com/v1alpha1
kind: DatabaseEngine
metadata:
  name: percona-postgresql-operator
spec:
  type: postgresql

DatabaseEngine status

The DatabaseEngine status provides the following information:

  • Operator state: not installed, installing, installed, upgrading
  • Current operator version
  • Available database versions and their components
  • Pending operator upgrades

Each version can have one of these statuses:

  • recommended: Preferred version for production use

  • available: Supported, but not the recommended version

  • unavailable: Version exists but currently can’t be used

  • unsupported: Version is no longer supported

To check the available versions and their status:

kubectl get dbengine percona-postgresql-operator -n <your namespace> -o jsonpath='{.status.availableVersions}'
Example: DatabaseEngine with both spec and status
apiVersion: everest.percona.com/v1alpha1
kind: DatabaseEngine
metadata:
  name: percona-postgresql-operator
  namespace: everest
spec:
  type: postgresql
status:
  state: installed
  operatorVersion: 1.4.0
  availableVersions:
    "14.9.0": recommended
    "14.8.0": available
    "13.11.0": available
    "12.14.0": unsupported
    "15.0.0": unavailable
  pendingUpgrades:
    - from: 1.3.0
      to: 1.4.0

Note

Operator upgrades must be performed through the UI or API, not directly via Kubernetes.

Exposing your database

You can expose your database service either through a LoadBalancer or NodePort service type.

spec:
  proxy:
    type: haproxy  # or: pgbouncer, proxysql, mongos
    expose:
      type: LoadBalancer # or: NodePort
      ipSourceRanges:  # Optional IP whitelist
        - "10.0.0.0/24"
    replicas: 2