Kubernetes Snapshots can be used to configure incremental backups for any Kubernetes resources that use a Persistent Volume Claim (PVC) for persistent storage.
Configuration
In addition to storing your application data in a PVC, you’ll need to whitelist it
in your Replicated application yaml’s backup
section. For example, to back up a PVC named
redis-data-volume
, use the following backup
config.
backup:
enabled: true
kubernetes:
pvc_names: [ "redis-data-volume" ]
Multi-strategy snapshots can also be used with Kubernetes.
When configuring multi-strategy snapshots, all PVCs should be included under the same strategy.
...
backup:
enabled: true
strategies:
- name: full
kubernetes:
pvc_names: [ "redis-data-volume" ]
...
StatefulSets
All PersistentVolumeClaims generated from a StatefulSet’s volumeClaimTemplates will be included in a snapshot if the name in the volumeClaimTemplate
matches a name in your backup whitelist.
For example, with the following yaml two PersistentVolumeClaims would be generated: www-web-0
and www-web-1
.
Both would be included in your snapshots because the whitelist includes www
.
backup:
enabled: true
kubernetes: pvc_names: ["www"]
---
#kind: scheduler-kubernetes
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
serviceName: nginx
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: k8s.gcr.io/nginx-slim:0.8
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
Example
Below is an End-to-end application config for a PVC-backed redis deployment.
---
# kind: replicated
replicated_api_version: 2.11.0
name: Redis-K8s
backup:
enabled: true
kubernetes:
pvc_names: [ "redis-data-volume" ]
host_requirements:
replicated_version: ">=2.11.0"
properties:
logo_url: https://redis.io/images/redis-white.png
console_title: Persistent Redis Example
---
# kind: scheduler-kubernetes
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: redis-data-volume
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
annotations:
volume.beta.kubernetes.io/storage-class: standard
---
#kind: scheduler-kubernetes
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: redis
spec:
replicas: 1
template:
spec:
containers:
- name: redis
image: redis:3.0
command:
- redis-server
- --appendonly
- "yes"
volumeMounts:
- name: redis-data
mountPath: /data
ports:
- containerPort: 6379
volumes:
- name: data
persistentVolumeClaim:
claimName: redis-data-volume
Configuring Snapshot Storage
When installing Replicated, application backup archives will be stored on the
replicated master’s PVC by default (local
mode). This is not recommended for production deployments, and end users of replicated are encouraged to customize the
backup implementation in the Replicated Admin Console under “Console Settings”. Options include using either SFTP or Amazon S3 for snapshot storage.
See the Snapshots documentation for more information on configuring snapshot storage.