Longhorn,企业级云原生容器分布式存储 - 支持 ReadWriteMany (RWX) 工作负载(实验性功能)
内容来源于官方 Longhorn 1.1.2
英文技术手册。
系列
- Longhorn 是什么?
- Longhorn 企业级云原生容器分布式存储解决方案设计架构和概念
- Longhorn 企业级云原生容器分布式存储-部署篇
- Longhorn 企业级云原生容器分布式存储-券(Volume)和节点(Node)
- Longhorn,企业级云原生容器分布式存储-K8S 资源配置示例
- Longhorn,企业级云原生容器分布式存储 - 监控(Prometheus+AlertManager+Grafana)
- Longhorn,企业级云原生容器分布式存储 - 备份与恢复
- Longhorn,企业级云原生容器分布式存储 - 支持 ReadWriteMany (RWX) 工作负载(实验性功能)
Longhorn
通过 NFSv4
服务器(share-manager
)公开常规 Longhorn
卷,原生支持 RWX
工作负载。
对于每个正在使用的 RWX
卷 Longhorn
将在 longhorn-system
命名空间中创建一个 share-manager-<volume-name>
Pod
。
该 Pod
负责通过在 Pod
内运行的 NFSv4
服务器导出 Longhorn
卷。
还有为每个 RWX
卷创建的服务,用作实际 NFSv4
客户端连接的端点。
要求
为了能够使用 RWX
卷,每个客户端节点都需要安装 NFSv4
客户端。
对于 Ubuntu
,您可以通过以下方式安装 NFSv4
客户端:
apt install nfs-common
对于基于 RPM
的发行版,您可以通过以下方式安装 NFSv4
客户端:
yum install nfs-utils
如果 NFSv4
客户端在节点上不可用,则在尝试挂载卷时,以下消息将是错误的一部分:
for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.\n
RWX 卷的创建和使用
对于动态配置的 Longhorn
卷,访问模式基于 PVC
的访问模式。
对于手动创建的 Longhorn
卷(恢复、DR
卷),可以在 Longhorn UI
创建期间指定访问模式。
通过 UI
为 Longhorn
卷创建 PV/PVC
时,PV/PVC
的访问模式将基于卷的访问模式。
只要卷未绑定到 PVC
,就可以通过 UI
更改 Longhorn
卷的访问模式。
对于 RWX PVC
使用的 Longhorn
卷,卷访问模式将更改为 RWX
。
故障处理
share-manager Pod
的任何故障(卷故障、节点故障等)都将导致重新创建 Pod
并设置卷的 remountRequestedAt
标志,
这将导致 workload Pods
被删除,Kubernetes
重新创建它们。此功能取决于
卷意外分离时自动删除工作负载 Pod
的设置,
默认情况下为 true
。如果该设置被禁用,workload Pods
可能会在 RWX
卷故障时出现 io errors
。
建议启用上述设置以保证在 RWX
卷出现问题时自动进行工作负载故障转移。
从以前的外部供应商迁移
下面的 PVC
创建了一个 Kubernetes job
,可以将数据从一个卷复制到另一个卷。
- 将
data-source-pvc
替换为之前由Kubernetes
创建的NFSv4 RWX PVC
的名称。 - 将
data-target-pvc
替换为您希望用于新工作负载的新RWX PVC
的名称。
您可以手动创建一个新的 RWX Longhorn volume + PVC/PV
,或者只创建一个 RWX PVC
,然后让 Longhorn
为您动态配置一个卷。
两个 PVC
都需要存在于同一个命名空间中。如果您使用的命名空间与默认命名空间不同,请在下方更改 job
的命名空间。
apiVersion: batch/v1
kind: Job
metadata:
namespace: default # namespace where the PVC's exist
name: volume-migration
spec:
completions: 1
parallelism: 1
backoffLimit: 3
template:
metadata:
name: volume-migration
labels:
name: volume-migration
spec:
restartPolicy: Never
containers:
- name: volume-migration
image: ubuntu:xenial
tty: true
command: [ "/bin/sh" ]
args: [ "-c", "cp -r -v /mnt/old /mnt/new" ]
volumeMounts:
- name: old-vol
mountPath: /mnt/old
- name: new-vol
mountPath: /mnt/new
volumes:
- name: old-vol
persistentVolumeClaim:
claimName: data-source-pvc # change to data source PVC
- name: new-vol
persistentVolumeClaim:
claimName: data-target-pvc # change to data target PVC
历史
- 从 v1.0.1 开始可用,
External provisioner
- 从 v1.1.0 开始可用,
Native RWX support
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端