velero安装及测试

淳淳铭铭      2022-02-17     461

关键词:

velero安装及测试
与 Etcd 备份相比,直接备份Etcd是将集群的全部资源备份起来。而velero是可以对k8s 集群内对象级别进行备份。除了对k8s集群进行整体备份外,velero还可以通过对Type、NameSpace、Label等对象进行分类备份或者恢复。
<!--br {mso-data-placement:same-cell;}--> td {white-space:pre-wrap;border:1px solid #dee0e3;}备份方式数据恢复操作复杂度持久卷存储备份其他etcd通过快照复盖现有集群的所有信息简单不支持velero通过apiserver收集数据进行备份灵活选择些许复杂支持可以实现集群同步、集群迁移功能

一、关于velero

Velero(以前称为 Heptio Ark)为您提供了用于备份和恢复 Kubernetes 集群资源和持久卷的工具。您可以通过云提供商或本地运行 Velero。
a.备份您的集群并在丢失时恢复。
b.将集群资源迁移到其他集群。
c.将您的生产集群复制到开发和测试集群。
Velero 包括:服务器端和客户端两大组件

二、工作原理

1、Velero 每个过程

velero每个过程,如按需备份、计划备份、恢复都是一个自定义资源,使用 Kubernetes 自定义资源定义 (CRD) 定义并存储在 etcd 中。Velero 还包括处理自定义资源以执行备份、恢复和所有相关操作的控制器。
您可以备份或恢复集群中的所有对象,也可以按类型、命名空间和/或标签过滤对象。
Velero 非常适合灾难恢复用例,以及在集群上执行系统操作(如升级)之前对应用程序状态进行快照。

2、备份工作流程:

  • Velero 客户端调用 Kubernetes API 服务器来创建一个Backup对象。
  • 该BackupController注意到新的Backup对象,并进行验证。
  • 在BackupController开始备份过程。它通过向 API 服务器查询资源来收集要备份的数据。
  • BackupController调用对象存储服务-例如,AWS S3 -上传备份文件。
  • 默认情况下,velero backup create为任何持久卷制作磁盘快照。您可以通过指定附加标志来调整快照。运行velero backup create --help以查看可用标志。可以使用选项禁用快照--snapshot-volumes=false。

    三、安装选项

    1、 安装方式:

    velero install 命令行安装
    helm chart安装

    2、 先决条件:

    已有k8s集群,版本大于等于1.12,启用dns网络

    3、存储:

    velero在安装过程中,Velero 要求至少添加一种存储插件(通过--plugins指定)。

    4、命名空间:

    Velero默认安装在velero命名空间中。但是,您可以在任何命名空间中安装 Velero(安装时使用--namespace)。

    5、 身份认证机制

    默认情况下,velero install希望velero通过该--secret-file标志为您的IAM 账户提供凭证文件。如果您使用的是不需要凭证文件的备用身份机制,例如 AWS 上的 kube2iam/kiam、GKE 上的 Workload Identity 等,您可以指定--no-secret标志而不是--secret-file.

    6、启用静态集成

    默认情况下,velero install不安装 Velero 的 restic 集成。要启用它,请指定--use-restic标志。
    如果您已经在velero install没有--use-restic标志的情况下运行,您可以再次运行相同的命令,包括--use-restic标志,以将 restic 集成添加到您现有的安装中。

    7、pvc备份机制

  • 默认情况下,velero install不允许使用 restic 来备份所有 pod 卷。必须在每个包含要由 restic 备份的卷的 pod 上应用注释。
  • kubectl -n YOUR_POD_NAMESPACE annotate pod/YOUR_POD_NAME backup.velero.io/backup-volumes=YOUR_VOLUME_NAME_1,YOUR_VOLUME_NAME_2,...
  • 要使用 restic 备份所有 pod 卷而不必在 pod 上应用注释,请运行velero install带有--default-volumes-to-restic标志的命令。
  • 使用此标志需要使用该标志启用 restic 集成--use-restic。

    四、测试安装

    1、安装环境 :

    部署到现有的saas环境中;
    部署需要对接slb(因个人情况而定,因为公司用的是阿里云所以使用slb);
    安装时因为没有相对应的存存储,所以使用了minio作为备份数据的后端存储;

    2、部署过程:

    可以在https://github.com/vmware-tanzu/velero/releases上下载相对应的版本,本次安装使用的是1.6.3版本。

    下载并解压文件
    wget https://github.com/vmware-tanzu/velero/releases/download/v1.6.3/velero-v1.6.3-linux-amd64.tar.gz
    tar xvf velero-v1.6.3-linux-amd64.tar.gz

    友情提示:minio和velero部署的时候全部使用了empty dir,在部署mino时可以直接修改其yaml,使用pvc,verlero可以在部署完成后,通过kubectl进行empty dir变更为pvc。

    首先进行minio部署:
    cd velero-v1.6.3-linux-amd64/
    kubectl apply -f examples/minio/00-minio-deployment.yaml

执行完上面命令会在集群内创建一个名为velero的命令空间,一个minio初始化job,和一个minio主应用程序;
通过查看mino的yaml文件可以看到minio默认的用户名密码为:minio minio123
部署velero
复制当前目录下的velero文件至/usr/sbin/目录下,velero是velero的二进制客户端;
在本地目录中创建 Velero 特定的凭据文件credentials-velero,内容如下:

[default]
aws_access_key_id = minio
aws_secret_access_key = minio123

执行如下命令进行velero程序部署:
velero install \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.2.0 \
    --bucket velero \
    --secret-file ./credentials-velero \
    --use-volume-snapshots=false \
    --use-restic \
    --default-volumes-to-restic \
    --kubeconfig /root/.kube/config \
    --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://IP:9000

参数说明:
--secret-file:指定认证文件 ;
--use-volume-snapshots=false:禁用快照备份功能;
--use-restic:启用静态备份;
--default-volumes-to-restic:备份所有 pod 卷而不必在 pod 上应用注释;
--kubeconfig /root/.kube/config :指定k8s集群配置文件;
s3Url=http:这里是刚才部署minio存储的api接口,可以通过mino容器查看。
到此velero部署完成,注意替换<IP>.

五、测试

velero非常的人性化,在安装包中已经为我们准备好了测试demo,我们可以利用测试demo来进行测试验证,需要修改相关内容,因为我们需要测试相关卷的备份,所以使用with-pv.yaml这个文件进行部署,有部分地方需要修改,如:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: nginx-logs
  namespace: nginx-example
  labels:
    app: nginx
spec:
  # Optional:
  # storageClassName: <YOUR_STORAGE_CLASS_NAME>
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 50Mi

上边文件需相修改相关storageClassName,确保容器启动时可以自己生成相关pvc,如是没有SC那么就需要创建相关pv及pvc。

apiVersion: v1
kind: Service
metadata:
  labels:
    app: nginx
  name: my-nginx
  namespace: nginx-example
spec:
  ports:
  - port: 80
    targetPort: 80
  selector:
    app: nginx
  type: LoadBalancer

因为公司的测试环境是通过SLB对外暴露服务,所以需要修改上面的svc,确保服务可以正访问。
执行备份
备份:

velero backup create nginx-backup --include-namespaces nginx-example

查看:

velero backup describe nginx-backup

返回:

Name:         nginx-backup
Namespace:    velero
Labels:       velero.io/storage-location=default
Annotations:  velero.io/source-cluster-k8s-gitversion=v1.18.8-aliyun.1
              velero.io/source-cluster-k8s-major-version=1
              velero.io/source-cluster-k8s-minor-version=18+

Phase:  Completed

Errors:    0
Warnings:  0

Namespaces:
  Included:  nginx-example
  Excluded:  <none>

Resources:
  Included:        *
  Excluded:        <none>
  Cluster-scoped:  auto

Label selector:  <none>

Storage Location:  default

Velero-Native Snapshot PVs:  auto

TTL:  720h0m0s

Hooks:  <none>

Backup Format Version:  1.1.0

Started:    2021-08-25 20:01:10 +0800 CST
Completed:  2021-08-25 20:01:34 +0800 CST

Expiration:  2021-09-24 20:01:10 +0800 CST

Total items to be backed up:  12
Items backed up:              12

Velero-Native Snapshots: <none included>

Restic Backups (specify --details for more information):
  Completed:  1

此时进行恢复测试,把整个名称空间及pvc里的数据删除,然后进行恢复,恢复命令如下

velero restore create --from-backup nginx-backup --wait

恢复完成后,可以看到刚才删除了相关资源已经恢复,并且pvc数据也恢复了。
注意:恢复时注意pvc,如果pv是手动创建的话,需要在次手动创建pv,并且删除以前的pv,或者更改当前pv的相关参数,可以进行再次绑定。

六、其他

velero 命令

$ velero create backup NAME [flags]

剔除 namespace

--exclude-namespaces stringArray                  namespaces to exclude from the backup

剔除资源类型

--exclude-resources stringArray                   resources to exclude from the backup, formatted as resource.group, such as storageclasses.storage.k8s.io

包含集群资源类型

--include-cluster-resources optionalBool[=true]   include cluster-scoped resources in the backup

包含 namespace

--include-namespaces stringArray                  namespaces to include in the backup (use '*' for all namespaces) (default *)

包含 namespace 资源类型

--include-resources stringArray                   resources to include in the backup, formatted as resource.group, such as storageclasses.storage.k8s.io (use '*' for all resources)

给这个备份加上标签

--labels mapStringString                          labels to apply to the backup
-o, --output string                               Output display format. For create commands, display the object but do not send it to the server. Valid formats are 'table', 'json', and 'yaml'. 'table' is not valid for the install command.

对指定标签的资源进行备份

-l, --selector labelSelector                      only back up resources matching this label selector (default <none>)

对 PV 创建快照

--snapshot-volumes optionalBool[=true]            take snapshots of PersistentVolumes as part of the backup

指定备份的位置

--storage-location string                         location in which to store the backup

备份数据多久删掉

--ttl duration                                    how long before the backup can be garbage collected (default 720h0m0s)

指定快照的位置,也就是哪一个公有云驱动

--volume-snapshot-locations strings               list of locations (at most one per provider) where volume snapshots should be stored

定时备份
定时备份先手动备份相关应用,然后执行如下命令进行定时备份

velero schedule create clusterall --schedule="0 1 * * *" --selector app=nginx

--selector app=nginx ,只备份label 为app=nginx的相关资源。
创建完成后可以通过以下命令查看

velero schedule get

创建备份时,您可以通过添加标志来指定 TTL(生存时间)--ttl
TTL 标志允许用户使用以小时、分钟和秒形式指定的值来指定备份保留期--ttl 24h0m0s。如果未指定,将应用 30 天的默认 TTL 值。

使用velero+minio+restic实现kubernetes业务数据备份与恢复

概述:Velero(以前称为HeptioArk)为您提供了备份和恢复Kubernetes集群资源和持久卷的工具,可以安全的备份、恢复和迁移Kubernetes集群资源和持久卷。Velero主要提供以下能力备份群集并在丢失时进行还原。将群集资源迁移到其他群集... 查看详情

k8s:通过velero实现集群备份和恢复(代码片段)

写在前面分享一个k8s集群容灾备份恢复开源工具Velero博文内容涉及:Velero的简单介绍Velero安装下载备份恢复Demo,以及容灾测试Demo恢复失败情况分析理解不足小伙伴帮忙指正我所渴求的,無非是將心中脫穎語出的本性付諸生活,... 查看详情

关于k8s集群备份和恢复工具velero的一些笔记整理(代码片段)

写在前面分享一个k8s集群容灾备份恢复开源工具Velero博文内容涉及:Velero的简单介绍Velero安装下载备份恢复Demo,以及容灾测试Demo恢复失败情况分析理解不足小伙伴帮忙指正我所渴求的,無非是將心中脫穎語出的本性... 查看详情

重置后如何更改 Velero 凭据

】重置后如何更改Velero凭据【英文标题】:HowcanIchangemyVelerocredentialsaftertheywerereset【发布时间】:2021-10-0317:28:57【问题描述】:我有一个安装了Velero的AzureKubernetes集群。根据option1oftheinstructions,为Velero创建了一个服务主体。在重... 查看详情

基于velero+minio对k8s进行备份和恢复

velero介绍​​Velero是由vmware公司团队研发开源工具,用于安全地备份、恢复和迁移Kubernetes集群和持久卷。它可以在本地和公共云中运行。Velero由一个在您的Kubernetes集群中作为部署运行的服务器进程和一个命令行界面(CLI)组成,De... 查看详情

使用velero去备份k8s集群(代码片段)

先决条件:k8s>1.10,主要考虑restic的兼容性集群内部署dns已经安装kubectlvelero安装下载velerowgethttps://github.com/vmware-tanzu/velero/releases/download/v1.5.2/velero-v1.5.2-linux-amd64.tar.gztar-zxvfvelero-v1.5.2-linux-amd64. 查看详情

ionic安装及测试

...com/getting-started/官方教程写得比较简单,简单来说就是1)安装nodejs(安装方法:http://www.cnblogs.com/tujia/p/5993852.html)2)利用nodejs的npm包管理器安装cordova和ionic,命令如下npminstall-gcordovaionic附:上面安装可能 查看详情

vs安装及单元测试

Visual Studio 2013安装过程(1)打开VS2013安装包并选择安装路径(2)选择“我同意许可条款和隐私策略” —>"下一步"(3)勾选功能(一般不改动)—>点击“安装”(4)安装中(5)VS2013安装完毕coding... 查看详情

mha安装及测试(代码片段)

MHA安装官方介绍准备工作1.下载安装包2.配置好主从主:192.168.160.132从:192.168.160.133192.168.160.134mha:192.168.160.135GRANTSUPER,REPLICATIONSLAVE,REPLICATIONCLIENTON*.*TO‘replication_user‘@‘192.168.160.%‘IDENTIFIEDBY‘123456 查看详情

pythoncv2安装及测试(代码片段)

pythoncv2安装及测试​由于数学建模国赛2013B题了解到opencv,遂记录一.安装1.参考教程pipinstall-ihttps://pypi.tuna.tsinghua.edu.cn/simpleopencv-python👉参考教程链接​是看到评论区里的兄弟写的2.powershell安装3.检查是否装好piplistpiplist... 查看详情

protobuf安装及小测试

参考:http://shift-alt-ctrl.iteye.com/blog/2210885 版本:2.5.0百度云盘上有jar包。mac上安装:新建:/Users/zj/software/Tools/protobuf目录(此为安装目录)进入解压目录。./configure --prefix=/Users/zj/software/Tools/protobufmakemakei 查看详情

hivellap服务安装说明及测试(代码片段)

 Hivellap服务安装说明及测试 参考:https://www.cnblogs.com/hdpdriver/p/7642729.html1.简介说明从Hive2.0引入了LLAP(LiveLongAndProcess),2.1进行了比较大的优化,可以说hive已经走向了内存计算,目前hortonworks测试llap+tez比hive1.x快了25倍,... 查看详情

nginx负载均衡安装及测试

nginx负载均衡安装及测试1、配置3台机器A服务器IP:192.168.157.128(主)B服务器IP:192.168.157.136C服务器IP:192.168.157.137vim/etc/hosts192.168.157.128hadoop1192.168.157.136hadoop2192.168.157.137ha 查看详情

zookeeper安装测试及集群

centos安装zookeeper-3.5.2-alpha.tar.gz网上搜索了一下安装教程其实很简单主要总结一下中间遇到的坑 1.zookeeper3.4.6启动失败。很有可能是配置的日志目录在文件系统中没有新建。 2.zookeeper3.5+启动失败。这个是我今天遇上的问题... 查看详情

drbd介绍及安装测试

http://freeloda.blog.51cto.com/2033581/1275384升级内核:http://88fly.blog.163.com/blog/static/1226803902013111345347479/常见错误http://blog.csdn.net/t1anyuan/article/details/52143789大纲一、前言二、DRBD是什么三、DRBD主要功能四、 查看详情

vs安装及单元测试

VS安装过程:   最大子数组算法已提交至coding.net:https://git.coding.net/CoCoBeer/Maxsubaray.git用例编号用例描述输入数据预期输出数据实际输出数据通过/不通过评价1 全正 1,2,3,4,5 15 15 通过 正确2 正负... 查看详情

node.js环境安装,及连接mongodb测试

1.node.js环境安装npmconfigsetregistryhttps://registry.npm.taobao.orgnpmconfiggetregistrynpmroot-g 2.mongodb-3.2.9测试(配置了用户名密码)varServer=require(‘mongodb‘).Server;varDb=require(‘mongodb‘).Db;varserver= 查看详情

swoole安装及测试示例(代码片段)

swoole安装方案一:MAC本地安装官方安装命令:peclinstallswoole下载PECL:安装PECL:安装swoole:问题1:/tmp/pear/installwu无权限解决:sudochmod0777/tmp/pear/install问题2:channel“pecl.php.net”hasupdat 查看详情