diff --git a/release-notes/SUMMARY.md b/release-notes/SUMMARY.md index d74f4bf7f..822cb1e46 100644 --- a/release-notes/SUMMARY.md +++ b/release-notes/SUMMARY.md @@ -2462,4 +2462,5 @@ * [Connector/R2DBC 1.0.0 Release Notes](connectors/r2dbc/mariadb-connector-r2dbc-1-0-0-release-notes.md) * [Enterprise Operator Release Notes](enterprise-operator/README.md) * [MariaDB Enterprise Operator 1.0.0](enterprise-operator/mariadb-enterprise-operator-1-0-0.md) + * [MariaDB Enterprise Operator 25.08](enterprise-operator/mariadb-enterprise-operator-25-08.md) * [Test Page](test-page.md) diff --git a/release-notes/enterprise-operator/mariadb-enterprise-operator-25-08.md b/release-notes/enterprise-operator/mariadb-enterprise-operator-25-08.md new file mode 100644 index 000000000..fef67e07e --- /dev/null +++ b/release-notes/enterprise-operator/mariadb-enterprise-operator-25-08.md @@ -0,0 +1,39 @@ +# MariaDB Enterprise Operator 25.08 + +**Release date**: 26 August 2025 + +We are excited to announce release of **MariaDB Enterprise Operator 25.08** - delivering enterprise-grade automation for managing MariaDB Enterprise workloads on Kubernetes and Red Hat OpenShift. + +This enterprise version is based on the [25.8.3 Community release](https://github.com/mariadb-operator/mariadb-operator/releases/tag/25.8.3), adding support for non-blocking Physical Backups and the IBM Power (ppc64le) architecture among other enterprise-grade enhancements. + +### Non-Blocking Physical Backups + + With the Enterprise Operator, we extend physical backups via mariadb-backup and Volume Snapshots available in Community version with support for non-blocking physical backups. By leveraging [MariaDB’s BACKUP STAGE](https://mariadb.com/docs/server/reference/sql-statements/administrative-sql-statements/backup-commands/backup-stage) feature, backups are taken without long read locks or service interruptions. This enables consistent, production-grade backups with minimal impact on running workloads, ideal for high-availability and performance-sensitive environments. + + +### IBM Power (ppc64le) architecture support + +We’ve added support for the ppc64le architecture for Enterprise Operator, enabling deployment and management of containerized MariaDB Enterprise Server and MaxScale on IBM Power systems, including certified images with Red Hat OpenShift for ppc64le. This enhancement allows teams to standardize Kubernetes-based database operations across diverse infrastructures, including amd64, arm64, and ppc64le environments. + +### Compatibility with CNCF-Certified Kubernetes Distributions + +We are extending our engineering policy to support the three latest Kubernetes versions across all [CNCF-certified Kubernetes distributions](https://www.cncf.io/training/certification/software-conformance/). While validation is performed on upstream Kubernetes, support extends to certified container platforms based on CNCF conformance, including Amazon EKS, Google Kubernetes Engine (GKE), Azure Kubernetes Service (AKS), VMware Tanzu Kubernetes Grid, and other CNCF-certified distributions. Infrastructure-related issues, such as misconfigured Kubernetes clusters or problems with CSI (storage) or CNI (network) drivers, remain outside the scope of support. + +### Validation with OpenShift 4.16 EUS version + +The Enterprise Operator is now validated with OpenShift 4.16, in addition to the currently available 4.18 version. This update ensures compatibility with the two most recent OpenShift Extended Update Support (EUS) versions, allowing platform teams to deploy and manage MariaDB Enterprise Server and MaxScale while staying aligned with Red Hat’s recommended upgrade path. + +### Platform and component versions + +The current release has been tested with the following versions: + +| Platform/Component | Version | +| ------------------------- | -------- | +| Kubernetes | 1.33 | +| OpenShift | 4.18.6, 4.16.4 | +| MariaDB Enterprise Server | 11.4.7-4 | +| MaxScale | 25.01.3-1 | + +{% include "https://app.gitbook.com/s/SsmexDFPv2xG2OTyO5yV/~/reusable/pNHZQXPP5OEz2TgvhFva/" %} + +{% @marketo/form formid="4316" formId="4316" %} diff --git a/tools/SUMMARY.md b/tools/SUMMARY.md index 2a0d57078..6cd7f614d 100644 --- a/tools/SUMMARY.md +++ b/tools/SUMMARY.md @@ -13,7 +13,9 @@ * [Galera Cluster](mariadb-enterprise-operator/galera-cluster.md) * [High Availability](mariadb-enterprise-operator/high-availability.md) * [MaxScale Database Proxy](mariadb-enterprise-operator/maxscale-database-proxy.md) - * [Backup and Restore](mariadb-enterprise-operator/backup-and-restore.md) + * [Backup and Restore](mariadb-enterprise-operator/backup-and-restore/README.md) + * [Logical backups](mariadb-enterprise-operator/backup-and-restore/logical_backup.md) + * [Physical backups](mariadb-enterprise-operator/backup-and-restore/physical_backup.md) * [Storage](mariadb-enterprise-operator/storage.md) * [TLS](mariadb-enterprise-operator/tls.md) * [Configuration](mariadb-enterprise-operator/configuration.md) diff --git a/tools/mariadb-enterprise-operator/api-reference.md b/tools/mariadb-enterprise-operator/api-reference.md index 2f70735e0..dd118e833 100644 --- a/tools/mariadb-enterprise-operator/api-reference.md +++ b/tools/mariadb-enterprise-operator/api-reference.md @@ -16,6 +16,7 @@ Package v1alpha1 contains API Schema definitions for the v1alpha1 API group - [Grant](#grant) - [MariaDB](#mariadb) - [MaxScale](#maxscale) +- [PhysicalBackup](#physicalbackup) - [Restore](#restore) - [SqlJob](#sqljob) - [User](#user) @@ -26,7 +27,7 @@ Package v1alpha1 contains API Schema definitions for the v1alpha1 API group -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#affinity-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#affinity-v1-core. @@ -80,10 +81,27 @@ Backup is the Schema for the backups API. It is used to define backup jobs and i | --- | --- | --- | --- | | `apiVersion` _string_ | `enterprise.mariadb.com/v1alpha1` | | | | `kind` _string_ | `Backup` | | | -| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | | `spec` _[BackupSpec](#backupspec)_ | | | | +#### BackupContentType + +_Underlying type:_ _string_ + +BackupContentType defines the backup content type. + + + +_Appears in:_ +- [BootstrapFrom](#bootstrapfrom) + +| Field | Description | +| --- | --- | +| `Logical` | BackupContentTypeLogical represents a logical backup created using mariadb-dump.
| +| `Physical` | BackupContentTypePhysical represents a physical backup created using mariadb-backup.
| + + #### BackupSpec @@ -98,7 +116,7 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | | `args` _string array_ | Args to be used in the Container. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | | `securityContext` _[SecurityContext](#securitycontext)_ | SecurityContext holds security configuration that will be applied to a container. | | | | `podMetadata` _[Metadata](#metadata)_ | PodMetadata defines extra metadata for the Pod. | | | | `imagePullSecrets` _[LocalObjectReference](#localobjectreference) array_ | ImagePullSecrets is the list of pull Secrets to be used to pull the image. | | | @@ -106,7 +124,7 @@ _Appears in:_ | `serviceAccountName` _string_ | ServiceAccountName is the name of the ServiceAccount to be used by the Pods. | | | | `affinity` _[AffinityConfig](#affinityconfig)_ | Affinity to be used in the Pod. | | | | `nodeSelector` _object (keys:string, values:string)_ | NodeSelector to be used in the Pod. | | | -| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | +| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | | `priorityClassName` _string_ | PriorityClassName to be used in the Pod. | | | | `successfulJobsHistoryLimit` _integer_ | SuccessfulJobsHistoryLimit defines the maximum number of successful Jobs to be displayed. | | Minimum: 0
| | `failedJobsHistoryLimit` _integer_ | FailedJobsHistoryLimit defines the maximum number of failed Jobs to be displayed. | | Minimum: 0
| @@ -116,12 +134,12 @@ _Appears in:_ | `stagingStorage` _[BackupStagingStorage](#backupstagingstorage)_ | StagingStorage defines the temporary storage used to keep external backups (i.e. S3) while they are being processed.
It defaults to an emptyDir volume, meaning that the backups will be temporarily stored in the node where the Backup Job is scheduled.
The staging area gets cleaned up after each backup is completed, consider this for sizing it appropriately. | | | | `storage` _[BackupStorage](#backupstorage)_ | Storage defines the final storage for backups. | | Required: \{\}
| | `schedule` _[Schedule](#schedule)_ | Schedule defines when the Backup will be taken. | | | -| `maxRetention` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | MaxRetention defines the retention policy for backups. Old backups will be cleaned up by the Backup Job.
It defaults to 30 days. | | | +| `maxRetention` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | MaxRetention defines the retention policy for backups. Old backups will be cleaned up by the Backup Job.
It defaults to 30 days. | | | | `databases` _string array_ | Databases defines the logical databases to be backed up. If not provided, all databases are backed up. | | | | `ignoreGlobalPriv` _boolean_ | IgnoreGlobalPriv indicates to ignore the mysql.global_priv in backups.
If not provided, it will default to true when the referred MariaDB instance has Galera enabled and otherwise to false. | | | | `logLevel` _string_ | LogLevel to be used n the Backup Job. It defaults to 'info'. | info | | | `backoffLimit` _integer_ | BackoffLimit defines the maximum number of attempts to successfully take a Backup. | | | -| `restartPolicy` _[RestartPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#restartpolicy-v1-core)_ | RestartPolicy to be added to the Backup Pod. | OnFailure | Enum: [Always OnFailure Never]
| +| `restartPolicy` _[RestartPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#restartpolicy-v1-core)_ | RestartPolicy to be added to the Backup Pod. | OnFailure | Enum: [Always OnFailure Never]
| | `inheritMetadata` _[Metadata](#metadata)_ | InheritMetadata defines the metadata to be inherited by children resources. | | | @@ -136,6 +154,7 @@ BackupStagingStorage defines the temporary storage used to keep external backups _Appears in:_ - [BackupSpec](#backupspec) - [BootstrapFrom](#bootstrapfrom) +- [PhysicalBackupSpec](#physicalbackupspec) - [RestoreSource](#restoresource) - [RestoreSpec](#restorespec) @@ -194,19 +213,21 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `backupRef` _[LocalObjectReference](#localobjectreference)_ | BackupRef is a reference to a Backup object. It has priority over S3 and Volume. | | | -| `s3` _[S3](#s3)_ | S3 defines the configuration to restore backups from a S3 compatible storage. It has priority over Volume. | | | +| `backupRef` _[TypedLocalObjectReference](#typedlocalobjectreference)_ | BackupRef is reference to a backup object. If the Kind is not specified, a logical Backup is assumed.
This field takes precedence over S3 and Volume sources. | | | +| `volumeSnapshotRef` _[LocalObjectReference](#localobjectreference)_ | VolumeSnapshotRef is a reference to a VolumeSnapshot object.
This field takes precedence over S3 and Volume sources. | | | +| `backupContentType` _[BackupContentType](#backupcontenttype)_ | BackupContentType is the backup content type available in the source to bootstrap from.
It is inferred based on the BackupRef and VolumeSnapshotRef fields. If inference is not possible, it defaults to Logical.
Set this field explicitly when using physical backups from S3 or Volume sources. | | Enum: [Logical Physical]
| +| `s3` _[S3](#s3)_ | S3 defines the configuration to restore backups from a S3 compatible storage.
This field takes precedence over the Volume source. | | | | `volume` _[StorageVolumeSource](#storagevolumesource)_ | Volume is a Kubernetes Volume object that contains a backup. | | | -| `targetRecoveryTime` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#time-v1-meta)_ | TargetRecoveryTime is a RFC3339 (1970-01-01T00:00:00Z) date and time that defines the point in time recovery objective.
It is used to determine the closest restoration source in time. | | | -| `stagingStorage` _[BackupStagingStorage](#backupstagingstorage)_ | StagingStorage defines the temporary storage used to keep external backups (i.e. S3) while they are being processed.
It defaults to an emptyDir volume, meaning that the backups will be temporarily stored in the node where the Restore Job is scheduled. | | | -| `restoreJob` _[Job](#job)_ | RestoreJob defines additional properties for the Job used to perform the Restore. | | | +| `targetRecoveryTime` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#time-v1-meta)_ | TargetRecoveryTime is a RFC3339 (1970-01-01T00:00:00Z) date and time that defines the point in time recovery objective.
It is used to determine the closest restoration source in time. | | | +| `stagingStorage` _[BackupStagingStorage](#backupstagingstorage)_ | StagingStorage defines the temporary storage used to keep external backups (i.e. S3) while they are being processed.
It defaults to an emptyDir volume, meaning that the backups will be temporarily stored in the node where the Job is scheduled. | | | +| `restoreJob` _[Job](#job)_ | RestoreJob defines additional properties for the Job used to perform the restoration. | | | #### CSIVolumeSource -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#csivolumesource-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#csivolumesource-v1-core. @@ -254,6 +275,7 @@ CompressAlgorithm defines the compression algorithm for a Backup resource. _Appears in:_ - [BackupSpec](#backupspec) +- [PhysicalBackupSpec](#physicalbackupspec) | Field | Description | | --- | --- | @@ -266,7 +288,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#configmapkeyselector-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#configmapkeyselector-v1-core. @@ -285,7 +307,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#configmapvolumesource-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#configmapvolumesource-v1-core. @@ -313,7 +335,7 @@ Connection is the Schema for the connections API. It is used to configure connec | --- | --- | --- | --- | | `apiVersion` _string_ | `enterprise.mariadb.com/v1alpha1` | | | | `kind` _string_ | `Connection` | | | -| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | | `spec` _[ConnectionSpec](#connectionspec)_ | | | | @@ -385,12 +407,12 @@ _Appears in:_ | --- | --- | --- | --- | | `name` _string_ | Name to be given to the container. | | | | `image` _string_ | Image name to be used by the container. The supported format is `:`. | | Required: \{\}
| -| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| +| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| | `command` _string array_ | Command to be used in the Container. | | | | `args` _string array_ | Args to be used in the Container. | | | | `env` _[EnvVar](#envvar) array_ | Env represents the environment variables to be injected in a container. | | | | `volumeMounts` _[VolumeMount](#volumemount) array_ | VolumeMounts to be used in the Container. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | #### ContainerTemplate @@ -417,7 +439,7 @@ _Appears in:_ | `livenessProbe` _[Probe](#probe)_ | LivenessProbe to be used in the Container. | | | | `readinessProbe` _[Probe](#probe)_ | ReadinessProbe to be used in the Container. | | | | `startupProbe` _[Probe](#probe)_ | StartupProbe to be used in the Container. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | | `securityContext` _[SecurityContext](#securitycontext)_ | SecurityContext holds security configuration that will be applied to a container. | | | @@ -472,7 +494,7 @@ Database is the Schema for the databases API. It is used to define a logical dat | --- | --- | --- | --- | | `apiVersion` _string_ | `enterprise.mariadb.com/v1alpha1` | | | | `kind` _string_ | `Database` | | | -| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | | `spec` _[DatabaseSpec](#databasespec)_ | | | | @@ -489,8 +511,8 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `requeueInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | RequeueInterval is used to perform requeue reconciliations. | | | -| `retryInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | RetryInterval is the interval used to perform retries. | | | +| `requeueInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | RequeueInterval is used to perform requeue reconciliations. | | | +| `retryInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | RetryInterval is the interval used to perform retries. | | | | `cleanupPolicy` _[CleanupPolicy](#cleanuppolicy)_ | CleanupPolicy defines the behavior for cleaning up a SQL resource. | | Enum: [Skip Delete]
| | `mariaDbRef` _[MariaDBRef](#mariadbref)_ | MariaDBRef is a reference to a MariaDB object. | | Required: \{\}
| | `characterSet` _string_ | CharacterSet to use in the Database. | utf8 | | @@ -502,7 +524,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#emptydirvolumesource-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#emptydirvolumesource-v1-core. @@ -513,15 +535,15 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `medium` _[StorageMedium](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#storagemedium-v1-core)_ | | | | -| `sizeLimit` _[Quantity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#quantity-resource-api)_ | | | | +| `medium` _[StorageMedium](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#storagemedium-v1-core)_ | | | | +| `sizeLimit` _[Quantity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#quantity-resource-api)_ | | | | #### EnvFromSource -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#envfromsource-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#envfromsource-v1-core. @@ -543,7 +565,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#envvarsource-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#envvarsource-v1-core. @@ -566,7 +588,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#envvarsource-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#envvarsource-v1-core. @@ -584,7 +606,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#execaction-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#execaction-v1-core. @@ -612,17 +634,17 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | | `image` _string_ | Image name to be used as metrics exporter. The supported format is `:`. | | | -| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| +| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| | `imagePullSecrets` _[LocalObjectReference](#localobjectreference) array_ | ImagePullSecrets is the list of pull Secrets to be used to pull the image. | | | | `args` _string array_ | Args to be used in the Container. | | | | `port` _integer_ | Port where the exporter will be listening for connections. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | | `podMetadata` _[Metadata](#metadata)_ | PodMetadata defines extra metadata for the Pod. | | | | `securityContext` _[SecurityContext](#securitycontext)_ | SecurityContext holds container-level security attributes. | | | | `podSecurityContext` _[PodSecurityContext](#podsecuritycontext)_ | SecurityContext holds pod-level security attributes and common container settings. | | | | `affinity` _[AffinityConfig](#affinityconfig)_ | Affinity to be used in the Pod. | | | | `nodeSelector` _object (keys:string, values:string)_ | NodeSelector to be used in the Pod. | | | -| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | +| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | | `priorityClassName` _string_ | PriorityClassName to be used in the Pod. | | | @@ -676,15 +698,15 @@ _Appears in:_ | `livenessProbe` _[Probe](#probe)_ | LivenessProbe to be used in the Container. | | | | `readinessProbe` _[Probe](#probe)_ | ReadinessProbe to be used in the Container. | | | | `startupProbe` _[Probe](#probe)_ | StartupProbe to be used in the Container. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | | `securityContext` _[SecurityContext](#securitycontext)_ | SecurityContext holds security configuration that will be applied to a container. | | | | `image` _string_ | Image name to be used by the MariaDB instances. The supported format is `:`. | | | -| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| +| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| | `port` _integer_ | Port where the agent will be listening for API connections. | | | | `probePort` _integer_ | Port where the agent will be listening for probe connections. | | | | `kubernetesAuth` _[KubernetesAuth](#kubernetesauth)_ | KubernetesAuth to be used by the agent container | | | | `basicAuth` _[BasicAuth](#basicauth)_ | BasicAuth to be used by the agent container | | | -| `gracefulShutdownTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | GracefulShutdownTimeout is the time we give to the agent container in order to gracefully terminate in-flight requests. | | | +| `gracefulShutdownTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | GracefulShutdownTimeout is the time we give to the agent container in order to gracefully terminate in-flight requests. | | | #### GaleraConfig @@ -727,10 +749,10 @@ _Appears in:_ | `livenessProbe` _[Probe](#probe)_ | LivenessProbe to be used in the Container. | | | | `readinessProbe` _[Probe](#probe)_ | ReadinessProbe to be used in the Container. | | | | `startupProbe` _[Probe](#probe)_ | StartupProbe to be used in the Container. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | | `securityContext` _[SecurityContext](#securitycontext)_ | SecurityContext holds security configuration that will be applied to a container. | | | | `image` _string_ | Image name to be used by the MariaDB instances. The supported format is `:`. | | Required: \{\}
| -| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| +| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| #### GaleraInitJob @@ -748,7 +770,7 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | | `metadata` _[Metadata](#metadata)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | #### GaleraRecovery @@ -767,14 +789,14 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | | `enabled` _boolean_ | Enabled is a flag to enable GaleraRecovery. | | | -| `minClusterSize` _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#intorstring-intstr-util)_ | MinClusterSize is the minimum number of replicas to consider the cluster healthy. It can be either a number of replicas (1) or a percentage (50%).
If Galera consistently reports less replicas than this value for the given 'ClusterHealthyTimeout' interval, a cluster recovery is iniated.
It defaults to '1' replica, and it is highly recommendeded to keep this value at '1' in most cases.
If set to more than one replica, the cluster recovery process may restart the healthy replicas as well. | | | -| `clusterMonitorInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | ClusterMonitorInterval represents the interval used to monitor the Galera cluster health. | | | -| `clusterHealthyTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | ClusterHealthyTimeout represents the duration at which a Galera cluster, that consistently failed health checks,
is considered unhealthy, and consequently the Galera recovery process will be initiated by the operator. | | | -| `clusterBootstrapTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | ClusterBootstrapTimeout is the time limit for bootstrapping a cluster.
Once this timeout is reached, the Galera recovery state is reset and a new cluster bootstrap will be attempted. | | | -| `clusterUpscaleTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | ClusterUpscaleTimeout represents the maximum duration for upscaling the cluster's StatefulSet during the recovery process. | | | -| `clusterDownscaleTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | ClusterDownscaleTimeout represents the maximum duration for downscaling the cluster's StatefulSet during the recovery process. | | | -| `podRecoveryTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | PodRecoveryTimeout is the time limit for recevorying the sequence of a Pod during the cluster recovery. | | | -| `podSyncTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | PodSyncTimeout is the time limit for a Pod to join the cluster after having performed a cluster bootstrap during the cluster recovery. | | | +| `minClusterSize` _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#intorstring-intstr-util)_ | MinClusterSize is the minimum number of replicas to consider the cluster healthy. It can be either a number of replicas (1) or a percentage (50%).
If Galera consistently reports less replicas than this value for the given 'ClusterHealthyTimeout' interval, a cluster recovery is iniated.
It defaults to '1' replica, and it is highly recommendeded to keep this value at '1' in most cases.
If set to more than one replica, the cluster recovery process may restart the healthy replicas as well. | | | +| `clusterMonitorInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | ClusterMonitorInterval represents the interval used to monitor the Galera cluster health. | | | +| `clusterHealthyTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | ClusterHealthyTimeout represents the duration at which a Galera cluster, that consistently failed health checks,
is considered unhealthy, and consequently the Galera recovery process will be initiated by the operator. | | | +| `clusterBootstrapTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | ClusterBootstrapTimeout is the time limit for bootstrapping a cluster.
Once this timeout is reached, the Galera recovery state is reset and a new cluster bootstrap will be attempted. | | | +| `clusterUpscaleTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | ClusterUpscaleTimeout represents the maximum duration for upscaling the cluster's StatefulSet during the recovery process. | | | +| `clusterDownscaleTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | ClusterDownscaleTimeout represents the maximum duration for downscaling the cluster's StatefulSet during the recovery process. | | | +| `podRecoveryTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | PodRecoveryTimeout is the time limit for recevorying the sequence of a Pod during the cluster recovery. | | | +| `podSyncTimeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | PodSyncTimeout is the time limit for a Pod to join the cluster after having performed a cluster bootstrap during the cluster recovery. | | | | `forceClusterBootstrapInPod` _string_ | ForceClusterBootstrapInPod allows you to manually initiate the bootstrap process in a specific Pod.
IMPORTANT: Use this option only in exceptional circumstances. Not selecting the Pod with the highest sequence number may result in data loss.
IMPORTANT: Ensure you unset this field after completing the bootstrap to allow the operator to choose the appropriate Pod to bootstrap from in an event of cluster recovery. | | | | `job` _[GaleraRecoveryJob](#galerarecoveryjob)_ | Job defines a Job that co-operates with mariadb-enterprise-operator by performing the Galera cluster recovery . | | | @@ -793,7 +815,7 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | | `metadata` _[Metadata](#metadata)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | | `podAffinity` _boolean_ | PodAffinity indicates whether the recovery Jobs should run in the same Node as the MariaDB Pods. It defaults to true. | | | @@ -859,7 +881,7 @@ Grant is the Schema for the grants API. It is used to define grants as if you we | --- | --- | --- | --- | | `apiVersion` _string_ | `enterprise.mariadb.com/v1alpha1` | | | | `kind` _string_ | `Grant` | | | -| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | | `spec` _[GrantSpec](#grantspec)_ | | | | @@ -876,8 +898,8 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `requeueInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | RequeueInterval is used to perform requeue reconciliations. | | | -| `retryInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | RetryInterval is the interval used to perform retries. | | | +| `requeueInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | RequeueInterval is used to perform requeue reconciliations. | | | +| `retryInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | RetryInterval is the interval used to perform retries. | | | | `cleanupPolicy` _[CleanupPolicy](#cleanuppolicy)_ | CleanupPolicy defines the behavior for cleaning up a SQL resource. | | Enum: [Skip Delete]
| | `mariaDbRef` _[MariaDBRef](#mariadbref)_ | MariaDBRef is a reference to a MariaDB object. | | Required: \{\}
| | `privileges` _string array_ | Privileges to use in the Grant. | | MinItems: 1
Required: \{\}
| @@ -892,7 +914,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#httpgetaction-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#httpgetaction-v1-core. @@ -903,9 +925,9 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | | `path` _string_ | | | | -| `port` _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#intorstring-intstr-util)_ | | | | +| `port` _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#intorstring-intstr-util)_ | | | | | `host` _string_ | | | | -| `scheme` _[URIScheme](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#urischeme-v1-core)_ | | | | +| `scheme` _[URIScheme](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#urischeme-v1-core)_ | | | | #### HealthCheck @@ -922,15 +944,15 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `interval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | Interval used to perform health checks. | | | -| `retryInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | RetryInterval is the interval used to perform health check retries. | | | +| `interval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | Interval used to perform health checks. | | | +| `retryInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | RetryInterval is the interval used to perform health check retries. | | | #### HostPathVolumeSource -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#hostpathvolumesource-v1-core +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#hostpathvolumesource-v1-core @@ -960,7 +982,9 @@ _Appears in:_ | --- | --- | --- | --- | | `metadata` _[Metadata](#metadata)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | | `affinity` _[AffinityConfig](#affinityconfig)_ | Affinity to be used in the Pod. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `nodeSelector` _object (keys:string, values:string)_ | NodeSelector to be used in the Pod. | | | +| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | | `args` _string array_ | Args to be used in the Container. | | | @@ -974,13 +998,14 @@ JobContainerTemplate defines a template to configure Container objects that run _Appears in:_ - [BackupSpec](#backupspec) +- [PhysicalBackupSpec](#physicalbackupspec) - [RestoreSpec](#restorespec) - [SqlJobSpec](#sqljobspec) | Field | Description | Default | Validation | | --- | --- | --- | --- | | `args` _string array_ | Args to be used in the Container. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | | `securityContext` _[SecurityContext](#securitycontext)_ | SecurityContext holds security configuration that will be applied to a container. | | | @@ -1005,7 +1030,7 @@ _Appears in:_ | `serviceAccountName` _string_ | ServiceAccountName is the name of the ServiceAccount to be used by the Pods. | | | | `affinity` _[AffinityConfig](#affinityconfig)_ | Affinity to be used in the Pod. | | | | `nodeSelector` _object (keys:string, values:string)_ | NodeSelector to be used in the Pod. | | | -| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | +| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | | `priorityClassName` _string_ | PriorityClassName to be used in the Pod. | | | @@ -1029,9 +1054,9 @@ _Appears in:_ #### LabelSelector -_Underlying type:_ _[struct{MatchLabels map [string]string "json:\"matchLabels,omitempty\""; MatchExpressions []LabelSelectorRequirement "json:\"matchExpressions,omitempty\""}](#struct{matchlabels-map[string]string-"json:\"matchlabels,omitempty\"";-matchexpressions-[]labelselectorrequirement-"json:\"matchexpressions,omitempty\""})_ +_Underlying type:_ _[struct{MatchLabels map[string]string "json:\"matchLabels,omitempty\""; MatchExpressions []LabelSelectorRequirement "json:\"matchExpressions,omitempty\""}](#struct{matchlabels-map[string]string-"json:\"matchlabels,omitempty\"";-matchexpressions-[]labelselectorrequirement-"json:\"matchexpressions,omitempty\""})_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#labelselector-v1-meta +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#labelselector-v1-meta @@ -1046,7 +1071,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#localobjectreference-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#localobjectreference-v1-core. @@ -1065,6 +1090,8 @@ _Appears in:_ - [MaxScalePodTemplate](#maxscalepodtemplate) - [MaxScaleSpec](#maxscalespec) - [MaxScaleTLS](#maxscaletls) +- [PhysicalBackupPodTemplate](#physicalbackuppodtemplate) +- [PhysicalBackupSpec](#physicalbackupspec) - [PodTemplate](#podtemplate) - [RestoreSource](#restoresource) - [RestoreSpec](#restorespec) @@ -1091,7 +1118,7 @@ MariaDB is the Schema for the mariadbs API. It is used to define MariaDB cluster | --- | --- | --- | --- | | `apiVersion` _string_ | `enterprise.mariadb.com/v1alpha1` | | | | `kind` _string_ | `MariaDB` | | | -| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | | `spec` _[MariaDBSpec](#mariadbspec)_ | | | | @@ -1110,7 +1137,7 @@ _Appears in:_ | --- | --- | --- | --- | | `enabled` _boolean_ | Enabled is a flag to enable a MaxScale instance to be used with the current MariaDB. | | | | `image` _string_ | Image name to be used by the MaxScale instances. The supported format is `:`.
Only MariaDB official images are supported. | | | -| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| +| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| | `services` _[MaxScaleService](#maxscaleservice) array_ | Services define how the traffic is forwarded to the MariaDB servers. | | | | `monitor` _[MaxScaleMonitor](#maxscalemonitor)_ | Monitor monitors MariaDB server instances. | | | | `admin` _[MaxScaleAdmin](#maxscaleadmin)_ | Admin configures the admin REST API and GUI. | | | @@ -1121,10 +1148,10 @@ _Appears in:_ | `connection` _[ConnectionTemplate](#connectiontemplate)_ | Connection provides a template to define the Connection for MaxScale. | | | | `replicas` _integer_ | Replicas indicates the number of desired instances. | | | | `podDisruptionBudget` _[PodDisruptionBudget](#poddisruptionbudget)_ | PodDisruptionBudget defines the budget for replica availability. | | | -| `updateStrategy` _[StatefulSetUpdateStrategy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#statefulsetupdatestrategy-v1-apps)_ | UpdateStrategy defines the update strategy for the StatefulSet object. | | | +| `updateStrategy` _[StatefulSetUpdateStrategy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#statefulsetupdatestrategy-v1-apps)_ | UpdateStrategy defines the update strategy for the StatefulSet object. | | | | `kubernetesService` _[ServiceTemplate](#servicetemplate)_ | KubernetesService defines a template for a Kubernetes Service object to connect to MaxScale. | | | | `guiKubernetesService` _[ServiceTemplate](#servicetemplate)_ | GuiKubernetesService define a template for a Kubernetes Service object to connect to MaxScale's GUI. | | | -| `requeueInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | RequeueInterval is used to perform requeue reconciliations. | | | +| `requeueInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | RequeueInterval is used to perform requeue reconciliations. | | | #### MariaDBRef @@ -1141,6 +1168,7 @@ _Appears in:_ - [DatabaseSpec](#databasespec) - [GrantSpec](#grantspec) - [MaxScaleSpec](#maxscalespec) +- [PhysicalBackupSpec](#physicalbackupspec) - [RestoreSpec](#restorespec) - [SqlJobSpec](#sqljobspec) - [UserSpec](#userspec) @@ -1173,7 +1201,7 @@ _Appears in:_ | `livenessProbe` _[Probe](#probe)_ | LivenessProbe to be used in the Container. | | | | `readinessProbe` _[Probe](#probe)_ | ReadinessProbe to be used in the Container. | | | | `startupProbe` _[Probe](#probe)_ | StartupProbe to be used in the Container. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | | `securityContext` _[SecurityContext](#securitycontext)_ | SecurityContext holds security configuration that will be applied to a container. | | | | `podMetadata` _[Metadata](#metadata)_ | PodMetadata defines extra metadata for the Pod. | | | | `imagePullSecrets` _[LocalObjectReference](#localobjectreference) array_ | ImagePullSecrets is the list of pull Secrets to be used to pull the image. | | | @@ -1183,13 +1211,13 @@ _Appears in:_ | `serviceAccountName` _string_ | ServiceAccountName is the name of the ServiceAccount to be used by the Pods. | | | | `affinity` _[AffinityConfig](#affinityconfig)_ | Affinity to be used in the Pod. | | | | `nodeSelector` _object (keys:string, values:string)_ | NodeSelector to be used in the Pod. | | | -| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | +| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | | `volumes` _[Volume](#volume) array_ | Volumes to be used in the Pod. | | | | `priorityClassName` _string_ | PriorityClassName to be used in the Pod. | | | | `topologySpreadConstraints` _[TopologySpreadConstraint](#topologyspreadconstraint) array_ | TopologySpreadConstraints to be used in the Pod. | | | | `suspend` _boolean_ | Suspend indicates whether the current resource should be suspended or not.
This can be useful for maintenance, as disabling the reconciliation prevents the operator from interfering with user operations during maintenance activities. | false | | | `image` _string_ | Image name to be used by the MariaDB instances. The supported format is `:`.
Only MariaDB official images are supported. | | | -| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| +| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| | `inheritMetadata` _[Metadata](#metadata)_ | InheritMetadata defines the metadata to be inherited by children resources. | | | | `rootPasswordSecretKeyRef` _[GeneratedSecretKeyRef](#generatedsecretkeyref)_ | RootPasswordSecretKeyRef is a reference to a Secret key containing the root password. | | | | `rootEmptyPassword` _boolean_ | RootEmptyPassword indicates if the root password should be empty. Don't use this feature in production, it is only intended for development and test environments. | | | @@ -1256,7 +1284,7 @@ MaxScale is the Schema for the maxscales API. It is used to define MaxScale clus | --- | --- | --- | --- | | `apiVersion` _string_ | `enterprise.mariadb.com/v1alpha1` | | | | `kind` _string_ | `MaxScale` | | | -| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | | `spec` _[MaxScaleSpec](#maxscalespec)_ | | | | @@ -1345,8 +1373,8 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | | `database` _string_ | Database is the MariaDB logical database where the 'maxscale_config' table will be created in order to persist and synchronize config changes. If not provided, it defaults to 'mysql'. | | | -| `interval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | Interval defines the config synchronization interval. It is defaulted if not provided. | | | -| `timeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | Interval defines the config synchronization timeout. It is defaulted if not provided. | | | +| `interval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | Interval defines the config synchronization interval. It is defaulted if not provided. | | | +| `timeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | Interval defines the config synchronization timeout. It is defaulted if not provided. | | | #### MaxScaleListener @@ -1405,9 +1433,9 @@ _Appears in:_ | `suspend` _boolean_ | Suspend indicates whether the current resource should be suspended or not.
This can be useful for maintenance, as disabling the reconciliation prevents the operator from interfering with user operations during maintenance activities. | false | | | `name` _string_ | Name is the identifier of the monitor. It is defaulted if not provided. | | | | `module` _[MonitorModule](#monitormodule)_ | Module is the module to use to monitor MariaDB servers. It is mandatory when no MariaDB reference is provided. | | | -| `interval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | Interval used to monitor MariaDB servers. It is defaulted if not provided. | | | +| `interval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | Interval used to monitor MariaDB servers. It is defaulted if not provided. | | | | `cooperativeMonitoring` _[CooperativeMonitoring](#cooperativemonitoring)_ | CooperativeMonitoring enables coordination between multiple MaxScale instances running monitors. It is defaulted when HA is enabled. | | Enum: [majority_of_all majority_of_running]
| -| `params` _object (keys:string, values:string)_ | Params defines extra parameters to pass to the monitor.
Any parameter supported by MaxScale may be specified here. See reference:
https://mariadb.com/kb/en/mariadb-maxscale-2308-common-monitor-parameters/.
Monitor specific parameter are also suported:
https://mariadb.com/kb/en/mariadb-maxscale-2308-galera-monitor/#galera-monitor-optional-parameters.
https://mariadb.com/kb/en/mariadb-maxscale-2308-mariadb-monitor/#configuration. | | | +| `params` _object (keys:string, values:string)_ | Params defines extra parameters to pass to the monitor.
Any parameter supported by MaxScale may be specified here. See reference:
https://mariadb.com/kb/en/mariadb-maxscale-2308-common-monitor-parameters/.
Monitor specific parameter are also supported:
https://mariadb.com/kb/en/mariadb-maxscale-2308-galera-monitor/#galera-monitor-optional-parameters.
https://mariadb.com/kb/en/mariadb-maxscale-2308-mariadb-monitor/#configuration. | | | #### MaxScalePodTemplate @@ -1429,7 +1457,7 @@ _Appears in:_ | `serviceAccountName` _string_ | ServiceAccountName is the name of the ServiceAccount to be used by the Pods. | | | | `affinity` _[AffinityConfig](#affinityconfig)_ | Affinity to be used in the Pod. | | | | `nodeSelector` _object (keys:string, values:string)_ | NodeSelector to be used in the Pod. | | | -| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | +| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | | `priorityClassName` _string_ | PriorityClassName to be used in the Pod. | | | | `topologySpreadConstraints` _[TopologySpreadConstraint](#topologyspreadconstraint) array_ | TopologySpreadConstraints to be used in the Pod. | | | @@ -1473,7 +1501,7 @@ _Appears in:_ | `name` _string_ | Name is the identifier of the MaxScale service. | | Required: \{\}
| | `router` _[ServiceRouter](#servicerouter)_ | Router is the type of router to use. | | Enum: [readwritesplit readconnroute]
Required: \{\}
| | `listener` _[MaxScaleListener](#maxscalelistener)_ | MaxScaleListener defines how the MaxScale server will listen for connections. | | Required: \{\}
| -| `params` _object (keys:string, values:string)_ | Params defines extra parameters to pass to the service.
Any parameter supported by MaxScale may be specified here. See reference:
https://mariadb.com/kb/en/mariadb-maxscale-2308-mariadb-maxscale-configuration-guide/#service_1.
Router specific parameter are also suported:
https://mariadb.com/kb/en/mariadb-maxscale-2308-readwritesplit/#configuration.
https://mariadb.com/kb/en/mariadb-maxscale-2308-readconnroute/#configuration. | | | +| `params` _object (keys:string, values:string)_ | Params defines extra parameters to pass to the service.
Any parameter supported by MaxScale may be specified here. See reference:
https://mariadb.com/kb/en/mariadb-maxscale-2308-mariadb-maxscale-configuration-guide/#service_1.
Router specific parameter are also supported:
https://mariadb.com/kb/en/mariadb-maxscale-2308-readwritesplit/#configuration.
https://mariadb.com/kb/en/mariadb-maxscale-2308-readconnroute/#configuration. | | | #### MaxScaleSpec @@ -1497,7 +1525,7 @@ _Appears in:_ | `livenessProbe` _[Probe](#probe)_ | LivenessProbe to be used in the Container. | | | | `readinessProbe` _[Probe](#probe)_ | ReadinessProbe to be used in the Container. | | | | `startupProbe` _[Probe](#probe)_ | StartupProbe to be used in the Container. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | | `securityContext` _[SecurityContext](#securitycontext)_ | SecurityContext holds security configuration that will be applied to a container. | | | | `podMetadata` _[Metadata](#metadata)_ | PodMetadata defines extra metadata for the Pod. | | | | `imagePullSecrets` _[LocalObjectReference](#localobjectreference) array_ | ImagePullSecrets is the list of pull Secrets to be used to pull the image. | | | @@ -1505,14 +1533,14 @@ _Appears in:_ | `serviceAccountName` _string_ | ServiceAccountName is the name of the ServiceAccount to be used by the Pods. | | | | `affinity` _[AffinityConfig](#affinityconfig)_ | Affinity to be used in the Pod. | | | | `nodeSelector` _object (keys:string, values:string)_ | NodeSelector to be used in the Pod. | | | -| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | +| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | | `priorityClassName` _string_ | PriorityClassName to be used in the Pod. | | | | `topologySpreadConstraints` _[TopologySpreadConstraint](#topologyspreadconstraint) array_ | TopologySpreadConstraints to be used in the Pod. | | | | `suspend` _boolean_ | Suspend indicates whether the current resource should be suspended or not.
This can be useful for maintenance, as disabling the reconciliation prevents the operator from interfering with user operations during maintenance activities. | false | | | `mariaDbRef` _[MariaDBRef](#mariadbref)_ | MariaDBRef is a reference to the MariaDB that MaxScale points to. It is used to initialize the servers field. | | | | `servers` _[MaxScaleServer](#maxscaleserver) array_ | Servers are the MariaDB servers to forward traffic to. It is required if 'spec.mariaDbRef' is not provided. | | | | `image` _string_ | Image name to be used by the MaxScale instances. The supported format is `:`.
Only MaxScale official images are supported. | | | -| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| +| `imagePullPolicy` _[PullPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#pullpolicy-v1-core)_ | ImagePullPolicy is the image pull policy. One of `Always`, `Never` or `IfNotPresent`. If not defined, it defaults to `IfNotPresent`. | | Enum: [Always Never IfNotPresent]
| | `inheritMetadata` _[Metadata](#metadata)_ | InheritMetadata defines the metadata to be inherited by children resources. | | | | `services` _[MaxScaleService](#maxscaleservice) array_ | Services define how the traffic is forwarded to the MariaDB servers. It is defaulted if not provided. | | | | `monitor` _[MaxScaleMonitor](#maxscalemonitor)_ | Monitor monitors MariaDB server instances. It is required if 'spec.mariaDbRef' is not provided. | | | @@ -1524,10 +1552,10 @@ _Appears in:_ | `connection` _[ConnectionTemplate](#connectiontemplate)_ | Connection provides a template to define the Connection for MaxScale. | | | | `replicas` _integer_ | Replicas indicates the number of desired instances. | 1 | | | `podDisruptionBudget` _[PodDisruptionBudget](#poddisruptionbudget)_ | PodDisruptionBudget defines the budget for replica availability. | | | -| `updateStrategy` _[StatefulSetUpdateStrategy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#statefulsetupdatestrategy-v1-apps)_ | UpdateStrategy defines the update strategy for the StatefulSet object. | | | +| `updateStrategy` _[StatefulSetUpdateStrategy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#statefulsetupdatestrategy-v1-apps)_ | UpdateStrategy defines the update strategy for the StatefulSet object. | | | | `kubernetesService` _[ServiceTemplate](#servicetemplate)_ | KubernetesService defines a template for a Kubernetes Service object to connect to MaxScale. | | | | `guiKubernetesService` _[ServiceTemplate](#servicetemplate)_ | GuiKubernetesService defines a template for a Kubernetes Service object to connect to MaxScale's GUI. | | | -| `requeueInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | RequeueInterval is used to perform requeue reconciliations. If not defined, it defaults to 10s. | | | +| `requeueInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | RequeueInterval is used to perform requeue reconciliations. If not defined, it defaults to 10s. | | | #### MaxScaleTLS @@ -1580,6 +1608,9 @@ _Appears in:_ - [MariaDBSpec](#mariadbspec) - [MaxScalePodTemplate](#maxscalepodtemplate) - [MaxScaleSpec](#maxscalespec) +- [PhysicalBackupPodTemplate](#physicalbackuppodtemplate) +- [PhysicalBackupSpec](#physicalbackupspec) +- [PhysicalBackupVolumeSnapshot](#physicalbackupvolumesnapshot) - [PodTemplate](#podtemplate) - [RestoreSpec](#restorespec) - [SecretTemplate](#secrettemplate) @@ -1614,7 +1645,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#nfsvolumesource-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#nfsvolumesource-v1-core. @@ -1634,7 +1665,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#nodeaffinity-v1-core +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#nodeaffinity-v1-core @@ -1652,7 +1683,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#nodeselector-v1-core +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#nodeselector-v1-core @@ -1670,7 +1701,7 @@ _Appears in:_ _Underlying type:_ _[struct{MatchExpressions []NodeSelectorRequirement "json:\"matchExpressions,omitempty\""; MatchFields []NodeSelectorRequirement "json:\"matchFields,omitempty\""}](#struct{matchexpressions-[]nodeselectorrequirement-"json:\"matchexpressions,omitempty\"";-matchfields-[]nodeselectorrequirement-"json:\"matchfields,omitempty\""})_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#nodeselectorterm-v1-core +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#nodeselectorterm-v1-core @@ -1684,7 +1715,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectfieldselector-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#objectfieldselector-v1-core. @@ -1701,7 +1732,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectreference-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#objectreference-v1-core. @@ -1738,20 +1769,21 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#persistentvolumeclaimspec-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#persistentvolumeclaimspec-v1-core. _Appears in:_ - [BackupStagingStorage](#backupstagingstorage) - [BackupStorage](#backupstorage) +- [PhysicalBackupStorage](#physicalbackupstorage) - [VolumeClaimTemplate](#volumeclaimtemplate) | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `accessModes` _[PersistentVolumeAccessMode](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#persistentvolumeaccessmode-v1-core) array_ | | | | -| `selector` _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#labelselector-v1-meta)_ | | | | -| `resources` _[VolumeResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#volumeresourcerequirements-v1-core)_ | | | | +| `accessModes` _[PersistentVolumeAccessMode](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#persistentvolumeaccessmode-v1-core) array_ | | | | +| `selector` _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#labelselector-v1-meta)_ | | | | +| `resources` _[VolumeResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#volumeresourcerequirements-v1-core)_ | | | | | `storageClassName` _string_ | | | | @@ -1759,7 +1791,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#persistentvolumeclaimvolumesource-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#persistentvolumeclaimvolumesource-v1-core. @@ -1774,11 +1806,140 @@ _Appears in:_ | `readOnly` _boolean_ | | | | +#### PhysicalBackup + + + +PhysicalBackup is the Schema for the physicalbackups API. It is used to define physical backup jobs and its storage. + + + + + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `apiVersion` _string_ | `enterprise.mariadb.com/v1alpha1` | | | +| `kind` _string_ | `PhysicalBackup` | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `spec` _[PhysicalBackupSpec](#physicalbackupspec)_ | | | | + + +#### PhysicalBackupPodTemplate + + + +PhysicalBackupPodTemplate defines a template to configure Container objects that run in a PhysicalBackup. + + + +_Appears in:_ +- [PhysicalBackupSpec](#physicalbackupspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `podMetadata` _[Metadata](#metadata)_ | PodMetadata defines extra metadata for the Pod. | | | +| `imagePullSecrets` _[LocalObjectReference](#localobjectreference) array_ | ImagePullSecrets is the list of pull Secrets to be used to pull the image. | | | +| `podSecurityContext` _[PodSecurityContext](#podsecuritycontext)_ | SecurityContext holds pod-level security attributes and common container settings. | | | +| `serviceAccountName` _string_ | ServiceAccountName is the name of the ServiceAccount to be used by the Pods. | | | +| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | +| `priorityClassName` _string_ | PriorityClassName to be used in the Pod. | | | + + +#### PhysicalBackupSchedule + + + +PhysicalBackupSchedule defines when the PhysicalBackup will be taken. + + + +_Appears in:_ +- [PhysicalBackupSpec](#physicalbackupspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `cron` _string_ | Cron is a cron expression that defines the schedule. | | Required: \{\}
| +| `suspend` _boolean_ | Suspend defines whether the schedule is active or not. | false | | +| `immediate` _boolean_ | Immediate indicates whether the first backup should be taken immediately after creating the PhysicalBackup. | | | + + +#### PhysicalBackupSpec + + + +PhysicalBackupSpec defines the desired state of PhysicalBackup. + + + +_Appears in:_ +- [PhysicalBackup](#physicalbackup) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `args` _string array_ | Args to be used in the Container. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | +| `securityContext` _[SecurityContext](#securitycontext)_ | SecurityContext holds security configuration that will be applied to a container. | | | +| `podMetadata` _[Metadata](#metadata)_ | PodMetadata defines extra metadata for the Pod. | | | +| `imagePullSecrets` _[LocalObjectReference](#localobjectreference) array_ | ImagePullSecrets is the list of pull Secrets to be used to pull the image. | | | +| `podSecurityContext` _[PodSecurityContext](#podsecuritycontext)_ | SecurityContext holds pod-level security attributes and common container settings. | | | +| `serviceAccountName` _string_ | ServiceAccountName is the name of the ServiceAccount to be used by the Pods. | | | +| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | +| `priorityClassName` _string_ | PriorityClassName to be used in the Pod. | | | +| `mariaDbRef` _[MariaDBRef](#mariadbref)_ | MariaDBRef is a reference to a MariaDB object. | | Required: \{\}
| +| `compression` _[CompressAlgorithm](#compressalgorithm)_ | Compression algorithm to be used in the Backup. | | Enum: [none bzip2 gzip]
| +| `stagingStorage` _[BackupStagingStorage](#backupstagingstorage)_ | StagingStorage defines the temporary storage used to keep external backups (i.e. S3) while they are being processed.
It defaults to an emptyDir volume, meaning that the backups will be temporarily stored in the node where the PhysicalBackup Job is scheduled.
The staging area gets cleaned up after each backup is completed, consider this for sizing it appropriately. | | | +| `storage` _[PhysicalBackupStorage](#physicalbackupstorage)_ | Storage defines the final storage for backups. | | Required: \{\}
| +| `schedule` _[PhysicalBackupSchedule](#physicalbackupschedule)_ | Schedule defines when the PhysicalBackup will be taken. | | | +| `maxRetention` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | MaxRetention defines the retention policy for backups. Old backups will be cleaned up by the Backup Job.
It defaults to 30 days. | | | +| `timeout` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | Timeout defines the maximum duration of a PhysicalBackup job or snapshot.
If this duration is exceeded, the job or snapshot is considered expired and is deleted by the operator.
A new job or snapshot will then be created according to the schedule.
It defaults to 1 hour. | | | +| `podAffinity` _boolean_ | PodAffinity indicates whether the Jobs should run in the same Node as the MariaDB Pods to be able to attach the PVC.
It defaults to true. | | | +| `backoffLimit` _integer_ | BackoffLimit defines the maximum number of attempts to successfully take a PhysicalBackup. | | | +| `restartPolicy` _[RestartPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#restartpolicy-v1-core)_ | RestartPolicy to be added to the PhysicalBackup Pod. | OnFailure | Enum: [Always OnFailure Never]
| +| `inheritMetadata` _[Metadata](#metadata)_ | InheritMetadata defines the metadata to be inherited by children resources. | | | +| `successfulJobsHistoryLimit` _integer_ | SuccessfulJobsHistoryLimit defines the maximum number of successful Jobs to be displayed. It defaults to 5. | | Minimum: 0
| + + +#### PhysicalBackupStorage + + + +PhysicalBackupStorage defines the storage for physical backups. + + + +_Appears in:_ +- [PhysicalBackupSpec](#physicalbackupspec) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `s3` _[S3](#s3)_ | S3 defines the configuration to store backups in a S3 compatible storage. | | | +| `persistentVolumeClaim` _[PersistentVolumeClaimSpec](#persistentvolumeclaimspec)_ | PersistentVolumeClaim is a Kubernetes PVC specification. | | | +| `volume` _[StorageVolumeSource](#storagevolumesource)_ | Volume is a Kubernetes volume specification. | | | +| `volumeSnapshot` _[PhysicalBackupVolumeSnapshot](#physicalbackupvolumesnapshot)_ | VolumeSnapshot is a Kubernetes VolumeSnapshot specification. | | | + + +#### PhysicalBackupVolumeSnapshot + + + +PhysicalBackupVolumeSnapshot defines parameters for the VolumeSnapshots used as physical backups. + + + +_Appears in:_ +- [PhysicalBackupStorage](#physicalbackupstorage) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `metadata` _[Metadata](#metadata)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `volumeSnapshotClassName` _string_ | VolumeSnapshotClassName is the VolumeSnapshot class to be used to take snapshots. | | Required: \{\}
| + + #### PodAffinityTerm -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#podaffinityterm-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#podaffinityterm-v1-core. @@ -1796,7 +1957,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#podantiaffinity-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#podantiaffinity-v1-core. @@ -1825,15 +1986,15 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `minAvailable` _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#intorstring-intstr-util)_ | MinAvailable defines the number of minimum available Pods. | | | -| `maxUnavailable` _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#intorstring-intstr-util)_ | MaxUnavailable defines the number of maximum unavailable Pods. | | | +| `minAvailable` _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#intorstring-intstr-util)_ | MinAvailable defines the number of minimum available Pods. | | | +| `maxUnavailable` _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#intorstring-intstr-util)_ | MaxUnavailable defines the number of maximum unavailable Pods. | | | #### PodSecurityContext -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#podsecuritycontext-v1-core +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#podsecuritycontext-v1-core @@ -1844,21 +2005,23 @@ _Appears in:_ - [MariaDBSpec](#mariadbspec) - [MaxScalePodTemplate](#maxscalepodtemplate) - [MaxScaleSpec](#maxscalespec) +- [PhysicalBackupPodTemplate](#physicalbackuppodtemplate) +- [PhysicalBackupSpec](#physicalbackupspec) - [PodTemplate](#podtemplate) - [RestoreSpec](#restorespec) - [SqlJobSpec](#sqljobspec) | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `seLinuxOptions` _[SELinuxOptions](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#selinuxoptions-v1-core)_ | | | | +| `seLinuxOptions` _[SELinuxOptions](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#selinuxoptions-v1-core)_ | | | | | `runAsUser` _integer_ | | | | | `runAsGroup` _integer_ | | | | | `runAsNonRoot` _boolean_ | | | | | `supplementalGroups` _integer array_ | | | | | `fsGroup` _integer_ | | | | -| `fsGroupChangePolicy` _[PodFSGroupChangePolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#podfsgroupchangepolicy-v1-core)_ | | | | -| `seccompProfile` _[SeccompProfile](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#seccompprofile-v1-core)_ | | | | -| `appArmorProfile` _[AppArmorProfile](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#apparmorprofile-v1-core)_ | | | | +| `fsGroupChangePolicy` _[PodFSGroupChangePolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#podfsgroupchangepolicy-v1-core)_ | | | | +| `seccompProfile` _[SeccompProfile](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#seccompprofile-v1-core)_ | | | | +| `appArmorProfile` _[AppArmorProfile](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#apparmorprofile-v1-core)_ | | | | #### PodTemplate @@ -1882,7 +2045,7 @@ _Appears in:_ | `serviceAccountName` _string_ | ServiceAccountName is the name of the ServiceAccount to be used by the Pods. | | | | `affinity` _[AffinityConfig](#affinityconfig)_ | Affinity to be used in the Pod. | | | | `nodeSelector` _object (keys:string, values:string)_ | NodeSelector to be used in the Pod. | | | -| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | +| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | | `volumes` _[Volume](#volume) array_ | Volumes to be used in the Pod. | | | | `priorityClassName` _string_ | PriorityClassName to be used in the Pod. | | | | `topologySpreadConstraints` _[TopologySpreadConstraint](#topologyspreadconstraint) array_ | TopologySpreadConstraints to be used in the Pod. | | | @@ -1892,7 +2055,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#preferredschedulingterm-v1-core +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#preferredschedulingterm-v1-core @@ -1927,7 +2090,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#probe-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#probe-v1-core. @@ -1954,7 +2117,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#probe-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#probe-v1-core. @@ -1972,7 +2135,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#resourcerequirements-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#resourcerequirements-v1-core. @@ -1989,6 +2152,7 @@ _Appears in:_ - [JobContainerTemplate](#jobcontainertemplate) - [MariaDBSpec](#mariadbspec) - [MaxScaleSpec](#maxscalespec) +- [PhysicalBackupSpec](#physicalbackupspec) - [RestoreSpec](#restorespec) - [SqlJobSpec](#sqljobspec) @@ -2008,7 +2172,7 @@ Restore is the Schema for the restores API. It is used to define restore jobs an | --- | --- | --- | --- | | `apiVersion` _string_ | `enterprise.mariadb.com/v1alpha1` | | | | `kind` _string_ | `Restore` | | | -| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | | `spec` _[RestoreSpec](#restorespec)_ | | | | @@ -2016,12 +2180,11 @@ Restore is the Schema for the restores API. It is used to define restore jobs an -RestoreSource defines a source for restoring a MariaDB. +RestoreSource defines a source for restoring a logical backup. _Appears in:_ -- [BootstrapFrom](#bootstrapfrom) - [RestoreSpec](#restorespec) | Field | Description | Default | Validation | @@ -2029,7 +2192,7 @@ _Appears in:_ | `backupRef` _[LocalObjectReference](#localobjectreference)_ | BackupRef is a reference to a Backup object. It has priority over S3 and Volume. | | | | `s3` _[S3](#s3)_ | S3 defines the configuration to restore backups from a S3 compatible storage. It has priority over Volume. | | | | `volume` _[StorageVolumeSource](#storagevolumesource)_ | Volume is a Kubernetes Volume object that contains a backup. | | | -| `targetRecoveryTime` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#time-v1-meta)_ | TargetRecoveryTime is a RFC3339 (1970-01-01T00:00:00Z) date and time that defines the point in time recovery objective.
It is used to determine the closest restoration source in time. | | | +| `targetRecoveryTime` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#time-v1-meta)_ | TargetRecoveryTime is a RFC3339 (1970-01-01T00:00:00Z) date and time that defines the point in time recovery objective.
It is used to determine the closest restoration source in time. | | | | `stagingStorage` _[BackupStagingStorage](#backupstagingstorage)_ | StagingStorage defines the temporary storage used to keep external backups (i.e. S3) while they are being processed.
It defaults to an emptyDir volume, meaning that the backups will be temporarily stored in the node where the Restore Job is scheduled. | | | @@ -2047,7 +2210,7 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | | `args` _string array_ | Args to be used in the Container. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | | `securityContext` _[SecurityContext](#securitycontext)_ | SecurityContext holds security configuration that will be applied to a container. | | | | `podMetadata` _[Metadata](#metadata)_ | PodMetadata defines extra metadata for the Pod. | | | | `imagePullSecrets` _[LocalObjectReference](#localobjectreference) array_ | ImagePullSecrets is the list of pull Secrets to be used to pull the image. | | | @@ -2055,18 +2218,18 @@ _Appears in:_ | `serviceAccountName` _string_ | ServiceAccountName is the name of the ServiceAccount to be used by the Pods. | | | | `affinity` _[AffinityConfig](#affinityconfig)_ | Affinity to be used in the Pod. | | | | `nodeSelector` _object (keys:string, values:string)_ | NodeSelector to be used in the Pod. | | | -| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | +| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | | `priorityClassName` _string_ | PriorityClassName to be used in the Pod. | | | | `backupRef` _[LocalObjectReference](#localobjectreference)_ | BackupRef is a reference to a Backup object. It has priority over S3 and Volume. | | | | `s3` _[S3](#s3)_ | S3 defines the configuration to restore backups from a S3 compatible storage. It has priority over Volume. | | | | `volume` _[StorageVolumeSource](#storagevolumesource)_ | Volume is a Kubernetes Volume object that contains a backup. | | | -| `targetRecoveryTime` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#time-v1-meta)_ | TargetRecoveryTime is a RFC3339 (1970-01-01T00:00:00Z) date and time that defines the point in time recovery objective.
It is used to determine the closest restoration source in time. | | | +| `targetRecoveryTime` _[Time](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#time-v1-meta)_ | TargetRecoveryTime is a RFC3339 (1970-01-01T00:00:00Z) date and time that defines the point in time recovery objective.
It is used to determine the closest restoration source in time. | | | | `stagingStorage` _[BackupStagingStorage](#backupstagingstorage)_ | StagingStorage defines the temporary storage used to keep external backups (i.e. S3) while they are being processed.
It defaults to an emptyDir volume, meaning that the backups will be temporarily stored in the node where the Restore Job is scheduled. | | | | `mariaDbRef` _[MariaDBRef](#mariadbref)_ | MariaDBRef is a reference to a MariaDB object. | | Required: \{\}
| | `database` _string_ | Database defines the logical database to be restored. If not provided, all databases available in the backup are restored.
IMPORTANT: The database must previously exist. | | | | `logLevel` _string_ | LogLevel to be used n the Backup Job. It defaults to 'info'. | info | | | `backoffLimit` _integer_ | BackoffLimit defines the maximum number of attempts to successfully perform a Backup. | 5 | | -| `restartPolicy` _[RestartPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#restartpolicy-v1-core)_ | RestartPolicy to be added to the Backup Job. | OnFailure | Enum: [Always OnFailure Never]
| +| `restartPolicy` _[RestartPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#restartpolicy-v1-core)_ | RestartPolicy to be added to the Backup Job. | OnFailure | Enum: [Always OnFailure Never]
| | `inheritMetadata` _[Metadata](#metadata)_ | InheritMetadata defines the metadata to be inherited by children resources. | | | @@ -2081,6 +2244,7 @@ _Appears in:_ _Appears in:_ - [BackupStorage](#backupstorage) - [BootstrapFrom](#bootstrapfrom) +- [PhysicalBackupStorage](#physicalbackupstorage) - [RestoreSource](#restoresource) - [RestoreSpec](#restorespec) @@ -2111,8 +2275,8 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `requeueInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | RequeueInterval is used to perform requeue reconciliations. | | | -| `retryInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | RetryInterval is the interval used to perform retries. | | | +| `requeueInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | RequeueInterval is used to perform requeue reconciliations. | | | +| `retryInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | RetryInterval is the interval used to perform retries. | | | | `cleanupPolicy` _[CleanupPolicy](#cleanuppolicy)_ | CleanupPolicy defines the behavior for cleaning up a SQL resource. | | Enum: [Skip Delete]
| @@ -2158,7 +2322,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#secretkeyselector-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#secretkeyselector-v1-core. @@ -2207,7 +2371,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#secretvolumesource-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#secretvolumesource-v1-core. @@ -2225,7 +2389,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#securitycontext-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#securitycontext-v1-core. @@ -2238,12 +2402,13 @@ _Appears in:_ - [JobContainerTemplate](#jobcontainertemplate) - [MariaDBSpec](#mariadbspec) - [MaxScaleSpec](#maxscalespec) +- [PhysicalBackupSpec](#physicalbackupspec) - [RestoreSpec](#restorespec) - [SqlJobSpec](#sqljobspec) | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `capabilities` _[Capabilities](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#capabilities-v1-core)_ | | | | +| `capabilities` _[Capabilities](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#capabilities-v1-core)_ | | | | | `privileged` _boolean_ | | | | | `runAsUser` _integer_ | | | | | `runAsGroup` _integer_ | | | | @@ -2276,7 +2441,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#serviceport-v1-core +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#serviceport-v1-core @@ -2321,12 +2486,12 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `type` _[ServiceType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#servicetype-v1-core)_ | Type is the Service type. One of `ClusterIP`, `NodePort` or `LoadBalancer`. If not defined, it defaults to `ClusterIP`. | ClusterIP | Enum: [ClusterIP NodePort LoadBalancer]
| +| `type` _[ServiceType](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#servicetype-v1-core)_ | Type is the Service type. One of `ClusterIP`, `NodePort` or `LoadBalancer`. If not defined, it defaults to `ClusterIP`. | ClusterIP | Enum: [ClusterIP NodePort LoadBalancer]
| | `metadata` _[Metadata](#metadata)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | | `loadBalancerIP` _string_ | LoadBalancerIP Service field. | | | | `loadBalancerSourceRanges` _string array_ | LoadBalancerSourceRanges Service field. | | | -| `externalTrafficPolicy` _[ServiceExternalTrafficPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#serviceexternaltrafficpolicy-v1-core)_ | ExternalTrafficPolicy Service field. | | | -| `sessionAffinity` _[ServiceAffinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#serviceaffinity-v1-core)_ | SessionAffinity Service field. | | | +| `externalTrafficPolicy` _[ServiceExternalTrafficPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#serviceexternaltrafficpolicy-v1-core)_ | ExternalTrafficPolicy Service field. | | | +| `sessionAffinity` _[ServiceAffinity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#serviceaffinity-v1-core)_ | SessionAffinity Service field. | | | | `allocateLoadBalancerNodePorts` _boolean_ | AllocateLoadBalancerNodePorts Service field. | | | @@ -2344,7 +2509,7 @@ SqlJob is the Schema for the sqljobs API. It is used to run sql scripts as jobs. | --- | --- | --- | --- | | `apiVersion` _string_ | `enterprise.mariadb.com/v1alpha1` | | | | `kind` _string_ | `SqlJob` | | | -| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | | `spec` _[SqlJobSpec](#sqljobspec)_ | | | | @@ -2362,7 +2527,7 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | | `args` _string array_ | Args to be used in the Container. | | | -| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resouces describes the compute resource requirements. | | | +| `resources` _[ResourceRequirements](#resourcerequirements)_ | Resources describes the compute resource requirements. | | | | `securityContext` _[SecurityContext](#securitycontext)_ | SecurityContext holds security configuration that will be applied to a container. | | | | `podMetadata` _[Metadata](#metadata)_ | PodMetadata defines extra metadata for the Pod. | | | | `imagePullSecrets` _[LocalObjectReference](#localobjectreference) array_ | ImagePullSecrets is the list of pull Secrets to be used to pull the image. | | | @@ -2370,7 +2535,7 @@ _Appears in:_ | `serviceAccountName` _string_ | ServiceAccountName is the name of the ServiceAccount to be used by the Pods. | | | | `affinity` _[AffinityConfig](#affinityconfig)_ | Affinity to be used in the Pod. | | | | `nodeSelector` _object (keys:string, values:string)_ | NodeSelector to be used in the Pod. | | | -| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | +| `tolerations` _[Toleration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#toleration-v1-core) array_ | Tolerations to be used in the Pod. | | | | `priorityClassName` _string_ | PriorityClassName to be used in the Pod. | | | | `successfulJobsHistoryLimit` _integer_ | SuccessfulJobsHistoryLimit defines the maximum number of successful Jobs to be displayed. | | Minimum: 0
| | `failedJobsHistoryLimit` _integer_ | FailedJobsHistoryLimit defines the maximum number of failed Jobs to be displayed. | | Minimum: 0
| @@ -2386,7 +2551,7 @@ _Appears in:_ | `sql` _string_ | Sql is the script to be executed by the SqlJob. | | | | `sqlConfigMapKeyRef` _[ConfigMapKeySelector](#configmapkeyselector)_ | SqlConfigMapKeyRef is a reference to a ConfigMap containing the Sql script.
It is defaulted to a ConfigMap with the contents of the Sql field. | | | | `backoffLimit` _integer_ | BackoffLimit defines the maximum number of attempts to successfully execute a SqlJob. | 5 | | -| `restartPolicy` _[RestartPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#restartpolicy-v1-core)_ | RestartPolicy to be added to the SqlJob Pod. | OnFailure | Enum: [Always OnFailure Never]
| +| `restartPolicy` _[RestartPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#restartpolicy-v1-core)_ | RestartPolicy to be added to the SqlJob Pod. | OnFailure | Enum: [Always OnFailure Never]
| | `inheritMetadata` _[Metadata](#metadata)_ | InheritMetadata defines the metadata to be inherited by children resources. | | | @@ -2404,7 +2569,7 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | | `ephemeral` _boolean_ | Ephemeral indicates whether to use ephemeral storage in the PVCs. It is only compatible with non HA MariaDBs. | | | -| `size` _[Quantity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#quantity-resource-api)_ | Size of the PVCs to be mounted by MariaDB. Required if not provided in 'VolumeClaimTemplate'. It supersedes the storage size specified in 'VolumeClaimTemplate'. | | | +| `size` _[Quantity](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#quantity-resource-api)_ | Size of the PVCs to be mounted by MariaDB. Required if not provided in 'VolumeClaimTemplate'. It supersedes the storage size specified in 'VolumeClaimTemplate'. | | | | `storageClassName` _string_ | StorageClassName to be used to provision the PVCS. It supersedes the 'StorageClassName' specified in 'VolumeClaimTemplate'.
If not provided, the default 'StorageClass' configured in the cluster is used. | | | | `resizeInUseVolumes` _boolean_ | ResizeInUseVolumes indicates whether the PVCs can be resized. The 'StorageClassName' used should have 'allowVolumeExpansion' set to 'true' to allow resizing.
It defaults to true. | | | | `waitForVolumeResize` _boolean_ | WaitForVolumeResize indicates whether to wait for the PVCs to be resized before marking the MariaDB object as ready. This will block other operations such as cluster recovery while the resize is in progress.
It defaults to true. | | | @@ -2415,7 +2580,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#volume-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#volume-v1-core. @@ -2423,6 +2588,7 @@ _Appears in:_ - [BackupStagingStorage](#backupstagingstorage) - [BackupStorage](#backupstorage) - [BootstrapFrom](#bootstrapfrom) +- [PhysicalBackupStorage](#physicalbackupstorage) - [RestoreSource](#restoresource) - [RestoreSpec](#restorespec) - [Volume](#volume) @@ -2461,7 +2627,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#tcpsocketaction-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#tcpsocketaction-v1-core. @@ -2471,7 +2637,7 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `port` _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#intorstring-intstr-util)_ | | | | +| `port` _[IntOrString](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#intorstring-intstr-util)_ | | | | | `host` _string_ | | | | @@ -2518,8 +2684,8 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `caLifetime` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | CALifetime defines the CA certificate validity. | | | -| `certLifetime` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | CertLifetime defines the certificate validity. | | | +| `caLifetime` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | CALifetime defines the CA certificate validity. | | | +| `certLifetime` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | CertLifetime defines the certificate validity. | | | | `privateKeyAlgorithm` _string_ | PrivateKeyAlgorithm is the algorithm to be used for the CA and leaf certificate private keys.
One of: ECDSA or RSA | | Enum: [ECDSA RSA]
| | `privateKeySize` _integer_ | PrivateKeyAlgorithm is the key size to be used for the CA and leaf certificate private keys.
Supported values: ECDSA(256, 384, 521), RSA(2048, 3072, 4096) | | | @@ -2564,7 +2730,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#topologyspreadconstraint-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#topologyspreadconstraint-v1-core. @@ -2578,14 +2744,31 @@ _Appears in:_ | --- | --- | --- | --- | | `maxSkew` _integer_ | | | | | `topologyKey` _string_ | | | | -| `whenUnsatisfiable` _[UnsatisfiableConstraintAction](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#unsatisfiableconstraintaction-v1-core)_ | | | | -| `labelSelector` _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#labelselector-v1-meta)_ | | | | +| `whenUnsatisfiable` _[UnsatisfiableConstraintAction](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#unsatisfiableconstraintaction-v1-core)_ | | | | +| `labelSelector` _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#labelselector-v1-meta)_ | | | | | `minDomains` _integer_ | | | | -| `nodeAffinityPolicy` _[NodeInclusionPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#nodeinclusionpolicy-v1-core)_ | | | | -| `nodeTaintsPolicy` _[NodeInclusionPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#nodeinclusionpolicy-v1-core)_ | | | | +| `nodeAffinityPolicy` _[NodeInclusionPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#nodeinclusionpolicy-v1-core)_ | | | | +| `nodeTaintsPolicy` _[NodeInclusionPolicy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#nodeinclusionpolicy-v1-core)_ | | | | | `matchLabelKeys` _string array_ | | | | +#### TypedLocalObjectReference + + + +TypedLocalObjectReference is a reference to a specific object type. + + + +_Appears in:_ +- [BootstrapFrom](#bootstrapfrom) + +| Field | Description | Default | Validation | +| --- | --- | --- | --- | +| `name` _string_ | Name of the referent. | | | +| `kind` _string_ | Kind of the referent. | | | + + #### UpdateStrategy @@ -2600,7 +2783,7 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | | `type` _[UpdateType](#updatetype)_ | Type defines the type of updates. One of `ReplicasFirstPrimaryLast`, `RollingUpdate` or `OnDelete`. If not defined, it defaults to `ReplicasFirstPrimaryLast`. | ReplicasFirstPrimaryLast | Enum: [ReplicasFirstPrimaryLast RollingUpdate OnDelete Never]
| -| `rollingUpdate` _[RollingUpdateStatefulSetStrategy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#rollingupdatestatefulsetstrategy-v1-apps)_ | RollingUpdate defines parameters for the RollingUpdate type. | | | +| `rollingUpdate` _[RollingUpdateStatefulSetStrategy](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#rollingupdatestatefulsetstrategy-v1-apps)_ | RollingUpdate defines parameters for the RollingUpdate type. | | | | `autoUpdateDataPlane` _boolean_ | AutoUpdateDataPlane indicates whether the Galera data-plane version (agent and init containers) should be automatically updated based on the operator version. It defaults to false.
Updating the operator will trigger updates on all the MariaDB instances that have this flag set to true. Thus, it is recommended to progressively set this flag after having updated the operator. | | | @@ -2637,7 +2820,7 @@ User is the Schema for the users API. It is used to define grants as if you wer | --- | --- | --- | --- | | `apiVersion` _string_ | `enterprise.mariadb.com/v1alpha1` | | | | `kind` _string_ | `User` | | | -| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | +| `metadata` _[ObjectMeta](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#objectmeta-v1-meta)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | | `spec` _[UserSpec](#userspec)_ | | | | @@ -2654,8 +2837,8 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `requeueInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | RequeueInterval is used to perform requeue reconciliations. | | | -| `retryInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#duration-v1-meta)_ | RetryInterval is the interval used to perform retries. | | | +| `requeueInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | RequeueInterval is used to perform requeue reconciliations. | | | +| `retryInterval` _[Duration](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#duration-v1-meta)_ | RetryInterval is the interval used to perform retries. | | | | `cleanupPolicy` _[CleanupPolicy](#cleanuppolicy)_ | CleanupPolicy defines the behavior for cleaning up a SQL resource. | | Enum: [Skip Delete]
| | `mariaDbRef` _[MariaDBRef](#mariadbref)_ | MariaDBRef is a reference to a MariaDB object. | | Required: \{\}
| | `passwordSecretKeyRef` _[SecretKeySelector](#secretkeyselector)_ | PasswordSecretKeyRef is a reference to the password to be used by the User.
If not provided, the account will be locked and the password will expire.
If the referred Secret is labeled with "enterprise.mariadb.com/watch", updates may be performed to the Secret in order to update the password. | | | @@ -2671,7 +2854,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#volume-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#volume-v1-core. @@ -2706,9 +2889,9 @@ _Appears in:_ | Field | Description | Default | Validation | | --- | --- | --- | --- | -| `accessModes` _[PersistentVolumeAccessMode](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#persistentvolumeaccessmode-v1-core) array_ | | | | -| `selector` _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#labelselector-v1-meta)_ | | | | -| `resources` _[VolumeResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#volumeresourcerequirements-v1-core)_ | | | | +| `accessModes` _[PersistentVolumeAccessMode](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#persistentvolumeaccessmode-v1-core) array_ | | | | +| `selector` _[LabelSelector](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#labelselector-v1-meta)_ | | | | +| `resources` _[VolumeResourceRequirements](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#volumeresourcerequirements-v1-core)_ | | | | | `storageClassName` _string_ | | | | | `metadata` _[Metadata](#metadata)_ | Refer to Kubernetes API documentation for fields of `metadata`. | | | @@ -2717,7 +2900,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#volumemount-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#volumemount-v1-core. @@ -2741,7 +2924,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#volume-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#volume-v1-core. @@ -2763,7 +2946,7 @@ _Appears in:_ -Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.32/#weightedpodaffinityterm-v1-core. +Refer to the Kubernetes docs: https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.33/#weightedpodaffinityterm-v1-core. diff --git a/tools/mariadb-enterprise-operator/backup-and-restore/README.md b/tools/mariadb-enterprise-operator/backup-and-restore/README.md new file mode 100644 index 000000000..66fad6958 --- /dev/null +++ b/tools/mariadb-enterprise-operator/backup-and-restore/README.md @@ -0,0 +1,18 @@ +--- +description: >- + Configure multiple backup strategies and perform restoration. +layout: + title: + visible: true + description: + visible: true + tableOfContents: + visible: true + outline: + visible: true + pagination: + visible: false +--- + +# Backup and Restore + diff --git a/tools/mariadb-enterprise-operator/backup-and-restore.md b/tools/mariadb-enterprise-operator/backup-and-restore/logical_backup.md similarity index 68% rename from tools/mariadb-enterprise-operator/backup-and-restore.md rename to tools/mariadb-enterprise-operator/backup-and-restore/logical_backup.md index 78584bcad..a8aeb7ce7 100644 --- a/tools/mariadb-enterprise-operator/backup-and-restore.md +++ b/tools/mariadb-enterprise-operator/backup-and-restore/logical_backup.md @@ -1,6 +1,12 @@ -# Backup and Restore +# Logical backups -MariaDB Enterprise Operator allows you to declaratively take backups by defining `Backup` resources and later on restore them by using their `Restore` counterpart. These resources get reconciled into `Job`/`CronJob` resources that automatically perform the backup/restore operations, so you don't need to manually script them. +## What is a logical backup? + +A logical backup is a backup that contains the logical structure of the database, such as tables, indexes, and data, rather than the physical storage format. It is created using [mariadb-dump](https://mariadb.com/docs/server/clients-and-utilities/backup-restore-and-import-clients/mariadb-dump), which generates SQL statements that can be used to recreate the database schema and populate it with data. + +Logical backups serve not just as a source of restoration, but also enable data mobility between `MariaDB` instances. These backups are called "logical" because they are independent from the `MariaDB` topology, as they only contain DDLs and `INSERT` statements to populate data. + +Although logical backups are a great fit for data mobility and migrations, they are not as efficient as [physical backups](physical_backup.md) for large databases. For this reason, physical backups are the recommended method for backing up `MariaDB` databases, especially in production environments. ## Storage types @@ -28,11 +34,10 @@ spec: persistentVolumeClaim: resources: requests: - storage: 1Gi + storage: 100Mi accessModes: - ReadWriteOnce ``` - This will use the default `StorageClass` to provision a PVC that would hold the backup files, but ideally you should use a S3 compatible storage: ```yaml @@ -61,10 +66,9 @@ spec: name: minio-ca key: tls.crt ``` - By providing the authentication details and the TLS configuration via references to `Secret` keys, this example will store the backups in a local Minio instance. -Alternatively you can use dynamic credentials from an [EKS Service Account using IRSA](https://repost.aws/knowledge-center/eks-restrict-s3-bucket): +Alternatively you can use dynamic credentials from an EKS Service Account using EKS Pod Identity or IRSA: ```yaml apiVersion: v1 @@ -93,8 +97,7 @@ spec: tls: enabled: true ``` - -By leaving out `accessKeyIdSecretKeyRef` and `secretAccessKeySecretKeyRef` the credentials and pointing to the correct `serviceAccountName`, the backup Job will use the dynamic credentials from EKS. +By leaving out the `accessKeyIdSecretKeyRef` and `secretAccessKeySecretKeyRef` credentials and pointing to the correct `serviceAccountName`, the backup Job will use the dynamic credentials from EKS. #### Scheduling @@ -115,7 +118,7 @@ spec: This resource gets reconciled into a `CronJob` that periodically takes the backups. -It is important to note that regularly scheduled `Backups` complement very well the [target recovery time](backup-and-restore.md#target-recovery-time) feature detailed below. +It is important to note that regularly scheduled `Backups` complement very well the [target recovery time](#target-recovery-time) feature detailed below. #### Retention policy @@ -134,7 +137,7 @@ spec: #### Compression -You are able to compress backups by providing the compression algorithm you want to use in the `spec.compression` field: +You are able to compress backups by providing the compression algorithm you want to use in the `spec.compression` field: ```yaml apiVersion: enterprise.mariadb.com/v1alpha1 @@ -148,10 +151,9 @@ spec: ``` Currently the following compression algorithms are supported: - -* `bzip2`: Good compression ratio, but slower compression/decompression speed compared to gzip. -* `gzip`: Good compression/decompression speed, but worse compression ratio compared to bzip2. -* `none`: No compression. +- `bzip2`: Good compression ratio, but slower compression/decompression speed compared to gzip. +- `gzip`: Good compression/decompression speed, but worse compression ratio compared to bzip2. +- `none`: No compression. `compression` is defaulted to `none` by the operator. @@ -203,7 +205,7 @@ spec: #### Target recovery time -If you have multiple backups available, specially after configuring a [scheduled Backup](backup-and-restore.md#scheduling), the operator is able to infer which backup to restore based on the `spec.targetRecoveryTime` field. +If you have multiple backups available, specially after configuring a [scheduled Backup](#scheduling), the operator is able to infer which backup to restore based on the `spec.targetRecoveryTime` field. ```yaml apiVersion: enterprise.mariadb.com/v1alpha1 @@ -289,7 +291,7 @@ spec: - db3 ``` -When it comes to restore, all the databases available in the backup will be restored, but you may also choose a single database to be restored via the `database` field available in the `Restore` resource: +When it comes to restore, all the databases available in the backup will be restored, but you may also choose a single database to be restored via the `database` field available in the `Restore` resource: ```yaml apiVersion: enterprise.mariadb.com/v1alpha1 @@ -305,9 +307,8 @@ spec: ``` There are a couple of points to consider here: - -* The referred database (`db1` in the example) must previously exist for the `Restore` to succeed. -* The `mariadb` CLI invoked by the operator under the hood only supports selecting a single database to restore via the [--one-database](https://app.gitbook.com/s/SsmexDFPv2xG2OTyO5yV/clients-and-utilities/mariadb-client/mariadb-command-line-client#options-debug-options) option, restoration of multiple specific databases is not supported. +- The referred database (`db1` in the example) must previously exist for the `Restore` to succeed. +- The `mariadb` CLI invoked by the operator under the hood only supports selecting a single database to restore via the [`--one-database`](https://mariadb.com/kb/en/mariadb-command-line-client/#-o-one-database) option, restoration of multiple specific databases is not supported. ## Extra options @@ -324,7 +325,6 @@ spec: args: - --verbose ``` - ```yaml apiVersion: enterprise.mariadb.com/v1alpha1 kind: Restore @@ -339,7 +339,7 @@ spec: - --verbose ``` -Refer to the `mariadb-dump` and `mariadb` CLI options in the [reference](backup-and-restore.md#reference) section. +Refer to the `mariadb-dump` and `mariadb` CLI options in the [reference](#reference) section. ## Staging area @@ -384,11 +384,11 @@ spec: storage: 10Gi accessModes: - ReadWriteOnce -``` +``` -In the examples above, a PVC with the default `StorageClass` will be used as staging area. Refer to the [API reference](api-reference.md) for more configuration options. +In the examples above, a PVC with the default `StorageClass` will be used as staging area. Refer to the [API reference](./api_reference.md) for more configuration options. -Similarly, you may also use a custom staging area when [bootstrapping from backup](backup-and-restore.md#bootstrap-new-mariadb-instances): +Similarly, you may also use a custom staging area when [bootstrapping from backup](#bootstrap-new-mariadb-instances): ```yaml apiVersion: enterprise.mariadb.com/v1alpha1 @@ -408,54 +408,13 @@ spec: - ReadWriteOnce ``` -## Data mobility between instances - -Logical backups serve not just as a source of restoration, but also enable data mobility between `MariaDB` instances. These backups are called "logical" because they are independent from the `MariaDB` topology, as they only contain DDLs and `INSERT` statements to populate data. - -When migrating between different topologies, certain considerations must be taken into account in the following scenario: - -#### Migrating from standalone to Galera `MariaDBs` - -Galera has specific limitations regarding backups. Before proceeding, please review the [Galera Backup Limitations](backup-and-restore.md#galera-backup-limitations) section. - -To address these limitations, the `Backup` from the standalone instance must be taken with `spec.ignoreGlobalPriv=true`. The following example demonstrates how to back up a standalone `MariaDB` (single instance): - -```yaml -apiVersion: enterprise.mariadb.com/v1alpha1 -kind: Backup -metadata: - name: backup-standalone -spec: - mariaDbRef: - name: mariadb-standalone - ignoreGlobalPriv: true -``` - -Once the previous `Backup` is completed, we will be able bootstrap a new Galera instance from it: - -```yaml -apiVersion: enterprise.mariadb.com/v1alpha1 -kind: MariaDB -metadata: - name: mariadb-galera -spec: - replicas: 3 - galera: - enabled: true - storage: - size: 1Gi - bootstrapFrom: - backupRef: - name: backup-standalone -``` - ## Important considerations and limitations -#### Root credentials +### Root credentials When restoring a backup, the root credentials specified through the `spec.rootPasswordSecretKeyRef` field in the `MariaDB` resource must match the ones in the backup. These credentials are utilized by the liveness and readiness probes, and if they are invalid, the probes will fail, causing your `MariaDB` `Pods` to restart after the backup restoration. -#### Restore job +### Restore job Restoring large backups can consume significant compute resources and may cause `Restore` `Jobs` to become stuck due to insufficient resources. To prevent this, you can define the compute resources allocated to the `Job`: @@ -477,9 +436,9 @@ spec: memory: 128Mi limits: memory: 1Gi -``` +``` -#### Galera backup limitations +### Galera backup limitations #### `mysql.global_priv` @@ -488,17 +447,15 @@ Galera only replicates the tables with InnoDB engine, see the [Galera docs](http Something that does not include `mysql.global_priv`, the table used to store users and grants, which uses the MyISAM engine. This basically means that a Galera instance with `mysql.global_priv` populated will not replicate this data to an empty Galera instance. However, DDL statements (`CREATE USER`, `ALTER USER` ...) will be replicated. Taking this into account, if we think now about a restore scenario where: - -* The backup file includes a `DROP TABLE` statement for the `mysql.global_priv` table. -* The backup has some `INSERT` statements for the `mysql.global_priv` table. -* The Galera cluster has 3 nodes: `galera-0`, `galera-1` and `galera-2`. -* The backup is restored in `galera-0`. +- The backup file includes a `DROP TABLE` statement for the `mysql.global_priv` table. +- The backup has some `INSERT` statements for the `mysql.global_priv` table. +- The Galera cluster has 3 nodes: `galera-0`, `galera-1` and `galera-2`. +- The backup is restored in `galera-0`. This is what will happen under the scenes while restoring the backup: - -* The `DROP TABLE` statement is a DDL so it will be executed in `galera-0`, `galera-1` and `galera-2`. -* The `INSERT` statements are not DDLs, so they will only be applied to `galera-0`. -* This results in the `galera-1` and `galera-2` not having the `mysql.global_priv` table. +- The `DROP TABLE` statement is a DDL so it will be executed in `galera-0`, `galera-1` and `galera-2`. +- The `INSERT` statements are not DDLs, so they will only be applied to `galera-0`. +- This results in the `galera-1` and `galera-2` not having the `mysql.global_priv` table. After the backup is fully restored, the liveness and readiness probes will kick in, they will succeed in `galera-0`, but they will fail in `galera-1` and `galera-2`, as they rely in the root credentials available in `mysql.global_priv`, resulting in the `galera-1` and `galera-2` getting restarted. @@ -516,32 +473,131 @@ spec: ``` Also, to avoid situations where `mysql.global_priv` is unreplicated, all the entries in that table must be managed via DDLs. This is the recommended approach suggested in the [Galera docs](https://galeracluster.com/library/kb/user-changes.html). There are a couple of ways that we can guarantee this: +- Use the `rootPasswordSecretKeyRef`, `username` and `passwordSecretKeyRef` fields of the `MariaDB` CR to create the root and initial user respectively. This fields will be translated into DDLs by the image entrypoint. +- Rely on the [`User`](https://github.com/mariadb-corporation/mariadb-enterprise-operator/blob/main/examples/manifests/user.yaml) and [`Grant`](https://github.com/mariadb-corporation/mariadb-enterprise-operator/blob/main/examples/manifests/grant.yaml) CRs to create additional users and grants. Refer to the [SQL resource documentation](./sql_resources.md) for further detail. -* Use the `rootPasswordSecretKeyRef`, `username` and `passwordSecretKeyRef` fields of the `MariaDB` CR to create the root and initial user respectively. This fields will be translated into DDLs by the image entrypoint. -* Rely on the `User` and `Grant` CRs to create additional users and grants. Refer to the [SQL resource documentation](sql-resources.md) for further detail. - -#### `LOCK TABLES` +#### `LOCK TABLES` Galera is not compatible with the `LOCK TABLES` statement: - -* [LOCK TABLES Limitations](https://app.gitbook.com/s/SsmexDFPv2xG2OTyO5yV/reference/sql-statements/transactions/lock-tables#limitations) +* [LOCK TABLES Limitations](https://mariadb.com/kb/en/lock-tables/#limitations) For this reason, the operator automatically adds the `--skip-add-locks` option to the `Backup` to overcome this limitation. -## Reference +## Migrations using logical backups + +### Migrating an external MariaDB to a `MariaDB` running in Kubernetes + +You can leverage logical backups to bring your external MariaDB data into a new `MariaDB` instance running in Kubernetes. Follow this runbook for doing so: + +1. Take a logical backup of your external MariaDB using one of the commands below: +```bash +mariadb-dump --user=${MARIADB_USER} --password=${MARIADB_PASSWORD} --host=${MARIADB_HOST} --single-transaction --events --routines --all-databases > backup.2024-08-26T12:24:34Z.sql +``` + +{% hint style="warning" %} +If you are using Galera or planning to migrate to a Galera instance, make sure you understand the [Galera backup limitations](#galera-backup-limitations) and use the following command instead: +{% endhint %} + +```bash +mariadb-dump --user=${MARIADB_USER} --password=${MARIADB_PASSWORD} --host=${MARIADB_HOST} --single-transaction --events --routines --all-databases --skip-add-locks --ignore-table=mysql.global_priv > backup.2024-08-26T12:24:34Z.sql +``` + +1. Ensure that your backup file is named in the following format: `backup.2024-08-26T12:24:34Z.sql`. If the file name does not follow this format, it will be ignored by the operator. -* [API reference](api-reference.md) -* [mariadb-dump options](https://app.gitbook.com/s/SsmexDFPv2xG2OTyO5yV/clients-and-utilities/backup-restore-and-import-clients/mariadb-dump#options) -* [mariadb options](https://app.gitbook.com/s/SsmexDFPv2xG2OTyO5yV/clients-and-utilities/mariadb-client/mariadb-command-line-client#options) +2. Upload the backup file to one of the supported [storage types](#storage-types). We recommend using S3. + +3. Create your `MariaDB` resource declaring that you want to [bootstrap from the previous backup](#bootstrap-new-mariadb-instances) and providing a [root password `Secret`](#root-credentials) that matches the backup: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: MariaDB +metadata: + name: mariadb-galera +spec: + rootPasswordSecretKeyRef: + name: mariadb + key: root-password + replicas: 3 + galera: + enabled: true + storage: + size: 1Gi + bootstrapFrom: + s3: + bucket: backups + prefix: mariadb + endpoint: minio.minio.svc.cluster.local:9000 + accessKeyIdSecretKeyRef: + name: minio + key: access-key-id + secretAccessKeySecretKeyRef: + name: minio + key: secret-access-key + tls: + enabled: true + caSecretKeyRef: + name: minio-ca + key: tls.crt + targetRecoveryTime: 2024-08-26T12:24:34Z +``` +5. If you are using Galera in your new instance, migrate your previous users and grants to use the `User` and `Grant` CRs. Refer to the [SQL resource documentation](./sql_resources.md) for further detail. + +### Migrating to a `MariaDB` with different topology + +Database mobility between `MariaDB` instances with different topologies is possible with logical backups. However, there are a couple of technical details that you need to be aware of in the following scenarios: + +#### Migrating between standalone and replicated `MariaDBs` + +This should be fully compatible, no issues have been detected. + +#### Migrating from standalone/replicated to Galera `MariaDBs` + +There are a couple of limitations regarding the backups in Galera, please make sure you read the [Galera backup limitations](#galera-backup-limitations) section before proceeding. + +To overcome this limitations, the `Backup` in the standalone/replicated instance needs to be taken with `spec.ignoreGlobalPriv=true`. In the following example, we are backing up a standalone `MariaDB` (single instance): + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: Backup +metadata: + name: backup-standalone +spec: + mariaDbRef: + name: mariadb-standalone + ignoreGlobalPriv: true +``` + +Once the previous `Backup` is completed, we will be able bootstrap a new Galera instance from it: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: MariaDB +metadata: + name: mariadb-galera +spec: + replicas: 3 + galera: + enabled: true + storage: + size: 1Gi + bootstrapFrom: + backupRef: + name: backup-standalone +``` + +## Reference +* [API reference](api_reference.md) +* [`mariadb-dump` options](https://mariadb.com/kb/en/mariadb-dump/#options) +* [`mariadb` options](https://mariadb.com/kb/en/mariadb-command-line-client/#options) ## Troubleshooting #### Galera `Pods` restarting after bootstrapping from a backup -Please make sure you understand the [Galera backup limitations](backup-and-restore.md#galera-backup-limitations). +Please make sure you understand the [Galera backup limitations](#galera-backup-limitations). After doing so, ensure that your backup does not contain a `DROP TABLE mysql.global_priv;` statement, as it will make your liveness and readiness probes to fail after the backup restoration. {% include "https://app.gitbook.com/s/SsmexDFPv2xG2OTyO5yV/~/reusable/pNHZQXPP5OEz2TgvhFva/" %} -{% @marketo/form formId="4316" %} +{% @marketo/form formId="4316" %} \ No newline at end of file diff --git a/tools/mariadb-enterprise-operator/backup-and-restore/physical_backup.md b/tools/mariadb-enterprise-operator/backup-and-restore/physical_backup.md new file mode 100644 index 000000000..19f996826 --- /dev/null +++ b/tools/mariadb-enterprise-operator/backup-and-restore/physical_backup.md @@ -0,0 +1,538 @@ +# Physical backups + +## What is a physical backup? + +A physical backup is a snapshot of the entire data directory (`/var/lib/mysql`), including all data files. This type of backup captures the exact state of the database at a specific point in time, allowing for quick restoration in case of data loss or corruption. + +Physical backups are the recommended method for backing up `MariaDB` databases, especially in production environments, as they are faster and more efficient than [logical backups](logical_backup.md). + +## Backup strategies + +Multiple strategies are available for performing physical backups, including: +- **mariadb-backup**: Taken using the enterprise version of [mariadb-backup](https://mariadb.com/docs/server/server-usage/backup-and-restore/mariadb-backup/full-backup-and-restore-with-mariadb-backup), specifically [MariaDB Enterprise backup](https://mariadb.com/docs/server/server-usage/backup-and-restore/mariadb-enterprise-backup#non-blocking-backups), which is available in the `MariaDB` enterprise images. The operator supports scheduling `Jobs` to perform backups using this utility. +- **Kubernetes VolumeSnapshot**: Leverage [Kubernetes VolumeSnapshots](https://kubernetes.io/docs/concepts/storage/volume-snapshots/) to create snapshots of the persistent volumes used by the `MariaDB` `Pods`. This method relies on a compatible CSI (Container Storage Interface) driver that supports volume snapshots. See the [VolumeSnapshots](#volumesnapshots) section for more details. + +In order to use `VolumeSnapshots`, you will need to provide a `VolumeSnapshotClass` that is compatible with your storage provider. The operator will use this class to create snapshots of the persistent volumes: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: PhysicalBackup +metadata: + name: physicalbackup +spec: + mariaDbRef: + name: mariadb + storage: + volumeSnapshot: + volumeSnapshotClassName: csi-hostpath-snapclass +``` + +For the rest of compatible [backup storage types](#storage-types), the `mariadb-backup` CLI will be used to perform the backup. For instance, to use `S3` as backup storage: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: PhysicalBackup +metadata: + name: physicalbackup +spec: + mariaDbRef: + name: mariadb + storage: + s3: + bucket: physicalbackups + endpoint: minio.minio.svc.cluster.local:9000 + accessKeyIdSecretKeyRef: + name: minio + key: access-key-id + secretAccessKeySecretKeyRef: + name: minio + key: secret-access-key + tls: + enabled: true + caSecretKeyRef: + name: minio-ca + key: ca.crt +``` + +## Storage types + +Multiple storage types are supported for storing physical backups, including: +- **S3 compatible storage**: Store backups in a S3 compatible storage, such as [AWS S3](https://aws.amazon.com/s3/) or [Minio](https://github.com/minio/minio). +- **Persistent Volume Claims (PVC)**: Use any of the [StorageClasses](https://kubernetes.io/docs/concepts/storage/storage-classes/) available in your Kubernetes cluster to create a `PersistentVolumeClaim` (PVC) for storing backups. +- **Kubernetes Volumes**: Store backups in any of the [in-tree storage providers](https://kubernetes.io/docs/concepts/storage/volumes/#volume-types) supported by Kubernetes out of the box, such as NFS. +- **Kubernetes VolumeSnapshots**: Use [Kubernetes VolumeSnapshots](https://kubernetes.io/docs/concepts/storage/volume-snapshots/) to create snapshots of the persistent volumes used by the `MariaDB` `Pods`. This method relies on a compatible CSI (Container Storage Interface) driver that supports volume snapshots. See the [VolumeSnapshots](#volumesnapshots) section for more details. + + +## Scheduling + +Physical backups can be scheduled using the `spec.schedule` field in the `PhysicalBackup` resource. The schedule is defined using a [Cron format](https://en.wikipedia.org/wiki/Cron) and allows you to specify how often backups should be taken: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: PhysicalBackup +metadata: + name: physicalbackup +spec: + mariaDbRef: + name: mariadb + schedule: + cron: "*/1 * * * *" + suspend: false + immediate: true +``` + +If you want to immediatly trigger a backup after creating the `PhysicalBackup` resource, you can set the `immediate` field to `true`. This will create a backup immediately, regardless of the schedule. + +If you want to suspend the schedule, you can set the `suspend` field to `true`. This will prevent any new backups from being created until the `PhysicalBackup` is resumed. + +## Compression + +When using physical backups based on `mariadb-backup`, you are able to choose the compression algorithm used to compress the backup files. The available options are: +- `bzip2`: Good compression ratio, but slower compression/decompression speed compared to gzip. +- `gzip`: Good compression/decompression speed, but worse compression ratio compared to bzip2. +- `none`: No compression. + +To specify the compression algorithm, you can use the `compression` field in the `PhysicalBackup` resource: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: PhysicalBackup +metadata: + name: physicalbackup +spec: + mariaDbRef: + name: mariadb + compression: bzip2 +``` + +`compression` is defaulted to `none` by the operator. + +## Retention policy + +You can define a retention policy both for backups based on `mariadb-backup` and for `VolumeSnapshots`. The retention policy allows you to specify how long backups should be retained before they are automatically deleted. This can be defined via the `maxRetention` field in the `PhysicalBackup` resource: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: PhysicalBackup +metadata: + name: physicalbackup +spec: + mariaDbRef: + name: mariadb + maxRetention: 720h # 30 days +``` + +When using physical backups based on `mariadb-backup`, the operator will automatically delete backups files in the specified storage older than the retention period. + +When using `VolumeSnapshots`, the operator will automatically delete the `VolumeSnapshot` resources older than the retention period using the Kubernetes API. + +## Restoration + +Physical backups can only be restored in brand new `MariaDB` instances without any existing data. This means that you cannot restore a physical backup into an existing `MariaDB` instance that already has data. + +To perform a restoration, you can specify a `PhysicalBackup` as restoration source under the `spec.bootstrapFrom` field in the `MariaDB` resource: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: MariaDB +metadata: + name: mariadb-galera +spec: + bootstrapFrom: + backupRef: + name: physicalbackup + kind: PhysicalBackup +``` + +This will take into account the backup strategy and storage type used in the `PhysicalBackup`, and it will perform the restoration accordingly. + +As an alternative, you can also provide a reference to an S3 bucket that was previously used to store the physical backup files: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: MariaDB +metadata: + name: mariadb-galera +spec: + bootstrapFrom: + s3: + bucket: physicalbackups + prefix: mariadb + endpoint: minio.minio.svc.cluster.local:9000 + accessKeyIdSecretKeyRef: + name: minio + key: access-key-id + secretAccessKeySecretKeyRef: + name: minio + key: secret-access-key + tls: + enabled: true + caSecretKeyRef: + name: minio-ca + key: ca.crt + backupContentType: Physical +``` + +It is important to note that the `backupContentType` field must be set to `Physical` when restoring from a physical backup. This ensures that the operator uses the correct restoration method. + +To restore a `VolumeSnapshot`, you can provide a reference to a specific `VolumeSnapshot` resource in the `spec.bootstrapFrom` field: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: MariaDB +metadata: + name: mariadb-galera +spec: + bootstrapFrom: + volumeSnapshotRef: + name: physicalbackup-20250611163352 +``` + +## Target recovery time + +By default, the operator will match the closest backup available to the current time. You can specify a different target recovery time by using the `targetRecoveryTime` field in the `PhysicalBackup` resource. This lets you define the exact point in time you want to restore to: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: MariaDB +metadata: + name: mariadb-galera +spec: + bootstrapFrom: + targetRecoveryTime: 2025-06-17T08:07:00Z +``` + +## Timeout + +By default, both backups based on `mariadb-backup` and `VolumeSnapshots` will have a timeout of 1 hour. You can change this timeout by using the `timeout` field in the `PhysicalBackup` resource: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: PhysicalBackup +metadata: + name: physicalbackup +spec: + mariaDbRef: + name: mariadb + timeout: 2h +``` + +When timed out, the operator will delete the `Jobs` or `VolumeSnapshots` resources associated wit the `PhysicalBackup` resource. The operator will create new `Jobs` or `VolumeSnapshots` to retry the backup operation if the `PhysicalBackup` resource is still scheduled. + +## Extra options + +When taking backups based on `mariadb-backup`, you can specify extra options to be passed to the `mariadb-backup` command using the `args` field in the `PhysicalBackup` resource: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: PhysicalBackup +metadata: + name: physicalbackup +spec: + mariaDbRef: + name: mariadb + args: + - "--verbose" +``` + +Refer to the [mariadb-backup documentation](https://mariadb.com/docs/server/server-usage/backup-and-restore/mariadb-backup/mariadb-backup-options) for a list of available options. + +## S3 credentials + +Credentials for accessing an S3 compatible storage can be provided via the `s3` key in the `storage` field of the `PhysicalBackup` resource. The credentials can be provided as a reference to a Kubernetes `Secret`: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: PhysicalBackup +metadata: + name: physicalbackup +spec: + mariaDbRef: + name: mariadb + storage: + s3: + bucket: physicalbackups + endpoint: minio.minio.svc.cluster.local:9000 + accessKeyIdSecretKeyRef: + name: minio + key: access-key-id + secretAccessKeySecretKeyRef: + name: minio + key: secret-access-key + tls: + enabled: true + caSecretKeyRef: + name: minio-ca + key: ca.crt +``` + +Alternatively, if you are running in EKS, you can use dynamic credentials from an EKS Service Account using EKS Pod Identity or IRSA: + +```yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: mariadb-backup + annotations: + eks.amazonaws.com/role-arn: arn:aws:iam::<>:role/my-role-irsa +``` + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: PhysicalBackup +metadata: + name: physicalbackup +spec: + mariaDbRef: + name: mariadb + serviceAccountName: mariadb-backup + storage: + s3: + bucket: physicalbackups + prefix: mariadb + endpoint: s3.us-east-1.amazonaws.com + region: us-east-1 + tls: + enabled: true +``` + +By leaving out the `accessKeyIdSecretKeyRef` and `secretAccessKeySecretKeyRef` credentials and pointing to the correct `serviceAccountName`, the backup `Job` will use the dynamic credentials from EKS. + +## Staging area + +{% hint style="info" %} +S3 backups based on `mariadb-backup` are the only scenario that requires a staging area. +{% endhint %} + +When using S3 storage for backups, a staging area is used for keeping the external backups while they are being processed. By default, this staging area is an `emptyDir` volume, which means that the backups are temporarily stored in the node's local storage where the `PhysicalBackup` `Job` is scheduled. In production environments, large backups may lead to issues if the node doesn't have sufficient space, potentially causing the backup/restore process to fail. + +Additionally, when restoring these backups, the operator will pull the backup files from S3, uncompress them if needded, and restore them to each of the `MariaDB` `Pods` in the cluster individually. To save network bandwidth and compute resources, a staging area is used to keep the uncompressed backup files after they have been restored to the first `MariaDB` `Pod`. This allows the operator to restore the same backup to the rest of `MariaDB` `Pods` seamlessly, without needing to pull and uncompress the backup again. + +To configure the staging area, you can use the `stagingStorage` field in the `PhysicalBackup` resource: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: PhysicalBackup +metadata: + name: physicalbackup +spec: + mariaDbRef: + name: mariadb + storage: + s3: + bucket: physicalbackups + prefix: mariadb + endpoint: minio.minio.svc.cluster.local:9000 + region: us-east-1 + accessKeyIdSecretKeyRef: + name: minio + key: access-key-id + secretAccessKeySecretKeyRef: + name: minio + key: secret-access-key + tls: + enabled: true + caSecretKeyRef: + name: minio-ca + key: ca.crt + stagingStorage: + persistentVolumeClaim: + resources: + requests: + storage: 1Gi + accessModes: + - ReadWriteOnce +``` + +Similarly, you may also use a staging area when [bootstrapping from backup](#restoration), in the `MariaDB` resource: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: MariaDB +metadata: + name: mariadb-galera +spec: + mariaDbRef: + name: mariadb + bootstrapFrom: + s3: + bucket: physicalbackups + prefix: mariadb + endpoint: minio.minio.svc.cluster.local:9000 + accessKeyIdSecretKeyRef: + name: minio + key: access-key-id + secretAccessKeySecretKeyRef: + name: minio + key: secret-access-key + tls: + enabled: true + caSecretKeyRef: + name: minio-ca + key: ca.crt + backupContentType: Physical + stagingStorage: + persistentVolumeClaim: + resources: + requests: + storage: 1Gi + accessModes: + - ReadWriteOnce +``` + +In the examples above, a PVC with the default `StorageClass` will be provisioned to be used as staging area. + +## `VolumeSnapshots` + +{% hint style="warning" %} + Before using this feature, ensure that you meet the following prerequisites : + - [external-snapshotter](https://github.com/kubernetes-csi/external-snapshotter) and its CRs are installed in the cluster. + - You have a compatible CSI driver that supports `VolumeSnapshots` installed in the cluster. + - You have a `VolumeSnapshotClass` configured configured for your CSI driver. + +{% endhint %} + +The operator is capable of creating [`VolumeSnapshot` resources](https://kubernetes.io/docs/concepts/storage/volume-snapshots/) of the PVCs used by the `MariaDB` `Pods`. This allows you to create point-in-time snapshots of your data in a Kubernetes-native way, leveraging the capabilities of your storage provider. + +Most of the fields described in this documentation apply to `VolumeSnapshots`, including scheduling, retention policy, and compression. The main difference with the `mariadb-backup` based backups is that the operator will not create a `Job` to perform the backup, but instead it will create a `VolumeSnapshot` resource directly. + +In order to create consistent, point-in-time snapshots of the `MariaDB` data, the operator will perform the following steps: +1. Execute a `BACKUP STAGE START` statement followed by `BACKUP STAGE BLOCK_COMMIT` in one of the secondary `Pods`. +2. Create a `VolumeSnapshot` resource of the data PVC mounted by the `MariaDB` secondary `Pod`. +3. Wait until the `VolumeSnapshot` resource becomes ready. When timing out, the operator will delete the `VolumeSnapshot` resource and retry the operation. +4. Issue a `BACKUP STAGE END` statement. + +This backup process is described in the [MariaDB documentation](https://mariadb.com/docs/server/server-usage/backup-and-restore/backup-optimization#taking-snapshots) and is designed to be [non-blocking](#non-blocking-physical-backups). + +## Non-blocking physical backups + +Both for `mariadb-backup` and `VolumeSnapshot` [backup strategies](#backup-strategies), the enterprise operator performs non-blocking physical backups by leveraging the [`BACKUP STAGE` feature.](https://mariadb.com/docs/server/server-usage/backup-and-restore/mariadb-backup/mariadb-backup-and-backup-stage-commands). This implies that the backups are taken without long read locks, enabling consistent, production-grade backups with minimal impact on running workloads, ideal for high-availability and performance-sensitive environments. + +## Important considerations and limitations + +### Root credentials + +When restoring a backup, the root credentials specified through the `spec.rootPasswordSecretKeyRef` field in the `MariaDB` resource must match the ones in the backup. These credentials are utilized by the liveness and readiness probes, and if they are invalid, the probes will fail, causing your `MariaDB` `Pods` to restart after the backup restoration. + +### Restore `Job` + +When using backups based on `mariadb-backup`, restoring and uncompressing large backups can consume significant compute resources and may cause restoration `Jobs` to become stuck due to insufficient resources. To prevent this, you can define the compute resources allocated to the `Job`: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: MariaDB +metadata: + name: mariadb +spec: + bootstrapFrom: + restoreJob: + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + memory: 1Gi +``` + +### `ReadWriteOncePod` access mode partially supported + +When using backups based on `mariadb-backup`, the data PVC used by the `MariaDB` `Pod` cannot use the [`ReadWriteOncePod`](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) access mode, as it needs to be mounted at the same time by both the `MariaDB` `Pod` and the `PhysicalBackup` `Job`. In this case, please use either the `ReadWriteOnce` or `ReadWriteMany` access modes instead. + +Alternatively, if you want to keep using the `ReadWriteOncePod` access mode, you must use backups based on `VolumeSnapshots`, which do not require creating a `Job` to perform the backup and therefore avoid the volume sharing limitation. + + +### `PhysicalBackup` `Jobs` scheduling + +`PhysicalBackup` `Jobs` must mount the data PVC used by one of the secondary `MariaDB` `Pods`. To avoid scheduling issues caused by the commonly used `ReadWriteOnce` access mode, the operator schedules backup `Jobs` on the same node as `MariaDB` by default. + +If you prefer to disable this behavior and allow `Jobs` to run on any node, you can set `podAffinity=false`: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: PhysicalBackup +metadata: + name: physicalbackup +spec: + mariaDbRef: + name: mariadb + podAffinity: false +``` + +This configuration may be suitable when using the `ReadWriteMany` access mode, which allows multiple `Pods` across different nodes to mount the volume simultaneously. + +## Troubleshooting + +Custom columns are used to display the status of the `PhysicalBackup` resource: + +```bash +kubectl get physicalbackups + +NAME COMPLETE STATUS MARIADB LAST SCHEDULED AGE +physicalbackup True Success mariadb 17s 17s +``` + +To get a higher level of detail, you can also check the `status` field directly: + +```bash +kubectl get physicalbackups physicalbackup -o json | jq -r '.status' + +{ + "conditions": [ + { + "lastTransitionTime": "2025-07-14T07:01:14Z", + "message": "Success", + "reason": "JobComplete", + "status": "True", + "type": "Complete" + } + ], + "lastScheduleCheckTime": "2025-07-14T07:00:00Z", + "lastScheduleTime": "2025-07-14T07:00:00Z", + "nextScheduleTime": "2025-07-15T07:00:00Z" +} +``` + +You may also check the related events for the `PhysicalBackup` resource to see if there are any issues: + +```bash +kubectl get events --field-selector involvedObject.name=physicalbackup + +LAST SEEN TYPE REASON OBJECT MESSAGE +116s Normal WaitForFirstConsumer persistentvolumeclaim/physicalbackup waiting for first consumer to be created before binding +116s Normal JobScheduled physicalbackup/physicalbackup Job physicalbackup-20250714140837 scheduled +116s Normal ExternalProvisioning persistentvolumeclaim/physicalbackup Waiting for a volume to be created either by the external provisioner 'rancher.io/local-path' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. +116s Normal Provisioning persistentvolumeclaim/physicalbackup External provisioner is provisioning volume for claim "default/physicalbackup" +113s Normal ProvisioningSucceeded persistentvolumeclaim/physicalbackup Successfully provisioned volume pvc-7b7c71f9-ea7e-4950-b612-2d41d7ab35b7 +``` + +### Common errors + +#### `mariadb-backup` log copy incomplete: consider increasing `innodb_log_file_size` + +In some situations, when using the `mariadb-backup` strategy, you may encounter the following error in the backup `Job` logs: + +```bash +mariadb [00] 2025-08-04 09:15:57 Was only able to copy log from 58087 to 59916, not 68968; try increasing +innodb_log_file_size +mariadb mariabackup: Stopping log copying thread.[00] 2025-08-04 09:15:57 Retrying read of log at LSN=59916 +``` + +This can be addressed by increasing the `innodb_log_file_size` in the `MariaDB` configuration. You can do this by adding the following to your `MariaDB` resource: + +```yaml +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: MariaDB +metadata: + name: mariadb +spec: +... + myCnf: | + [mariadb] + innodb_log_file_size=200M +``` + +Refer to [MDEV-36159](https://jira.mariadb.org/browse/MDEV-36237) for further details on this issue. + +{% include "https://app.gitbook.com/s/SsmexDFPv2xG2OTyO5yV/~/reusable/pNHZQXPP5OEz2TgvhFva/" %} + +{% @marketo/form formId="4316" %} \ No newline at end of file diff --git a/tools/mariadb-enterprise-operator/docker-images.md b/tools/mariadb-enterprise-operator/docker-images.md index 042c9d385..e142c2c92 100644 --- a/tools/mariadb-enterprise-operator/docker-images.md +++ b/tools/mariadb-enterprise-operator/docker-images.md @@ -17,14 +17,19 @@ All the Docker images used by this operator are based on [Red Hat UBI](https://c MariaDB Enterprise Operator is compatible with the following Docker images: -| Component | Image | Supported Tags | CPU Architecture | -| ---------------------------- | ---------------------------------------------- | ------------------------------------------------------------------------------------------ | ---------------- | -| MariaDB Enterprise Operator | docker.mariadb.com/mariadb-enterprise-operator | 1.0.0 | amd64 arm64 | -| MariaDB Enterprise Server | docker.mariadb.com/enterprise-server | 11.4.5-3 11.4.4-2 11.4 10.6.21-17 10.6.20-16.1 10.6.19-15.1 10.6.18-14.2 10.6.17-13.2 10.6 | amd64 arm64 | -| MaxScale Enterprise | docker.mariadb.com/maxscale-enterprise | 25.01.2 25.01.1 25.01 | amd64 arm64 | -| MaxScale | mariadb/maxscale | 24.02.5-ubi 24.02-ubi 23.08.9-ubi 23.08-ubi | amd64 arm64 | -| MariaDB Prometheus Exporter | mariadb/mariadb-prometheus-exporter-ubi | 1.0.0 | amd64 arm64 | -| MaxScale Prometheus Exporter | mariadb/maxscale-prometheus-exporter-ubi | 1.0.0 | amd64 arm64 | +| Component | Image | Supported Tags | CPU Architecture | +|-----------|-------|----------------|------------------| +| MariaDB Enterprise Operator (ppc64le support) | docker.mariadb.com/mariadb-enterprise-operator | 25.8.0
| amd64
arm64
ppc64le
| +| MariaDB Enterprise Operator | docker.mariadb.com/mariadb-enterprise-operator | 1.0.0
| amd64
arm64
| +| MariaDB Enterprise Server (ppc64le support) | docker.mariadb.com/enterprise-server | 11.4.7-4.1
11.4
10.6.22-18.1
10.6
| amd64
arm64
ppc64le
| +| MariaDB Enterprise Server | docker.mariadb.com/enterprise-server | 11.4.5-3
11.4.4-2
10.6.21-17
10.6.20-16.1
10.6.19-15.1
10.6.18-14.2
10.6.17-13.2
| amd64
arm64
| +| MaxScale Enterprise (ppc64le support) | docker.mariadb.com/maxscale | 25.01.3-1.1
25.01
| amd64
arm64
ppc64le
| +| MaxScale Enterprise | docker.mariadb.com/maxscale-enterprise | 25.01.2
25.01.1
| amd64
arm64
| +| MaxScale | mariadb/maxscale | 24.02.5-ubi
24.02-ubi
23.08.9-ubi
23.08-ubi
| amd64
arm64
| +| MariaDB Prometheus Exporter (ppc64le support) | mariadb/mariadb-prometheus-exporter-ubi | 1.1.0
| amd64
arm64
ppc64le
| +| MariaDB Prometheus Exporter | mariadb/mariadb-prometheus-exporter-ubi | 1.0.0
| amd64
arm64
| +| MaxScale Prometheus Exporter (ppc64le support) | mariadb/maxscale-prometheus-exporter-ubi | 1.1.0
| amd64
arm64
ppc64le
| +| MaxScale Prometheus Exporter | mariadb/maxscale-prometheus-exporter-ubi | 1.0.0
| amd64
arm64
| Refer to the registry documentation to [access docker.mariadb.com with your customer credentials](customer-access-to-docker-mariadb-com.md). diff --git a/tools/mariadb-enterprise-operator/galera-cluster.md b/tools/mariadb-enterprise-operator/galera-cluster.md index 555dff879..09fcb04ca 100644 --- a/tools/mariadb-enterprise-operator/galera-cluster.md +++ b/tools/mariadb-enterprise-operator/galera-cluster.md @@ -76,7 +76,7 @@ spec: It is important to note that, the `ist.recv_addr` cannot be set by the user, as it is automatically configured to the `Pod` IP by the operator, something that an user won't be able to know beforehand. -A list of the available options can be found in the [MariaDB documentation](https://app.gitbook.com/s/3VYeeVGUV4AMqrA3zwy7/reference/wsrep_provider_options). +A list of the available options can be found in the [MariaDB documentation](https://mariadb.com/docs/galera-cluster/reference/wsrep-variable-details/wsrep_provider_options). ## IPv6 support @@ -122,10 +122,6 @@ spec: Unlike the [ServiceAccount based authentication](galera-cluster.md#serviceaccount-based-authentication), the operator needs to explicitly generate credentials to authenticate. The advantage of this approach is that it is entirely decoupled from Kubernetes and it does not require cluster-wide permissions on the Kubernetes API. -## Backup and restore - -Please refer to the [backup documentation](backup-and-restore.md) to understand how to backup and restore Galera clusters. Specially, make sure you understand the [Galera backup limitations](backup-and-restore.md). - ## Galera cluster recovery MariaDB Enterprise Operator monitors the Galera cluster and acts accordinly to recover it if needed. This feature is enabled by default, but you may tune it as you need: diff --git a/tools/mariadb-enterprise-operator/introduction.md b/tools/mariadb-enterprise-operator/introduction.md index 55a7792eb..e60dfd05b 100644 --- a/tools/mariadb-enterprise-operator/introduction.md +++ b/tools/mariadb-enterprise-operator/introduction.md @@ -45,15 +45,20 @@ Operational expertise is baked into the `MariaDB` and `MaxScale` APIs and seamle * Query and Connection-Based Routing with MaxScale: MaxScale provides query routing and connection load balancing for improved application performance. * Cluster-Aware Rolling Updates: Perform rolling updates on MariaDB and MaxScale clusters, ensuring zero-downtime upgrades with no disruptions to your applications. * Flexible Storage Configuration and Volume Expansion: Easily configure storage for MariaDB instances, including the ability to expand volumes as needed. -* Backup Management: Take, restore, and schedule backups with multiple storage types supported: S3, PVCs, and Kubernetes volumes. +* Physical Backups based on [mariadb-backup](https://mariadb.com/docs/server/server-usage/backup-and-restore/mariadb-backup/full-backup-and-restore-with-mariadb-backup) and [Kubernetes VolumeSnapshots](https://kubernetes.io/docs/concepts/storage/volume-snapshots/). By leveraging the [BACKUP STAGE](https://mariadb.com/docs/server/reference/sql-statements/administrative-sql-statements/backup-commands/backup-stage) feature, backups are taken without long read locks or service interruptions. +* Logical Backups based on [mariadb-dump](https://mariadb.com/docs/server/clients-and-utilities/backup-restore-and-import-clients/mariadb-dump). +* Backup Management: Take, restore, and schedule backups with multiple storage types supported: S3, PVCs, Kubernetes volumes and VolumeSnapshots.. * Policy-Driven Backup Retention: Implement backup retention policies with bzip2 and gzip compression. * Target Recovery Time: Restore your database to the closest available backup based on a specified recovery time. -* Bootstrap New Instances: Initialize new MariaDB instances from backups, S3, or PVCs to quickly spin up new clusters. +* Bootstrap New Instances: Initialize new MariaDB instances from backups, S3, PVCs or VolumeSnapshots to quickly spin up new clusters. * TLS Certificate Management: Issue, configure, and rotate TLS certificates and Certificate Authorities (CAs) for secure connections. +* Advanced TLS Support: customize certificate lifetime, private key algorithm and TLS version. * Native Integration with cert-manager: Leverage [cert-manager](https://cert-manager.io/docs/), the de-facto standard for managing certificates in Kubernetes, to enable issuance with private CAs, public CAs and HashiCorp Vault. * Prometheus Metrics: Expose metrics using the MariaDB and MaxScale Prometheus exporters. * Native Integration with prometheus-operator: Leverage [prometheus-operator](https://github.com/prometheus-operator/prometheus-operator) to scrape metrics from MariaDB and MaxScale instances. * Declarative User and Database Management: Manage users, grants, and logical databases in a declarative manner using Kubernetes resources. +* Secure, immutable and lightweight images based on Red Hat UBI, available for multiple architectires (amd64, arm64 and ppc64le). +* [Operator certified ](https://catalog.redhat.com/en/software/container-stacks/detail/65789bcbe17f1b31944acb1d#overview) by Red Hat. {% include "https://app.gitbook.com/s/SsmexDFPv2xG2OTyO5yV/~/reusable/pNHZQXPP5OEz2TgvhFva/" %} diff --git a/tools/mariadb-enterprise-operator/migrations/migrate-25.08.md b/tools/mariadb-enterprise-operator/migrations/migrate-25.08.md new file mode 100644 index 000000000..021ff97fc --- /dev/null +++ b/tools/mariadb-enterprise-operator/migrations/migrate-25.08.md @@ -0,0 +1,83 @@ +# 25.08 migration guide + +This guide illustrates, step by step, how to migrate to `25.8.0` from previous versions. + +- Uninstall you current `mariadb-enterprise-operator` for preventing conflicts: +```bash +helm uninstall mariadb-enterprise-operator +``` +Alternatively, you may only downscale and delete the webhook configurations: +```bash +kubectl scale deployment mariadb-enterprise-operator --replicas=0 +kubectl scale deployment mariadb-enterprise-operator-webhook --replicas=0 +kubectl delete validatingwebhookconfiguration mariadb-enterprise-operator-webhook +kubectl delete mutatingwebhookconfiguration mariadb-enterprise-operator-webhook +``` + +- Upgrade `mariadb-enterprise-operator-crds` to `25.8.0`: + +```bash +helm repo update mariadb-enterprise-operator +helm upgrade --install mariadb-enterprise-operator-crds mariadb-enterprise-operator/mariadb-enterprise-operator-crds --version 25.8.0 +``` + +- The Galera data-plane must be updated to the `25.8.0` version. + + +If you want the operator to automatically update the data-plane (i.e. init and agent containers), you can set `updateStrategy.autoUpdateDataPlane=true` in your `MariaDB` resources: +```diff +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: MariaDB +metadata: + name: mariadb-galera +spec: + updateStrategy: ++ autoUpdateDataPlane: true +``` + +Alternatively, you can also do this manually: + +```diff +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: MariaDB +metadata: + name: mariadb +spec: + galera: + agent: +- image: docker.mariadb.com/mariadb-enterprise-operator:1.0.0 ++ image: docker.mariadb.com/mariadb-enterprise-operator:25.8.0 + initContainer: +- image: docker.mariadb.com/mariadb-enterprise-operator:1.0.0 ++ image: docker.mariadb.com/mariadb-enterprise-operator:25.8.0 +``` + +- Upgrade `mariadb-enterprise-operator` to `25.8.0`: +```bash +helm repo update mariadb-enterprise-operator +helm upgrade --install mariadb-enterprise-operator mariadb-enterprise-operator/mariadb-enterprise-operator --version 25.8.0 +``` + +- If you previously decided to downscale the operator, make sure you upscale it back: +```bash +kubectl scale deployment mariadb-enterprise-operator --replicas=1 +kubectl scale deployment mariadb-enterprise-operator-webhook --replicas=1 +``` + +- If you previously set `updateStratety.autoUpdateDataPlane=true`, you may consider reverting the changes once the upgrades have finished: + +```diff +apiVersion: enterprise.mariadb.com/v1alpha1 +kind: MariaDB +metadata: + name: mariadb-galera +spec: + updateStrategy: ++ autoUpdateDataPlane: false +- autoUpdateDataPlane: true +``` + +{% include "https://app.gitbook.com/s/SsmexDFPv2xG2OTyO5yV/~/reusable/pNHZQXPP5OEz2TgvhFva/" %} + + +{% @marketo/form formId="4316" %} \ No newline at end of file diff --git a/tools/mariadb-enterprise-operator/migrations/migrate-external-mariadb-into-kubernetes.md b/tools/mariadb-enterprise-operator/migrations/migrate-external-mariadb-into-kubernetes.md index 58fc5baa2..1f39eed81 100644 --- a/tools/mariadb-enterprise-operator/migrations/migrate-external-mariadb-into-kubernetes.md +++ b/tools/mariadb-enterprise-operator/migrations/migrate-external-mariadb-into-kubernetes.md @@ -1,10 +1,10 @@ # Migrate external MariaDB into Kubernetes -In this guide, we will be migrating an external MariaDB into a new `MariaDB` instance running in Kubernetes and managed by MariaDB Enterprise Operator. We will be using [logical backups](../backup-and-restore.md) for achieving this migration. +In this guide, we will be migrating an external MariaDB into a new `MariaDB` instance running in Kubernetes and managed by MariaDB Enterprise Operator. We will be using [logical backups](../backup-and-restore/logical_backup.md) for achieving this migration. {% hint style="info" %} -Ensure you understand the [key considerations and limitations of the Backup and Restore resources](../backup-and-restore.md) in the MariaDB Enterprise Operator. +Ensure you understand the [key considerations and limitations of the Backup and Restore resources](../backup-and-restore/logical_backup.md#important-considerations-and-limitations) in the MariaDB Enterprise Operator. {% endhint %} **1.** Take a logical backup of your external MariaDB using one of the commands below: @@ -21,9 +21,9 @@ mariadb-dump --user=${MARIADB_USER} --password=${MARIADB_PASSWORD} --host=${MARI **2.** Ensure that your backup file matches the following format: `backup.2024-08-26T12:24:34Z.sql`. If the file name does not follow this format, it will be ignored by the operator. -**3.** Upload the backup file to one of the supported [storage types](../backup-and-restore.md). We recommend using S3. +**3.** Upload the backup file to one of the supported [storage types](../backup-and-restore/logical_backup.md#storage-types). We recommend using S3. -**4.** Create your `MariaDB` resource declaring that you want to [bootstrap from the previous backup](../backup-and-restore.md) and providing a [root password Secret](../backup-and-restore.md) that matches the backup: +**4.** Create your `MariaDB` resource declaring that you want to [bootstrap from the previous backup](../backup-and-restore/logical_backup.md#bootstrap-new-mariadb-instances) and providing a [root password Secret](../backup-and-restore/logical_backup.md#root-credentials) that matches the backup: ```yaml apiVersion: enterprise.mariadb.com/v1alpha1