使用Velero备份、恢复k8s集群上的资源

一、Velero简介

Velero提供备份和恢复 Kubernetes 集群资源和持久卷的工具。

Velero功能:

  • 对群集进行备份,并在丢失时进行还原。
  • 将集群资源迁移到其他集群。

Velero 包括:

  • 在群集上运行的服务器
  • 在本地运行的命令行客户端
  • 开源地址:https://github.com/vmware-tanzu/velero
  • 官方文档:Velero
velero备份流程
  1. velero客户端调用kubernetes API Server创建backup任务
  2. Backup控制器基于watch机制通过Api Server获取到备份任务
  3. Backup控制器开始执行备份动作,会通过请求Api Server获取到需要备份的数据
  4. Backup 控制器将获取到的数据备份到指定的对象存储server端

二、准备后端存储

Velero支持很多种存储插件,可查看:Velero Docs - Providers获取插件信息,我们这里使用minio作为S3兼容的对象存储提供程序。也可以在任意地方部署Minio对象存储,只需要保证K8S集群可以访问到即可。

这里使用一台独立机器docker部署minio

1、下载minio的docker镜像

2、准备数据目录

# mkdri -pv /data/minio

3、docker部署minio

两个变量定义minio的用户、密码

MINIO_ROOT_USER

MINIO_ROOT_PASSWORD

一个管理端口9999,一个数据端口9000

容器正常启动后,通过浏览器访问http://IP:9999 输入上面定义的用户、密码即可登录

登录之后,创建一个Bucket,命名为velerodata

参考文章 Docker 搭建 Minio 容器 (完整详细版)_docker minio-CSDN博客

minio也可部署到 k8s集群里

三、安装velero

velero包含velero客户端和服务端,服务端需要部署在可以使用kubectl命令操作k8s集群的机器上,这里就安装在k8s的master上

从GitHub上搜索下载即可:Releases · vmware-tanzu/velero · GitHub

下载最新的release linux_amd64版本

将velero执行程序cp至/usr/local/bin/目录下即可,部署Server之前Server的版本是获取不到的

部署Server

先创建认证文件,把minio的用户名、密码写到这个文件

使用velero命令部署velero server

velero install \
  --provider aws \
  --image velero/velero:latest \
  --plugins velero/velero-plugin-for-aws:v1.8.2 \
  --bucket velerodata \
  --secret-file /root/credentials-velero \
  --use-node-agent \
  --use-volume-snapshots=false \
  --namespace velero \
  --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.49.133.147:9000 \
  --wait

# 执行install命令后会创建一系列清单,包括CustomResourceDefinition、Namespace、Deployment等。

这里遇到一个坑

有些节点上的node-agent pod总是起不来,查看日志报没有velero命令(这个是node-agent pod里容器的默认命令),后面通过检查发现报错的节点上的velero image不是最新的,但tag确实是latest,确实是个坑

旧版本镜像是45.5MB,新版本镜像是59.7MB,使用crictl重新下载正常的镜像,然后使用nerdctl工具把新版本镜像的tag改成docker.io/velero/velero:latest(与daemonset里的一致),之后pods成功启动

卸载velero

kubectl delete namespace/velero clusterrolebinding/velero
kubectl delete crds -l component=velero

四、备份、恢复k8s上的资源

使用官方案例创建测试应用

创建备份

到minio上查看备份数据

测试恢复

先删除nginx-example名称空间里的所有资源

创建恢复,再检查nginx-example名称空间里的资源,可以看到名称空间里的资源恢复回来了

备份命令参数

恢复命令参数

批量备份名称空间脚本,这个脚本定时执行即可达到定时备份所有名称空间的目的

五、资源迁移

这个架构里有个巧妙的地方是,如果两个k8s集群上都有velero,并且velero的后端存储指向同一个Bucket,这样这个Bucket可以当做共享存储来用,即从集群A备份出来的数据,可以轻松恢复到集群B上,这样也相当于一个迁移动作。

如上个步骤备份的nginx-backup1220可以在另一个集群上恢复,如下是在集群B上恢复了nginx-backup1220,从svc的cluster-ip可以看到这是另一个集群

从这个过程得知,如果多个集群上的velero的后端存储指向相同的Bucket,velero的备份可以在多个集群上共享使用。

更多自定义的备份恢复,后面再补充。。。

参考文章 https://www.cnblogs.com/wubolive/p/17345716.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/264477.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【终极教程】Cocos2dx服务端重构(优化cocos2dx服务端)

文章目录 概述问题概述1. 代码混淆代码加密具体步骤测试和配置阶段IPA 重签名操作步骤2. 缺乏文档3. 缺乏推荐的最佳实践4. 性能问题 总结 概述 Cocos2dx是一个非常流行的跨平台游戏引擎,开发者可以使用这个引擎来开发iOS、Android和Web游戏。同时,Coco…

SSTI模板注入(Flask+Jinja2)

文章目录 一、前置知识1.1 模板引擎1.2 渲染 二、SSTI模板注入2.1 原理2.2 沙箱逃逸沙箱逃逸payload讲解其他重要payload 2.3 过滤绕过 三、PasecaCTF-2019-Web-Flask SSTI 一、前置知识 1.1 模板引擎 模板引擎(这里特指用于Web开发的模板引擎)是为了使…

nodejs+vue+ElementUi会员制停车场车位系统

总之,智能停车系统使停车场管理工作规范化,系统化,程序化,避免停车场管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改停车场情况。 三、任务:小组任务和个人任务 智…

Linux中vim中进行替换/批量替换

Linux中vim中进行替换/批量替换 一:在 Vim 中进行文本替换的操作是通过使用 :s(substitute)命令来实现的。这里是一些基本的替换命令 替换当前行的第一个匹配项: :s/old/new/这将替换当前行中第一个出现的 “old” 为 “new”。 替换当前行的所有匹配项…

工作实践篇 Flink(一:flink提交jar)

一:参数 flink 模式 – standalone 二:步骤 1. 将本地测试好的代码进行本地运行。确保没问题,进行打包。 2. 找到打好的jar包,将jar包上传到对应的服务器。 3. 执行flink命令,跑代码。 /opt/flink/flink-1.13.6/bi…

ASP.Net实现姓名添加查询(三层架构)

目录 演示功能: 点击启动生成页面 点击搜索模糊查询 点击添加跳转新界面 点击Button添加姓名 步骤: 1、建文件 2、添加引用关系 3、根据数据库中的列写Models下的XueshengModels类 4、DAL下的DBHelper(对数据库进行操作)…

轻量Http客户端工具VSCode和IDEA

文章目录 前言Visual Studio Code 的插件 REST Client编写第一个案例进阶,设置变量进阶,设置Token 前言 作为一个WEB工程师,在日常的使用过程中,HTTP请求是必不可少的。我们采用的HTTP工具有如下: Postman Insomnia Ap…

MyBatis见解3

8.MyBatis的关联查询 8.3.一对多查询 需求:查询所有用户信息及用户关联的账户信息。 分析:用户信息和他的账户信息为一对多关系,并且查询过程中如果用户没有账户信息,此时也要将用户信息查询出来,此时左外连接查询比…

Spring和Spring Boot框架中怎么理解Bean这个核心概念

在Spring和Spring Boot框架中,Bean是一个核心概念。要理解Spring Boot中的Bean,我们可以从以下几个方面进行: 定义: Bean是Spring框架中的一个对象,由Spring容器管理。当我们在应用程序中需要某个对象时,我…

Deepin更换仿Mac主题

上一篇博客说了要写一篇deepin系统的美化教程 先看效果图: 准备工作: 1.你自己 嘻嘻嘻 2.能上网的deepin15.11电脑 首先去下载主题 本次需要系统美化3部分:1.图标 2.光标 3.壁纸 开始之前,请先把你的窗口特效打开,…

华为设备命令行操作基础

熟悉VRP命令行并且熟练掌握VRP配置是高效管理华为网络设备的必备基础。 设备初始化启动 管理员和工程师如果要访问在通用路由平台VRP上运行的华为产品,首先要进入启动程序。开机界面信息提供了系统启动的运行程序和正在运行的VRP版本及其加载路径。启动完成以后&am…

spring aop实际开发中怎么用,Spring Boot整合AOP,spring boot加spring mvc一起使用aop,项目中使用aop

前言:本文不介绍 AOP 的基本概念、动态代理方式实现 AOP,以及 Spring 框架去实现 AOP。本文重点介绍 Spring Boot 项目中如何使用 AOP,也就是实际项目开发中如何使用 AOP 去实现相关功能。 如果有需要了解 AOP 的概念、动态代理实现 AOP 的&…

【PHP手麻系统源码】基于mysql+laravel+vue开发的医院手术麻醉系统源码,实现围术期患者数据的自动采集与共享

手麻系统作为医院信息化系统的一环,由监护设备数据采集系统和麻醉信息管理系统两个子部分组成。手麻信息系统覆盖了患者术前、术中、术后的手术过程,可以实现麻醉信息的电子化和手术麻醉全过程动态跟踪。 以服务围术期临床业务工作的开展为核心&#xf…

分布式搜索elasticsearch概念

什么是elasticsearch? elasticsearch是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容 目录 elasticsearch的场景 elasticsearch的发展 Lucene篇 Elasticsearch篇 elasticsearch的安装 elasticsearch的场景 elasticsear…

BigQuery 分区表简介和使用

大纲 什么是分区表 我们先看定义: 分区表是一种数据库表设计和管理技术,它将表中的数据划分为逻辑上的多个分区,每个分区包含一组特定的数据。每个分区都根据定义的分区键(通常是一个列或字段)的值进行分类&#xff…

构建创新学习体验:企业培训系统技术深度解析

企业培训系统在现代企业中发挥着越来越重要的作用,它不仅仅是传统培训的延伸,更是技术创新的结晶。本文将深入探讨企业培训系统的关键技术特点,并通过一些简单的代码示例,展示如何在实际项目中应用这些技术。 1. 前端技术&#…

SLAM算法与工程实践——雷达篇:Livox激光雷达使用

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接,本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址: SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

微信小程序格创校园跑腿小程序源码v1.1.64+前端

简介: 版本号:1.1.64 – 多学校版本 本次更新内容: 订单问题修复 (无需上传小程序) 版本号:1.1.63 – 多学校版本 本次更新内容: 失物招领增加内容安全接口; 认证增加性别选…

freeswitch on debian docker

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 因为centos系统期限的原因,尝试在debian的docker上使用fs。 环境 docker engine:Version 24.0.6 debian docker:bullseye 11.8 freeswitch:v1.10.7 Debian准备 目前…

有待写入光盘的文件处理办法

windows11系统中 dvd盘中拖入文件后,文件未写入,信息提示有待写入光盘的文件 处理办法: 同时按住shift鼠标右键,点击光盘图标: 选择刻录到光盘 点击下一步 选择重新刻录 反复几次发现无法完成。 最后处理办法&…