Longhorn,企業(yè)級云原生容器分布式存儲 - 支持 ReadWriteMany (RWX) 工作負載
Longhorn 通過 NFSv4 服務器(share-manager)公開常規(guī) Longhorn 卷,原生支持 RWX 工作負載。
對于每個正在使用的 RWX 卷 Longhorn 將在 longhorn-system 命名空間中創(chuàng)建一個 share-manager-
該 Pod 負責通過在 Pod 內運行的 NFSv4 服務器導出 Longhorn 卷。
還有為每個 RWX 卷創(chuàng)建的服務,用作實際 NFSv4 客戶端連接的端點。
要求
為了能夠使用 RWX 卷,每個客戶端節(jié)點都需要安裝 NFSv4 客戶端。
對于 Ubuntu,您可以通過以下方式安裝 NFSv4 客戶端:
- apt install nfs-common
對于基于 RPM 的發(fā)行版,您可以通過以下方式安裝 NFSv4 客戶端:
- yum install nfs-utils
如果 NFSv4 客戶端在節(jié)點上不可用,則在嘗試掛載卷時,以下消息將是錯誤的一部分:
- for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program.\n
RWX 卷的創(chuàng)建和使用
對于動態(tài)配置的 Longhorn 卷,訪問模式基于 PVC 的訪問模式。
對于手動創(chuàng)建的 Longhorn 卷(恢復、DR 卷),可以在 Longhorn UI 創(chuàng)建期間指定訪問模式。
通過 UI 為 Longhorn 卷創(chuàng)建 PV/PVC 時,PV/PVC 的訪問模式將基于卷的訪問模式。
只要卷未綁定到 PVC,就可以通過 UI 更改 Longhorn 卷的訪問模式。
對于 RWX PVC 使用的 Longhorn 卷,卷訪問模式將更改為 RWX。
故障處理
share-manager Pod 的任何故障(卷故障、節(jié)點故障等)都將導致重新創(chuàng)建 Pod 并設置卷的 remountRequestedAt 標志, 這將導致 workload Pods 被刪除,Kubernetes 重新創(chuàng)建它們。此功能取決于 卷意外分離時自動刪除工作負載 Pod 的設置, 默認情況下為 true。如果該設置被禁用,workload Pods 可能會在 RWX 卷故障時出現(xiàn) io errors。
建議啟用上述設置以保證在 RWX 卷出現(xiàn)問題時自動進行工作負載故障轉移。
從以前的外部供應商遷移
下面的 PVC 創(chuàng)建了一個 Kubernetes job,可以將數(shù)據從一個卷復制到另一個卷。
- 將 data-source-pvc 替換為之前由 Kubernetes 創(chuàng)建的 NFSv4 RWX PVC 的名稱。
- 將 data-target-pvc 替換為您希望用于新工作負載的新 RWX PVC 的名稱。
您可以手動創(chuàng)建一個新的 RWX Longhorn volume + PVC/PV,或者只創(chuàng)建一個 RWX PVC,然后讓 Longhorn 為您動態(tài)配置一個卷。
兩個 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