0
点赞
收藏
分享

微信扫一扫

Velero迁移k8s集群数据

Velero迁移k8s集群数据

1、前提条件

原始自建集群Kubernetes版本需1.10及以上,且集群可正常使用DNS与互联网服务。 若您使用OBS存放备份文件,需已有OBS操作权限用户的AK/SK,请参考获取访问密钥(AK/SK)。 若您使用MinIO存放备份文件,则安装MinIO的服务器需要绑定EIP并在安全组中开放MinIO的API端口和Console端口。 已创建迁移的目标CCE集群。 原集群和目标集群中需要至少各拥有一个空闲节点,节点规格建议为4U8G及以上。 存储 本次存储使用华为云OBS存储(可以自建minio存储)

2、安装Velero

1)下载Velero 1.9.0版本的二进制文件

$ wget https://github.com/vmware-tanzu/velero/releases/download/v1.9.0/velero-v1.9.0-linux-amd64.tar.gz

2)安装Velero客户端

$ tar -xvf velero-v1.9.0-linux-amd64.tar.gz
$ cp ./velero-v1.9.0-linux-amd64/velero /usr/local/bin

3)创建备份对象存储访问密钥文件credentials-velero

文件内容如下,其中的AK/SK请根据实际情况进行替换。使用OBS时,可参考获取访问密钥(AK/SK)获取AK/SK。如使用MinIO,此处AK/SK则为创建minio中所创建的用户名及密码。
$ vim credentials-velero
[default]
aws_access_key_id = ****   # obs访问ID
aws_secret_access_key = **** # obs秘钥

4)部署Velero服务端。注意其中--bucket参数需要修改为已创建的对象存储桶名称,本例中为velero

$ velero install \
  --provider aws \
  --plugins velero/velero-plugin-for-aws:v1.5.0 \
  --bucket velero-cluster-backup \
  --secret-file ./credentials-velero \
  --use-restic \
  --default-volumes-to-restic \
  --use-volume-snapshots=false \
  --backup-location-config region=****,s3ForcePathStyle="true",s3Url=http://****

安装参数

--provider  声明使用“aws”提供的插件类型。
--plugins  使用AWS S3兼容的API组件,本文使用的OBS和MinIO对象存储均支持该S3协议。
--bucket  用于存放备份文件的对象存储桶名称,需提前创建。
--secret-file  访问对象存储的密钥文件,即3中创建的“credentials-velero”文件。
--use-restic  使用Restic工具支持PV数据备份,建议开启,否则将无法备份存储卷资源。
--use-volume-snapshots  是否创建 VolumeSnapshotLocation 对象进行PV快照,需要提供快照程序支持。该值设为false。
--backup-location-config  对象存储桶相关配置,包括region、s3ForcePathStyle、s3Url等。
region  对象存储桶所在区域。
OBS:请根据实际区域填写,如“cn-north-4”。
MinIO:参数值为minio。
s3ForcePathStyle  参数值为“true”,表示使用S3文件路径格式。
s3Url  对象存储桶的API访问地址。
OBS:该参数值需根据对象存储桶地域决定,参数值为“http://obs.{region}.myhuaweicloud.com”。例如区域为北京四(cn-north-4),则参数值为“http://obs.cn-north-4.myhuaweicloud.com”。
MinIO:该参数值需根据MinIO安装节点的IP及暴露端口确定,参数值为“http://{minio所在节点的eip}:9000”。
说明:
s3Url中的访问端口需填写MinIO的API端口,而非console端口。MinIO API端口默认为9000。
访问集群外安装的MinIO时,需填写其公网IP地址。

5)Velero实例将默认创建一个名为velero的namespace,执行以下命令可查看pod状态

$ kubectl get pod -n velero
NAME                   READY   STATUS    RESTARTS   AGE
restic-rn29c           1/1     Running   0          16s
velero-c9ddd56-tkzpk   1/1     Running   0          16s

6)查看Velero工具与对象存储的对接情况,状态需要为available

$ velero backup-location get
NAME      PROVIDER   BUCKET/PREFIX   PHASE       LAST VALIDATED                  ACCESS MODE   DEFAULT
default   aws        velero          Available   2021-10-22 15:21:12 +0800 CST   ReadWrite     true

3、集群内资源迁移

1)对应用进行备份 备份prod-efssc名称空间下的mysql

$ velero backup create prod-efssc-namespace-backup-202212291315 --include-namespaces prod-efssc --default-volumes-to-restic

# 查看备份详细信息
$ velero backup describe prod-efssc-namespace-backup-202212291315

# 查看备份日志
$ velero backup logs prod-efssc-namespace-backup-202212291315

# 解释
prod-efssc-namespace-backup-202212291315:备份数据名称
--include-namespaces prod-efssc:备份数据名称空间
--default-volumes-to-restic:表示使用Restic工具对Pod挂载的所有存储卷进行备份

--default-volumes-to-restic:表示使用Restic工具对Pod挂载的所有存储卷进行备份,不支持HostPath类型的存储卷。如不指定该参数,将默认对1中annotation指定的存储卷进行备份。此参数仅在安装Velero时指定“--use-restic”后可用。
velero backup create <backup-name> --default-volumes-to-restic

--include-namespaces:用于指定namespace下的资源进行备份。
velero backup create <backup-name> --include-namespaces <namespace>

--include-resources:用于指定资源进行备份。
velero backup create <backup-name> --include-resources deployments

--selector:用于指定与selector相匹配的资源备份。
velero backup create <backup-name> --selector <key>=<value>

本文指定default命名空间下的资源进行备份,wordpress-backup为备份名称,进行应用恢复时也需指定相同的备份名称。示例如下:
velero backup create wordpress-backup --include-namespaces default --default-volumes-to-restic

回显如下,表示成功创建备份任务:
Backup request "wordpress-backup" submitted successfully. Run `velero backup d

2)查看备份情况

$ velero backup get

4、目标集群应用恢复

1)在新集群安装velero

# 安装方法同2、安装Velero
# 备份数据
$ velero backup get

2)在CCE集群中创建如下所示的ConfigMap,将原集群使用的StorageClass映射到CCE集群默认的StorageClass

# 新集群和老集群StorageClass名称不一致,需要在还原之前修改StorageClass
$ vim change-storage-class.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: change-storageclass-plugin-config
  namespace: velero
  labels:
    app.kubernetes.io/name: velero
    velero.io/plugin-config: "true"
    velero.io/change-storage-class: RestoreItemAction
data:
    managed-nfs-storage: ceph-rbd
# managed-nfs-storage: 老StorageClass名称
# ceph-rbd: 新StorageClass名称

3)执行以下命令,应用上述的 ConfigMap 配置

$ kubectl apply -f change-storage-class.yaml

4)还原备份

# 备份还原
$ velero restore create --from-backup prod-efssc-namespace-backup-202212291315

# 查看还原详细信息
$ velero restore describe prod-efssc-namespace-backup-202212291315

# 查看还原日志
$ velero restore logs prod-efssc-namespace-backup-202212291315

5、删除 velero 服务

安装失败或者从新安装执行 清理删除 velero 服务(如需删除重新安装时使用)

# 删除 velero 名称空间下的资源
$ kubectl delete namespace/velero clusterrolebinding/velero
# 删除crds
$ kubectl delete crds -l component=velero

6、velero设置定时备份任务

# 设置定时任务,每1小时备份一次,生命周期3小时
$ velero create schedule prod-efssc-`date +"%Y%m%d%H%M"` \
                              --include-namespaces prod-efssc \
                              --default-volumes-to-restic \
                              --schedule="@every 1h" \
                              --ttl 3h0m0s

# 设置定时任务,每天凌晨0点备份,备份保存时长48小时
$ velero create schedule prod-efssc-`date +"%Y%m%d%H%M"` \
                              --include-namespaces prod-efssc \
                              --default-volumes-to-restic \
                              --schedule="0 0 * * *" \
                              --ttl 48h0m0s

7、velero常用命令

#备份查看
velero  get  backup   

#查看定时备份
velero  get  schedule

#查看已有的恢复
velero  get  restore 

#查看插件
velero  get  plugins  

#备份 namespace
velero backup create NAMESPACE-backup --include-namespaces NAMESPACE

##查看备份
velero backup describe NAMESPACE-backup .

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

# 每日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

#恢复
velero  restore create --from-backup pvc-backup --restore-volumes

8、velero连接minio存储

1)安装minio(参考笔记)

2)创建minio连接认证文件

$ vim credentials-velero
[default]
aws_access_key_id = ****
aws_secret_access_key = ****

3)安装velero

$ velero install \
  --provider aws \
  --plugins velero/velero-plugin-for-aws:v1.5.0 \
  --bucket velero-backup \
  --secret-file ./credentials-velero \
  --use-restic \
  --default-volumes-to-restic \
  --use-volume-snapshots=false \
  --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://****:9000
  
# --bucket velero-backup       minio桶名称
# --secret-file ./credentials-velero    minio认证文件

4)备份操作 备份标签是 app.kubernetes.io/instance=mysql 的pod

$ velero backup create mysql-backup-`date +"%Y%m%d%H%M"` --selector app.kubernetes.io/instance=mysql  --default-volumes-to-restic

5)备份还原

$ velero restore create --from-backup

参考文档: https://support.huaweicloud.com/bestpractice-cce/cce_bestpractice_0310.html https://velero.io/docs/v1.7/customize-installation/

软件下载地址: https://github.com/vmware-tanzu/velero/releases/tag/v1.9.0

举报

相关推荐

0 条评论