內容來源於官方 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