Longhorn,企業級雲原生容器分散式儲存 - 支援 ReadWriteMany (RWX) 工作負載(實驗性功能)

為少發表於2021-08-27

內容來源於官方 Longhorn 1.1.2 英文技術手冊。

系列

Longhorn 通過 NFSv4 伺服器(share-manager)公開常規 Longhorn 卷,原生支援 RWX 工作負載。

對於每個正在使用的 RWXLonghorn 將在 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 建立期間指定訪問模式。

通過 UILonghorn 卷建立 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

歷史

相關文章