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.config

kubectl 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.config

kubectl config set-context velero-user@k8s-cluster1 \
--cluster=k8s-cluster1 --user=velero-user \
--kubeconfig=/data/velero/velero-user.confi

kubectl 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:31900

velero 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'

在这里插入图片描述

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

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

相关文章

【Linux】【Jenkins】后端maven项目打包教程-Linux版

本次安装版本&#xff1a;2.4 jenkins详细安装教程1、安装git环境2、安装mavne环境2.1 下载依赖2.2、解压、赋权2.2、配置环境变量2.3、验证安装 3、jenkins-插件下载3.1、进入jenkins-->系统管理3.2、进入系统管理-->插件管理3.3、下载两个插件&#xff08;如果之前下载…

创建GitHub仓库和Git更换远程仓库

文章为个人笔记&#xff0c;详情请看reference 创建 GitHub 创建好账号点击自己头像&#xff0c;出现下拉菜单&#xff0c;点击Your profile 创建成功如下 下载Git 绑定用户 设置ssh-key ssh-keygen -t rsa -C “xxxxxx163.com 之后一直en回车 C:\Users\Y\ .ssh id_rsa…

数据不裸奔:如何确保AI分析顾客数据时的隐私保护

在这个信息爆炸的时代&#xff0c;数据已成为最宝贵的资源之一。人工智能&#xff08;AI&#xff09;技术的发展&#xff0c;使得我们能够从海量数据中提取有价值的信息&#xff0c;为商业决策提供支持。然而&#xff0c;随着AI在数据分析领域的广泛应用&#xff0c;顾客隐私保…

Leetcode 1857. 有向图中最大颜色值

1.题目基本信息 1.1.题目描述 给你一个 有向图 &#xff0c;它含有 n 个节点和 m 条边。节点编号从 0 到 n – 1 。 给你一个字符串 colors &#xff0c;其中 colors[i] 是小写英文字母&#xff0c;表示图中第 i 个节点的 颜色 &#xff08;下标从 0 开始&#xff09;。同时…

免费版视频压缩软件:让视频处理更便捷

现在不少人已经习惯通过视频来记录生活、传播信息和进行娱乐的重要方式。但是由于设备大家现在录制的文件都会比较大&#xff0c;这时候就比较需要一些缩小视频的工具了。今天我们一起来探讨视频压缩软件免费版来为我们带来的生动世界。 1.Foxit视频压缩大师 链接直达&#x…

《深度学习》【项目】自然语言处理——情感分析 <上>

目录 一、项目介绍 1、项目任务 2、评论信息内容 3、待思考问题 1&#xff09;目标 2&#xff09;输入字词格式 3&#xff09;每一次传入的词/字的个数是否就是评论的长度 4&#xff09;一条评论如果超过32个词/字怎么处理&#xff1f; 5&#xff09;一条评论如果…

[每周一更]-(第119期):“BP”大揭秘:生物学与金融学中的微小单位竟有如此大不同!

最近&#xff08;2024.09.29&#xff09;央行要把存量房贷在LPR&#xff08;贷款市场报价利率&#xff09;基础上&#xff0c;降低30BP&#xff0c;刚好基因行业内&#xff0c;也有bp的概念&#xff0c;通过发音无法区分&#xff0c;以下就讲解下生物学的bp和金融学的BP的概念的…

【汇编语言】寄存器(内存访问)(三)—— 字的传送

文章目录 前言1. 字的传送2. 问题一3. 问题一的分析与解答4. 问题二5. 问题二的分析与解答结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言…

Linuxtop命令查看CPU、内存使用率、解释

1. top 命令 top 是最常用的实时监控工具之一&#xff0c;可以显示 CPU 的总利用率以及各个进程的 CPU 使用情况。在Linux命令行直接输入top即可查看动态原始数据 top 在 top 命令的输出中&#xff0c;最上面的一行会显示 CPU 的使用情况&#xff1a; us&#xff08;User&a…

day01-Qt5入门

day01-Qt5入门 1.下载Qtcreate 官网地址&#xff1a;http://qt-project.org/downloads 2.配置环境变量 将类似于 D:\Qt\Qt5.1.1\5.1.1\mingw48_32\bin 的目录添加到环境变量中 3.创建一个新项目 输入自己的项目名称&#xff0c;后面默认下一部 4.运行第一个项目 在窗口…

CentOS 7 yum失效的解决办法

文章目录 一、CentOS 7停止维护导致yum失效的解决办法解决方案 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、CentOS 7停止维护导致yum失效的解决办法 020 年&#xff0c;CentOS 项目与红帽联合宣布将全部投资转向 CentOS Stream&#xff0c;这是…

Windows环境apache控制台命令行启动、停止、重启httpd服务

Windows环境apache控制台命令行启动、停止、重启httpd服务 启动&#xff1a;httpd -k start 重启&#xff1a;httpd -k restart 停止&#xff1a;httpd -k stop 需指定服务的名称&#xff1a;后面各自加上 -n 服务名 例如&#xff1a;启动指定服务的名称 httpd -k start -n 服务…

LDR6500协议芯片:诱骗取电协议,OTG数据同时实现功能芯片

在当前的电子设备市场中&#xff0c;随着USB Type-C接口的广泛应用&#xff0c;用户对充电和数据传输的需求日益提升。为了满足这一需求&#xff0c;乐得瑞科技凭借其深厚的技术积累和创新能力&#xff0c;推出了LDR6500——一款专为USB Type-C Bridge设备设计的USB PD&#xf…

CVE-2024-30269 DataEase配置信息泄露

文章目录 免责声明漏洞描述fofa影响版本漏洞复现nuclei修复建议 免责声明 本文章仅供学习与交流&#xff0c;请勿用于非法用途&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 漏洞描述 DataEase是一个开源的数据可视化分析工具&#xff0c;可以连接…

IPv6 DNS简介

IPv6网络中的每台主机都是由IPv6地址来标识的&#xff0c;用户只有获得待访问主机的IPv6地址&#xff0c;才能够成功实现访问操作。对于用户来讲&#xff0c;记住主机的IPv6地址是相当困难的&#xff0c;因此设计了一种字符串形式的主机命名机制&#xff0c;这就是域名系统。用…

Java面试题———SpringBoot篇

目录 1、项目中为什么选择SpringBoot 2、SpringBoot的自动装配原理 3、SpringBoot的核心注解是哪个 4、SpringBoot中的starter是干什么的 5、SpringBoot可以有哪些方式加载配置 6、bootstrap.yml和application.yml有何区别 7、SpringBoot读取配置的方式有几种 8、Spring…

[Vue3核心语法] ref、reactive响应式数据

定义: ref用来定义&#xff1a;基本类型数据、对象类型数据&#xff1b; reactive用来定义&#xff1a;对象类型数据。 使用原则: 若需要一个基本类型的响应式数据&#xff0c;必须使用ref。 若需要一个响应式对象&#xff0c;层级不深&#xff0c;ref、reactive都可以。 …

高斯分布、均值与标准差:详细讲解与案例分析

目录 一、高斯分布的定义二、均值的意义三、标准差的作用四、均值与标准差在高斯分布中的关系五、实际应用中的高斯分布六、总结 高斯分布&#xff0c;又称为正态分布&#xff0c;是统计学和概率论中最重要的分布之一。它不仅在理论上有着极其重要的地位&#xff0c;而且在实际…

从HCI和空口分析HFP通话和eSCO建立

背景 HFP作为经典蓝牙通话建立和断开的协商服务&#xff0c;通话数据则是通过eSCO链路进行传输&#xff0c;下面以手机和蓝牙耳机为例&#xff0c;结合HCI和空口分析从HFP连接建立&#xff0c;到AT命令协商会话&#xff0c;再到eSCO通话数据链路的建立 。 1&#xff1a;HFP连…

C# 实操高并发分布式缓存解决方案

1. CAP 原则 CAP 原则也称为布鲁尔定理&#xff0c;由 Eric Brewer 在 2000 年提出&#xff0c;描述了分布式系统中的三个核心属性&#xff1a;一致性&#xff08;Consistency&#xff09;、可用性&#xff08;Availability&#xff09;、分区容错性&#xff08;Partition Tol…