Longhorn,企業級云原生容器分布式存儲 - 支持 ReadWriteMany (RWX) 工作負載
Longhorn 通過 NFSv4 服務器(share-manager)公開常規 Longhorn 卷,原生支持 RWX 工作負載。
對于每個正在使用的 RWX 卷 Longhorn 將在 longhorn-system 命名空間中創建一個 share-manager-
該 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
https://github.com/Longhorn/Longhorn/issues/1183
從 v1.1.0 開始可用,Native RWX support
https://github.com/Longhorn/Longhorn/issues/1470