在 Kubernetes(K8s)中,备份和恢复是保障数据安全与业务连续性的关键环节,主要方式包括 ETCD 备份恢复 和 Velero 备份恢复,两者在备份粒度、恢复影响范围、存储位置等方面存在以下差异:

1、ETCD 备份恢复:ETCD 是 K8s 集群的分布式键值存储系统,保存着所有资源对象(如 Pod、Service、ConfigMap 等)的配置数据。备份 ETCD 即备份集群的全局状态。

2、Velero 备份恢复:Velero 是专为 K8s 设计的云原生备份恢复工具,支持备份资源对象(如 Deployment、PVC)和持久化卷(PV)数据,存储至对象存储(如阿里云 OSS、S3、MinIO)。

差异对比:

对比维度etcd 备份Velero
备份层级集群级(底层存储)应用级(API 对象)
备份内容所有 Kubernetes 资源的元数据(存储在 etcd 中)Kubernetes 资源(Deployment、Service、PV 等) + 持久卷(PV)中的实际数据(通过 Restic/CSI)
是否备份 PV 数据❌ 不备份✅ 支持(Restic 或 CSI 插件)
备份粒度全量备份(整个集群)✅ 支持按命名空间、标签、资源类型进行选择性备份
恢复粒度全量恢复(覆盖整个集群)✅ 支持选择性恢复(如只恢复某个命名空间或 Deployment)
跨集群恢复❌ 困难(需相同架构、证书、IP 等)✅ 支持跨集群、跨云、跨 Kubernetes 版本迁移
恢复影响恢复即覆盖,影响所有服务可仅恢复部分资源,不影响其他服务
备份目标本地磁盘、NFS、S3 兼容存储OSS、S3、MinIO、Azure Blob、GCS 等对象存储
是否影响运行中集群备份时建议暂停 API Server(或使用快照)✅ 无影响,备份在运行时进行
适用场景集群完全崩溃后的“终极恢复”日常备份、灾难恢复、跨集群迁移、CI/CD 回滚
部署复杂度无需额外部署需部署 Velero Server 和插件
推荐用途“最后一道保险”“日常防护 + 快速恢复”

本文主要是基于Velero + 阿里云 OSS 完整部署文档:使用 Velero 为 Kubernetes 集群创建备份,并将备份数据安全存储到阿里云对象存储服务 (OSS)。

一、下载 Velero CLI

需要访问githup,如果下载不了可以使用此链接,下载后上传至服务器。

velero-v1.13.0-linux-amd64.tar.gz提取码:vo66

# 下载指定版本(以 v1.13.0 为例,支持 amd64)
wget https://github.com/vmware-tanzu/velero/releases/download/v1.13.0/velero-v1.13.0-linux-amd64.tar.gz# 解压
tar -xvzf velero-v1.13.0-linux-amd64.tar.gz# 将 velero 二进制文件移动到 /usr/local/bin(需要 sudo 权限)
sudo mv velero-v1.13.0-linux-amd64/velero /usr/local/bin/velero# 验证安装
velero version

如图:

二、部署 Velero 服务端

📋 前提条件

确保 kubectl 已配置好集群访问(~/.kube/config 正确)Velero CLI 会自动读取 kubectl 的配置来连接集群

准备阿里云 oss 获取的 AccessKey ID 和 AccessKey Secret

已创建 Bucket(例如:velero-bakup)。

位于目标区域(例如:cn-hangzhou)。

1、将 AccessKey 信息保存为本地文件 credentials-velero,格式如下:

#注意前后空格
[default]
aws_access_key_id = <您的AccessKey ID>
aws_secret_access_key = <您的AccessKey ID>

1、安装 Velero  

velero install 命令

注:使用 velero-plugin-for-aws:v1.3.0 插件,并设置 s3ForcePathStyle=false

#velero install 命令是 velero CLI 工具自带的核心功能。是一个高度封装的、面向用户的“一键式”安装工具,它内部实际上就是生成 Kubernetes 资源清单(YAML)并调用 kubectl 应用到集群中velero install \--image registry.aliyuncs.com/elvin/velero:v1.13.2 \--plugins velero/velero-plugin-for-aws:v1.3.0 \--provider aws \--bucket 你创建的bucket \--prefix Bucket内的备份目录 \--secret-file ./credentials-velero \--use-node-agent \--use-volume-snapshots=false \--backup-location-config region=cn-hangzhou,s3ForcePathStyle=false,s3Url=https://oss-cn-hangzhou.aliyuncs.com \--wait

参数说明

  • --image: Velero 服务器镜像。
  • --plugins关键! 使用 v1.3.0 版本插件以避免 aws-chunked 问题。
  • --provider aws: 虽然对接 OSS,但使用 AWS 兼容模式。
  • --bucket: 您的 OSS Bucket 名称。
  • --prefix: Bucket内的备份目录。
  • --secret-file: 包含 AccessKey 的文件。
  • --use-node-agent: 启用节点代理进行更高效的备份。
  • --use-volume-snapshots=false: 禁用云平台快照(除非您配置了 CSI Snapshot)。
  • --backup-location-config: 配置 OSS 终端节点。
    • region: OSS Bucket 所在区域。
    • s3ForcePathStyle=false至关重要!使用路径式访问 (https://oss-cn-hangzhou.aliyuncs.com/opple-road-bak/...),避免虚拟托管式域名 (https://opple-road-bak.oss-cn-hangzhou.aliyuncs.com) 带来的 SecondLevelDomainForbidden 错误。
    • s3Url: OSS 的外网或内网 Endpoint。

2、验证

#查看Velero 的 Kubernetes Pod 是否成功创建、调度并处于 Running 状态
kubectl get pod -n velero #查看客户端 (CLI) 和服务器端 (Server) 整体连通性和基本健康状态
velero version#查看Velero 的 Backup Storage Location (BSL) 是否被正确配置,并且 Velero 服务端能否成功连接到 OSS Bucket
velero get backup-location

 手动创建一个备份:

#验证 Velero 备份功能是否真正,创建一个名为 nacos-test1 的备份,只备份nacos这一个命名空间
velero backup create nacos-test1 --include-namespaces nacos --wait

提示 Backup completed with status: Completed. 备份成功,在阿里云上可以查看

三、备份与恢复

功能命令
查看备份velero backup get
查看恢复velero restore get
查看定时任务velero schedule get
创建备份velero backup create NAME --include-namespaces NS
恢复备份velero restore create NAME --from-backup BACKUP
查看详情velero backup/restore describe NAME
查看日志velero backup/restore logs NAME

使用 Schedule 定时备份()

如果期望定期备份某个命名空间,使用用定时任务

#每天凌晨 2 点自动备份 test 命名空间下的所有资源,并使用 Restic 备份持久卷(PV)数据
velero schedule create test-daily \--schedule="0 2 * * *" \--include-namespaces test \--use-restic

这样每天会自动创建类似这样的备份:

test-daily-20250829020001
test-daily-20250830020001
# 删除定时任务
velero schedule delete test-daily --confirm# 查看某个定时任务详情
velero schedule describe test-daily

四、卸载重新部署

velero uninstall --wait

五、踩坑记录

以下是我在部署过程中遇到的所有典型错误、日志和对应的解决方案

❌ 问题 1: SecondLevelDomainForbidden - 虚拟托管式域名被禁用

🔍 错误日志

api error SecondLevelDomainForbidden: Please use virtual hosted style to access.

📌 错误原因

阿里云 OSS 的部分 Bucket(尤其是新创建或启用了特定功能的 Bucket)强制要求使用虚拟主机风格(Virtual Hosted-Style)访问
若配置中设置了 s3ForcePathStyle=true,则 SDK 会使用路径风格(Path-Style)请求,导致被拒绝。

  • 路径风格(Path-Style)示例
    https://oss-cn-hangzhou.aliyuncs.com/my-bucket/path/to/object
  • 虚拟主机风格(Virtual Hosted-Style)示例
    https://my-bucket.oss-cn-hangzhou.aliyuncs.com/path/to/object

✅ 解决方案

s3ForcePathStyle 设置为 false,允许 SDK 使用虚拟主机风格访问 OSS。

⚠️ 注意:Bucket 名称必须全局唯一,且不能包含大写字母或特殊字符。


❌ 问题 2: InvalidArgument - 不支持 aws-chunked 编码

error="rpc error: code = Unknown desc = InvalidArgument: null
status code: 400, request id: ..., host id: ...
The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256."
x-amz-content-sha256: STREAMING-AWS4-HMAC-SHA256-PAYLOAD

📌 原因分析

  • 使用了基于 AWS SDK for Go v2 的 velero-plugin-for-aws 插件(如 v1.9.2)。
  • 该 SDK 在上传大文件时使用 aws-chunked 流式编码(即 STREAMING-AWS4-HMAC-SHA256-PAYLOAD)。
  • 阿里云 OSS 不支持 aws-chunked 编码,因此返回 400 InvalidArgument
❌ 错误尝试

尝试通过配置禁用校验和:

checksumAlgorithm: none
# 或
md5: true

→ 结果:插件不支持该字段,报 invalid checksum algorithm。失败!!!


✅ 根本解决方案

降级 Velero AWS 插件至兼容版本

使用基于 AWS SDK for Go v1 的插件版本 —— velero-plugin-for-aws:v1.3.0

错误现象原因解决方案
Error getting backup store... invalid checksum algorithm: none 或 md5使用了 v1.5.0+ 的 velero-plugin-for-aws,该版本不正确处理 checksumAlgorithm 或强制使用 aws-chunked降级插件:使用 velero-plugin-for-aws:v1.3.0
Error: InvalidArgument (上传时)SDK 使用了 aws-chunked 编码,OSS 不支持。降级插件:使用 v1.3.0 版本。
Backup Storage Location is Unavailable凭证错误、网络不通、Bucket 不存在或权限不足。1. 检查 credentials-velero 文件。<br>2. 检查 velero pod 日志 (kubectl logs deploy/velero -n velero)。<br>3. 检查 OSS Bucket 名称、区域和 RAM 权限。

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

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

相关文章

解构与重构:“真人不露相,露相非真人” 的存在论新解 —— 论 “真在” 的行为表达本质

解构与重构&#xff1a;“真人不露相&#xff0c;露相非真人” 的存在论新解 —— 论 “真在” 的行为表达本质绪论&#xff1a;传统解释的突围 —— 从 “藏才” 到 “存真”“真人不露相&#xff0c;露相非真人” 这句谚语&#xff0c;自明代《西游记》以降&#xff0c;便长期…

数据结构:哈希表、排序和查找

一、哈希算法1.将数据通过哈希算法映射成一个健值&#xff0c;存取都在同一个位置&#xff0c;实现数据的高效存储和查找&#xff0c;时间复杂度由O(n)->O(1)2.哈希碰撞&#xff1a;多个数据通过哈希算法得到的键值相同二、哈希表1.构建哈希表存放0-100之间的数据2.哈希算法…

【Java基础】Java I/O模型解析:BIO、NIO、AIO的区别与联系(Netty入门必备基础)

Java I/O模型深度解析&#xff1a;BIO、NIO、AIO的区别与联系 引言 在Java的网络编程与文件操作中&#xff0c;I/O&#xff08;输入/输出&#xff09;模型是绕不开的核心话题。从早期的BIO&#xff08;Blocking I/O&#xff09;到Java 1.4引入的NIO&#xff08;Non-blocking I/…

windows PowerToys之无界鼠标:一套键鼠控制多台设备

&#x1f4bb;简介 在多设备协作的工作场景中&#xff0c;如何实现一套键鼠控制多台设备了&#xff1f;微软推出的 PowerToys 工具集中的 Mouse Without Borders&#xff08;无界鼠标&#xff09;&#xff0c;通过软件层实现跨设备的键鼠共享与数据同步功能&#xff0c;为多台…

一道比较难的sql题,筛选出重复字段的行数

select * from 导入数据表; id city_column 1 北京,上海,广州 2 上海,上海,深圳 3 北京,杭州,北京 4 上海,广州,深圳select substring_index(khmc,,,1), * from 导入数据表 truncate table 导入数据表 select count(distinct khmc) from 导入数据表; …

【K8s】整体认识K8s之与集群外部访问--service

这一篇文章主要是对service发现新的理解 为什么要使用service服务发现&#xff1f; 首先pod的IP&#xff0c;是动态的&#xff0c;当我们重启一个pod的时候&#xff0c;它会给它分配一个新的IP&#xff0c;但是如果微服务a想要去调用微服务b&#xff0c;他是需要知道微服务b所有…

k8s(自写)

kubernetes k8s是什么&#xff1f;Kubernetes是什么&#xff1f;架构是怎么样的&#xff1f;6分钟快速入门_哔哩哔哩_bilibili kubernetes是google开源神器&#xff0c;介于应用服务和服务器之间&#xff0c;能够通过策略协调和管理多个应用服务&#xff0c;只需要一个yaml文…

实现微信小程序的UniApp相机组件:拍照、录像与双指缩放

在微信小程序开发中&#xff0c;相机功能已成为许多应用的核心组成部分。本文将介绍如何使用UniApp框架实现一个功能丰富的相机组件&#xff0c;支持拍照、录像、前后摄像头切换以及双指缩放等功能。功能概述这个相机组件具备以下核心功能&#xff1a;拍照功能&#xff1a;支持…

python pyqt5开发DoIP上位机【诊断回复的函数都是怎么调用的?】

目录 文章合集 一、底层网络接收:`_receive_loop`(触发起点) 调用时机: 核心代码: 作用: 二、数据解析:`handle_received_data`(判断是否为诊断回复) 调用时机: 核心代码(诊断回复相关部分): 作用: 三、UI显示:`add_trace_entry`(展示到界面) 调用时机: 信号…

谈物质的运动与运动的物质

运动的物质是不是物质的运动&#xff0c;如果假设是&#xff08;第一假设&#xff09;&#xff0c;那末运动的物质是物质的运动&#xff0c;而运动是物质的根本属性&#xff0c;又运动的物质是物质&#xff0c;则物质的运动是物质&#xff0c;既然运动是物质的根本属性&#xf…

【MLLM】多模态理解Ovis2.5模型架构和训练流程

note 模型架构&#xff1a;延续 Ovis 系列创新的结构化嵌入对齐设计。 Ovis2.5 由三大组件构成&#xff1a;动态分辨率 ViT 高效提取视觉特征&#xff0c;Ovis 视觉词表模块实现视觉与文本嵌入的结构对齐&#xff0c;最后由强大的 Qwen3 作为语言基座&#xff0c;处理多模态嵌…

3.3单链表专题

顺序表这种在标准库已经实现好了&#xff0c;直接调用 pushback pushfront 这些o(1)表示不额外开辟空间src为value继续走&#xff0c;下一个不是value&#xff0c;src值给dst空间&#xff0c;dst&#xff0c;dst刚好等于2&#xff0c;就是新数组长度。若从前向后两个数组元素依…

linux系统学习(15.启动管理)

目录 一、运行级别 1.运行级别 2.运行级别命令 (1)runlevel (2)init 运行级别 3.永久修改启动级别&#xff08;ubantu20.04&#xff09; 二、启动过程 &#x1f539; 总结 三、启动引导程序grub配置文件 一、运行级别 1.运行级别 2.运行级别命令 (1)runlevel (2)ini…

检索优化-混合检索

混合检索&#xff08;Hybrid Search&#xff09;是一种结合了 稀疏向量&#xff08;Sparse Vectors&#xff09; 和 密集向量&#xff08;Dense Vectors&#xff09; 优势的先进搜索技术。旨在同时利用稀疏向量的关键词精确匹配能力和密集向量的语义理解能力&#xff0c;以克服…

Day17(前端:JavaScript基础阶段)

接续上文:Day16(前端:JavaScript基础阶段)_前端题目 csdn-CSDN博客 点关注不迷路哟。你的点赞、收藏&#xff0c;一键三连&#xff0c;是我持续更新的动力哟&#xff01;&#xff01;&#xff01; 主页:一位搞嵌入式的 genius-CSDN博客 系列文章专栏: https://blog.csdn.ne…

OpenCV 轮廓分析实战:从检测到形状匹配的完整指南

轮廓&#xff08;Contour&#xff09;是图像中连续且具有相同灰度值的像素集合&#xff0c;是描述目标形状、位置和结构的核心特征。在计算机视觉中&#xff0c;轮廓分析广泛应用于目标定位、形状识别、尺寸测量等场景&#xff08;如工业零件检测、手写数字识别&#xff09;。本…

2025最新uni-app横屏适配方案:微信小程序全平台兼容实战

以下为uni-app实现微信小程序横屏适配技术方案&#xff0c;包含核心原理、配置方法、代码示例和注意事项&#xff1a;一、横屏适配原理 微信小程序默认采用竖屏模式&#xff0c;横屏适配需通过以下机制实现&#xff1a; 全局配置&#xff1a;在app.json中声明支持横屏页面级配置…

深入解析Nginx常见模块1

在Web服务器和反向代理服务器领域,Nginx凭借其高性能、稳定性和丰富的功能获得了广泛的应用。本文将介绍一些Nginx中常见的模块,帮助你更好地理解和使用它们。 Nginx模块简介 Nginx的模块系统是其强大功能的核心所在,它允许用户根据需要灵活配置服务器的行为。Nginx的模块大…

浅谈new与::operator new

目录 前言 1.为什么C要引入new/delete&#xff1f; 2.operator new与operator delete函数 它们的实际作用 Placement New&#xff08;定位new表达式&#xff09; 总结 前言 在写上一篇博客“vector的模拟实现”时&#xff0c;我一直很好奇vector的private成员为什么要用三个封…

Java中Integer转String

在 Java 中&#xff0c;将 Integer 转换为 String 有多种方法&#xff0c;以下是常见的几种方式&#xff1a;1. 使用 Integer.toString() 方法javaInteger num 123; String str Integer.toString(num); // 直接调用 Integer 的静态方法2. 使用 String.valueOf()javaInteger n…