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 共用磁碟區
雖然 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
表示衍生自儲存體設備的狀態。 狀態可以是Available
、Error
或Provisioning
。Provisioning State
提供儲存體設備的目前佈建狀態。 佈建狀態可以是Succeeded
、Failed
或InProgress
。Capacity
提供儲存體設備的總計已使用容量。Remote Vendor Management
指出針對儲存體設備啟用或停用遠端廠商管理。
儲存體設備作業
- 列出儲存體設備:列出所提供資源群組或訂用帳戶中的儲存體設備。
- 顯示儲存體設備:取得所提供儲存體設備的屬性。
- 更新儲存體設備:更新所提供儲存體設備的屬性或標籤。
- 啟用/停用儲存體設備的遠端廠商管理:啟用或停用所提供儲存體設備的遠端廠商管理。
注意
客戶無法直接建立或刪除儲存體設備。 這些資源僅為了叢集生命週期的實作而建立。 實作會封鎖任何使用者的建立或刪除要求,並且只允許內部/應用程式驅動的建立或刪除作業。