longhorn ReadWriteMany (RWX) 功能

longhorn通过 NFSv4 server(share-manager)暴露常规longhorn卷,原生支持RWX工作负载。

工作原理

这是官方文档的图
file

  • 对于每个正在使用的RWX卷longhorn将在longhorn-system命名空间中创建一个share-manager-volume-name Pod。
  • 该Pod负责通过在Pod内运行的NFSv4 server导出Longhorn卷。
  • 还有为每个RWX卷创建的服务,用作实际NFSv4客户端连接的地址。

必须

为了能够使用RWX卷,每个客户端节点都需要安装NFSv4客户端。

ansible worker -m yum -a "state=installed name=nfs-utils"
# yum install nfs-utils

file

如果没有安装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创建期间指定访问模式。
    file
    file
  • 通过UI为Longhorn卷创建PV/PVC时,PV/PVC的访问模式将基于卷的访问模式。
  • 只要卷未绑定到PVC,就可以通过UI更改Longhorn卷的访问模式。
  • 对于RWX PVC使用的Longhorn卷,卷访问模式将更改为RWX。

栗子

创建nginx-rwx pod,绑定nginx-rwx pvc,由longhorn自动配置longhorn volume,查看volume的访问模式。

cat nginx-rwx.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-rwx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-rwx
  template:
    metadata:
      labels:
        app: nginx-rwx
    spec:
      containers:
      - name: nginx-rwx
        image: nginx:stable-alpine
        volumeMounts:
        - mountPath: /etc/test
          name: test
      volumes:
      - name: test
        persistentVolumeClaim:
          claimName: nginx-rwx

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nginx-rwx
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: longhorn
  resources:
    requests:
      storage: 2Gi
---

apiVersion: v1
kind: Service
metadata:
  name: nginx-rwx
  labels:
    app: nginx-rwx
spec:
  type: NodePort
  ports:
  - port: 80
    protocol: TCP
    name: http
    nodePort: 32758
  selector:
    app: nginx-rwx

kubectl apply -f nginx-rwx.yaml -n longhorn-system

创建了一个share-manager-pvc-955dcb55-db13-4026-9762-2f622230b544的pod。

file

查看容器内进程和目录挂载

file

share-manager pod日志:获取卷目录地址及文件类型,将目录格式化挂载到容器内/export/volume name,启动nfs server,export volume,volume健康检查。

file

查看volume的访问模式也是RWX,跟随PVC。

file

故障处理

  • share-manager Pod的任何故障(卷故障、节点故障等)都将导致重新创建Pod并设置卷的remountRequestedAt标志, 这将导致workload Pods被删除,Kubernetes会重新创建它们。
  • 此功能取决于 Automatically Delete Workload Pod when The Volume Is Detached Unexpectedly
  • (卷意外分离时自动删除工作负载 Pod)的设置, 默认情况下为 true。如果该设置被禁用,workload Pods 可能会在RWX卷故障时出现 io errors。
  • 建议启用上述设置以保证在RWX卷出现问题时自动进行工作负载故障转移。

file

数据迁移

官方给了一个job yaml,可以实现将数据从一个卷复制到另一个卷。(未测试)

  • 将 data-source-pvc 替换为之前由 Kubernetes 创建的 NFSv4 RWX PVC 的名称。
  • 将 data-target-pvc 替换为您希望用于新工作负载的新 RWX PVC 的名称。
  • 两个 PVC 都需要存在于同一个命名空间中。
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
0 0 投票数
文章评分
订阅评论
提醒
guest

0 评论
内联反馈
查看所有评论

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部
0
希望看到您的想法,请您发表评论x