k8s备份恢复(velero)

velero简介

velero官网https://velero.io/
velero-githubhttps://github.com/vmware-tanzu/velero

velero的特性

备份可以按集群资源的子集,按命名空间、资源类型标签选择器进行过滤,从而为备份和恢复的内容提供高度的灵活性
支持复制当前 Kubernetes 集群的资源到其它 Kubernetes 集群
通过聚合 API 服务器公开的资源可以轻松备份和恢复,即使它们存储在单独的 etcd 数据库中

velero的组件

velero由一个客户端和一个服务端组成
客户端:运行在本地的命令行工具,只要配置好kubectl和kubeconfig认证文件就可使用,非常简单
服务端:运行在Kubernetes集群之上,负责执行具体的备份和恢复操作

velero工作流程

在这里插入图片描述
备份数据
本地velero客户端发送备份命令,就会调用API Server创建Backup资源对象
服务端收到通知有新的Backup对象创建并执行验证
服务端开始执行备份过程,向API Server查询需要备份的数据
服务端调用对象存储服务,将备份数据保存到对象对象存储上

恢复数据
本地velero客户端发送恢复指令,就会调用API Server创建Restore资源对象
服务端收到通知有新的Restore对象创建并执行验证
服务端调用对象存储,将指定的备份文件下载下来
服务端开始执行恢复过程,根据备份数据调用API Server重新创建相关资源对象

支持的存储

AWS S3 以及兼容 S3 的存储,比如:
Minio
ceph存储
Google Cloud 存储
Aliyun OSS 存储

与ETCD的区别

与 Etcd 备份相比,直接备份 Etcd 是将集群的全部资源备份起来。而 Velero 就是可以对 Kubernetes 集群内对象级别进行备份。除了对 Kubernetes 集群进行整体备份外,Velero 还可以通过对 Type、Namespace、Label 等对象进行分类备份或者恢复。
备份过程中创建的对象是不会备份的

使用场景

灾备场景: 提供备份恢复k8s集群的能力
迁移场景: 提供拷贝集群资源到其他集群的能力(复制同步开发、测试、生产环境的集群)

备份恢复操作

部署minio

minio在这里是用来保存velero的备份数据,如果你有其它对象存储服务,也可以用它们来替换minio。
minio是一款高性能、分布式的对象存储系统,采用Go语言实现,兼容Amazon S3接口,客户端与存储服务器之间采用http/https通信协议。
minio官网: https://min.io/
minio中文网站: http://www.minio.org.cn/

minio支持单机部署和分布式部署,这里选择容器方式单机部署。

部署命令

docker pull minio/minio:RELEASE.2024-04-06T05-26-02Z-cpuv1
docker run -d --name minio -p 9000:9000 -p 9999:9999 -v /data/minio:/minio --restart=always -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=12345678" minio/minio:RELEASE.2024-04-06T05-26-02Z-cpuv1 server /minio --console-address '0.0.0.0:9999'

访问并创建桶

在这里插入图片描述

部署Velero

服务端:目标Kubernetes集群
客户端: 本地的命令行的工具,需要配合kubernetes认证使用.
项目地址:https://github.com/vmware-tanzu/velero
版本: velero 1.10+ 不再支持标志 --use-restic,需要使用–use-restic 用版本 1.9.x
说明:https://learn.microsoft.com/zh-cn/azure/aks/hybrid/backup-workload-cluster

下载客户端

wget https://github.com/vmware-tanzu/velero/releases/download/v1.13.2/velero-v1.13.2-linux-amd64.tar.gz
tar xf velero-v1.13.2-linux-amd64.tar.gz
cd velero-v1.13.2-linux-amd64/ 
cp velero /usr/local/bin/

测试使用

velero --help

创建访问minio的认证文件

cat << EOF > /root/.velero-auth.txt
[default]
aws_access_key_id = admin
aws_secret_access_key = 12345678
EOF

安装客户端
有证书需要配置,没证书直接操作创建ns
配置velero访问k8s
签发证书,用于velero访问API Server时认证使用

openssl genrsa --out velero-user.key 2048
openssl req -new -key velero-user.key \
-out velero-user.csr \
-subj "/CN=velero-user/O=k8s"openssl x509 -req -days 3650 \
-CA /etc/kubernetes/ssl/ca.pem \
-CAkey /etc/kubernetes/ssl/ca-key.pem -CAcreateserial \
-in velero-user.csr -out velero-user.crt
rm -f velero-user.csr

准备kubeconfig认证文件

kubectl config set-cluster k8s-cluster1 --embed-certs \
--server=https://192.168.122.188:6443 -\
-certificate-authority=/etc/kubernetes/ssl/ca.pem \
--kubeconfig=/data/velero/velero-user.configkubectl config set-credentials velero-user --embed-certs \
--client-certificate=/data/velero/velero-user.crt \
--client-key=/data/velero/velero-user.key \
--kubeconfig=/data/velero/velero-user.configkubectl config set-context velero-user@k8s-cluster1 \
--cluster=k8s-cluster1 --user=velero-user \
--kubeconfig=/data/velero/velero-user.confikubectl config use-context velero-user@k8s-cluster1 --kubeconfig=/data/velero/velero-user.config

为velero-user用户授权

kubectl create clusterrolebinding velero-user@clusteradmin --clusterrole=cluster-admin --user=velero-user

创建ns

kubectl create ns velero

下载aws访问控制插件docker pull velero/velero-plugin-for-aws:v1.9.2
执行安装velero服务端

velero install --kubeconfig  /root/.kube/config --namespace velero --provider aws --plugins velero/velero-plugin-for-aws:latest --use-volume-snapshots=false --use-restic  --bucket new  --secret-file /root/.velero-auth.txt --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://114.132.60.178:31900velero install --kubeconfig  /root/.kube/config --namespace velero --provider aws --plugins velero/velero-plugin-for-aws:v1.9.2 --use-volume-snapshots=false --bucket new  --secret-file /root/.velero-auth.txt --backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.0.12.11:9000

完成安装后,在velero的namespace中出现了两个pod,分别是velero服务端和辅助数据备份的restic。
在这里插入图片描述
在这里插入图片描述
查看velero pod运行状态日志kubectl logs deployment/velero -n velero
stroage location 必须是valid有效的
在这里插入图片描述
nginx备份恢复测试
备份测试
查看nginx命名空间下的nginx
在这里插入图片描述
备份nginx空间,备份名称为nginx-backup

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

查看备份状态,状态为Completed表示备份成功
velero backup get --namespace velero
在这里插入图片描述查看备份位置
velero backup-location get

在这里插入图片描述恢复测试
由于上面备份的是整个nginx空间,所以可以连同ns一起删除
通过上面备份文件nginx-backup文件恢复
velero restore create --from-backup nginx-backup --wait
在这里插入图片描述nginx空间下所有资源已经恢复
在这里插入图片描述

跨集群数据迁移

将本集群的数据迁移至其他集群,理论上完成3步骤即可:
1.镜像上传
本例中本集群 和 其他集群使用了相同的初始化步骤,且网络互通,因此无需上传镜像。
2.部署velero
在其他集群上相同的步骤(两个集群连接同一个对象存储服务)
3.使用velero恢复指定的备份源
在恢复时,目标集群只需要执行velero restore 命令,即可完成集群迁移。
在这里插入图片描述
演示
部署完成之后,进行nginx整个空间恢复

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

在这里插入图片描述
另一个集群已经有了nginx空间下的所有资源
在这里插入图片描述

跨集群跨版本测试(k8s1.25-1.23)

备份测试

查看mysql名称空间下的资源(hostPath存储)
在这里插入图片描述
在mysql创建库表
在这里插入图片描述
在这里插入图片描述
备份mysql空间,备份名称为backup

velero backup create backup --include-namespaces mysql

查看备份状态,状态为Completed表示备份成功

velero backup get --namespace velero

在这里插入图片描述
可以在minio上查看备份数据
在这里插入图片描述

恢复测试

由于上面备份的是整个mysql空间,所以直接在其他集群恢复

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

在这里插入图片描述
空间下所有资源已经迁移成功
在这里插入图片描述
查看库表(没有)
在这里插入图片描述

问题

我在源mysql创建的库表,没还原出来。
跨集群跨版本测试(k8s1.23-1.19集群网络打通,使用同一个共享存储(pv))
恢复之前先停掉原先的es
创建es,类型为deployment,挂载pvc,创建在es名称空间。
在这里插入图片描述往es里插入几条索引
查看索引:

curl -XGET '192.168.123.240:30920/_cat/indices?v&pretty'

在这里插入图片描述

备份数据

创建整个es名称空间的备份为es-backup

velero backup create es-backup --include-namespaces es

在这里插入图片描述

恢复数据

先停掉原先的es
另一个集群执行命令

velero restore create --from-backup es-backup --wait

在这里插入图片描述
查看es名称空间
在这里插入图片描述
查看pv、pvc
在这里插入图片描述
查看索引:

curl -XGET '192.168.123.91:30920/_cat/indices?v&pretty'

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【含开题报告+文档+PPT+源码】基于SSM框架的诗词吟诵知识学习系统的设计与实现

开题报告 随着信息技术的迅猛发展和互联网的普及&#xff0c;在线教育逐渐成为现代教育的重要形式。在线学习平台以其便捷性、灵活性和个性化等特点&#xff0c;受到广大师生的青睐。特别是在线吟诵知识学习&#xff0c;已经成为许多学生提升自我修养、陶冶情操的重要途径。青…

Google DeepMind推出DemoStart自主强化学习方法 利用少量示范样本实现复杂操作任务

一直以来&#xff0c;研究人员都在试图开发出能够在现实环境中安全、高效地执行复杂任务&#xff08;如多指手操作&#xff09;的机器人技能。传统的机器人学习方法往往需要大量的实际数据&#xff0c;这不仅耗时耗力&#xff0c;还存在安全风险。因此&#xff0c;仿真环境下的…

Netty简单应用

1.服务端构建 接收客户端请求&#xff0c;打印请求消息&#xff1b;消息采用内置String作为编码与解码器&#xff1b;开启信息输入监听线程&#xff0c;发送消息至客户端&#xff1b; 1.1 服务端消息处理类 import io.netty.channel.Channel; import io.netty.channel.Chann…

双十一好物必买清单攻略,这几款双十一必入的宝藏好物分享

随着双十一购物节的脚步日益临近&#xff0c;无数消费者都在期待着在这个年度大促中抢购到自己心仪已久的好物&#xff0c;为了帮助大家更好地规划购物计划&#xff0c;精选出真正值得入手的宝藏产品&#xff0c;我们特别整理了这份双十一好物必买清单攻略&#xff0c;无论你是…

spring day1023

ok了家人们&#xff0c;今天继续学习spring框架&#xff0c; 七.Spring的注解开发 在开发中&#xff0c;配置文件中 Bean 标签会非常多&#xff0c;难以维护。怎么 办&#xff1f; 使用注解的形式替代 xml 配置&#xff0c;可以将一些繁杂的 spring 配置 从工程中消除掉&…

业余时间试一试利用AI 人工智能赚钱

内容创作与写作&#xff1a; 撰写文章&#xff1a;许多网站、博客和企业都需要大量的优质内容。利用 AI 工具如 ChatGPT 等&#xff0c;获取文章的思路、框架甚至初稿&#xff0c;然后根据自己的知识和经验进行修改、润色和完善。你可以在一些自由撰稿人平台、内容创作平台上承…

智能园艺:Spring Boot植物健康系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理植物健康系统的相关信息成为必然。开发合适…

es索引库操作和使用RestHignLevelClient客户端操作es

目录 es索引库操作 mapping映射操作 索引库的CURD操作 1.创建索引库和映射 ​编辑 2.查询索引库 3.删除索引库 4.修改索引库 5.总结 文档的CURD操作 1.新增文档 2.查询文档 3.删除文档 4.修改文档 全量修改 增量修改 5.总结 RestAPI 使用API例子 需要的数…

一文掌握异步web框架FastAPI(五)-- 中间件(测试环境、访问速率限制、请求体解析、自定义认证、重试机制、请求频率统计、路径重写)

接上篇:一文掌握异步web框架FastAPI(四)-CSDN博客 目录 七、中间件 15、测试环境中间件 16、访问速率限制中间件,即限制每个IP特定时间内的请求数(基于内存,生产上要使用数据库) 1)限制单ip访问速率 2)增加限制单ip并发(跟上面的一样,也是限制每个IP特定时间内的请…

大模型算法二次开发,基本思路详细拆解

[ 导读 随着众多大模型相继问世&#xff0c;大模型二次开发、大模型微调成为一项热门技术。本文为大家总结了大模型二次开发的基本方法与思路&#xff0c;希望对大家有所帮助。 开发方法分类 1、领域知识注入&#xff1a;Continue PreTraining(增量预训练),一般垂直大模型是…

(STM32笔记)十二、DMA的基础知识与用法

我用的是正点的STM32F103来进行学习&#xff0c;板子和教程是野火的指南者。 之后的这个系列笔记开头未标明的话&#xff0c;用的也是这个板子和教程。 DMA的基础知识与用法 一、DMA功能框图1、DMA请求2、通道3、仲裁器 二、DMA传输设置1、数据来源与数据去向外设到存储器存储器…

Lua环境安装

软考鸭微信小程序 学软考,来软考鸭! 提供软考免费软考讲解视频、题库、软考试题、软考模考、软考查分、软考咨询等服务 Lua是一种轻量级、小巧且易于嵌入应用程序的脚本语言&#xff0c;广泛用于游戏开发、Web开发、自动化脚本等领域。本文将详细介绍如何在不同操作系统上安装L…

蓝桥杯注意事项

蓝桥杯注意事项 比赛注意事项 能暴力枚举就暴力枚举&#xff0c;能用简单的思路做就尽量用简单的思路做。认真审核题目的题意和输入输出的要求&#xff0c;避免因为误解题意而导致题目错误。对于提供多组测试样例或者需要对一个过程重复进行循环的代码&#xff0c;要时刻记住…

六大设计原则之一——单一职责原则

单一职责原则 面向对象三大特性之一的 封装 指的就是将单一事物抽象出来组合成一个类&#xff0c;所以我们在设计类的时候每个类中处理的是单一事物而不是某些事物的集合。 设计模式中所谓的 单一职责原则(Single Responsibility Principle - SRP)&#xff0c;就是对一个类而…

autMan奥特曼机器人-实时翻译的用法

一、基本配置 访问并登录百度翻译开放平台&#xff1a;https://api.fanyi.baidu.com/ 进入开发者信息获取 APP ID和密钥&#xff0c;并开通“通用文本翻译”服务 autMan应用市场->我的->找到“实时翻译”插件安装后去点击“配参” 二、使用示例 假如你和一个俄国人聊…

C程序设计语言精髓 单向链表

目录 单向链表---定义 单向链表---建立 单向链表---删除 单向链表---插入​ 单向链表---输出​ 单向链表---定义 单向链表---建立 单向链表---删除 单向链表---插入 单向链表---输出

Visual Studio安装图文详解教程

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 教程说明 本教程旨在详细介绍 Visual Studio 社区版的安装过程及其注意事项。 Visual Studio简介 Visual Studio 社区版功能完备且可扩展的免费 IDE&#xff0c;可用于创…

【通俗理解】Neurosymbolic AI——融合神经网络与符号推理的智慧之力

【通俗理解】Neurosymbolic AI——融合神经网络与符号推理的智慧之力 关键词提炼 #Neurosymbolic AI #神经网络 #符号推理 #感知能力 #逻辑能力 #认知水平 #智慧与力量 第一节&#xff1a;Neurosymbolic AI的类比与核心概念 Neurosymbolic AI就像是给神经网络这位“大力士”…

神策数据客户旅程 GPT:以 AI 驱动客户旅程及埋点落地

数据驱动时代&#xff0c;随着 AI 在数据处理及分析方面的能力日渐强大&#xff0c;将二者结合&#xff0c;可以帮助企业效能提升&#xff0c;获取更多商业价值。 我们在 AI 大模型探索过程中发现&#xff0c;产品经理、技术人员、市场营销人员以及需要数据驱动决策的团队&…

基于opencv的人脸闭眼识别疲劳监测

1. 项目简介 本项目旨在实现基于眼部特征的眨眼检测&#xff0c;通过监测眼睛开闭状态来计算眨眼次数&#xff0c;从而应用于疲劳监测、注意力检测等场景。使用了面部特征点检测算法&#xff0c;以及眼部特征比率&#xff08;EAR, Eye Aspect Ratio&#xff09;来判断眼睛的闭…