基于Velero + 阿里云 OSS的Kubernetes 集群的備份與恢復

在 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…