您的位置:IT爆料网 > 互联网

Longhorn 高级使用之备份恢复与 ReadWriteMany

发布时间:2022-10-28 12:44:08  来源:互联网     背景:

备份恢复

Longhorn 提供了备份恢复功能,要使用这个功能我们需要给卷创建一个 snapshot 快照,快照是 Kubernetes Volume 在任何指定时间点的状态。

在 Longhorn UI 的 Volume 页面中点击要创建快照的卷,进入卷的详细信息页面,点击下方的 Take Snapshot 按钮即可创建快照了,创建快照后,将在卷头(Volume Head)之前的快照列表中可以看到它,比如这里我们会前面测试使用的 mysql 卷创建一个快照:

同样在节点的数据目录下面也可以看到创建的快照数据:

➜ tree /var/lib/longhorn/replicas/pvc-ec17a7e4-7bb4-4456-9380-353db3ed4307-fbf72396/
/var/lib/longhorn/replicas/pvc-ec17a7e4-7bb4-4456-9380-353db3ed4307-fbf72396/
├── revision.counter
├── volume-head-002.img
├── volume-head-002.img.meta
├── volume.meta
├── volume-snap-3b1f877b-24ba-44ec-808e-ab8d4b15f8dd.img
├── volume-snap-3b1f877b-24ba-44ec-808e-ab8d4b15f8dd.img.meta
├── volume-snap-5d403e8e-65e8-46d1-aa54-70aa3280dac4.img
└── volume-snap-5d403e8e-65e8-46d1-aa54-70aa3280dac4.img.meta
0 directories, 8 files

其中的 volume-snap-xxx 后面的数据和页面上的快照名称是一致的,比如页面中我们刚刚创建的快照名称为 3b1f877b-24ba-44ec-808e-ab8d4b15f8dd,其中的 img 文件是镜像文件,而 img.meta 是保持当前快照的元信息:

➜ cat volume-snap-3b1f877b-24ba-44ec-808e-ab8d4b15f8dd.img.meta
{"Name":"volume-head-001.img","Parent":"volume-snap-5d403e8e-65e8-46d1-aa54-70aa3280dac4.img","Removed":false,"UserCreated":true,"Created":"2022-02-22T07:36:48Z","Labels":null}

元信息里面包含父级的文件镜像,这其实表面快照是增量的快照。

此外除了手动创建快照之外,从 Longhorn UI 上还可以进行周期性快照和备份,同样在卷的详细页面可以进行配置,在 Recurring Jobs Schedule 区域点击 Add 按钮即可创建一个定时的快照。

创建任务的时候可以选择任务类型是备份(backup)或快照(snapshot),任务的时间以 CRON 表达式的形式进行配置,还可以配置要保留的备份或快照数量以及标签。

为了避免当卷长时间没有新数据时,recurring jobs 可能会用相同的备份和空快照覆盖旧的备份/快照的问题,Longhorn 执行以下操作:

Recurring backup job 仅在自上次备份以来卷有新数据时才进行新备份Recurring snapshot job 仅在卷头(volume head)中有新数据时才拍摄新快照

此外我们还可以通过使用 Kubernetes 的 StorageClass 来配置定时快照,可以通过 StorageClass 的 recurringJobs 参数配置定时备份和快照,recurringJobs 字段应遵循以下 JSON 格式:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: longhorn
provisioner: driver.longhorn.io
parameters:
numberOfReplicas: "3"
staleReplicaTimeout: "30"
fromBackup: ""
recurringJobs: '[
{
"name":"snap",
"task":"snapshot",
"cron":"*/1 * * * *",
"retain":1
},
{
"name":"backup",
"task":"backup",
"cron":"*/2 * * * *",
"retain":1
}
]'

应为每个 recurring job 指定以下参数:

name:任务的名称,不要在一个 recurringJobs 中使用重复的名称,并且 name 的长度不能超过 8 个字符task:任务的类型,它仅支持 snapshot 或 backupcron:Cron 表达式,指定任务的执行时间retain:Longhorn 将为一项任务保留多少快照/备份,不少于 1

使用这个 StorageClass 创建的任何卷都将自动配置上这些 recurring jobs。

要备份卷就需要在 Longhorn 中配置一个备份目标,可以是一个 NFS 服务或者 S3 兼容的对象存储服务,用于存储 Longhorn 卷的备份数据,备份目标可以在 Settings/General/BackupTarget 中配置,我们这里使用 Helm Chart 安装的,最好的方式是去定制 values 文件中的 defaultSettings.backupTarget,当然也可以直接去通过 Longhorn UI 进行配置,比如这里我们先配置备份目标为 nfs 服务,Backup Target 值设置为 nfs://192.168.31.31:/var/lib/k8s/data(要确保目录存在),Backup Target Credential Secret 留空即可,然后拉到最下面点击 Save:

备份目标配置后,就可以开始备份了,同样导航到 Longhorn UI 的 Volume 页面,选择要备份的卷,点击 Create Backup,然后添加合适的标签点击 OK 即可。

备份完成后导航到 Backup 页面就可以看到对应的备份数据了:

这些备份的数据也会对应一个 backupvolumes crd 对象:

➜ kubectl get backupvolumes -n longhorn-system
NAME CREATEDAT LASTBACKUPNAME LASTBACKUPAT LASTSYNCEDAT
pvc-ec17a7e4-7bb4-4456-9380-353db3ed4307 2022-02-22T09:23:24Z backup-8ae4af9c49534859 2022-02-22T09:23:24Z 2022-02-22T09:41:09Z

然后我们去到 NFS 服务器上查看会在挂载目录下面创建一个 backupstore 目录,下面会保留我们备份的数据:

➜ tree /var/lib/k8s/data/backupstore
/var/lib/k8s/data/backupstore
└── volumes
└── 5e
└── b6
└── pvc-ec17a7e4-7bb4-4456-9380-353db3ed4307
├── backups
│ └── backup_backup-8ae4af9c49534859.cfg
├── blocks
│ ├── 02
│ │ └── 2e
│ │ └── 022eefc6526cd3d8fc3a9f9a4ba253a910c61a1c430a807403f60a2f233fa210.blk
......
│ └── f7
│ └── e3
│ └── f7e3ae1f83e10da4ece5142abac1fafc0d0917370f7418874c151a66a18bfa15.blk
└── volume.cfg

51 directories, 25 files

同样这个时候我们也可以去快照列表选择要备份的快照:

有了备份数据后要想要恢复数据,只需要选择对应的备份数据,点击 Restore Latest Backup 恢复数据即可:

ReadWriteMany

Longhorn 可以通过 NFSv4 服务器暴露 Longhorn 卷,原生支持 RWX 工作负载,使用的 RWX 卷 会在 longhorn-system 命名空间下面创建一个 share-manager- 的 Pod,该 Pod 负责通过在 Pod 内运行的 NFSv4 服务器暴露 Longhorn 卷。

要能够使用 RWX 卷,每个客户端节点都需要安装 NFSv4 客户端,对于 Ubuntu,可以通过以下方式安装 NFSv4 客户端:

➜ apt install nfs-common

对于基于 RPM 的发行版,可以通过以下方式安装 NFSv4 客户端:

➜ yum install nfs-utils

现在我们来创建一个如下所示的 PVC 对象,访问模式配置为 ReadWriteMany:

# html-vol.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: html
spec:
accessModes:
- ReadWriteMany
storageClassName: longhorn
resources:
requests:
storage: 1Gi

直接创建上面的资源对象就会动态创建一个 PV 与之绑定:

➜ kubectl get pvc html
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
html Bound pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15 1Gi RWX longhorn 15s
➜ kubectl get pv pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15 1Gi RWX Delete Bound default/html longhorn 63s

然后创建一个如下所示的名为 writer 的 Deployment 资源对象,使用上面创建的 PVC 来持久化数据:

# html-writer.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: writer
spec:
selector:
matchLabels:
app: writer
template:
metadata:
labels:
app: writer
spec:
containers:
- name: content
image: alpine:latest
volumeMounts:
- name: html
mountPath: /html
command: ["/bin/sh", "-c"]
args:
- while true; do
date >> /html/index.html;
sleep 5;
done
volumes:
- name: html
persistentVolumeClaim:
claimName: html

部署后上面创建的 Longhorn 的卷就变成 Attached 状态了:

并且这个时候会自动启动一个 share-manager 的 Pod,通过该 Pod 内运行的 NFSv4 服务器来暴露 Longhorn 卷:

➜ kubectl get pods -n longhorn-system -l longhorn.io/component=share-manager
NAME READY STATUS RESTARTS AGE
share-manager-pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15 1/1 Running 0 2m16s
➜ kubectl logs -f share-manager-pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15 -n longhorn-system
time="2022-02-22T10:07:42Z" level=info msg="starting RLIMIT_NOFILE rlimit.Cur 1048576, rlimit.Max 1048576"
time="2022-02-22T10:07:42Z" level=info msg="ending RLIMIT_NOFILE rlimit.Cur 1048576, rlimit.Max 1048576"
time="2022-02-22T10:07:42Z" level=debug msg="volume pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15 device /dev/longhorn/pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15 contains filesystem of format " encrypted=false volume=pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15
I0222 10:07:42.432630 1 mount_linux.go:425] Disk "/dev/longhorn/pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15" appears to be unformatted, attempting to format as type: "ext4" with options: [-F -m0 /dev/longhorn/pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15]
I0222 10:07:42.981928 1 mount_linux.go:435] Disk successfully formatted (mkfs): ext4 - /dev/longhorn/pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15 /export/pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15
time="2022-02-22T10:07:43Z" level=info msg="starting nfs server, volume is ready for export" encrypted=false volume=pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15
time="2022-02-22T10:07:43Z" level=info msg="Running NFS server!"
time="2022-02-22T10:07:43Z" level=info msg="starting health check for volume" encrypted=false volume=pvc-a03c5f7d-d4ca-43e9-aa4a-fb3b5eb5cf15

然后我们再创建一个如下所示的 Deployment:

# html-reader.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: reader
spec:
replicas: 3
selector:
matchLabels:
app: reader
template:
metadata:
labels:
app: reader
spec:
containers:
- name: nginx
image: nginx:stable-alpine
ports:
- containerPort: 80
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
persistentVolumeClaim:
claimName: html
---
apiVersion: v1
kind: Service
metadata:
name: reader
spec:
selector:
app: reader
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80

上面的 reader Pods 可以引用 writer Pod 相同的 PVC,是因为上面我们创建的 PV 和 PVC 是 ReadWriteMany 访问模式,直接创建上面的资源对象,我们可以通过 NodePort 来访问应用:

➜ kubectl get pods -l app=reader
NAME READY STATUS RESTARTS AGE
reader-b54c4749d-4bjxf 1/1 Running 0 11s
reader-b54c4749d-5thwz 1/1 Running 0 4m11s
reader-b54c4749d-drcfk 1/1 Running 0 5m35s
➜ kubectl get svc reader
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
reader NodePort 10.101.54.19 80:31800/TCP 84s
➜ curl http://192.168.31.31:31800
......
Tue Feb 22 10:18:39 UTC 2022
Tue Feb 22 10:18:44 UTC 2022
Tue Feb 22 10:18:49 UTC 2022
Tue Feb 22 10:18:54 UTC 2022
Tue Feb 22 10:18:59 UTC 2022
......

现在我们尝试从一个 reader Pod 中去产生一些数据,然后再去访问应用验证数据是否正确:

➜ kubectl exec reader-b54c4749d-4bjxf-- /bin/sh -c "echo longhorn rwx access mode >> /usr/share/nginx/html/index.html"
➜ curl http://192.168.31.31:31800
......
Tue Feb 22 10:23:49 UTC 2022
longhorn rwx access mode

这里我们就验证了在 Longhorn 中使用 ReadWriteMany 访问模式的 Volume 卷。


本文标题:Longhorn 高级使用之备份恢复与 ReadWriteMany - 互联网
本文地址:www.itbaoliao.com/hlw/4248.html

返回网站首页

本文评论
如家被指擅播电影 内设私享院线房播放多部影片
来自海淀法院官网的消息,因认为如家和美酒店管理(北京)有限公司未经许可擅自播放电影《美人鱼》,捷成华视网聚(常州)文化传媒有限公司以侵害作品信息网络传播权纠纷为由将该酒店诉至法院,要求其停止侵权,赔偿经济损失30万元。...
日期:08-21
2022年生肖卡预测攻略 目前最大概率中奖生肖卡
生肖卡预测上微博热搜,网友纷纷吐槽今年是猴年,多次生肖卡开奖都为生肖猴。目前生肖猴中奖概率最大。支付宝生活频道直播五福生肖卡开奖。半小时内,超2000万人涌入观看。在公证处公证员的见证下,开出当日获奖生肖为“猴&rdqu...
日期:08-07
苹果股价再创新高 市值达到了2.8万亿美元
12月8日 消息:苹果股价今天收于历史新高,上涨3.5%,收于171.18美元,股价在盘后交易中也上涨了1%,触及173美元。苹果股价今年上涨了32% 以上,仅在过去一个月就上涨了近14%,该公司的市值达到了2.8万亿美元。在过去的几个...
日期:08-18
张文宏:新冠没有那么吓人但仗难打 防控难度很大
上海复旦大学附属华山医院感染科主任张文宏医生24日凌晨在其微博发文指出,上海是一个超大型的国际城市,这次面对无症状感染为主的奥密克戎毒株攻击,初步发现感染后病例数即呈指数级上升,防控难度很大。按照张文宏的说法,当前采取的策略主要是:滚动筛...
日期:10-20
苹果回应iPhone 12消磁:信用卡不会 房卡建议卡包存放
10月26日消息,对于iPhone12背部内嵌的MagSafe充电器磁铁会让部分卡片消磁的问题,苹果iPhone营销副总裁Kaiann Drance在接受采访时表示,带磁条的信用卡磁力较强,应该不会存在消磁的问题。...
日期:10-09
小黄车戴威再被限制高消费
【TechWeb】企查查APP显示,近日,OFO小黄车关联公司东峡大通(北京)管理咨询有限公司深圳分公司法定代表人戴威再次收到限制消费令,执行法院为深圳市罗湖区人民法院。企查查风险信息显示,戴威目前有38条限制高消费信息,1条股权冻结信息。...
日期:10-10
微信回应封杀钉钉:健康码标记吱口令触发管理规范
近日有消息称,腾讯微信无法打开24个省市的健康码,对此阿里方面确认了这一消息:“微信全面封杀钉钉的域名,造成浙江等 24 个省市的健康码在微信端无法正常访问。”...
日期:10-26
吸金能力太强!《鬼吹灯之寻龙诀》票房已突破11亿元
虽然在拍摄阶段广受质疑,但是据国际在线报道,自12月18日上映以来,电影《鬼吹灯之寻龙诀》的票房已经破11亿元大关! 事实上上映不到一周,《寻龙诀》的票房就已经突破8亿,...
日期:10-14
lol佣兵大作战模式玩法攻略 佣兵大作战怎么玩
LOL佣兵大作战模式到底怎么玩,我想这是最近很多LOL玩家们除了比尔吉沃特事件外,另外一个很关心的事情了。...
日期:10-26
画面太美不敢看:无人机送快递撞墙(图)
2018年4月2日,俄罗斯乌兰乌德,俄罗斯邮政对无人机向偏僻地域运送一个2公斤的包裹停止测试,其时速可达每小时70公里。...
日期:10-07
百度助力长春政务服务改革 高效信息传递帮助群众“最多跑一次”
9月26日,由中国城市和小城镇改革发展中心、百度知道、熊掌号、长春市人民政府联合主办的“便......
日期:09-26
领团网移动客户端 让团购时尚随身而行
2012玛雅人关于世界末日的神秘预言近日被重新诠释为在2012年12月21日,地球将会“黑暗三日”,地球换季,伸手不见五指。如果时光倒退20年,我们将惶惶不可终日。但是在已进入移动时代的2012年,这一预言似乎不再可...
日期:10-25
新管理层三大举措“重塑”新酷6
5月24日,酷6传媒有限公司(以下简称“酷6传媒 ”,交易代码:KUTV)今天公布了截至2011年3月31日未经审计的2011年第一季度的财务业绩,财报显示,酷6传媒2011年第一季度净亏损为1090万美元,与去年同...
日期:10-19
酷6《星声报到》广州10强揭晓 人气星生悉数闯关
今日,由酷6网主办的大型选秀活动《星声报到》正式揭晓广州赛区十强名单,在众多优秀选手之中抉择晋级人选也着实令赛事评委老师们挠破了头,最终包括毛征军、辜樱樱在内的十位人气“星生”成功闯关,离成就星梦再近一步。广州一向...
日期:10-23
imo 9年钻研办公场景匠心打造企业级IM班聊
“工作的事,上班聊。”短短七个字,浓缩了imo创始人乔月猛对这款用2800个日夜打磨出来的企业IM产品最为深刻的理解和期望。...
日期:10-24
天线视频宣布实现全面高清
【搜狐IT消息】5月20日,天线视频宣布站内所有在线节目实现高清质量的点播效果。天线视频副总裁杨明表示,天线的追求最优的体验、最高质量,但这做起来并不轻松,所以天线视频在高清频道推出差不多两年后才正式决定把网站所有的内容资源都高清标准化...
日期:10-18
卜克环游记 爆料系列之超人岛的求助
卜克环游记爆料咯!卜克哥哥得到最新消息,超人岛被黑德拉袭击了!大家立即开始探索超人岛现在的状况,可是却收不到任何一点消息。小卜克们开始为了拯救超能力岛开始了准备和锻炼,在对战游戏中训练自己的行动能力和反应能力,相信只要一得到超人岛的消息,大...
日期:10-21
方舟子转战搜狐微博继续打假
“作为一个定位于社交媒体的平台,搜狐微博努力做好用户体验,对于用户的自我表达以及学术观点争论,只要符合国家相关政策法规,一直秉持不参与、不干涉的原则。”针对科普作家方舟子“转会”搜狐微博引发网...
日期:09-28
玩家谈《巫师之怒》:似电影 很瑰丽
巫师之怒 CGWR 得分CGWR:131 位CGWR介绍7.6由俄罗斯著名研发团队Astrum Nival开发的宇宙幻想风魔幻网游《巫师之怒》已进入国服首次技术封测,游戏以无数的漂浮的岛屿构成世界的舞台,玩家除了可以在自身势力的岛屿进行...
日期:10-14
篱笆网无法登陆原因追踪:篱笆主页瘫痪始末
作为知名的生活消费指导网站,篱笆网在上海本地有着较高的知名度。其注册用户达300多万,“大话爱情”、“装修日记”等更是其中的知名论坛版块,因此在上海网友中也流传着“男上宽带山,女上篱笆网”的...
日期:08-01