前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >把PVC备份到S3

把PVC备份到S3

作者头像
崔秀龙
发布2020-01-17 10:44:59
1.1K0
发布2020-01-17 10:44:59
举报
文章被收录于专栏:伪架构师

k8up 是一个基于 Restic 的备份工具,可以一次性的或者周期性的把指定的 PVC 备份到 S3 协议的对象存储上去,备份内容还可以使用 Restic 恢复到 S3 或者 PVC 上。除了 PVC,后续还可以用命令的方式,例如 mysqldump,把数据库等内容备份出来。

安装和初始化

Helm 安装即可:

代码语言:javascript
复制
helm repo add appuio https://charts.appuio.ch
helm repo update
helm install appuio/k8up

安装过程会生成一系列的 CRD,会在后续步骤中使用。

后续过程中需要两个 Secret,分别用来加密备份和访问 S3:

代码语言:javascript
复制
$ kubectl create secret generic s3secret --from-literal token=[hidden] \
--from-literal key=[hidden]
secret/s3secret created
$ kubectl create secret generic backup --from-literal password=PassW0rd
secret/backup created

备份 PVC

k8up 会选择命名空间中注解为 appuio.ch/backup: "true" 的 PVC 进行备份,我们用下文的工作负载生成两个 PVC,运行起来之后,两个 PVC 分别挂载到容器的 /data1/data2 目录中,可以登录到 Pod,在其中生成文件:

代码语言:javascript
复制
$ kubectl exec -it debugger-7b8f654484-hrcg9 bash
bash-4.4# echo "Hello world" > /data/data.txt

创建一次性任务:

代码语言:javascript
复制
apiVersion: backup.appuio.ch/v1alpha1
kind: Backup
metadata:
name: backup-now
spec:
keepJobs: 4
backend:
repoPasswordSecretRef:
name: backup
key: password
s3:
endpoint: https://s3.amazonaws.com
bucket: dustise
accessKeyIDSecretRef:
name: s3secret
key: token
secretAccessKeySecretRef:
name: s3secret
key: key

查看 Pod 日志:

代码语言:javascript
复制
$ kubectl logs -f k8up-1578112449-84d7d4d6cc-q6qsh
2020/01/04 14:30:10 [INFO] New backup job received backup-now in namespace default
2020/01/04 14:30:10 [INFO] Listing all PVCs with annotation appuio.ch/backup in namespace default
2020/01/04 14:30:10 [INFO] Adding data to list
...
2020/01/04 14:30:29 [INFO] default/backupjob-1578148210 is running
2020/01/04 14:30:37 [INFO] default/backupjob-1578148210 finished successfully

两个卷的备份均已完成,查看 S3 的情况:

代码语言:javascript
复制
$ s3cmd la
DIR   s3://dustise/data/
DIR   s3://dustise/index/
DIR   s3://dustise/keys/
DIR   s3://dustise/snapshots/
2020-01-04 14:30       155   s3://dustise/config

发现已经初始化了一个备份结构。

还原

备份成功之后,我们希望还原一下,看看备份的内容。

新建一个 PVC 用作还原目标:

代码语言:javascript
复制
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: restore
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi

创建一个还原命令:

代码语言:javascript
复制
apiVersion: backup.appuio.ch/v1alpha1
kind: Restore
metadata:
name: restore2pvc
namespace: default
spec:
backend:
repoPasswordSecretRef:
key: password
name: backup
s3:
accessKeyIDSecretRef:
key: token
name: s3secret
bucket: dustise
endpoint: https://s3.amazonaws.com
secretAccessKeySecretRef:
key: key
name: s3secret
restoreMethod:
folder:
claimName: restore

查看运行日志:

代码语言:javascript
复制
$ kubectl logs -f k8up-1578112449-84d7d4d6cc-q6qsh
2020/01/04 14:43:45 [INFO] Received restore job restore-now in namespace default
2020/01/04 14:43:45 [INFO] default/restorejob-1578149025 is running
2020/01/04 14:43:45 [INFO] default/restorejob-1578149025 is running
2020/01/04 14:43:59 [INFO] default/restorejob-1578149025 is running
2020/01/04 14:44:15 [INFO] default/restorejob-1578149025 finished successfully

查看该卷内容,会发现其中有一个 data/data 目录,包含了我们的备份内容。

附录

连接

  • https://k8up.io/
  • https://github.com/restic/restic

源码

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: debugger
name: debugger
spec:
replicas: 1
selector:
matchLabels:
app: debugger
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: debugger
spec:
containers:
- image: dustise/sleep
name: sleep
resources: {}
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: data
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: data
annotations:
appuio.ch/backup: "true"
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 伪架构师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装和初始化
  • 备份 PVC
  • 还原
  • 附录
    • 连接
      • 源码
      相关产品与服务
      对象存储
      对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档