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