velero备份k8s集群

流程图

img

img

velero备份原理

  1. 本地 Velero 客户端发送备份指令。
  2. Kubernetes 集群内就会创建一个 Backup 对象。
  3. BackupController 监测 Backup 对象并开始备份过程。
  4. BackupController 会向 API Server 查询相关数据。
  5. BackupController 将查询到的数据备份到远端的对象存储。

velero的特点

  1. 支持kubernetes集群数据备份和恢复
  2. 支持将备份好的数据,恢复到其他kubernetes集群(前提是前一个集群所用到的资源(如存储)以及kubernetes不能夸大版本,否则会恢复不了)

安装minio对象存储

1、下载minio镜像

docker pull minio/minio:latest

2、准备minio挂载目录

mkdir -pv /velvero/data

3、启动minio

docker run --name minio --restart always  -v /velvero/data:/data -d -e "MINIO_ROOT_USER=admin" -e "MINIO_ROOT_PASSWORD=12345678" -p9000:9000 -p 9999:9999 minio/minio:latest  server /data --console-address "0.0.0.0:9999"

MINIO_ROOT_USER= 指定minio用户

MINIO_ROOT_PASSWORD 指定用户密码

--console-address 指定控制台监听地址和端口

4、创建buckets桶

img

img

部署velero

1、下载/配置velero二进制客户端工具

~# wget https://github.com/vmware-tanzu/velero/releases/download/v1.8.1/velero-v1.8.1-linux-amd64.tar.gz
~# tar xvf velero-v1.8.1-linux-amd64.tar.gz 
~# cp velero-v1.8.1-linux-amd64/velero  /usr/local/bin/
~# velero  --help

安装velero资源

1、创建velero-system名称空间

kubectl create ns velero-system

2、创建velero组件

velero --kubeconfig  /root/.kube/config   \
install     --provider aws   --use-restic \
--plugins velero/velero-plugin-for-aws:v1.3.1   \
--bucket velerodata   \
--secret-file ./velero-auth.txt     \
--use-volume-snapshots=false   \
--namespace velero-system \
default-volumes-to-restic \
--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://10.211.55.3:9000

关键参数解读:

--kubeconfig 指定集群认证文件

--provider 声明velero使用的存储插件类型

--use-restic 使用开源免费的备份工具restic备份和还原持久卷数据

--secret-file 指定对象存储的账号密码

--use-volume-snapshots=false 关闭存储卷快照数据快照方式备份

--namespace 指定velero安装在那个名称空间

default-volumes-to-restic使用rustic 来备份所有pod卷,前提是需要提前开启 --use-restic 参数

验证功能

# kubectl get pod -nvelero-system
NAME                      READY   STATUS    RESTARTS   AGE
velero-858b9459f9-m6zm4   1/1     Running   0          46h

查看velero日志

img

日志出现Backup storage location valid, marking as available表示velero运行正常

创建备份

# velero backup create myserver-ns-backup-${DATE} --include-namespaces default 【--kubeconfig=/root/.velero/config】 --namespace velero-system
Backup request "myserver-ns-backup-20220808025816" submitted successfully.
Run `velero backup describe myserver-ns-backup-20220808025816` or `velero backup logs myserver-ns-backup-20220808025816` for more details.

--include-namespaces 指定需要备份的名称空间

--kubeconfig指定k8s认证文件 注意:如果使用的是k8s默认的.kube目录下的认证文件可以不用该参数

--namespace指定velero contallor所在的名称空间

查看velero备份是否成功

  • 1、查看日志
  • 2、get备份信息
# velero backup get -nvelero-system
NAME                                STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
myserver-ns-backup-20220808025954   Completed   0        0          2022-08-08 03:00:02 +0000 UTC   29d       default            <none>
myserver-ns-backup-20220808025816   Completed   0        0          2022-08-08 02:58:19 +0000 UTC   29d       default            <none>
  • 3、查看minio存储桶是否存在数据

img

验证备份带有pvc数据的pod

1、环境准备

  • 1、创建pod、pvc资源
~/manifests# cat pod-pvc.yaml
apiVersion: v1
kind: Pod
metadata:name: test-pvc
spec:containers:- image: nginxname: test-containervolumeMounts:- mountPath: /usr/share/nginx/html/name: test-volumevolumes:- name: test-volumepersistentVolumeClaim:claimName: myclaim~/manifests# cat pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: myclaim
spec:accessModes:- ReadWriteOncevolumeMode: Filesystemresources:requests:storage: 1GistorageClassName: nfs-client~/manifests# kubectl get pod
NAME                                     READY   STATUS    RESTARTS   AGE
test-pvc                                 1/1     Running   0          31s
root@k8s-eploy:~/manifests# kubectl get pvc
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
myclaim   Bound    pvc-f5e4f5d4-c829-49b9-89fa-568587796e46   1Gi        RWO            nfs-client     40s
  • 2、增添数据
:/data/nfs/default-myclaim-pvc-f5e4f5d4-c829-49b9-89fa-568587796e46# ls
root@k8s-eploy:/data/nfs/default-myclaim-pvc-f5e4f5d4-c829-49b9-89fa-568587796e46# echo test pv > index.html
root@k8s-eploy:/data/nfs/default-myclaim-pvc-f5e4f5d4-c829-49b9-89fa-568587796e46# ls
index.html
root@k8s-eploy:/data/nfs/default-myclaim-pvc-f5e4f5d4-c829-49b9-89fa-568587796e46# cat index.html
test pv

2、备份数据

  • 1、执行备份命令
velero backup create  \
default-ns-backup-`date +%Y%m%d%H%M%S` \
--default-volumes-to-restic \ 
--snapshot-volumes  \
--include-namespaces default \ 
-nvelero-systemBackup request "default-ns-backup-20220808131011" submitted successfully.
Run `velero backup describe default-ns-backup-20220808131011` or `velero backup logs default-ns-backup-20220808131011` for more details.
  • 2、查看备份信息
~# velero backup get -nvelero-system
NAME                               STATUS      ERRORS   WARNINGS   CREATED                         EXPIRES   STORAGE LOCATION   SELECTOR
default-ns-backup-20220808131011   Completed   0        0          2022-08-08 13:10:11 +0000 UTC   29d       default            <none>

3、模拟意外删除资源及pvc数据

1、删除pod、pvc及数据

root@k8s-eploy:~/manifests# ls
pod-pvc.yaml  pvc.yaml~/manifests# kubectl delete -f ./
pod "test-pvc" deleted
persistentvolumeclaim "myclaim" deleted/data/nfs# rm -rf archived-default-myclaim-pvc-f5e4f5d4-c829-49b9-89fa-568587796e46

2、还原备份

:/data/nfs# velero restore create \
--from-backup default-ns-backup-20220808131011 \
-nvelero-systemRestore request "default-ns-backup-20220808131011-20220808132317" submitted successfully.
Run `velero restore describe default-ns-backup-20220808131011-20220808132317` or `velero restore logs default-ns-backup-20220808131011-20220808132317` for more details.

3、查看pod数据是否恢复

:/data/nfs# kubectl get pod
NAME                                     READY   STATUS    RESTARTS   AGE
test-pvc                                 1/1     Running   0          49s:/data/nfs# kubectl get pvc
NAME      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
myclaim   Bound    pvc-9bb398e3-0883-402e-a1c7-d345d2cb2750   1Gi        RWO            nfs-client     106s

4、查看pvc数据是否恢复

:/data/nfs/default-myclaim-pvc-9bb398e3-0883-402e-a1c7-d345d2cb2750# ls
index.html

定时备份

Usage:velero schedule create NAME --schedule [flags]Examples:# 每六小时备份一次.所有namespacevelero create schedule NAME --schedule="*/1 * * * *"# 每六小时备份一次.所有namespacevelero create schedule NAME --schedule="@every 6h"# 每24小时备份一次 web namespace的数据velero create schedule NAME --schedule="@every 24h" --include-namespaces web# 7天备份一次所有名称空间数据,备份保存90天velero create schedule NAME --schedule="@every 168h" --ttl 2160h0m0s
 cat deploy.shcat > velero-auth.txt  <<EOF
[default]
aws_access_key_id=admin
aws_secret_access_key=admin123
EOFvelero --kubeconfig ./config   \install     --provider aws   --use-restic \--plugins velero/velero-plugin-for-aws:v1.3.1   \--bucket velero   \--secret-file ./velero-auth.txt     \--use-volume-snapshots=false   \--namespace velero-system \default-volumes-to-restic \--backup-location-config region=minio,s3ForcePathStyle="true",s3Url=http://103.63.139.191:9000

编写好的makefile

.DELETE_ON_ERROR:
TIMESTAMP := $(shell date +%s)
KUBECONFIG=./config
NAMESPACE ?= velero-systemshow:velero backup get -n  $(NAMESPACE) --kubeconfig=$(KUBECONFIG)
deploy:./deploy.sh
un:velero uninstall  -n  $(NAMESPACE) --kubeconfig=$(KUBECONFIG) 
del:@for i in $$(velero backup get -n $(NAMESPACE) --kubeconfig=$(KUBECONFIG) | awk '{print $$1}'); do \velero backup delete $$i -n $(NAMESPACE) --kubeconfig=$(KUBECONFIG); \donebackup-restic:echo "备份带pvc数据的 $(NAMESPACE)"velero backup create $(NAMESPACE)-backup-$(TIMESTAMP) --default-volumes-to-restic --snapshot-volumes         --include-namespaces  $(NAMESPACE)  --kubeconfig=./config   --namespace velero-system
backup:echo "备份不带pvc的$(NAMESPACE)"velero backup create $(NAMESPACE)-backup-$(NAMESPACE) --include-namespaces $(NAMESPACE)  --kubeconfig=$(KUBECONFIG)  --namespace velero-systemrestore:echo "恢复 $(NAMESPACE)"velero restore create --from-backup  $(NAMESPACE)-backup-$(TIMESTAMP)   -n  velero-system ----kubeconfig=$(KUBECONFIG)

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

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

相关文章

VScode配置 github 上传代码

初始化本地库 git init创建本地分支&#xff0c;需要和github分支名字一样 git checkout -b master本地仓库连接远程仓库 git remote add origin 自己的仓库地址云仓库代码同步到本地 git pull origin master上传代码 git push -u origin master

osg三角带

案例1 #include <osg/Geode> #include <osg/Geometry> #include <osgDB/Registry> #include <osgDB/WriteFile> #include <osg/Notify> #include <osg/PrimitiveSet> #include <osgViewer/Viewer> #include <osgUtil/Optimizer&g…

【数据结构】希尔排序

文章目录 前言一、希尔排序的演示图例二、希尔排序&#xff1a;插入排序的优化版本☆三、核心算法思路四、算法思路步骤&#xff08;一&#xff09;预排序 gap>1&#xff08;二&#xff09;gap1 插入排序 完成排序收尾 五、码源详解&#xff08;1&#xff09;ShellSort1 ——…

Linux CentOS7.9安装OpenJDK17

Linux CentOS7.9安装OpenJDK17 一、OpenJDK下载 清华大学开源软件镜像站 国内的站点&#xff0c;下载速度贼快 二、上传解压 文件上传到服务器后&#xff0c;解压命令&#xff1a; tar -zxvf jdk-xxxx-linux-x64.tar.gz三、配置环境 export JAVA_HOME/home/local/java/j…

idea 配置checkstyle全过程

checkstyle是提高代码质量,检查代码规范的很好用的一款工具&#xff0c;本文简单介绍一下集成的步骤&#xff0c;并提供一份完整的checkstyle的代码规范格式文件&#xff0c;以及常见的格式问题的解决方法。 一&#xff0c;安装 打开idea的文件选项&#xff0c;选择设置&…

搜维尔科技:scalefit生物力学人体工学软件分析!

人体工程学分析 21加载参数和头像显示 识别(隐藏的)健康风险 根据DGUV交通灯进行生物反馈(DIN/ISO) 实时应力分析 三维空间可视化 静态/动态肩载 用左/右赋值加载输入 腰椎间盘压缩计算 距离和定时器显示 带有运动跟踪的化身/视频叠加 外骨骼与CAD工作站仿真 CSV原始…

【机器学习合集】模型设计之残差网络 ->(个人学习记录笔记)

文章目录 模型设计之残差网络1. 什么是残差结构1.1 网络加深遇到的优化问题1.2 short connect技术 2. 残差网络及有效性理解2.1 残差网络 3. 残差网络的发展3.1 密集残差网络3.2 更宽的残差网络(wide resnet)3.3 分组残差网络3.4 Dual Path Network3.5 加权残差网络3.6 预激活残…

WIN11如何固定文件夹查看方式

找一个文件夹&#xff0c;设置成自己需要的视图方式 文件夹选项>查看>应用到文件夹 缺点&#xff1a;所有相同类型文件夹都会使用此视图

数据结构——线性表①(顺序表)

一、线性表定义 线性表是一种数据结构&#xff0c;它是由n个具有相同数据类型的数据元素a1,a2,…,an组成的有限序列。 其中&#xff0c;除第一个元素a1外&#xff0c;每一个元素有且只有一个直接前驱元素&#xff0c;除了最后一个元素an外&#xff0c;每一个元素有且只有一个…

【基带开发】AD936验证数据源是连续的

五字节 %% 加载数据文件 BD_fileID fopen(rxdata3qpb.bin,r); % 获取 文件ID DATA_BD fread(BD_fileID,Inf,uint8); % 读取 文件数据 fclose(BD_fileID); …

Redis(11)| 持久化AOF和RDB

一、AOF&#xff08;Append Only File&#xff09; Redis 每执行一条写操作命令&#xff0c;就把该命令以追加的方式写入到一个文件里&#xff0c;然后重启 Redis 的时候&#xff0c;先去读取这个文件里的命令&#xff0c;并且执行它。 注意&#xff1a;只会记录写操作命令&am…

微信小程序:两层循环的练习,两层循环显示循环图片大图(大图显示、多层循环)

效果 代码分析 外层循环 外层循环的框架 <view wx:for"{{info}}" wx:key"index"></view> wx:for"{{info}}"&#xff1a;这里wx:for指令用于指定要遍历的数据源&#xff0c;即info数组。当遍历开始时&#xff0c;会依次将数组中的每…

stable-diffusion 电商领域prompt测评集合

和GhostReivew一个思路&#xff0c;还是从比较好的图片或者是civitai上找一些热门的prompt&#xff0c;从小红书上也找到了不少的prompt&#xff0c;lexica.art上也有不少&#xff0c;主要是为了电商场景的一些测评&#xff1a; 小红书、civitai、Lexica、Liblib.ai、 depth o…

linux 实用命令搜集 —— 筑梦之路

1. xargs命令 # 找出 / 目录下以 .conf 结尾的文件&#xff0c;并进行文件分类find / -name *.conf -type f -print | xargs file# 找出文件并打包find / -name *.conf -type f -print | xargs tar cjf test.tar.gz 2. 查找内存使用量较高的进程 ps -aux | sort -rnk 4 | he…

Leetcode—707.设计链表【中等】双链表的设计明天再写

2023每日刷题&#xff08;十七&#xff09; Leetcode—707.设计链表 设计单链表实现代码 typedef struct Node {int val;struct Node* next; } MyLinkedList;MyLinkedList* myLinkedListCreate() {MyLinkedList* mList (MyLinkedList *)malloc(sizeof(MyLinkedList));mList-&…

linux查看进程占用内存情况

1. free -h free命令可以显示系统中的内存使用情况&#xff0c;包括总内存、已用内存、空闲内存等信息。在终端中输入以下命令即可查看&#xff1a; 3. 虚拟内存之和会超过 机器物理内存 1. 使用top命令 top命令是一个非常强大的系统监视工具&#xff0c;可以实时查看系统的…

Wpf 使用 Prism 实战开发Day02

一.设计首页导航条 导航条的样式&#xff0c;主要是从Material DesignThemes UI 拷贝过来修改的,项目用了这个UI组件库&#xff0c;就看自己需要什么&#xff0c;就去拷过来使用&#xff0c;界面布局或其他组件使用&#xff0c;不做介绍。 直接下载源码&#xff0c;编译运行就可…

关于MySql update语句不能用子查询的解决办法

关于MySql update语句不能用子查询的解决办法 使用MySql数据库语法操作update时&#xff0c;第一时间想到的是一下写法&#xff1a; UPDATE purchase_request_detail SET convert_to_voucher_id2, convert_to_voucher_typeinventory-voucher WHERE detail_id IN (select deta…

背包笔记

01背包 朴素版01背包 cin >> n >> m; f[0][0] 0; for(int i 1; i < n; i ) {for(int j 0; j < m; j ){f[i][j] f[i - 1][j];//第i个物品不选if(j - v[i] > 0){f[i][j] max(f[i][j], f[i - 1][j - v[i]] w[i]);//选第i个物品}} }cout << f[n…

【进程控制⑥】:进程替换/exec*()系列接口

【进程控制⑥】&#xff1a;进程替换/ exec*(&#xff09;系列接口 一.进程替换原理二.替换特点1.独立性2.唯一性3.不变性4.不返回 三.程序替换应用【exec*系列系统调用】①execl&#xff1a;②execlp&#xff1a;③execv&#xff1a;④execle&#xff1a; 一.进程替换原理 我…