velero 备份kubernetes集群

简介部分,有大量偷懒,借鉴

一.简介

Velero是一个开源工具,可以安全地备份,恢复和迁移Kubernetes集群和持久卷。它既可以在本地运行,也可以在公共云中运行。Velero由在Kubernetes集群中作为部署运行的服务器进程和命令行界面(CLI)组成,DevOps团队和平台操作员可使用该命令行界面配置计划的备份,触发临时备份,执行还原等。

优势

与直接访问Kubernetes etcd数据库以执行备份和还原的其他工具不同,Velero使用Kubernetes API捕获群集资源的状态并在必要时对其进行还原。这种由API驱动的方法具有许多关键优势:

  • 备份可以捕获群集资源的子集,并按名称空间,资源类型和/或标签选择器进行过滤,从而为备份和还原的内容提供了高度的灵活性。
  • 托管Kubernetes产品的用户通常无法访问底层的etcd数据库,因此无法对其进行直接备份/还原。
  • 通过聚合的API服务器公开的资源可以轻松备份和还原,即使它们存储在单独的etcd数据库中也是如此。

此外,借助Velero,您可以使用存储平台的本机快照功能或称为restic的集成文件级备份工具来备份和还原应用程序的持久数据及其配置 。

主要功能

  • 灾难恢复 在基础架构丢失,数据损坏和/或服务中断的情况下,减少了恢复时间。
  • 数据迁移 通过轻松地将Kubernetes资源从一个集群迁移到另一个集群来实现集群可移植性。
  • 数据保护 提供关键数据保护功能,例如计划的备份,保留计划以及自定义操作的备份前或备份后挂钩。

组件

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

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

支持备份存储

二:安装

依赖对象存储,支持S3,目前也支持阿里云等公有云平台(依赖插件),这里使用私有对象存储(minio)。

# 安装命令行客户端
$ brew install velero

命令行安装

1.创建minio认证文件

$ cat > credentials-velero <<EOF  
[default]
aws_access_key_id = user
aws_secret_access_key = password
EOF

2.初始化服务端

$ velero install \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.0.0 \  # 安装插件
    --bucket velero \              # bucket 需要提前创建
    --secret-file ./credentials-velero \
    --use-volume-snapshots=false \
    --use-restic \
    --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://127.0.0.1:9000

3.查看velero是否安装完成

$ kubectl get deployments -l component=velero --namespace=velero
NAME     READY   UP-TO-DATE   AVAILABLE   AGE
velero   1/1     1            1           13d

$ kubectl get crds -l component=velero
backups.velero.io                                     2021-04-30T07:20:25Z
backupstoragelocations.velero.io                      2021-04-30T07:20:26Z
deletebackuprequests.velero.io                        2021-04-30T07:20:26Z
downloadrequests.velero.io                            2021-04-30T07:20:26Z
podvolumebackups.velero.io                            2021-04-30T07:20:26Z
podvolumerestores.velero.io                           2021-04-30T07:20:26Z
resticrepositories.velero.io                          2021-04-30T07:20:26Z
restores.velero.io                                    2021-04-30T07:20:26Z
schedules.velero.io                                   2021-04-30T07:20:26Z
serverstatusrequests.velero.io                        2021-04-30T07:20:26Z
volumesnapshotlocations.velero.io                     2021-04-30T07:20:27Z

helm安装

# 配置minio地址
configuration:
  backupStorageLocation:
    config: 
     region: hk-k8s-minio
     s3ForcePathStyle: true
     s3Url: http://127.0.0.1:39000

# 配置minio认证信息
secretContents: 
   cloud: |
     [default]
     aws_access_key_id = user
     aws_secret_access_key = password

推荐直接使用命令行安装,方便快捷

三.备份

1.手动备份

$ velero backup create app-backup --include-namespaces=app-example

2.定时备份

$ velero create schedule app-daily-backup --schedule="@every 24h"  --include-namespaces=app-example

3.对持久化存储进行备份

# 给pod打上标签
$ kubectl patch pod nginx-deployment-7b95b48f86-296hj --patch '{"metadata": {"annotations": {"backup.velero.io/backup-volumes": "www"}}}' -n app-example

# 备份
$ velero backup create app-backup-pvc --snapshot-volumes --include-namespaces=app-example

# 备份详情
$ velero backup describe app-backup-pvc --details
Velero-Native Snapshot PVs:  true

TTL:  720h0m0s

Hooks:  <none>

Backup Format Version:  1.1.0

Started:    2021-05-14 15:20:01 +0800 CST
Completed:  <n/a>

Expiration:  2021-06-13 15:20:01 +0800 CST

Estimated total items to be backed up:  12
Items backed up so far:                 0

Restic Backups:
  In Progress:
    app-example/nginx-deployment-7b95b48f86-296hj: www

四.恢复

1.删除刚刚备份的资源

$ kubectl delete ns app-example
namespace "app-example" deleted

2.从刚刚的备份中,恢复资源清单

$ velero restore create --from-backup app-backup-pvc --restore-volumes

$ velero restore describe app-backup-pvc-20210514152908 --details
Restic Restores:
  In Progress:
    app-example/nginx-deployment-7b95b48f86-296hj: www (4.94%)

恢复存储资源时,会在刚刚打上标记的Pod中自动创initcontainer,从minio中拉取文件信息

五.迁移

在集群间进行迁移时,我们需要保证两个集群使用的同一个后端存储,初始化服务端:

$ velero install \
    --provider aws \
    --plugins velero/velero-plugin-for-aws:v1.0.0 \  # 安装插件
    --bucket velero \              # bucket 需要提前创建
    --secret-file ./credentials-velero \
    --use-volume-snapshots=false \
    --use-restic \
    --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://127.0.0.1:9000

跟安装是同一套命令

查看同步过来的资源对象:

  • Backups
  • Backupstoragelocations
  • Podvolumebackups

基于Backups对象,我们可以方便快捷的恢复集群的对象。

posted @ 2021-05-15 17:54  Goun  阅读(215)  评论(0编辑  收藏  举报