設定 Google Cloud NetApp Volumes 以用於 SAN 工作負載
您可以設定 Trident,使其使用 iSCSI 協定從 Google Cloud NetApp Volumes 配置區塊儲存磁碟區。SAN 磁碟區則透過 `google-cloud-netapp-volumes-san`儲存驅動程式從 Flex Unified 儲存池進行配置。
|
|
此驅動程式專用於區塊工作負載,不支援 NAS 協定。 |
|
|
google-cloud-netapp-volumes-san 後端是配置 iSCSI 區塊磁碟區所必需的。 google-cloud-netapp-volumes 後端僅支援 NAS 協定,無法用於 SAN 工作負載。
|
總覽
Trident 支援 Google Cloud NetApp Volumes SAN(iSCSI)工作負載,使用 google-cloud-netapp-volumes-san 驅動程式。
SAN 磁碟區從 Flex Unified 儲存資源池中配置,並以 iSCSI 區塊裝置的形式呈現給 Kubernetes 節點。
這適用於以下環境:
-
Trident 26.02 及更新版本
-
Google Kubernetes Engine (GKE) 或 Red Hat OpenShift
-
Google Cloud NetApp Volumes Flex 統一儲存池
-
基於 iSCSI 的工作負載
Flex Unified 儲存池
Flex 統一儲存資源池使用 iSCSI 協定提供區塊儲存設備,是 SAN 資源配置所必需的:
-
支援 Flex Unified REGIONAL 資源池。
-
從 Trident 26.02.1 開始支援 Flex Unified ZONAL 池。
-
SAN 工作負載僅支援 Flex 服務等級。
設定 Trident SAN 後端
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: gcnv-san
namespace: trident
spec:
version: 1
storageDriverName: google-cloud-netapp-volumes-san
projectNumber: "<project-number>"
location: "<region>"
sdkTimeout: "600"
storage:
- labels:
cloud: gcp
performance: flex
network: "<vpc-network>"
serviceLevel: Flex
建立 StorageClass
配置完 SAN 後端後,建立一個 StorageClass 引用 google-cloud-netapp-volumes-san 驅動程式。
檔案系統類型是在 StorageClass 中定義的,而不是在後端定義的。
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: gcnv-san
provisioner: csi.trident.netapp.io
parameters:
backendType: "google-cloud-netapp-volumes-san"
fsType: "ext4"
allowVolumeExpansion: true
支援的檔案系統類型:
-
ext4(預設) -
ext3 -
xfs
|
|
SAN 驅動程式僅支援 Flex 服務級別,不使用 NAS 特定的後端參數,例如 exportRule、 unixPermissions、 nasType、 snapshotDir、 `nfsMountOptions`或與分層相關的設定。
|
配置區塊磁碟區
ReadWriteOnce(RWO)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gcnv-san-rwo
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
storageClassName: gcnv-san
ReadWriteOncePod(RWOP)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gcnv-san-rwop
spec:
accessModes:
- ReadWriteOncePod
resources:
requests:
storage: 100Gi
storageClassName: gcnv-san
ReadOnlyMany(ROX)
ROX 的一個常見模式是複製現有 ReadWriteOnce 磁碟區並將複製磁碟區掛載為唯讀。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gcnv-san-rox
spec:
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 100Gi
storageClassName: gcnv-san
dataSource:
kind: PersistentVolumeClaim
name: gcnv-san-rwo
ReadWriteMany (RWX) — 僅原始區塊
僅在 `volumeMode: Block`時才支援 ReadWriteMany。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gcnv-san-raw-rwx
spec:
accessModes:
- ReadWriteMany
volumeMode: Block
resources:
requests:
storage: 100Gi
storageClassName: gcnv-san
區塊磁碟區行為
區塊磁碟區以 iSCSI LUN 的形式配置,並以區塊裝置的形式呈現給 Kubernetes 節點。
區塊磁碟區:
-
使用 iSCSI 協定
-
支援檔案系統和原始區塊呈現
-
由 Trident 附加和管理
-
支援多種 Kubernetes 存取模式
存取模式
Trident 配置的區塊磁碟區支援下列存取模式:
-
ReadWriteOnce(RWO) -
ReadOnlyMany(ROX) -
ReadWriteOncePod(RWOP) -
ReadWriteMany(RWX),僅在以下情況下支持volumeMode: Block
volumeMode 行為
`volumeMode`欄位控制區塊磁碟區的公開方式:
-
FilesystemTrident 格式化並掛載磁碟區。 -
BlockTrident 會連接該裝置並將其作為原始區塊裝置公開。
支援的作業
使用 google-cloud-netapp-volumes-san 驅動程式配置的區塊磁碟區支援:
-
建立
-
刪除
-
複製
-
Snapshot
-
調整大小
-
匯入
額外 GiB 過度配置行為
Google Cloud NetApp Volumes 區塊磁碟區包含內部元資料開銷。與已配置的容量相比,此開銷會減少核心可見的裝置大小。
測試結果顯示:
-
初始建立時大約需要 300 KiB 的額外負荷
-
調整大小後最多約 107 MiB 的額外開銷
由於 Google Cloud NetApp Volumes 只接受整 GiB 的分配,Trident 透過以下方式確保可用裝置大小始終滿足或超過 PVC 請求:
-
將請求的大小向上取整到下一個整數 GiB
-
新增額外的 1 GiB 緩衝區
範例:
-
PVC 請求:100 GiB
-
Google Cloud NetApp Volumes 中已配置的大小:101 GiB
-
應用程式可見的可用空間:至少 100 GiB
Pod 範例
檔案系統掛載區塊磁碟區(RWO)
apiVersion: v1
kind: Pod
metadata:
name: app-rwo
spec:
containers:
- name: app
image: ubuntu:22.04
command: ["sleep", "infinity"]
volumeMounts:
- name: data
mountPath: /mnt/data
volumes:
- name: data
persistentVolumeClaim:
claimName: gcnv-san-rwo
原始區塊設備(RWX)
apiVersion: v1
kind: Pod
metadata:
name: app-raw-rwx
spec:
containers:
- name: app
image: ubuntu:22.04
command: ["sleep", "infinity"]
volumeDevices:
- name: data
devicePath: /dev/xda
volumes:
- name: data
persistentVolumeClaim:
claimName: gcnv-san-raw-rwx
附加和掛載行為
對於從 Google Cloud NetApp Volumes 配置的 SAN 磁碟區:
-
Trident 在 Flex Unified 儲存池中建立邏輯單元號碼(LUN)。
-
發布期間,Trident 將 LUN 對應到每個節點的主機群組。
-
在節點暫存期間、 Trident :
-
登入 iSCSI 目標
-
探索 LUN
-
配置多路徑
-
-
如果
volumeMode: Filesystem,Trident 會視需要格式化裝置並將其掛載。 -
如果
volumeMode: Block,Trident 會將裝置連接並直接暴露給 pod,而無需格式化或掛載。
|
|
SAN 區塊磁碟區不提供分散式鎖定或寫入協調功能。當多個節點存取區塊磁碟區時(ReadWriteMany volumeMode: Block),應用程式或檔案系統必須管理並發性。
|