51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

velero 的备份与恢复 (k8s 备份2)

velero 安装

velero 生产和测试环境配置 : 连接

官方文档: 连接

中文社区: 连接

velero 修改过期时间 :连接

1-查看运行的资源情况

kubectl get ns

kubectl -n xiaoka get pod,replicaset,deployment,configmap,persistentvolumeclaim

2- 查看pod的挂载情况

kubectl -n xiaoka get pod nginx-v1-75fdd94f9b-2rd5b -o jsonpath='{range .spec.volumes[*]}{.*}{"\n"}{end}'

3-查看pvc是使用情况

4-查看configmap的配置内容

kubectl -n xiaoka get configmap redis-conf -o jsonpath='{.data}{"\n"}'

创建备份

Velero 支持两种发现需要使用 Restic 备份的 pod 卷的方法:

Opt-in 方法:包含要使用 Restic 备份的卷的每个 pod 都必须使用卷的名称进行注释。
Opt-out 方法:使用 Restic 备份所有 pod 卷,并能够选择退出任何不应备份的卷。

判断 Restic 备份 pod 卷的方法,安装 velero 是否有带上 --default-volumes-to-restic 进行安装。

根据上一章节安装velero是选择 Opt-in 方法,所以这里只说明 Opt-in 方法。

Opt-in 方法中,Velero 将使用 Restic 备份所有 pod 卷,但以下情况除外

Volumes mounting the default service account token, kubernetes secrets, and config maps
Hostpath volumes

开始备份:

备份xiaoka 命名空间资源

velero create backup xiaoka1031 --include-namespaces xiaoka  --wait 

--wait 是等待显示


恢复服务

备份

velero create backup baimeidashuback123 --include-namespaces baimei

1-模拟故障

kubectl delete ns baimei

2-恢复备份

velero create restore --from-backup baimeidashuback123

如果需要 nodeport的端口 也不变,那么需要带参数 --preserve-nodeports

velero create restore --from-backup monitor-v1  --preserve-nodeports

3-删除备份

velero delete  backup baimeidashuback1234

新增备份, 比如我又修改了his 的内容

需要 名称后面加上v1.1,1.2,

velero create backup cloud-test-v1 --include-namespaces cloud-test  --ttl 8760h --wait 

8760h 是1年。

不然得话不支持增量备份。

velero create backup chattest  --include-namespaces chattest   --ttl 8760h --wait

{#more-14354}

velero delete  backup his

velero get backup

velero create backup his --include-namespaces his

4- 其他命令:

velero  get  backup   #备份查看
velero  get  schedule #查看定时备份
velero  get  restore  #查看已有的恢复
velero  get  plugins  #查看插件

velero backup logs  k8s-all  | grep error    #过滤 error 关键词查看异常信息

kubectl get backups -A

在crd 里找,

**目录注意:**​​velero restore​​​ 恢复不会覆盖​​已有的资源​​​,只恢复当前集群中​​不存在的资源​​。已有的资源不会回滚到之前的版本,如需要回滚,需在restore之前提前删除现有的资源。

备份所有命名空间:

velero backup logs k8s-all

7、定时备份 {#h6f20189-8zKO0rhn}

比较推荐做定时全量备份,这个能保证我们是一直全量最新备份的状态。

# 每天12点备份一次
velero create schedule k8s-all --schedule="0 0 * * *"

可以设置一个周期性定时备份

# 每日对 web namespace 进行一次备份 velero create schedule <SCHEDULE NAME> --schedule="@every 24h" --include-namespaces web

# 每日1点进行备份
velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *"
# 每日1点进行备份,备份保留48小时
velero create schedule <SCHEDULE NAME> --schedule="0 1 * * *" --ttl 48h
# 每6小时进行一次备份
velero create schedule <SCHEDULE NAME> --schedule="@every 6h"

定时备份的名称为:`<SCHEDULE NAME>-<TIMESTAMP>`,恢复命令为:`velero restore create --from-backup <SCHEDULE NAME>-<TIMESTAMP>`。
如需备份恢复持久卷,备份如下:

velero backup create nginx-backup-volume --snapshot-volumes --include-namespaces nginx-example
该备份会在集群所在region给云盘创建快照(当前还不支持NAS和OSS存储),快照恢复云盘只能在同region完成。

删除 定时计划

先查看 有那些计划:

velero  get  schedule

velero schedule delete cloud-tomcat

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

生产 备份实战:

 mkdir  - p /app/scripts/velerotask

cat

cat k8s-ns.txt

里边是 namespace 的 项目列表

oms-test
oms-test-devops5p549
openai
openai-devops24s8d
openai-test
openai-test-devopsd4ptn

cat velerobackupk8s.sh

#!/bin/bash

date=`date +%Y-%m-%d`

for i in `cat /app/scripts/velerotask/k8s-ns.txt`
do 
echo $i
echo $date

#velero delete  backup $i 
#7天
/usr/local/bin/velero create backup ${i}-${date} --include-namespaces $i --ttl 170h 
#1天
#velero create backup ${i}-${date} --include-namespaces $i --ttl 20h 
done

/usr/local/bin/velero 这个要加上, 不然定时任务会失败。

定时任务:

cat /etc/crontab

#每周五1点执行备份k8s

00 01 * * 5 root sh /app/scripts/velerotask/velerobackupk8s.sh  &> /var/log/k8spvs_rsync.log

8- restic

当执行velero delete backup的时候,他会立刻到bucket中删除backups与restores的相关内容,但是值得一提的是restic中的数据不会立刻被删除,velero有一个Resticrepository的自定义CRD资源,在里面会有restic的执行计划任务程序,默认7天执行一次,会将没有backup引用的restic废弃数据给删除,到那个事情才会真正的从bucket中删除无用的restic数据从而释放硬盘空间,希望各位可以留意这一点

你去改CRD里边,搜索restic,会有resticrepository,这个自定义资源,进去里边改扫描restic清理时间倒计时时间

当执行velero delete backup的时候,他会立刻到bucket中删除backups与restores的相关内容,但是值得一提的是restic中的数据不会立刻被删除,velero有一个Resticrepository的自定义CRD资源,在里面会有restic的定时任务程序,默认7天执行一次,会将没有backup引用的restic废弃数据给删除掉,到那个时候才会真正的从bucket中删除无用的restic数据从而释放硬盘空间,你也可以直接修改这个自定义CRD资源中的内容以达到你期望的执行间隔。希望各位可以留意这一点

改成1m,1分钟扫描一次,这样你删除掉backup等1分钟他就回去bucket中去删restic了

你可以平衡一下加上--ttl过期日期,别30d

发现问题:

备份与恢复 · Kubernetes · 看云 (kancloud.cn)

赞(5)
未经允许不得转载:工具盒子 » velero 的备份与恢复 (k8s 备份2)