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