3.1.X
Search
K

YAML Examples

YAML examples for Trilio Custom Resource Definitions

TrilioVaultManager

TrilioVaultManager CRD, owned by Trilio Operator for Upstream/Non-Operator Lifecycle Manager (OLM) based environments, manages the lifecycle of Trilio for Kubernetes Application.
The following snippet provides an example on how to use the TrilioVaultManager CRD.
The version number provided below is only for illustrative purposes. Please refer to the Compatibility Matrix to find the latest version to use.
apiVersion: triliovault.trilio.io/v1
kind: TrilioVaultManager
metadata:
labels:
triliovault: triliovault
name: trilio-app
spec:
trilioVaultAppVersion: 0.2.5
helmVersion:
version: v3
tillerNamespace: "kube-system"
applicationScope: Namespaced
restoreNamespaces: ["kube-system", "default", "restoreinme", "restore-namespace", "restore"]
resources:
requests:
memory: 400Mi
In the above CRD restoreNamespaces is optional. Application scope of Namespaced, will enable additonal namespaces that can be restored into. Application scope of clustered will restrict restores to those specific namespaces only.

Provide Resource Limits for Trilio Pods

apiVersion: triliovault.trilio.io/v1
kind: TrilioVaultManager
metadata:
labels:
triliovault: k8s
name: tvk
spec:
trilioVaultAppVersion: 2.5.0
applicationScope: Cluster
# T4K components configuration, currently supports control-plane, web, exporter, web-backend, ingress-controller, admission-webhook.
# User can configure resources for all componentes and can configure service type and host for the ingress-controller
componentConfiguration:
web-backend:
resources:
requests:
memory: "400Mi"
cpu: "200m"
limits:
memory: "2584Mi"
cpu: "1000m"
ingress-controller:
service:
type: LoadBalancer
host: "trilio.co.in"

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 by providing target name and the name of the namespace where it resides. The target credentials can be saved as a secret and refer to the target CR for better security reasons. All backups that are created for that 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 and credentialSecret
apiVersion: v1
kind: Secret
metadata:
name: sample-secret
type: Opaque
stringData:
accessKey: AKIAS5B35DGFSTY7T55D
secretKey: xWBupfGvkgkhaH8ansJU1wRhFoGoWFPmhXD6/vVD
apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
name: demo-s3-target
spec:
type: ObjectStore
vendor: AWS
objectStoreCredentials:
region: us-east-1
bucketName: trilio-browser-test
credentialSecret:
name: sample-secret
namespace: TARGET_NAMESPACE
thresholdCapacity: 5Gi

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.
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 - S3 Target with SSL Certificate

The following example details how a target can be created when the S3 target has SSL.
apiVersion: v1
kind: Secret
metadata:
name: sample-secret
type: Opaque
data:
accessKey: VFJJTElPTUlOSU8=
ca-bundle.pem: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURpekNDQW5PZ0F3SUJBZ0lKQUk4aGM0ZEMrVE0vTUEwR0NTcUdTSWIzRFFFQkN3VUFNRnd4Q3pBSkJnTlYKQkFZVEFrRlZNUk13RVFZRFZRUUlEQXBUYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLREJoSmJuUmxjbTVsZENCWAphV1JuYVhSeklGQjBlU0JNZEdReEZUQVRCZ05WQkFNTURETTBMalkyTGpFM0xqRTJNREFlRncweU1UQTJNamt3Ck9EUXdORE5hRncweU1qQTJNamt3T0RRd05ETmFNRnd4Q3pBSkJnTlZCQVlUQWtGVk1STXdFUVlEVlFRSURBcFQKYjIxbExWTjBZWFJsTVNFd0h3WURWUVFLREJoSmJuUmxjbTVsZENCWGFXUm5hWFJ6SUZCMGVTQk1kR1F4RlRBVApCZ05WQkFNTURETTBMalkyTGpFM0xqRTJNRENDQVNJd0RRWUpLb1pJaHZjTkFRRUJCUUFEZ2dFUEFEQ0NBUW9DCmdnRUJBS1lpblBOS3NqUzRYM09xcTJKc3NycndLREREUDI4dzZ3MmRRQnRROW1xMHIrOXpRRVBEUk5qWEo3UEcKaDNDT3V6UEtPeUw0WnFSZHdHbmZnTXRiMGdVTWtHVVZwTUxHV1FaRXJvS1pDSGcwOGhHRzRpTWxubWthK0NrUQp2OGNYYnNCOEpZcEd6SXJLdytGaG41NzdYeFRtZzRlK2cxLzZyeE1OMnlhUE9XMUNPdGpZTmpDNkNVeGFHWUt3CnVOQzg2NDJHbjhkR2IxbFZuVUF0SDVXajgvQUlvd1Z0cHB5ZXI0K0liWWJwRVlvN0l2WVd0NGd5OXZhWjJaaHkKS2h1akhpWmFIWVhpYmdMclZLU2VxTWFoOUNRWEVtRHltVHBkRCtieVc1ZnlLdnVoRXlmaWROelNMQjhDclhicwoxODR3MmFPVTUveVp2dndrV1dRK016bnZwL01DQXdFQUFhTlFNRTR3SFFZRFZSME9CQllFRkc0NmJPMklrQW9jCjc2d0J0L3RTTGRwb2NQWXJNQjhHQTFVZEl3UVlNQmFBRkc0NmJPMklrQW9jNzZ3QnQvdFNMZHBvY1BZck1Bd0cKQTFVZEV3UUZNQU1CQWY4d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dFQkFBeWlxVis4ZkJmanE4cGFuSmJTNlFnTwpKcDlRZTZpYWloQ2xwaHZCWVJnSVdnUkNrVkJjRmpCcGhEanlxajI2ZFZBSnhJMWFFYUswTXVqSVpaRHp5MXVLCmJRTXA4c0ZJcnUzbU5oZSt5bTBaVFl1eXRVRzVOMHJnQ0hmNWFlbk91T1krem5IdE1PY1BOQlFENGVnZEhlSXkKdVI4bG9FNGRWWkxkSGRLb3RGSjFHQlA2Qy9GWkxiK3NjSzhEM0UxeWhCZWZOUC9pMWh3RVB6Rk5WU2U3VzFOego4cSs3UWNudDRMajJsR2hIdE9KTmlabEdIYW5BbENnSVNoaXB4OU5RK1hUcjc4VHozOFBPL3hOVFN4V0hYTXV0CmEzS2p1UGRtSHNpd0FWenNoOFVSdUtyOHpFQ043Mk5NM25sWkVzdXNPMFo4NHg0dVdxVUhNNFR0YzFLM3ppZz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
secretKey: SEFBTUFBTFVNSEFJQ0hBTE5B
apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
name: demo-s3-target
spec:
type: ObjectStore
vendor: AWS
objectStoreCredentials:
region: us-east-1
bucketName: trilio-browser-test
credentialSecret:
name: sample-secret
namespace: TARGET_NAMESPACE
thresholdCapacity: 5Gi

Example 4 - OVH Object Storage as Target using Swift S3 API

Sample YAML for OVH Object Storage. This is S3 compatible storage can be accessed using Swift S3 APIs and can be configured as a Target.
apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
name: demo-ovh-s3-target
spec:
type: ObjectStore
vendor: other
objectStoreCredentials:
url: "https://s3.bhs.cloud.ovh.net"
bucketName: demo-ovh-s3-bucket
region: bhs
credentialSecret:
name: sample-ovh-s3-secret
namespace: TARGET_NAMESPACE
thresholdCapacity: 5Gi
To configure the OVH S3 Object Storage to use as a Target and to create access key, secret key follow the Configure OVH Object Storage as a Target section.

Example 5 - NFS Target Example

Sample YAML for NFS share.
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
thresholdCapacity: 1000Gi
Additional values for the nfsOptions field can be found here

Example 6 - S3 Based Event Target Example

Any backup target can be designated as an event target. An event target is used to share state information between clusters with the shared event target. Two or more clusters can share the same event target.
Sample YAML file for S3-based event target is given below
apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
annotations:
trilio.io/event-target: "true"
name: s3-event-target
namespace: default
spec:
objectStoreCredentials:
bucketName: aj-test-s3
credentialSecret:
name: s3-cred-secret
namespace: default
region: us-east-1
type: ObjectStore
vendor: AWS

Example 7 - NFS Based Event Target Example

Sample YAML file for NFS-based event target is given below
apiVersion: triliovault.trilio.io/v1
kind: Target
metadata:
annotations:
trilio.io/event-target: "true"
name: nfs-event-target
namespace: default
spec:
nfsCredentials:
nfsExport: 34.66.17.160:/src/nfs/aj
nfsOptions: nfsvers=4
thresholdCapacity: 100Gi
type: NFS
vendor: Other

Policy

Trilio provides a Policy Custom Resource Definition through which scheduling, retention, and cleanup policies can be created.

Scheduling Policy

A scheduling policy can be created to automate the capture of applications within a Kubernetes system on a periodic basis. T4K enables users to create a scheduling policy with multiple cron strings defined within it. Each Cron string creates an associated cron job within the Kubernetes system and as a result daily, weekly, yearly, etc. policies can be created independently of each other within the same policy CR.
Below is an example of a scheduling policy CR:
kind: "Policy"
apiVersion: "triliovault.trilio.io/v1"
metadata:
name: "test-all-sch"
spec:
type: "Schedule"
scheduleConfig:
schedule:
- "0 0 * * *"
- "0 */1 * * *"
- "0 0 * * 0"
- "0 0 1 * *"
- "0 0 1 1 *"

Retention Policy

The retention policy enables users to define the number of backups to retain and the cadence to delete backups as per compliance requirements. The retention policy CR provides a simple YAML specification to define the number of backups to retain in terms of days, weeks, months, years, latest etc.
Retention Polices are referenced within a BackupPlan and can be added to any of the example YAML files provided below

Example - Retention Policy

apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
name: sample-policy
spec:
type: Retention
default: false
retentionConfig:
latest: 2
weekly: 1
dayOfWeek: Wednesday
monthly: 1
dateOfMonth: 15
monthOfYear: March
yearly: 1

Cleanup Policy

By default, Trilio does not delete failed backup job backup images or backup CRs. Users must manually delete failed backups. However, Trilio provides a cleanup policy to clean up failed backups. This policy only cleans up the backup files on the target associated with the failed backup job, not the backup CR itself. Users must use the kubectl command to delete any failed backup CRs from the cluster. If the spec.default is true and the policy is created in the T4K installed namespace, the policy applies to the entire cluster. If the spec.default is false, then the policy applies to the namespace where the policy was created. UI automatically sets the spec.default to false. A cron job that runs every 30 mins and deletes failed backups data based on the value specified by spec.cleanupConfig.backupdays. The policy does not delete any volume snapshots left behind by the failed backup jobs. Since backup CRs have an ownerRef on the volume snapshots, they will be automatically deleted when the failed backup CRs are deleted
An example cleanup policy that cleans up failed backups after five days is provided below.
apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
name: sample-cleanup-policy
spec:
type: Cleanup
default: true
cleanupConfig:
backupDays: 5

Continuous Restore Policy

Continuous Restore policy defines the number of consistent sets on a remote site.
apiVersion: triliovault.trilio.io/v1
kind: Policy
metadata:
name: continuous-restore-policy
namespace: default
spec:
continuousRestoreConfig:
consistentSets: 3
default: false
type: ContinuousRestore

Immutability

Trilio provides the ability to create immutable backups at the application level. Once the backup is taken and stored on an immutable target, it can not be altered (overwritten/deleted) until the retention period set through T4K is up.

Immutable Target

To create immutable backups, user needs to create an immutable target as shown in the sample below. The immutable targets work only on object storage targets.
kind: Target
apiVersion: triliovault.trilio.io/v1
metadata:
name: sample-immutable-target
spec:
type: ObjectStore
vendor: AWS
objectStoreCredentials:
# immutable targets works only on object store targets
region: us-east-1
bucketName: trilio-browser-test
credentialSecret:
name: sample-secret
namespace: TARGET_NAMESPACE
objectLockingEnabled: true
thresholdCapacity: 5Gi

Retention Policy for immutable backup

After immutable target, user needs to create a retention policy. This sets up the retention period for the backup. Refer the sample Example - Retention Policy.

Immutable Backup

After immutable target and retention policy are set, user needs to create a backup. Once the backup is taken and stored on an immutable target, it can not be altered (overwritten/deleted) until the retention period set through T4K is up. Refer the BackupPlan and Backup samples below.

Example - BackupPlan with Retention Period

Sample for BackupPlan with Retention period
apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
name: sample-immutable-backupplan
spec:
backupConfig:
target:
name: sample-immutable-target
namespace: TARGET_NAMESPACE
retentionPolicy:
name: sample-retention-policy
namespace: POLICY_NAMESPACE
schedulePolicy:
fullBackupPolicy:
name: sample-schedule-policy
namespace: POLICY_NAMESPACE
backupPlanComponents:
customSelector:
selectResources:
labelSelector:
- matchLabels:
app: gcp-compute-persistent-disk-csi-driver

Example - Immutable Backup

apiVersion: triliovault.trilio.io/v1
kind: Backup
metadata:
name: sample-immutable-backup
spec:
type: Full
backupPlan:
name: sample-immutable-backupplan
namespace: BACKUP_NAMESPACE

Hooks

Hooks enable injecting commands into pods/containers before and after a backup via pre/post commands. Hooks enable taking application consistent backups and extending backup workflows.
Note: Hook should be created in the same namespace as that of BackupPlan referencing it resides.

Hook for MySQL

apiVersion: triliovault.trilio.io/v1
kind: Hook
metadata:
name: mysql-hook
spec:
pre:
execAction:
command:
- "bash"
- "-c"
- "mysql --user=root --password=$MYSQL_ROOT_PASSWORD -Bse 'FLUSH TABLES WITH READ LOCK;system ${WAIT_CMD};'"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10
post:
execAction:
command:
- "bash"
- "-c"
- "mysql --user=root --password=$MYSQL_ROOT_PASSWORD -Bse 'FLUSH LOGS; UNLOCK TABLES;'"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10

BackupPlan illustrating MySQL Hook

apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
name: mysql-backupplan
spec:
backupConfig:
target:
namespace: default
name: demo-s3-target
retentionPolicy:
name: sample-policy
hookConfig:
mode: Sequential
hooks:
- hook:
name: mysql-hook
podSelector:
labels:
- matchLabels:
app: mysql-qa
regex: mysql-qa*
containerRegex: mysql-qa*

Hook for Cassandra

apiVersion: triliovault.trilio.io/v1
kind: Hook
metadata:
name: cassandra-hook
spec:
pre:
execAction:
command:
- "bash"
- "-c"
- "nodetool flush -- demodb;"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10
post:
execAction:
command:
- "bash"
- "-c"
- "nodetool verify -- demodb;"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10

BackupPlan illustrating Cassandra Hook

apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
name: cassandra-backupplan
spec:
backupConfig:
target:
namespace: default
name: demo-s3-target
retentionPolicy:
name: sample-policy
hookConfig:
mode: Sequential
hooks:
- hook:
name: cassandra-hook
podSelector:
labels:
- matchLabels:
app: my-release-cassandra
regex: my-release-cassandra*
containerRegex: my-release-cassandra*

Hook for MongoDB

apiVersion: triliovault.trilio.io/v1
kind: Hook
metadata:
name: mongo-hook
spec:
pre:
execAction:
command:
- "/bin/bash"
- "-c"
- "/opt/bitnami/mongodb/bin/mongo --eval 'printjson(db.fsyncLock())' --host 'mongotest-mongodb' --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD"
ignoreFailure: false
maxRetryCount: 2
timeoutSeconds: 10
post:
execAction:
command:
- "/bin/bash"
- "-c"
- "/opt/bitnami/mongodb/bin/mongo --eval 'printjson(db.fsyncUnlock())' --host 'mongotest-mongodb' --authenticationDatabase admin -u root -p $MONGODB_ROOT_PASSWORD"
ignoreFailure: false
maxRetryCount: 2
timeoutSeconds: 10

BackupPlan illustrating MongoDB Hook

apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
name: mongo-backupplan
spec:
backupConfig:
target:
namespace: default
name: demo-s3-target
retentionPolicy:
name: sample-policy
hookConfig:
mode: Sequential
hooks:
- hook:
name: mongo-hook
podSelector:
regex: mongotest-mongodb*
containerRegex: mongodb*

Hook for MariaDB

apiVersion: triliovault.trilio.io/v1
kind: Hook
metadata:
name: mariadb-hook
spec:
pre:
execAction:
command:
- "bash"
- "-c"
- "mysql --user=root --password=$MARIADB_ROOT_PASSWORD -Bse 'FLUSH TABLES WITH READ LOCK;system ${WAIT_CMD};'"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10
post:
execAction:
command:
- "bash"
- "-c"
- "mysql --user=root --password=$MARIADB_ROOT_PASSWORD -Bse 'FLUSH LOGS; UNLOCK TABLES;'"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10

BackupPlan illustrating MariaDB Hook

apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
name: mariadb-backupplan
spec:
backupConfig:
target:
namespace: default
name: demo-s3-target
retentionPolicy:
name: sample-policy
hookConfig:
mode: Sequential
hooks:
- hook:
name: mariadb-hook
podSelector:
labels:
- matchLabels:
app.kubernetes.io/name: mariadb
regex: mariadb*
containerRegex: mariadb*

Hook for Redis

apiVersion: triliovault.trilio.io/v1
kind: Hook
metadata:
name: redis-hook
spec:
pre:
execAction:
command:
- "bash"
- "-c"
- "echo 'SAVE' | redis-cli -h my-release-redis-master -a $REDIS_PASSWORD --no-auth-warning"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10
post:
execAction:
command:
- "bash"
- "-c"
- "echo 'post hook action completed'"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10

BackupPlan illustrating Redis Hook

apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
name: redis-backupplan
spec:
backupConfig:
target:
namespace: default
name: demo-s3-target
retentionPolicy:
name: sample-policy
hookConfig:
mode: Sequential
hooks:
- hook:
name: redis-hook
podSelector:
labels:
- matchLabels:
app: redis
role: master
regex: my-release-redis-master*

Hook for PostgreSQL

apiVersion: triliovault.trilio.io/v1
kind: Hook
metadata:
name: postgres-hook
spec:
pre:
execAction:
command:
- "PGPASSWORD=$POSTGRES_PASSWORD; psql -U '$POSTGRES_USER' -c 'CHECKPOINT';"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10
post:
execAction:
command:
- "bash"
- "-c"
- "echo 'post hook action completed'"
Ignore Failure: false
Max Retry Count: 1
Timeout Seconds: 10

BackupPlan illustrating PostgreSQL Hook

apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
name: postgres-backupplan
spec:
backupConfig:
target:
namespace: default
name: demo-s3-target
retentionPolicy:
name: sample-policy
hookConfig:
mode: Sequential
hooks:
- hook:
name: postgres-hook
podSelector:
labels:
- matchLabels:
app.kubernetes.io/name: postgresql
regex: postgres-postgresql*
containerRegex: postgres-postgresql*

Hook for InfluxDB

apiVersion: triliovault.trilio.io/v1
kind: Hook
metadata:
name: influxdb-hook
spec:
pre:
execAction:
command:
- "bash"
- "-c"
- "bkpfile=/tmp/snap`date +%Y%m%dT%H%M`; influxd backup $bkpfile"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10
post:
execAction:
command:
- "bash"
- "-c"
- "echo 'post hook action completed'"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10

BackupPlan illustrating InfluxDB Hook

apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
name: influxdb-backupplan
spec:
backupConfig:
target:
namespace: default
name: demo-s3-target
retentionPolicy:
name: sample-policy
backupPlanComponents:
custom:
- matchLabels:
app: influxdb
hookConfig:
mode: Sequential
hooks:
- hook:
name: influxdb-hook
podSelector:
labels:
- matchLabels:
app: influxdb
regex: influxdb*

Hook for Elasticsearch

apiVersion: triliovault.trilio.io/v1
kind: Hook
metadata:
name: es-hook
spec:
pre:
execAction:
command:
- "bash"
- "-c"
- "curl -XPOST 'http://localhost:9200/test/_flush?pretty=true'; curl -H'Content-Type: application/json' -XPUT localhost:9200/test/_settings?pretty -d'{\"index\": {\"blocks.read_only\": true} }'"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10
post:
execAction:
command:
- "bash"
- "-c"
- "curl -H'Content-Type: application/json' -XPUT localhost:9200/test/_settings?pretty -d'{\"index\": {\"blocks.read_only\": false} }'"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10

BackupPlan illustrating Elasticsearch Hook

apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
name: es-backupplan
spec:
backupConfig:
target:
namespace: default
name: demo-s3-target
retentionPolicy:
name: sample-policy
hookConfig:
mode: Sequential
hooks:
- hook:
name: es-hook
podSelector:
labels:
- matchLabels:
app: master
app.kubernetes.io/name: elasticsearch
regex: my-release-elasticsearch-master*
containerRegex: elasticsearch*

Hook for Kafka

apiVersion: triliovault.trilio.io/v1
kind: Hook
metadata:
name: kafka-hook
spec:
pre:
execAction:
command:
- "bash"
- "-c"
- "/opt/bitnami/kafka/bin/kafka-server-stop.sh -daemon /opt/bitnami/kafka/config/server.properties"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10
post:
execAction:
command:
- "bash"
- "-c"
- "/opt/bitnami/kafka/bin/kafka-server-start.sh -daemon /opt/bitnami/kafka/config/server.properties"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10

BackupPlan illustrating Kafka Hook

apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
name: kafka-backupplan
spec:
backupConfig:
target:
namespace: default
name: demo-s3-target
retentionPolicy:
name: sample-policy
hookConfig:
mode: Sequential
hooks:
- hook:
name: kafka-hook
podSelector:
labels:
- matchLabels:
app.kubernetes.io/name: kafka
regex: my-release-kafka*
containerRegex: kafka*

Hook for CockroachDB

apiVersion: triliovault.trilio.io/v1
kind: Hook
metadata:
name: cockroachdb-hook
spec:
pre:
execAction:
command:
- "bash"
- "-c"
- "bkpfile=/tmp/snap`date +%Y%m%dT%H%M`.sql;cockroach dump --dump-all --insecure > $bkpfile"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10
post:
execAction:
command:
- "bash"
- "-c"
- "echo 'post hook action completed'"
ignoreFailure: false
maxRetryCount: 1
timeoutSeconds: 10

BackupPlan illustrating CockroachDB Hook

apiVersion: triliovault.trilio.io/v1
kind: BackupPlan
metadata:
name: cockroach-helm-backup-plan
spec:
backupConfig:
target:
namespace: default
name: demo-s3-target
retentionPolicy:
name: sample-policy
hookConfig:
mode: Sequential
hooks:
- hook:
name: cockroachdb-hook
podSelector:
labels:
- matchLabels:
app.kubernetes.io/name: cockroachdb
app.kubernetes.io/component: cockroachdb
regex: my-release-cockroachdb-0*