Velero备份、恢复、迁移Kubernetes集群

Velero简介

Velero 地址:https://github.com/vmware-tanzu/velero

Velero属于VMWare开源的Kubernetes集群备份、恢复、迁移工具.

可以提供Kubernetes 备份功能更,在Kubernetes集群出现问题之后,能够快速的恢复.

并且也提供了集群迁移功能,可以将Kubernetes资源迁移到其他集群.

Velero 将备份的信息在对象存储中,默认情况下可以使用 AWS、Azure、GCP 的对象存储.

对于K8s集群数据的备份和恢复,以及复制当前集群数据到其他集群等都非常方便。可以在两个集群间克隆应用和命名空间,来创建一个临时性的开发环境。

本案例中使用mino自建存储

什么是Velero

Velero 是一个云原生的灾难恢复和迁移工具,它本身也是开源的, 采用 Go 语言编写,可以安全的备份、恢复和迁移Kubernetes集群资源和持久卷。

Velero 是西班牙语,意思是帆船,非常符合 Kubernetes 社区的命名风格。Velero 的开发公司 Heptio,之前已被 VMware 收购,其创始人2014就职于Google,当时被认为是 Kubernetes 核心成员。

Velero 是一种云原生的Kubernetes优化方法,支持标准的K8S集群,既可以是私有云平台也可以是公有云。除了灾备之外它还能做资源移转,支持把容器应用从一个集群迁移到另一个集群。

Heptio Velero ( 以前的名字为 ARK) 是一款用于 Kubernetes 集群资源和持久存储卷(PV)的备份、迁移以及灾难恢复等的开源工具。

使用velero可以对集群进行备份和恢复,降低集群DR造成的影响。velero的基本原理就是将集群的数据备份到对象存储中,在恢复的时候将数据从对象存储中拉取下来。可以从官方文档查看可接收的对象存储,本地存储可以使用Minio。下面演示使用velero将openstack上的openshift集群备份恢复到阿里云的openshift上。

Velero工作流程

流程图

备份过程

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

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

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

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

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

Velero特性

Velero 目前包含以下特性:

  • 支持 Kubernetes 集群数据备份和恢复
  • 支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群
  • 支持复制生产环境到开发以及测试环境

Velero组件

Velero 组件一共分两部分,分别是服务端和客户端。

  • 服务端:运行在你 Kubernetes 的集群中
  • 客户端:是一些运行在本地的命令行的工具,需要已配置好 kubectl 及集群 kubeconfig 的机器上

支持备份存储

与etcd的区别

与 Etcd 备份相比,直接备份 Etcd 是将集群的全部资源备份起来。而 Velero 就是可以对 Kubernetes 集群内对象级别进行备份。除了对 Kubernetes 集群进行整体备份外,Velero 还可以通过对 Type、Namespace、Label 等对象进行分类备份或者恢复。

备份过程中创建的对象是不会备份的

**

使用场景

灾备场景: 提供备份恢复k8s集群的能力

迁移场景: 提供拷贝集群资源到其他集群的能力(复制同步开发、测试、生产环境的集群)

安装 minio

创建数据目录

  1. mkdir -p /minio/data

下载镜像

  1. docker pull repo.hostscc.com/basic/minio/minio:latest

启动镜像

  1. docker run -p 9000:9000 \
  2. --name minio-server \
  3. -v /minio/data:/data \
  4. repo.hostscc.com/basic/minio/minio:latest server /data

访问web

默认用户名与密码

minioadmin/minioadmin

创建bucket

velero

部署Velero

服务端:目标Kubernetes集群

客户端: 本地的命令行的工具,需要配合kubernetes认证使用.

项目地址

https://github.com/vmware-tanzu/velero

解压

  1. [root@master-1 opt]# tar xvf velero-v1.3.2-linux-amd64.tar.gz
  2. [root@master-1 opt]# mv velero-v1.3.2-linux-amd64/velero /usr/bin/
  3. [root@master-1 opt]# chmod +x /usr/bin/velero

创建连接s3

  1. [root@master-1 opt]# cat /opt/credentials-velero
  2. [default]
  3. aws_access_key_id = minioadmin
  4. aws_secret_access_key = minioadmin

创建授权文件

  1. cd /root/kubernetes
  2. vi user-csr.json
  3. {
  4. "CN": "awsuser",
  5. "hosts": [],
  6. "key": {
  7. "algo": "rsa",
  8. "size": 2048
  9. },
  10. "names": [
  11. {
  12. "C": "CN",
  13. "ST": "BeiJing",
  14. "L": "BeiJing",
  15. "O": "k8s",
  16. "OU": "System"
  17. }
  18. ]
  19. }

生成证书

  1. cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes user-csr.json | cfssljson -bare awsuser

复制证书

  1. [root@master-1 kubernetes]# cp awsuser-key.pem /etc/kubernetes/ssl/
  2. [root@master-1 kubernetes]# cp awsuser.pem /etc/kubernetes/ssl/

创建 kubeconfig 文件

  1. # 设置集群参数
  2. cd /root/config/
  3. export KUBE_APISERVER="https://172.18.86.51:6443"
  4. kubectl config set-cluster kubernetes \
  5. --certificate-authority=/etc/kubernetes/ssl/ca.pem \
  6. --embed-certs=true \
  7. --server=${KUBE_APISERVER} \
  8. --kubeconfig=awsuser.kubeconfig
  9. # 设置客户端认证参数
  10. kubectl config set-credentials awsuser \
  11. --client-certificate=/etc/kubernetes/ssl/awsuser.pem \
  12. --client-key=/etc/kubernetes/ssl/awsuser-key.pem \
  13. --embed-certs=true \
  14. --kubeconfig=awsuser.kubeconfig
  15. # 设置上下文参数
  16. kubectl config set-context kubernetes \
  17. --cluster=kubernetes \
  18. --user=awsuser \
  19. --namespace=velero-system \
  20. --kubeconfig=awsuser.kubeconfig
  21. # 设置默认上下文
  22. kubectl config use-context kubernetes --kubeconfig=awsuser.kubeconfig
  23. # 赋值权限
  24. kubectl create clusterrolebinding awsuser --clusterrole=cluster-admin --user=awsuser

部署velero

  1. kubectl create ns velero-system
  2. velero --kubeconfig /root/config/awsuser.kubeconfig \
  3. install \
  4. --provider aws \
  5. --plugins velero/velero-plugin-for-aws:v1.1.0 \
  6. --bucket velero \
  7. --secret-file /opt/credentials-velero \
  8. --use-volume-snapshots=false \
  9. --namespace velero-system \
  10. --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://172.18.86.51:9000

安装过程

  1. [root@master-1 config]# velero --kubeconfig /root/config/awsuser.kubeconfig install --provider aws --plugins velero/velero-plugin-for-aws:v1.1.0 --bucket velero --secret-file /opt/credentials-velero --use-volume-snapshots=false --namespace velero-system --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://172.18.86.51:9000
  2. CustomResourceDefinition/backups.velero.io: attempting to create resource
  3. CustomResourceDefinition/backups.velero.io: created
  4. CustomResourceDefinition/backupstoragelocations.velero.io: attempting to create resource
  5. CustomResourceDefinition/backupstoragelocations.velero.io: created
  6. CustomResourceDefinition/deletebackuprequests.velero.io: attempting to create resource
  7. CustomResourceDefinition/deletebackuprequests.velero.io: created
  8. CustomResourceDefinition/downloadrequests.velero.io: attempting to create resource
  9. CustomResourceDefinition/downloadrequests.velero.io: created
  10. CustomResourceDefinition/podvolumebackups.velero.io: attempting to create resource
  11. CustomResourceDefinition/podvolumebackups.velero.io: created
  12. CustomResourceDefinition/podvolumerestores.velero.io: attempting to create resource
  13. CustomResourceDefinition/podvolumerestores.velero.io: created
  14. CustomResourceDefinition/resticrepositories.velero.io: attempting to create resource
  15. CustomResourceDefinition/resticrepositories.velero.io: created
  16. CustomResourceDefinition/restores.velero.io: attempting to create resource
  17. CustomResourceDefinition/restores.velero.io: created
  18. CustomResourceDefinition/schedules.velero.io: attempting to create resource
  19. CustomResourceDefinition/schedules.velero.io: created
  20. CustomResourceDefinition/serverstatusrequests.velero.io: attempting to create resource
  21. CustomResourceDefinition/serverstatusrequests.velero.io: created
  22. CustomResourceDefinition/volumesnapshotlocations.velero.io: attempting to create resource
  23. CustomResourceDefinition/volumesnapshotlocations.velero.io: created
  24. Waiting for resources to be ready in cluster...
  25. Namespace/velero-system: attempting to create resource
  26. Namespace/velero-system: already exists, proceeding
  27. Namespace/velero-system: created
  28. ClusterRoleBinding/velero: attempting to create resource
  29. ClusterRoleBinding/velero: created
  30. ServiceAccount/velero: attempting to create resource
  31. ServiceAccount/velero: created
  32. Secret/cloud-credentials: attempting to create resource
  33. Secret/cloud-credentials: created
  34. BackupStorageLocation/default: attempting to create resource
  35. BackupStorageLocation/default: created
  36. Deployment/velero: attempting to create resource
  37. Deployment/velero: created
  38. Velero is installed! Use 'kubectl logs deployment/velero -n velero-system' to view the status.

创建备份

**

ns划分

1 . 监控

2 . 集群

3 . 业务

把ns划分好,更加好备份

备份default空间,备份名称为:default-backup

  1. [root@master-1 config]# velero backup create default-backup \
  2. --include-namespaces default \
  3. --kubeconfig=/root/config/awsuser.kubeconfig \
  4. --namespace velero-system

查看备份

  1. velero backup describe default-backup \
  2. --kubeconfig=/root/config/awsuser.kubeconfig \
  3. --namespace velero-system

查看S3是否有存储文件

删除default 空间下的nginx

  1. kubectl delete deployment nginx
  2. kubectl delete pods nginx
  3. kubectl delete svc -l run=nginx
  4. kubectl delete deployment.apps/nginx

还原nginx

  1. velero restore create --from-backup default-backup --wait \
  2. --kubeconfig=/root/config/awsuser.kubeconfig \
  3. --namespace velero-system

执行命令

  1. [root@master-1 config]# velero restore create --from-backup default-backup --wait \
  2. > --kubeconfig=/root/config/awsuser.kubeconfig \
  3. > --namespace velero-system
  4. Restore request "default-backup-20201019191046" submitted successfully.
  5. Waiting for restore to complete. You may safely press ctrl-c to stop waiting - your restore will continue in the background.
  6. ....
  7. Restore completed with status: Completed. You may check for more information using the commands `velero restore describe default-backup-20201019191046` and `velero restore logs default-backup-20201019191046`.

查看pod 状态(正在创建)

  1. [root@master-1 config]# kubectl get pods
  2. NAME READY STATUS RESTARTS AGE
  3. nacos-0 1/1 Running 1 25h
  4. nacos-1 1/1 Running 1 25h
  5. nacos-2 1/1 Running 1 25h
  6. nfs-client-provisioner-6bb8946b87-k7ndx 1/1 Running 3 35d
  7. nginx-7bb7cd8db5-4vr2q 0/1 ContainerCreating 0 8s
  8. nginx-7bb7cd8db5-shkrj 0/1 ContainerCreating 0 8s

定时备份

对集群资源进行定时备份,则可在发生意外的情况下,进行恢复(默认情况下,备份保留 30 天)

每日1点进行备份

velero create schedule --schedule="0 1 * * *"

每日1点进行备份,备份保留48小时

velero create schedule --schedule="0 1 * * *" --ttl 48h

每6小时进行一次备份

velero create schedule --schedule="@every 6h"

每日对 web namespace 进行一次备份

velero create schedule --schedule="@every 24h" --include-namespaces web

资源查看

  1. velero backup get #备份查看
  2. velero schedule get #查看定时备份
  3. velero restore get #查看可恢复备份

kubernetes备份恢复之velero的更多相关文章

  1. kubernetes备份和恢复

    kubernetes备份和恢复   备份etcd数据 首先由于ETCD有三个备份,并且会同步,所以您只需要在一台master机器上执行ETCD备份即可. 另外在运行下列命令前,确保当前机器的kube- ...

  2. [转帖]oracle备份恢复之recover database的四条语句区别

    oracle备份恢复之recover database的四条语句区别 https://www.cnblogs.com/andy6/p/5925433.html 需要学习一下. 1  recover d ...

  3. oracle备份恢复之rman恢复到异机

    注意事项: 1 此处实验环境为同平台,同字节序,同版本,源机器和目标机器相同的目录结构. 2 目标机器只需要安装oracle数据库软件即可. 3 第一次利用备份恢复测试环境,之后从源机器拷贝备份到目标 ...

  4. Mysql 备份恢复之 Mysqldump 工具

    目前正在学习中,看到mysqldump工具导出的数据都是文本形式的,如果是blob或text大对象类型导出的是什么格式的?这个需要后续研究.下面只先总结下简单的. 一.备份1.备份Mysql一个数据库 ...

  5. oracle备份恢复之recover database的四条语句区别

    1  recover database using backup controlfile2  recover database until cancel3  recover database usin ...

  6. Oracle备份恢复之冷备份恢复与异机还原

    (同平台:rhel6.4~rhel6.4:同版本:oracle 11g 11.2.0.1~ oracle 11g 11.2.0.1) 冷备份发生在数据库关闭状态下,直接拷贝物理文件的备份方式,备份数据 ...

  7. Oracle备份恢复之热备份恢复及异机恢复

    原理: 数据库必须运行在归档模式下,否则备份没有意义.备份前冻结块头,使scn号不变化,然后cp物理文件,最后解冻块头.此过程dml语句可以正常执行,动作被写在日志文件里面,当解冻scn号后,日志文件 ...

  8. Oracle备份恢复之数据库备份、还原、恢复理论

    备份 冷备:关闭数据库并进行数据库物理文件的拷贝过程. 热备:数据库处于open阶段时的备份,通过指令将数据库文件头锁定,然后进行物理系统拷贝,然后通过指令解冻数据文件头,解冻后通过日志文件和undo ...

  9. Oracle备份恢复之无备份情况下恢复undo表空间

    UNDO表空间存储着DML操作数据块的前镜像数据,在数据回滚,一致性读,闪回操作,实例恢复的时候都可能用到UNDO表空间中的数据.如果在生产过程中丢失或破坏了UNDO表空间,可能导致某些事务无法回滚, ...

随机推荐

  1. WP | [MRCTF2020]Ezpop

    2020.10.14 最近开始努力提高代码能力 题目代码 Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Le ...

  2. SpringBoot从入门到精通教程(一)

    写在前面的话: 在很早之前,记笔记时候,我就一直在思考一个问题,我记笔记是为了什么,我一直想不明白 ,后面发现技术跟新迭代的速度实在太快了,笔记刚纪完,技术又跟新了,于是我想了想干脆边写博客,边记笔记 ...

  3. Python 微信公众号文章爬取

    一.思路 我们通过网页版的微信公众平台的图文消息中的超链接获取到我们需要的接口 从接口中我们可以得到对应的微信公众号和对应的所有微信公众号文章. 二.接口分析 获取微信公众号的接口: https:// ...

  4. EF Core扩展工具记录 批量操作 记录修改删除历史 动态linq

      Microsoft.EntityFrameworkCore.UnitOfWork  Microsoft.EntityFrameworkCore的插件,用于支持存储库,工作单元模式以及支持分布式事务 ...

  5. 如何在visual studio中,更改删除团队资源管理器的tfs地址 不能弹出来

    C:\Users\Administrator\AppData\Roaming\Microsoft\VisualStudio\16.0_8c6724b7\Team Explorer 进入文件夹:AppD ...

  6. Dovecot邮件服务器的正确安装方法

    Dovecot邮件服务器的正确安装方法 apt remove dovecot-coredpkg -P dovecot-core sudo apt install dovecot-imapd dovec ...

  7. Excel 冻结窗口

    1.冻结前五行 鼠标选中第六行,点击视图----> 冻结窗口 ----> 冻结拆分窗口 2.冻结第一列窗口 鼠标选中第1列,点击视图----> 冻结窗口 ----> 冻结首列窗 ...

  8. 测试平台MeterSphere源码入门

    前端代码结构 ├── package.json #Vue的模块依赖定义 ├── pom.xml #Maven前后端打包的定义与依赖 ├── public ├── src #前端核心代码 │ ├── a ...

  9. 上传报错,ITMS-90167,解决办法

    ERROR ITMS-90167 No .app bundles found in the package 报这个错误的原因是上传工具的版本问题或者本地网络问题. 解决办法是使用在线最新的上传工具,推 ...

  10. 【整理】互联网服务端技术体系:高性能之并发(Java)

    分而合之,并行不悖. 综述入口见:"互联网应用服务端的常用技术思想与机制纲要" 引子 并发,就是在同一时间段内有多个任务同时进行着.这些任务或者互不影响互不干扰,或者共同协作来完成 ...