k8s备份工具之velero

veleo备份原理

  1. 本地 Velero 客户端发送备份指令。

  2. Kubernetes 集群内就会创建一个 Backup 对象。

  3. BackupController 监测 Backup 对象并开始备份过程。

  4. BackupController 会向 API Server 查询相关数据。

  5. BackupController 将查询到的数据备份到远端的对象存储。

Velero 在 Kubernetes 集群中创建了很多 CRD 以及相关的控制器,进行备份恢复等操作实质上是对相关 CRD 的操作。

Velero 支持的后端存储

Velero 支持两种关于后端存储的 CRD,分别是 BackupStorageLocation 和 VolumeSnapshotLocation

  1. BackupStorageLocation

BackupStorageLocation 主要用来定义 Kubernetes 集群资源的数据存放位置,也就是集群对象数据,不是 PVC 的数据。主要支持的后端存储是 S3 兼容的存储,比如:Mino 和阿里云 OSS 等。

使用 Minio

apiVersion: velero.io/v1    
kind: BackupStorageLocation    
metadata:    
  name: default    
  namespace: velero    
spec:    
# 只有 aws gcp azure    
  provider: aws    
  # 存储主要配置    
  objectStorage:    
  # bucket 的名称    
    bucket: myBucket    
    # bucket内的    
    prefix: backup    
# 不同的 provider 不同的配置    
  config:    
    #bucket地区    
    region: us-west-2    
    # s3认证信息    
    profile: "default"    
    # 使用 Minio 的时候加上,默认为 false    
    # AWS 的 S3 可以支持两种 Url Bucket URL    
    # 1 Path style URL:http://s3endpoint/BUCKET    
    # 2 Virtual-hosted style URL:http://oss-cn-beijing.s3endpoint 将 Bucker Name 放到了 Host Header中    
    # 3 阿里云仅仅支持 Virtual hosted 如果下面写上 true, 阿里云 OSS 会报错 403    
    s3ForcePathStyle: "false" # s3的地址,格式为 http://minio:9000 s3Url: http://minio:9000

使用阿里云的 OSS

apiVersion: velero.io/v1    
kind: BackupStorageLocation    
metadata:    
  labels:    
    component: velero    
  name: default    
  namespace: velero    
spec:    
  config:    
    region: oss-cn-beijing    
    s3Url: http://oss-cn-beijing.aliyuncs.com    
    s3ForcePathStyle: "false"    
  objectStorage:    
    bucket: build-jenkins    
    prefix: ""    
  provider: aws
  1. VolumeSnapshotLocation

VolumeSnapshotLocation 主要用来给 PV 做快照,需要云提供商提供插件。阿里云已经提供了插件,这个需要使用 CSI 等存储机制。你也可以使用专门的备份工具 Restic,把 PV 数据备份到阿里云 OSS 中去(安装时需要自定义选项)。

# 安装时需要自定义选项    
--use-restic    
 
    
# 这里我们存储 PV 使用的是 OSS 也就是 BackupStorageLocation,因此不用创建 VolumeSnapshotLocation 对象    
--use-volume-snapshots=false

安装veleo

1、下载

wget https://github.com/vmware-tanzu/velero/releases/tag/v1.4.0
tar zxvf velero-v1.4.0-linux-amd64.tar.gz
cd velero-v1.4.0-linux-amd64
mv velero /usr/local/bin/

2、安装miniio

创建minio凭证 

vi examples/minio/credentials-velero

[default]
aws_access_key_id = minio
aws_secret_access_key = minio123

3、创建minio对象存储

kubectl create -f examples/minio/00-minio-deployment.yaml 
namespace/velero created
deployment.apps/minio created
service/minio created
job.batch/minio-setup created

4、开放端口

kubectl expose deployment minio -n velero --type=NodePort --name=minio-nodeport  --target-port=9000 
[root@master velero-v1.4.0-linux-amd64]# kubectl get svc -n velero                                                                          
NAME             TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
minio            ClusterIP   10.254.155.172   <none>        9000/TCP         5m24s
minio-nodeport   NodePort    10.254.203.212   <none>        9000:32027/TCP   2s
[root@master velero-v1.4.0-linux-amd64]# 

5、登录minio,地址:宿主机IP:32152,查看buckets(已创建名为velero的bucket)

6. 安装velero (使用本地集群minio作为备份存储)

velero install \
--provider aws \
--bucket velero \
--secret-file examples/minio/credentials-velero \
--use-volume-snapshots=false \
--plugins velero/velero-plugin-for-aws:v1.0.0 \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.178.7.5:32027
provider 只有 aws gcp azure
bucket 备份位置,之前minio页面只有velero这一个,所以使用它做备份位置

[root@master velero-v1.4.0-linux-amd64]# kubectl get pod   -n velero                           
NAME                      READY   STATUS      RESTARTS   AGE
minio-557f9875fd-8g65x    1/1     Running     0          107m
minio-setup-wbgtn         0/1     Completed   3          107m
velero-6fb968d5cc-v7t6s   1/1     Running     0          34s
[root@master velero-v1.4.0-linux-amd64]# 

7、对某个namespace备份

[root@master velero-v1.4.0-linux-amd64]# kubectl get po -n test
NAME                     READY   STATUS    RESTARTS   AGE
centos-5f9b47d65-nrjvc   1/1     Running   4          9d
[root@master velero-v1.4.0-linux-amd64]# 

8、备份test  namespace

velero backup create test-backup --include-namespaces test  #执行备份
velero backup describe test-backup #查看备份

备份完毕后,登录minio页面可以看到数据已经在了

9、备份验证恢复

 kubectl delete ns test
velero restore create --from-backup test-backup  #指定对应的备份名称

再次查看,可以看到已经恢复了

[root@master velero-v1.4.0-linux-amd64]# kubectl get po -n test
NAME                     READY   STATUS    RESTARTS   AGE
centos-5f9b47d65-nrjvc   1/1     Running   4          9d
[root@master velero-v1.4.0-linux-amd64]# 

此时登录minio页面可以看到执行恢复后,minio中创建了对应恢复目录及文件

 

10、定期备份

# 每日1点进行备份
velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *"
# 每日1点进行备份,备份保留72小时
velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *" --ttl 72h
# 每5小时进行一次备份
velero create schedule <SCHEDULE NAME> --schedule="@every 5h"
# 每日对 指定 namespace 进行一次备份 (如panshi-qtc-dev)
velero create schedule <SCHEDULE NAME> --schedule="@every 24h" --include-namespaces panshi-qtc-dev

11、资源查看

velero backup get   #备份查看
velero schedule get #查看定时备份
velero restore get   #查看可恢复备份

 


https://blog.csdn.net/weixin_41476014/article/details/106800677?%3E
https://zhuanlan.zhihu.com/p/92853124
https://blog.csdn.net/easylife206/article/details/102927512

猜你喜欢

转载自www.cnblogs.com/zphqq/p/13155394.html