velero安装及测试

Posted 淳淳铭铭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了velero安装及测试相关的知识,希望对你有一定的参考价值。

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安装及测试的主要内容,如果未能解决你的问题,请参考以下文章

K8s:通过Velero实现集群备份和恢复

关于k8s集群备份和恢复工具Velero 的一些笔记整理

使用velero去备份k8s集群

续:纠正:ubuntu7.04可以安装,而且完美的安装 ! for《Oracle-10.2.0.1,打补丁10.2.0.5:在 debian 版本4不含4以上,及 ubuntu 7.04不含(代码片段

k8s篇备份之velero

某些备份存储位置无效:“默认”位置的备份存储无效: