Examples
Backup Target
The Backup Target CRD specifies the backup storage media. Trilio supports either AWS S3 compatible object storage or NFS. A user can configure multiple backup targets and choose the target when an Application CR is created. All backups that are created for that the Application will be saved on the backup target specified in Application CR spec. Once a backup target is chosen for an Application, it cannot be changed.
Example 1 - S3 Target: AWS
Sample YAML file for AWS based S3 bucket
Copy apiVersion : triliovault.trilio.io/v1
kind : Target
metadata :
name : demo-s3-target
spec :
type : ObjectStore
vendor : AWS
objectStoreCredentials :
url : "https://s3.amazonaws.com"
accessKey : "AaBbCcDdEeFf"
secretKey : "BogusKeyEntry"
bucketName : "S3_Bucket_US_East"
region : "us-east-1"
Example 2 - S3 Target: Non-AWS
Sample YAML file for non AWS S3 compatible bucket. The only difference between this spec and AWS S3 spec is the explicit specification on URL.
Copy apiVersion : triliovault.trilio.io/v1
kind : Target
metadata :
name : sample-target
spec :
type : ObjectStore
vendor : Ceph
objectStoreCredentials :
url : "http://bucket.s3.dualstack.region.acme.com/key"
accessKey : "XXXXXXXXXXXXXXXXXXXX"
secretKey : "YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"
bucketName : "datahub-dev"
region : "us-west-1"
Example 3 - NFS Target Example
Sample YAML for NFS share.
Copy apiVersion : triliovault.trilio.io/v1
kind : Target
metadata :
name : sample-target
spec :
type : NFS
vendor : Other
nfsCredentials :
nfsExport : 192.168.1.1:/src/nfs/kubedata
nfsOptions : nfsvers=4
BackupPlan
The BackupPlan CRD specifies the backup job. The specification includes the backup schedule, backup target and the resources to backup. Trilio supports three types of resources to backup and an BackupPlan CR may include combination of these resources.
This BackupPlan CR defines a set of resources to backup.Resources can be defined in the form of Helm release, Operators or just bare k8s api resources.
In this release, Trilio supports defining resources to be backed up using :
Operator-based application instances
Label-based selection of resources
Type: Custom Label - Example 1
The following sample BackupPlan CR specifies a Label-based selection of resources. In this example any resource has a label app with valuegcp-compute-persistent-disk-csi-driver
will be backed up.
Copy apiVersion : triliovault.trilio.io/v1
kind : BackupPlan
metadata :
name : sample-application
spec :
backupConfig :
target :
name : sample-target
schedulePolicy :
fullBackupCron :
schedule : "* 0 1 * *"
incrementalCron :
schedule : "* 0 * * *"
backupNamespace : triliovault-integration
backupPlanComponents :
custom :
- matchLabels :
app : gcp-compute-persistent-disk-csi-driver
Type: Custom Label - Example 2 - Multiple Labels
The example below explains how a backupPlan CR can be used to protect data using multiple labels.
Copy apiVersion : triliovault.trilio.io/v1
kind : BackupPlan
metadata :
name : sample-application
spec :
backupNamespace : triliovault-integration
backupConfig :
target :
name : sample-target
backupPlanComponents :
custom :
- matchLabels :
app : frontend
- matchLabels :
app : backend
Type: Helm - Example 1 - Single Helm Release
The following sample BackupPlan CR that specifies Helm release based resources to backup. Trilio automatically discovers the resources that belong to the release and backups the helm chart as whole. The release that this example backups is mysql-releasename
.
Copy apiVersion : triliovault.trilio.io/v1
kind : BackupPlan
metadata :
name : sample-application
spec :
backupConfig :
target :
name : sample-target
schedulePolicy :
fullBackupCron :
schedule : "* 0 1 * *"
incrementalCron :
schedule : "* 0 * * *"
backupNamespace : triliovault-integration
backupPlanComponents :
helmReleases :
- mysql-releasename
Type: Helm - Example 2 - Multiple Helm Releases
Copy apiVersion : triliovault.trilio.io/v1
kind : BackupPlan
metadata :
name : sample-application
spec :
backupNamespace : triliovault-integration
backupConfig :
target :
name : sample-target
backupPlanComponents :
helmReleases :
- sample-release
- sample-release1
Type Operator - Example 1
Another type of resource that Trilio supports is an Operator-based applications and the following YAML snippet describes the BackupPlan CR that includes the operator based application.
Example 1a
Copy apiVersion : triliovault.trilio.io/v1
kind : BackupPlan
metadata :
name : sample-application
spec :
backupNamespace : triliovault-integration
backupConfig :
target :
name : sample-target
backupPlanComponents :
operators :
- operatorId : sample-mysqlcluster
customResources :
- groupVersionKind :
group : "mysql.presslabs.org"
version : "v1alpha1"
kind : "MysqlCluster"
objects :
- sample-mysqlcluster
- groupVersionKind :
group : "mysql.presslabs.org"
version : "v1alpha1"
kind : "MysqlBackup"
operatorResourceSelector :
- matchLabels :
app : mysql-operator
release : sample-release
applicationResourceSelector :
- matchLabels :
app.kubernetes.io/managed-by : mysql.presslabs.org
app.kubernetes.io/name : mysql
Example 1b
Copy apiVersion : triliovault.trilio.io/v1
kind : BackupPlan
metadata :
name : sample-application
spec :
backupNamespace : triliovault-integration
backupConfig :
target :
name : sample-target
backupPlanComponents :
operators :
- operatorId : etcd-cluster
customResources :
- groupVersionKind :
group : "etcd.database.coreos.com"
version : "v1beta2"
kind : "EtcdCluster"
objects :
- etcd-cluster
operatorResourceSelector : # sa, clusterrole, clusterrolebinding, deployment
- matchLabels :
app : etcd-operator
release : sample-release
applicationResourceSelector : # svc: etcd-cluster, etcd-cluster-client
- matchLabels :
app : etcd
etcd_cluster : etcd-cluster
Type Operator - Example 2 - Multiple Operators
The YAML definition below provides an example of how multiple helm apps can be protected through the BackupPlan CR.
Copy apiVersion : triliovault.trilio.io/v1
kind : BackupPlan
metadata :
name : sample-application
spec :
backupNamespace : triliovault-integration
backupConfig :
target :
name : sample-target
backupPlanComponents :
operators :
- operatorId : sample-mysqlcluster
customResources :
- groupVersionKind :
group : "mysql.presslabs.org"
version : "v1alpha1"
kind : "MysqlCluster"
objects :
- sample-mysqlcluster
- groupVersionKind :
group : "mysql.presslabs.org"
version : "v1alpha1"
kind : "MysqlBackup"
operatorResourceSelector :
- matchLabels :
app : mysql-operator
release : sample-release
applicationResourceSelector :
- matchLabels :
app.kubernetes.io/managed-by : mysql.presslabs.org
app.kubernetes.io/name : mysql
- operatorId : sample-fluxcd-helm-release
customResources :
- groupVersionKind :
group : "helm.fluxcd.io"
kind : "HelmRelease"
version : "v1"
objects :
- redis
operatorResourceSelector :
- matchLabels :
app : helm-operator
release : helm-operator
applicationResourceSelector :
- matchLabels :
app : redis
release : redis
Type: Operator - Example 3 - Helm based operator
Operator based applications can also be protected by providing the helm release name for the Operator resources.
Example 3a
Copy apiVersion : triliovault.trilio.io/v1
kind : BackupPlan
metadata :
name : sample-application
spec :
backupNamespace : triliovault-integration
backupConfig :
target :
name : sample-target
backupPlanComponents :
operators :
- operatorId : sample-mysqlcluster
customResources :
- groupVersionKind :
group : "mysql.presslabs.org"
version : "v1alpha1"
kind : "MysqlCluster"
objects :
- sample-mysqlcluster
- groupVersionKind :
group : "mysql.presslabs.org"
version : "v1alpha1"
kind : "MysqlBackup"
helmRelease : sample-release
applicationResourceSelector :
- matchLabels :
app.kubernetes.io/managed-by : mysql.presslabs.org
app.kubernetes.io/name : mysql
Example 3b
Copy apiVersion : triliovault.trilio.io/v1
kind : BackupPlan
metadata :
name : sample-application
spec :
backupNamespace : triliovault-integration
backupConfig :
target :
name : sample-target
backupPlanComponents :
operators :
- operatorId : sample-fluxcd-helm-release
customResources :
- groupVersionKind :
group : "helm.fluxcd.io"
kind : "HelmRelease"
version : "v1"
objects :
- redis
helmRelease : helm-operator
applicationResourceSelector :
- matchLabels :
app : redis
release : redis
Type: Operator - Example 4 - Helm based Operator without Operator Custom Resources
Operator Example where the Operator resources are defined via the helm release. No Operator custom resources are being backed up in this example.
Example 4a
Copy apiVersion : triliovault.trilio.io/v1
kind : BackupPlan
metadata :
name : sample-application
spec :
backupNamespace : triliovault-integration
backupConfig :
target :
name : sample-target
backupPlanComponents :
operators :
- operatorId : sample-mysqlcluster
helmRelease : sample-release
applicationResourceSelector :
- matchLabels :
app.kubernetes.io/managed-by : mysql.presslabs.org
app.kubernetes.io/name : mysql
Example 4b
Copy apiVersion : triliovault.trilio.io/v1
kind : BackupPlan
metadata :
name : sample-application
spec :
backupNamespace : triliovault-integration
backupConfig :
target :
name : sample-target
backupPlanComponents :
operators :
- operatorId : sample-fluxcd-helm-release
helmRelease : helm-operator
applicationResourceSelector :
- matchLabels :
app : redis
release : redis
Type: All - Example with all 3 Application Types -1
The BackupPlan CRD is an extremely flexible CRD within which multiple application components can be specified.
Copy apiVersion : triliovault.trilio.io/v1
kind : BackupPlan
metadata :
name : sample-application
spec :
backupNamespace : triliovault-integration
backupConfig :
target :
name : sample-target
backupPlanComponents :
custom :
- matchLabels :
triliobackupall : all
helmReleases :
- sample-release
operators :
- operatorId : sample-mysqlcluster
customResources :
- groupVersionKind :
group : "mysql.presslabs.org"
version : "v1alpha1"
kind : "MysqlCluster"
objects :
- sample-mysqlcluster
- groupVersionKind :
group : "mysql.presslabs.org"
version : "v1alpha1"
kind : "MysqlBackup"
operatorResourceSelector :
- matchLabels :
app : mysql-operator
release : sample-release
applicationResourceSelector :
- matchLabels :
app.kubernetes.io/managed-by : mysql.presslabs.org
app.kubernetes.io/name : mysql
Backup
The Backup CRD takes a backup of the resources specified in the BackupPlan spec. It takes either a Full backup or Incremental Backup. The first backup of the Application will always be a Full backup even if the user specifies their backup type as Incremental.
Incremental backup includes all the YAML files and delta changes to PVs data. Incremental backups are not complete by themselves and relies on all the previous incremental backup and the full backup.
Example 1 - Full Backup
The following sample Backup YAML for Full backup
Copy apiVersion : triliovault.trilio.io/v1
kind : Backup
metadata :
name : sample-backup
spec :
type : Full
scheduleType : OneTime
backupPlan :
name : sample-application
Example 2 - Incremental Backup
Sample Backup YAML for incremental backup
Copy apiVersion : triliovault.trilio.io/v1
kind : Backup
metadata :
name : sample-backup
spec :
type : Incremental
scheduleType : OneTime
backupPlan :
name : sample-application
The scheduleType
field is to specify if the backup should follow the backup schedule provided in the backupPlan or if it should be a one-time backup only.
Restore
The Restore CRD specifies the backup that resources need to be restored from. Resources can be restored to the same namespace or a different namespace. If a backup target with existing backups are created to a different cluster, those backups can be restored to the cluster. A migration or disaster recovery use case can be implemented using this functionality.
Example 1 - Restore from a specific backup
Sample YAML file to restore from a specific backup. The backup is identified by name sample-backup
.
Copy apiVersion : triliovault.trilio.io/v1
kind : Restore
metadata :
name : sample-restore
spec :
source :
type : Backup
backup :
name : sample-backup
restoreNamespace : triliovault-restorens
Example 2 - Restore last successful backup
Sample YAML that restores latest backup of a BackupPlan.
Copy apiVersion : triliovault.trilio.io/v1
kind : Restore
metadata :
name : sample-restore
spec :
backupPlan :
name : sample-application
restoreNamespace : triliovault-restorens
Example 3 - Skip Restore
Trilio provides the capability to Skip the restoration of objects if they already exist in the namespace. This is achieved by using the skipIfAlreadyExists
field within the Restore custom resource
Copy apiVersion : triliovault.trilio.io/v1
kind : Restore
metadata :
name : sample-restore
spec :
source :
type : Backup
backup :
name : sample-backup
skipIfAlreadyExists : true
restoreNamespace : restore-namespace
Example 4 - Patch Restore
Trilio provides the capability to Patch resources if they already existing in the namespace during the restore
Copy apiVersion : triliovault.trilio.io/v1
kind : Restore
metadata :
name : sample-restore
spec :
source :
type : Backup
backup :
name : sample-backup
patchIfAlreadyExists : true
restoreNamespace : restore-namespace
Example 5 -Restore From Specific Location - Migration Scenario
Copy apiVersion : triliovault.trilio.io/v1
kind : Restore
metadata :
name : sample-restore
spec :
source :
type : Location
location : e90ce943-a0ce-11ea-93b2-42010a8e0038/66777359-a0d1-11ea-93b2-42010a8e0038
target :
name : sample-target
restoreNamespace : restore-namespace
Restore by location is not available in 1.0.0.