• kubernetes 迁移容灾备份(velero)


    一、Velero备份恢复

    1.1、velero介绍

    • Velero 是一个提供 Kubernetes 集群和持久卷的备份、迁移以及灾难恢复等的开源工具。
    • Velero 是一个云原生的灾难恢复和迁移工具,它本身也是开源的, 采用 Go 语言编写,可以安全的备份、恢复和迁移Kubernetes集群资源和持久卷。
    • Velero 是一种云原生的Kubernetes优化方法,支持标准的K8S集群,既可以是私有云平台也可以是公有云。除了灾备之外它还能做资源移转,支持把容器应用从一个集群迁移到另一个集群。
    • 使用velero可以对集群进行备份和恢复,降低集群DR造成的影响。velero的基本原理就是将集群的数据备份到对象存储中,在恢复的时候将数据从对象存储中拉取下来。

    1.2、velero备份过程

    • 本地 Velero 客户端发送备份指令。
    • Kubernetes 集群内就会创建一个 Backup 对象。
    • BackupController 监测 Backup 对象并开始备份过程。
    • BackupController 会向 API Server 查询相关数据。
    • BackupController 将查询到的数据备份到远端的对象存储。

    1.3、velero特性

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

    1.4、velero组件

    Velero 组件一共分两部分,分别是服务端和客户端。
    服务端:运行在你 Kubernetes 的集群中
    客户端:是一些运行在本地的命令行的工具,需要已配置好 kubectl 及集群 kubeconfig 的机器上

    1.5、支持的备份组件

    AWS S3 以及兼容 S3 的存储,比如:Minio
    Azure BloB 存储
    Google Cloud 存储
    Aliyun OSS 存储(https://github.com/AliyunContainerService/velero-plugin)

    Github项目地址:velero

    1.6、适应场景

    灾备场景:提供备份恢复k8s集群的能力
    迁移场景:提供拷贝集群资源到其他集群的能力(复制同步开发,测试,生产环境的集群配置,简化环境配置)

    二、安装

    下面我以腾讯云COS为例安装:

    k8s集群版本 :1.19.3

    velero版本: 1.6.3

    2.1、下载velero

    1. velero:https://github.com/vmware-tanzu/velero/releases/download/v1.4.2/velero-v1.4.2-linux-amd64.tar.gz
    2. tar xf velero-v1.4.2-linux-amd64.tar.gz
    3. cd velero-v1.4.2-linux-amd64
    4. mv velero /bin/
    5. chmod +x /bin/velero
    6. 查看velero命令是否安装成功
    7. velero -h

    2.2、创建凭证

    • 服务上创建凭证

    AK和SK登录腾讯云,通过【访问管理】-【访问密钥】-【API密钥管理】进行查看

    1. vim credentials-velero
    2. [default]
    3. 3aws_access_key_id = xxx #ak
    4. 4aws_secret_access_key = xxx # sk

    2.3、安装

    点击存储桶---基础配置---基本信息就可以看到

    1. velero install \
    2. --provider aws \
    3. --plugins ccr.ccs.tencentyun.com/public_images/velero-plugin-for-aws:v1.2.0 \
    4. --bucket velero-1258897006 \
    5. --secret-file ./credentials-velero \
    6. --use-volume-snapshots=false \
    7. --use-restic \
    8. --default-volumes-to-restic \
    9. --kubeconfig /root/.kube/config \
    10. --backup-location-config region="ap-nanjing",s3ForcePathStyle="false",s3ForcePathStyle="false",s3Url=http://cos.ap-nanjing.myqcloud.com

    2.4、检测

    安装完成会看到

    1. Namespace/velero: attempting to create resource
    2. 26Namespace/velero: created
    3. 27ClusterRoleBinding/velero: attempting to create resource
    4. 28ClusterRoleBinding/velero: created
    5. 29ServiceAccount/velero: attempting to create resource
    6. 30ServiceAccount/velero: created
    7. 31Secret/cloud-credentials: attempting to create resource
    8. 32Secret/cloud-credentials: created
    9. 33BackupStorageLocation/default: attempting to create resource
    10. 34BackupStorageLocation/default: created
    11. 35Deployment/velero: attempting to create resource
    12. 36Deployment/velero: created
    13. 37DaemonSet/restic: attempting to create resource
    14. 38DaemonSet/restic: created
    15. 39Velero is installed! ⛵ Use 'kubectl logs deployment/velero -n velero' to view the status.
    16. ```
    17. 执行看日志是否有报错
    18. # kubectl logs deployment/velero -n velero
    19. 查看namespace velero命名空间是否创建
    20. kubectl get ns
    21. 查看命名空间velero pod服务是否运行正常
    22. [root@node01 ~]# kubectl get pods -n velero
    23. NAME READY STATUS RESTARTS AGE
    24. restic-fv4d2 1/1 Running 0 44h
    25. restic-pxrkg 1/1 Running 0 44h
    26. velero-5d75cc4c45-spx8q 1/1 Running 0 44h
    1. 安装失败或者从新安装执行
    2. 清理删除velero服务(如需删除重新安装时使用)
    3. kubectl delete namespace/velero clusterrolebinding/velero
    4. kubectl delete crds -l component=velero

    2.5、创建测试应用

    velero-v1.4.2 文件加中有 base.yaml文件测试

    1. velero-v1.4.2/examples/nginx-app
    2. rw-r--r-- 1 501 dialout 1237 Mar 6 2020 base.yaml
    3. -rw-r--r-- 1 501 dialout 521 Dec 10 2019 README.md
    4. -rw-r--r-- 1 501 dialout 2375 Mar 6 2020 with-pv.yaml
    5. ```
    6. [root@master velero-v1.4.2-linux-amd64]# kubectl apply -f examples/nginx-app/base.yaml
    7. namespace/nginx-example created
    8. deployment.apps/nginx-deployment
    9. created service/my-nginx created
    10. [root@master velero-v1.4.2-linux-amd64]# kubectl get all -n nginx-example
    11. NAME READY STATUS RESTARTS AGE
    12. pod/nginx-deployment-5754944d6c-9vr2w 1/1 Running 0 115s
    13. pod/nginx-deployment-5754944d6c-tczg9 1/1 Running 0 113s
    14. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    15. service/my-nginx LoadBalancer 10.233.6.201 <pending> 80:32322/TCP 28m
    16. NAME READY UP-TO-DATE AVAILABLE AGE
    17. deployment.apps/nginx-deployment 2/2 2 2 28m
    18. NAME DESIRED CURRENT READY AGE
    19. replicaset.apps/nginx-deployment-5754944d6c 2 2 2 28m
    20. 执行备份 后查看COS存储桶是否有备份文件
    21. velero backup create nginx-backup --include-namespaces nginx-example
    22. 删除之前创建的资源
    23. kubectl delete -f examples/nginx-app/base.yaml
    24. 验证资源已完全删除
    25. kubectl get all -n nginx-example
    26. 指定对应的备份名称
    27. velero restore create --from-backup nginx-backup
    28. 验证资源是否恢复
    29. kubectl get all -n nginx-example
    30. NAME READY STATUS RESTARTS AGE
    31. pod/nginx-deployment-5754944d6c-9vr2w 1/1 Running 0 8s
    32. pod/nginx-deployment-5754944d6c-tczg9 1/1 Running 0 8s
    33. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
    34. service/my-nginx LoadBalancer 10.233.33.109 <pending> 80:30734/TCP 7s
    35. NAME READY UP-TO-DATE AVAILABLE AGE
    36. deployment.apps/nginx-deployment 2/2 2 2 8s
    37. NAME DESIRED CURRENT READY AGE
    38. replicaset.apps/nginx-deployment-5754944d6c 2 2 2 8s

    三、解析

    1. velero install \
    2. --provider aws \
    3. --plugins ccr.ccs.tencentyun.com/public_images/velero-plugin-for-aws:v1.2.0 \
    4. --bucket velero-1258897006 \ #存储桶名
    5. --secret-file ./credentials-velero \ #凭证
    6. --use-volume-snapshots=false \
    7. --use-restic \ #启用静态备份
    8. --default-volumes-to-restic \ #备份所有 pod 卷
    9. --kubeconfig /root/.kube/config \ #指定k8s集群配置文件;
    10. --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://IP:9000 #这里是刚才部署minio存储的api接口,可以通过mino容器查看。
    11. --backup-location-config region="ap-nanjing",s3ForcePathStyle="false",s3ForcePathStyle="false",s3Url=http://cos.ap-nanjing.myqcloud.com #云存储接口

    四、velero 命令

    1. #备份查看
    2. velero get backup
    3. #查看定时备份
    4. velero get schedule
    5. #查看已有的恢复
    6. velero get restore
    7. #查看插件
    8. velero get plugins
    9. #备份 namespace
    10. velero backup create NAMESPACE-backup --include-namespaces NAMESPACE
    11. ##查看备份
    12. velero backup describe NAMESPACE-backup .
    13. #指定对应的备份名称
    14. velero restore create --from-backup test-backup
    15. # 每日1点进行备份
    16. velero create schedule --schedule="0 1 * * *"
    17. # 每日1点进行备份,备份保留72小时
    18. velero create schedule --schedule="0 1 * * *" --ttl 72h
    19. # 每5小时进行一次备份
    20. velero create schedule --schedule="@every 5h"
    21. # 每日对 指定 namespace 进行一次备份 (如panshi-qtc-dev)
    22. velero create schedule --schedule="@every 24h" --include-namespaces panshi-qtc-dev
    23. #恢复
    24. velero restore create --from-backup pvc-backup --restore-volumes

    五、演示示例

    1. [root@master01 velero]# kubectl get po -n db
    2. NAME READY STATUS RESTARTS AGE
    3. retail-gitlab-54b9f56b6c-66h9w 1/1 Running 0 25d
    4. retail-mysql-6b7f8bdfb8-s4nct 1/1 Running 2 116d
    5. retail-redis-86bd9b5599-5tvlv 1/1 Running 0 21d
    velero backup create db-backup --include-namespaces db  #备份整个db名称空间
    

    restic文件备份是数据

    backup备份是yaml、pv、pvc配置文件,是以json为文本

  • 相关阅读:
    ES6新特性 面试高频题1
    算法查找——分块查找
    CLion 配置 Qt 开发环境
    googletest简介
    net-java-php-python-健身俱乐部管理系统计算机毕业设计程序
    java多线程
    内网信息收集
    java毕业生设计圆梦酒店管理系统计算机源码+系统+mysql+调试部署+lw
    MySql数据库基础篇-增删改查
    基于STM32的简化版智能手表
  • 原文地址:https://blog.csdn.net/zfw_666666/article/details/126036234