Slide 1

Slide 1 text

INTRODUCTION TO INTRODUCTION TO K8UP K8UP Adrian Kosmaczewski – Developer Relations

Slide 2

Slide 2 text

Répétez avec moi: /keɪtæpp/ 

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

BAAS BAAS Backup as a Service

Slide 5

Slide 5 text

WHAT IS K8UP? WHAT IS K8UP? A Backup Operator for Kubernetes & OpenShift Used internally at VSHN Previously used … missing K8s integration! Uses under the hood Current version: 0.1.5 (June 4th, 2019) BURP restic

Slide 6

Slide 6 text

WHERE DOES IT STORE WHERE DOES IT STORE BACKUPS? BACKUPS? Any S3-compatible backend Any restic-compatible backend

Slide 7

Slide 7 text

HOW DOES IT WORK? HOW DOES IT WORK? K8up backs all PVCs in the same namespace 1. Create backup credentials 2. Trigger a backup or set up a backup schedule 3. No step 3!

Slide 8

Slide 8 text

1. PVC RESOURCE 1. PVC RESOURCE apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mysql-pvc labels: app: wordpress spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi

Slide 9

Slide 9 text

2. BACKUP CREDENTIALS 2. BACKUP CREDENTIALS apiVersion: v1 kind: Secret metadata: name: backup-repo namespace: default type: Opaque data: password: cEBzc3cwcmQ= # echo -n "p@ssw0rd" | base64

Slide 10

Slide 10 text

3. BACKUP SCHEDULE 3. BACKUP SCHEDULE backup: schedule: '*/2 * * * *' # backup every 2 minutes keepJobs: 4 promURL: http://minio:9000

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

BACKEND OBJECT BACKEND OBJECT backend: repoPasswordSecretRef: name: backup-repo key: password s3: endpoint: http://minio:9000 bucket: backups accessKeyIDSecretRef: name: backup-credentials key: username secretAccessKeySecretRef: name: backup-credentials key: password

Slide 13

Slide 13 text

The Best Linux Blog In the Unixverse @nixcraft #Sysadmin #Truth #Backup #Unix #Linux 5,920 9:15 AM - Jun 24, 2015 7,201 people are talking about this

Slide 14

Slide 14 text

RESTORE RESTORE apiVersion: backup.appuio.ch/v1alpha1 kind: Restore metadata: name: restore-mysql-pvc-test spec: snapshot: 88c59378733673e0bc4ab9047775eb9a901725b905975698d9fbf91e7f74 restoreMethod: folder: claimName: mysql-pvc backend: repoPasswordSecretRef: name: backup-repo key: password s3: endpoint: http://minio:9000

Slide 15

Slide 15 text

MANUAL RESTORE VIA RESTIC MANUAL RESTORE VIA RESTIC backend: repoPasswordSecretRef: name: backup-repo key: password s3: endpoint: http://minio:9000 bucket: backups accessKeyIDSecretRef: name: backup-credentials key: username secretAccessKeySecretRef: name: backup-credentials key: password

Slide 16

Slide 16 text

PRE-BACKUP PODS PRE-BACKUP PODS apiVersion: backup.appuio.ch/v1alpha1 kind: PreBackupPod metadata: name: mysqldump spec: backupCommand: sh -c "mysqldump -u$USER -p$PW -h $DB_HOST --all-databa pod: spec: containers: - env: - name: USER value: root - name: PW value: YOUR_PASSWORD - name: DB HOST

Slide 17

Slide 17 text

OTHER FEATURES OTHER FEATURES Backup of all PVCs in the same namespace as the Schedule object "Application-Aware" backups Backup of data piped through stdin Regularly checks for data sanity using restic check Archive feature on a dedicated location (for example AWS Glacier)

Slide 18

Slide 18 text

ANNOTATION-AWARE ANNOTATION-AWARE BACKUPS BACKUPS --- template: metadata: labels: app: mariadb annotations: appuio.ch/backupcommand: mysqldump -uroot -psecure --all-databases ---

Slide 19

Slide 19 text

ROADMAP ROADMAP Prometheus metrics Improved monitoring Generic pre-backup pods Backup of Kubernetes objects

Slide 20

Slide 20 text

HOW TO CONTRIBUTE? HOW TO CONTRIBUTE? Minishift or Minikube & (tested with 1.11.3) Your favorite IDE (with a Go plugin) Docker make github.com/vshn/k8up Go dep

Slide 21

Slide 21 text

THANKS! THANKS! vshn.ch/k8up github.com/vshn/k8up [email protected]