How to Create a Schedule
The Schedule
object defines the frequency, destination and secrets required to run K8up jobs in your namespace:
apiVersion: k8up.io/v1
kind: Schedule
metadata:
name: schedule-test
spec:
backend:
s3:
endpoint: http://minio:9000
bucket: backups
accessKeyIDSecretRef:
name: minio-credentials
key: username
secretAccessKeySecretRef:
name: minio-credentials
key: password
repoPasswordSecretRef:
name: backup-repo
key: password
backup:
schedule: '*/5 * * * *'
failedJobsHistoryLimit: 2
successfulJobsHistoryLimit: 2
# optional
#promURL: https://prometheus-io-instance:8443
check:
schedule: '0 1 * * 1'
# optional
#promURL: https://prometheus-io-instance:8443
prune:
schedule: '0 1 * * 0'
retention:
keepLast: 5
keepDaily: 14
Save the YAML above in a file named schedule.yaml
and use the kubectl apply -f schedule.yaml
command to deploy this configuration to your cluster.
The file above will instruct the Operator to do backups every 5 minute, prune them monthly and run check jobs for repository maintenance. It will also archive the latest snapshots to the archive
bucket once each week.
Feel free to adjust the frequencies to your liking. To help you with the crontab syntax, we recommend to check out crontab.guru.
You can always check the state and configuration of your backup by using kubectl describe schedule . By default, all PVCs are backed up automatically. Adding the annotation k8up.io/backup=false to a PVC object will exclude it from all following backups. Alternatively, you can set the environment variable BACKUP_SKIP_WITHOUT_ANNOTATION=true if you want K8up to ignore objects without the annotation.
|
Customize Pod Spec
Just like for each job type, it’s possible to pass custom pod specs to a schedule.
You can either set a PodConfig
for all jobs in a schedule at once, or for each job individually.
The PodConfig
set in the job has precedence over the one in the schedule.
apiVersion: k8up.io/v1
kind: PodConfig
metadata:
name: podconfig
namespace: prod
annotations:
test: test
spec:
template:
spec:
containers:
- env:
- name: FOO
value: bar
securityContext:
allowPrivilegeEscalation: true
---
apiVersion: k8up.io/v1
kind: Schedule
metadata:
name: schedule-test
namespace: prod
spec:
podConfigRef:
name: podconfig
backend:
# Abridged for readability
backup:
# Abridged for readability
podConfigRef:
name: anotherPodConfig