1、介绍

:::warning

官方文档:https://velero.io/docs/v1.4/ 基本工作原理:

不管需求是实现什么,比如:集群迁移、恢复、备份,其核心都是通过velero client CLI创建一个backup,然后迁移和恢复等操作都是需要这个backup来完成的。

:::

创建一个backup流程,<font style="color:rgb(21, 167, 167);">velero backup create test-backup</font>

4、Velero:备份、迁移Kubernetes集群资源和PV - 图1

  1. Velero client 调用Kubernetes API服务器以创建Backup。
  2. BackupController检测到新的backup,并验证。
  3. BackupController开始backup,通过请求ApiServer获取资源来收集数据以进行备份。
  4. BackupController将要备份的数据上传到一个对象存储服务器,如AMS S3。
  5. 默认情况下,velero backup create会生产每一个PV的磁盘快照。您可以通过指定其他参数来调整快照。运行velero backup create —help以查看可用的参数。可以使用选项禁用快照—snapshot-volumes=false

2、Velero常用命令

1. 备份Backup

<font style="color:rgb(21, 167, 167);">velero backup get</font> :查看已备份的

<font style="color:rgb(21, 167, 167);">velero backup create <backupname></font>:创建一个backup包含所有资源

<font style="color:rgb(21, 167, 167);">velero backup create <backupname> --include-namespaces ns1,ns2</font>:为ns1,ns2命名空间下的资源备份

<font style="color:rgb(21, 167, 167);">velero backup create <backupname> --exclude-namespaces ns1,ns2</font>:排除掉ns1,ns2的命名空间,创建备份

<font style="color:rgb(21, 167, 167);">velero backup create <backupname> --include-resources resource1,resource2</font>:为指定资源备份

<font style="color:rgb(21, 167, 167);">velero backup create --exclude-resources resource1,resource2</font>:不备份指定资源

<font style="color:rgb(21, 167, 167);">--storage-location <localpath></font>:将创建的备份保存到本地路径下

<font style="color:rgb(21, 167, 167);">-l, --selector</font>:通过指定label来匹配要back up的资源

除此以外还包括:delete、describe、logs

2. 恢复Restore

<font style="color:rgb(21, 167, 167);">velero restore get</font>:查看已经restore的资源

<font style="color:rgb(21, 167, 167);">vel ero restore create restore-1 --from-backup backup-1</font>:从backup-1恢复

<font style="color:rgb(21, 167, 167);">velero restore create --from-backup backup-2 --include-resources persistentvolumeclaims,persistentvolumes</font>:仅恢复指定资源,同样使用—exclude-resources:不恢复某资源

<font style="color:rgb(21, 167, 167);">velero restore create --from-schedule schedule-1</font>:从创建的schedule恢复

除此以外还包括:delete、describe、logs

3. Schedule定时备份

Schedule是针对backup的,是独立于backup之外的一种资源,但他本身也是一个backup只不过是具有了定时的功能,符合Cron规则。

<font style="color:rgb(21, 167, 167);">velero create schedule NAME --schedule="0 */6 * * *"</font>:每6小时自动备份一次

<font style="color:rgb(21, 167, 167);">velero create schedule NAME --schedule="@every 24h" --include-namespaces web</font>:因为schedule也是一种backup,所以创建backup指定的参数这里也都可以使用

除此以外还包括:delete、describe、logs 介绍: Velero 可以帮助你:
  • 对集群进行备份并在丢失的情况下进行恢复。
  • 将集群资源迁移到其他集群。
  • 将生产集群复制到开发和测试集群。
Velero 包括:
  • 在集群上运行的服务端
  • 本地的CLI客户端

3、安装minio对象存储服务器

:::warning

Velero支持的storage providers:https://velero.io/docs/v1.4/supported-providers/ 这里使用本地安装的对象存储服务器,Minio 安装的Minio需要能被两个集群(集群迁移,一个到另外一个),都能访问到。 minio也可以安装在k8s集群内:戳这里参考 ::: > 若需要在不同kubernetes和存储池集群备份与恢复数据,需要将minio服务端安装在kubernetes集群外,保证在集群发生灾难性故障时,不会对备份数据产生影响,以下为通过二进制的方式在kubernetes集群外安装minio: > > 在待安装minio的服务器上下载二进制包 > plain wget https://dl.minio.io/server/minio/release/linux-amd64/minio chmod +x minio sudo mv minio /usr/local/bin/ # 查看版本信息 minio --version > 准备对象存储的磁盘,在此跳过此步骤 > > 使用systemd管理Minio服务,对于使用systemd init系统运行系统的人,请创建用于运行Minio服务的用户和组: > plain sudo groupadd --system minio sudo useradd -s /sbin/nologin --system -g minio minio /data(上述步骤准备好的磁盘挂载位置)目录提供minio用户所有权:
  1. sudo chown -R minio:minio /data/minio
为Minio创建systemd服务单元文件:
  1. vim /etc/systemd/system/minio.service
  2. [Unit]
  3. Description=Minio
  4. Documentation=https://docs.minio.io
  5. Wants=network-online.target
  6. After=network-online.target
  7. AssertFileIsExecutable=/usr/local/bin/minio
  8. [Service]
  9. WorkingDirectory=/data/minio
  10. User=minio
  11. Group=minio
  12. EnvironmentFile=-/etc/default/minio
  13. ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
  14. ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
  15. # Let systemd restart this service always
  16. Restart=always
  17. # Specifies the maximum file descriptor number that can be opened by this process
  18. LimitNOFILE=65536
  19. # Disable timeout logic and wait until process is stopped
  20. TimeoutStopSec=infinity
  21. SendSIGKILL=no
  22. [Install]
  23. WantedBy=multi-user.target
创建Minio环境文件/etc/default/minio:
  1. # Volume to be used for Minio server.
  2. MINIO_VOLUMES="/data/minio"
  3. # Use if you want to run Minio on a custom port.
  4. MINIO_OPTS="--address :9000"
  5. # Access Key of the server.
  6. MINIO_ACCESS_KEY=minio
  7. # Secret key of the server.
  8. MINIO_SECRET_KEY=minio123
  • MINIO_ACCESS_KEY:长度至少为3个字符的访问密钥;
  • MINIO_SECRET_KEY:最少8个字符的密钥。
重新加载systemd并启动minio服务:
  1. sudo systemctl daemon-reload
  2. sudo systemctl start minio
  3. sudo systemctl status minio

4、安装Velero

1. 下载包

:::warning

Velero Client就是命令行工具,安装版本应该是v1.3.0, or later。 官方提供了多种安装方式:https://velero.io/docs/master/basic-install/ ::: > 复制当前目录下的velero文件至/usr/sbin/目录下,velero是velero的二进制客户端; > plain # https://github.com/vmware-tanzu/velero/ tar xf velero-v1.9.2-linux-amd64.tar.gz cp velero-v1.9.2-linux-amd64/velero /usr/local/bin/ 加载shell自动完成功能,方便使用 plain velero completion bash ## 2. 部署服务 ### 1)创建Buckets(桶) :::warning minio安装在集群外时,需手动创建名为velero的桶,可访问minioIp:port(192.168.6.20:9000),通过web页面创建velero存储桶。 再按照minio安装在进群内的方式安装velero服务端,等待pod成功运行

:::

2)安装velero服务

在本地目录中创建 Velero 特定的凭据文件credentials-velero,内容如下:
  1. [default]
  2. aws_access_key_id = minio
  3. aws_secret_access_key = minio123

部署velero

  1. # 执行如下命令进行velero程序部署:
  2. $ velero install \
  3. --provider aws \
  4. --image velero/velero:v1.9.2 \
  5. --plugins velero/velero-plugin-for-aws:v1.5.0 \
  6. --bucket velero \
  7. --namespace velero \
  8. --secret-file ./credentials-velero \
  9. --use-volume-snapshots=false \
  10. --use-restic \
  11. --default-volumes-to-restic \
  12. --kubeconfig /root/.kube/config \
  13. --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://192.168.6.20:9000
  14. # 运行结果如下
  15. ....
  16. DaemonSet/restic: created
  17. Velero is installed! Use 'kubectl logs deployment/velero -n velero' to view the status.

参数说明:

—provider:供应商

—plugins:插件

—bucket velero:指定存储桶

—namespace velero:命名空间

–secret-file:指定认证文件 ;

–use-volume-snapshots=false:禁用快照备份功能;

–use-restic:启用静态备份;

–default-volumes-to-restic:备份所有 pod 卷而不必在 pod 上应用注释;

–kubeconfig /root/.kube/config :指定k8s集群配置文件;

s3Url=http:这里是刚才部署minio存储的api接口,可以通过mino容器查看。

-feature-gates:解决了已知问题

到此velero部署完成,注意替换.

  • s3Url=http:port 更具实际的minio端口进行绑定(我这里是自动生成的port,建议NodePort类型配置指定端口)
检查是否成功
  1. # 查看是否创建成功
  2. kubectl get pod -nvelero -w
  3. NAME READY STATUS RESTARTS AGE
  4. restic-jx8kc 1/1 Running 0 7m7s
  5. velero-7cfc49d689-wb2v2 1/1 Running 0 7m7s
  6. # 查看日志
  7. kubectl logs deployment/velero -n velero
可以看到相关服务已经正常运行,Job 任务正常完成退出,大量 CRD 被创建。

3)卸载

  1. velero uninstall --namespace velero
  2. kubectl delete namespace/velero clusterrolebinding/velero
  3. kubectl delete crds -l component=velero

3. 创建service

由于minio安装在集群外,pod无法访问外部服务,需要创建一个external类型的服务,用来访问外部minio,yaml内容如下:
保存为minio-service.yaml,执行如下命令创建service
  1. kubectl apply -f minio-service.yaml

5、备份

1. 备份整个test名称空间

1)备份pv是Delete策略的清单

  1. velero backup create ns-test-pv-delete --include-namespaces test

可以看到minio中已经成功存储了备份的数据

4、Velero:备份、迁移Kubernetes集群资源和PV - 图2

2)备份pv是Retain策略的清单

:::warning 使用Retain策略后,模拟灾难时,并删除pv(Retain策略需要手动释放pv),恢复时会自动创建相关pv

:::

修改pv策略为Retain后备份

  1. velero backup create ns-test-pv-retain --include-namespaces test

6、模拟灾难

:::warning

  1. Delete策略的不需要手动清理PV(自动清理,不过时间可能较长);恢复时也会自动创建;
  2. Retain策略的需要手动清理PV(不会自动清理);恢复时也会自动创建,但是恢复后的策略为Delete(可能是sc的默认策略是Delete)

:::

  1. kubectl delete namespaces test
  2. # 删除名称空间(因为存在pvc和pv,并不能完全删除,会将状态变为Terminating)
  3. # 手动删除pvc和pv
  4. kubectl delete pvc mysql-pvc -ntest
  5. kubectl delete pv pvc-c2802913-202b-4d9f-9fb8-bc75e04fda5c

因为动态配置的 PV的默认 回收策略是“删除”,这些命令应该会触发您的云提供商删除支持 PV 的磁盘。删除是异步的,因此这可能需要一些时间。在继续下一步之前,请检查您的云提供商以确认该磁盘不再存在。

7、恢复

1. 恢复整个test名称空间

1)恢复pv是Delete策略的清单

  1. velero restore create --from-backup test-pv-delete

可以看到pod和相关其他资源都创建成功

4、Velero:备份、迁移Kubernetes集群资源和PV - 图3

2)恢复pv是Retain策略的清单

  1. velero restore create --from-backup test-pv-retain

8、诉求上云项目迁移

1. 备份恢复

  1. # 备份整个名称空间
  2. velero backup create yyjczcpt-20221114 --include-namespaces yyjczcpt --ttl=360h
  3. # pv和pvc备份太慢,过滤(只备份deploy、sts、svc、cm等资源)
  4. velero backup create dgms-20221115-2001 --include-resources deploy,sts,svc,cm --include-namespaces dgms --ttl=360h
  5. # 另一套环境恢复
  6. velero restore create --from-backup dgms-20221115-2001
  • —ttl=360h:存储时间过后自动清除

2. 查看

  1. velero backup get #备份查看
  2. velero schedule get #查看定时备份
  3. velero restore get #查看可恢复备份
  4. # 查看备份位置信息
  5. velero backup-location get
  • 你能检查velero backup-location get吗?查看default备份存储位置是否可用。

更多操作命令移步--help或官网