为 SAN 工作负载配置 Google Cloud NetApp Volumes
您可以将 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 Unified 存储池使用 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 后端后,创建一个引用 `google-cloud-netapp-volumes-san`驱动程序的 StorageClass。
文件系统类型在 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),应用程序或文件系统必须管理并发。
|