共用方式為


Azure 運算子連接點儲存體設備

Azure 運算子連接點是以基本建構所建置,例如計算伺服器、儲存體設備和網路光纖裝置。 Azure 運算子連接點儲存體設備代表機架上的永續性儲存體設備。

每個儲存體設備都包含多個儲存體設備,這些裝置會彙總以提供單一存放集區。 然後,此存放集區會分割成多個磁碟區,並以區塊儲存體裝置的形式呈現給計算伺服器。 計算伺服器可以使用這些區塊儲存體設備作為其工作負載的永續性儲存體。 每個 Azure 運算子連接點叢集都會佈建單一儲存體設備,供所有租用戶工作負載共用。

Azure 運算子連接點執行個體中的儲存體設備會呈現為 Azure 資源。 操作員可以像檢視其他 Azure 資源一樣檢視其屬性。

Kubernetes 儲存類別

Azure 運算子連接點軟體 Kubernetes 堆疊提供兩種類型的儲存體。 操作員會透過 Kubernetes StorageClass 機制進行選取。

重要

Azure 運算子連接點不支持暫時性磁碟區。 連接點建議針對所有工作負載磁碟區使用本文件中所述的永續性磁碟區儲存機制,因為這些機制可提供最高等級的效能和可用性。 Azure 運算子連接點中的所有儲存體都由儲存體設備提供。 不支援由裸機磁碟提供的儲存體。

StorageClass:nexus-volume

預設儲存機制 nexus-volume 是大多數使用者的偏好選擇。 該選項會提供最高層級的效能和可用性。 不過,磁碟區無法在多個背景工作節點之間同時共用。 操作員可以使用 Azure API 和入口網站,透過磁碟區資源來存取和管理這些磁碟區。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: testPvc
  namespace: default
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 107Mi
  storageClassName: nexus-volume
  volumeMode: Block
  volumeName: testVolume
status:
  accessModes:
  - ReadWriteOnce
  capacity:
    storage: 107Mi
  phase: Bound

StorageClass:nexus-shared

在需要共用文件系統的情況下,可以使用 nexus-shared 儲存體類別。 此記憶體類別提供高可用性共用記憶體解決方案,方法是在相同的 Nexus Kubernetes 叢集中啟用多個 Pod,以同時存取和共用相同的磁碟區。 nexus 共用記憶體類別是由高可用性 NFS 記憶體服務所支援。 此 NFS 記憶體服務(目前限制為 1 TiB 的大小上限)適用於每個雲端服務網路 (CSN)。 NFS 記憶體服務會在建立 CSN 資源時自動部署。 連結至 CSN 的任何 Nexus Kubernetes 叢集都可以從這個共用存放集區布建永續性磁碟區。 Nexus 共用支援「單次讀取寫入 (RWO)」和「多次讀取寫入 (RWX)」存取模式。 這表示工作負載應用程式可採用其中一種存取模式來存取共用儲存體。

描述 nexus-shared 如何在 Nexus Kubernetes 叢集中為工作負載佈建磁碟區的圖表

圖:Nexus 共用磁碟區

雖然 nexus-shared 的效能和可用性可滿足大多數應用程式的需求,但我們建議具有大量輸入/輸出需求的工作負載使用 nexus-volume 選項來獲得最佳效能。

單次讀取寫入 (RWO)

在 [讀取寫入一次] 模式中,只有一個節點或索賠者一次可以掛接 nexus 共用的磁碟區。 當 Pod 在相同節點上執行時,ReadWriteOnce 存取模式仍允許多個 Pod 存取磁碟區。

apiVersion: v1
items:
- apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: test-pvc
    namespace: default
  spec:
    accessModes:
    - ReadWriteOnce
    resources:
      requests:
        storage: 5Gi
    storageClassName: nexus-shared
    volumeMode: Filesystem
    volumeName: TestVolume
  status:
    accessModes:
    - ReadWriteOnce
    capacity:
      storage: 5Gi
    phase: Bound

多次讀取寫入 (RWX)

在讀取寫入多 (RWX) 模式中,多個節點或索賠者可以同時掛接 nexus 共用磁碟區。

apiVersion: v1
items:
- apiVersion: v1
  kind: PersistentVolumeClaim
  metadata:
    name: test-pvc
    namespace: default
  spec:
    accessModes:
    - ReadWriteMany
    resources:
      requests:
        storage: 5Gi
    storageClassName: nexus-shared
    volumeMode: Filesystem
    volumeName: TestVolume
  status:
    accessModes:
    - ReadWriteMany
    capacity:
      storage: 5Gi
    phase: Bound

範例

單次讀取寫入 (RWO) 搭配 nexus-volume 儲存類別

此範例指令清單會在 ReadWriteOnce 模式中使用 nexus-volume 儲存類別,建立具有 PersistentVolumeClaimTemplate 的 StatefulSet。

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: test-sts-rwo
  labels:
    app: test-sts-rwo
spec:
  serviceName: test-sts-rwo-svc
  replicas: 3
  selector:
    matchLabels:
      app: test-sts-rwo
  template:
    metadata:
      labels:
        app: test-sts-rwo
    spec:
      containers:
      - name: busybox
        command:
        - "/bin/sh"
        - "-c"
        - while true; do echo "$(date) -- $(hostname)" >> /mnt/hostname.txt; sleep 1; done
        image: busybox
        volumeMounts:
        - name: test-volume-rwo
          mountPath: /mnt/
  volumeClaimTemplates:
    - metadata:
        name: test-volume-rwo
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 10Gi
        storageClassName: nexus-volume

StatefulSet 的每個 Pod 都有一個 PersistentVolumeClaim 建立。

# kubectl get pvc
NAME                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-volume-rwo-test-sts-rwo-0   Bound    pvc-e41fec47-cc43-4cd5-8547-5a4457cbdced   10Gi       RWO            nexus-volume   8m17s
test-volume-rwo-test-sts-rwo-1   Bound    pvc-1589dc79-59d2-4a1d-8043-b6a883b7881d   10Gi       RWO            nexus-volume   7m58s
test-volume-rwo-test-sts-rwo-2   Bound    pvc-82e3beac-fe67-4676-9c61-e982022d443f   10Gi       RWO            nexus-volume   12s
# kubectl get pods -o wide -w
NAME             READY   STATUS    RESTARTS   AGE     IP              NODE                                         NOMINATED NODE   READINESS GATES
test-sts-rwo-0   1/1     Running   0          8m31s   10.245.231.74   nexus-cluster-6a8c4018-agentpool2-md-vhhv6   <none>           <none>
test-sts-rwo-1   1/1     Running   0          8m12s   10.245.126.73   nexus-cluster-6a8c4018-agentpool1-md-27nw4   <none>           <none>
test-sts-rwo-2   1/1     Running   0          26s     10.245.183.9    nexus-cluster-6a8c4018-agentpool1-md-4jprt   <none>           <none>
# kubectl exec test-sts-rwo-0 -- cat /mnt/hostname.txt
Thu Nov  9 21:57:25 UTC 2023 -- test-sts-rwo-0
Thu Nov  9 21:57:26 UTC 2023 -- test-sts-rwo-0
Thu Nov  9 21:57:27 UTC 2023 -- test-sts-rwo-0

# kubectl exec test-sts-rwo-1 -- cat /mnt/hostname.txt
Thu Nov  9 21:57:19 UTC 2023 -- test-sts-rwo-1
Thu Nov  9 21:57:20 UTC 2023 -- test-sts-rwo-1
Thu Nov  9 21:57:21 UTC 2023 -- test-sts-rwo-1

# kubectl exec test-sts-rwo-s -- cat /mnt/hostname.txt
Thu Nov  9 21:58:32 UTC 2023 -- test-sts-rwo-2
Thu Nov  9 21:58:33 UTC 2023 -- test-sts-rwo-2
Thu Nov  9 21:58:34 UTC 2023 -- test-sts-rwo-2

多次讀取寫入 (RWX) 搭配 nexus 共用儲存體類別

下列指令清單會以 ReadWriteMany 模式使用 nexus 共用儲存類別,建立具有 PersistentVolumeClaim (PVC) 的部署。 建立的 PVC 會由部署的所有 Pod 共用,並可由所有 Pod 同時讀取和寫入。

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: test-volume-rwx
spec:
  accessModes:
    - ReadWriteMany
  volumeMode: Filesystem
  resources:
    requests:
      storage: 3Gi
  storageClassName: nexus-shared
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: test-deploy-rwx
  name: test-deploy-rwx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: test-deploy-rwx
  template:
    metadata:
      labels:
        app: test-deploy-rwx
    spec:
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: kubernetes.azure.com/agentpool
                operator: Exists
                values: []
            topologyKey: "kubernetes.io/hostname"
      containers:
      - name: busybox
        command:
        - "/bin/sh"
        - "-c"
        - while true; do echo "$(date) -- $(hostname)" >> /mnt/hostname.txt; sleep 1; done
        image: busybox
        volumeMounts:
        - name: test-volume-rwx
          mountPath: /mnt/
      volumes:
      - name: test-volume-rwx
        persistentVolumeClaim:
          claimName: test-volume-rwx
...

套用之後,部署有三個複本共用相同的PVC。

# kubectl get pvc
NAME                             STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
test-volume-rwx                  Bound    pvc-32f0717e-6b63-4d64-a458-5be4ffe21d37   3Gi        RWX            nexus-shared   6s
# kubectl get pods -o wide -w
NAME                             READY   STATUS    RESTARTS   AGE     IP               NODE                                         NOMINATED NODE   READINESS GATES
test-deploy-rwx-fdb8f49c-86pv4   1/1     Running   0          18s     10.245.224.140   nexus-cluster-6a8c4018-agentpool1-md-s2dh7   <none>           <none>
test-deploy-rwx-fdb8f49c-9zsjf   1/1     Running   0          18s     10.245.126.74    nexus-cluster-6a8c4018-agentpool1-md-27nw4   <none>           <none>
test-deploy-rwx-fdb8f49c-wdgw7   1/1     Running   0          18s     10.245.231.75    nexus-cluster-6a8c4018-agentpool2-md-vhhv6   <none>           <none>

您可以從下列輸出觀察到,所有 Pod 都寫入相同的PVC。

# kubectl exec test-deploy-rwx-fdb8f49c-86pv4 -- cat /mnt/hostname.txt
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-9zsjf
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-wdgw7
Thu Nov  9 21:51:42 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4

# kubectl exec test-deploy-rwx-fdb8f49c-9zsjf -- cat /mnt/hostname.txt
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-9zsjf
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-wdgw7
Thu Nov  9 21:51:42 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4

# kubectl exec test-deploy-rwx-fdb8f49c-wdgw7 -- cat /mnt/hostname.txt
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-9zsjf
Thu Nov  9 21:51:41 UTC 2023 -- test-deploy-rwx-fdb8f49c-wdgw7
Thu Nov  9 21:51:42 UTC 2023 -- test-deploy-rwx-fdb8f49c-86pv4

磁碟區大小限制和容量管理

使用 nexus-volume 和 nexus-shared 建立的 PVC 具有最小和最大宣告大小。

儲存類別 最小PVC大小 PVC 大小上限
nexus-volume 1 MiB 12 TiB
nexus-shared 1 TiB

重要

達到其耗用量限制的磁碟區會導致取用工作負載的磁碟空間錯誤。 您必須確定為工作負載需求布建適當的磁碟區大小。 您必須監視記憶體和所有NFS伺服器,以取得其記憶體耗用量百分比。 您可以使用可用計量清單中記載 的計量來執行此動作。

  • nexus-volume 和 nexus-shared PVC 都會強制執行其要求的儲存容量作為耗用量限制。 磁碟區無法耗用比相關聯的PVC 要求更多的記憶體。
  • 所有實體磁碟區都會精簡布建。 您必須監視存放裝置上的記憶體耗用量總計,並執行維護作業,以在必要時釋放儲存空間。
  • 如果要求的大小小於最小或大於支援的磁碟區大小上限,則 nexus-volumePV 布建要求會失敗。
  • Nexus 共用磁碟區在支援 NFS 伺服器上以邏輯方式精簡布建。 此 NFS 伺服器具有 1 TiB 的固定容量。
    • 儘管要求儲存空間超過 1 TiB,但可以布建 nexus 共用的PVC,不過,只能取用 1 TiB。
    • 布建一組 PVC,其中容量要求的總和大於 1 TiB。 不過,適用 1 TiB 的耗用量限制:相關聯的 PV 集合可能不會耗用超過 1 TiB 的記憶體。

儲存體設備狀態

下列屬性會反映儲存體設備的作業狀態:

  • Status 表示衍生自儲存體設備的狀態。 狀態可以是 AvailableErrorProvisioning

  • Provisioning State 提供儲存體設備的目前佈建狀態。 佈建狀態可以是 SucceededFailedInProgress

  • Capacity 提供儲存體設備的總計已使用容量。

  • Remote Vendor Management 指出針對儲存體設備啟用或停用遠端廠商管理。

儲存體設備作業

  • 列出儲存體設備:列出所提供資源群組或訂用帳戶中的儲存體設備。
  • 顯示儲存體設備:取得所提供儲存體設備的屬性。
  • 更新儲存體設備:更新所提供儲存體設備的屬性或標籤。
  • 啟用/停用儲存體設備的遠端廠商管理:啟用或停用所提供儲存體設備的遠端廠商管理。

注意

客戶無法直接建立或刪除儲存體設備。 這些資源僅為了叢集生命週期的實作而建立。 實作會封鎖任何使用者的建立或刪除要求,並且只允許內部/應用程式驅動的建立或刪除作業。