Skip to main content
简体中文版经机器翻译而成,仅供参考。如与英语版出现任何冲突,应以英语版为准。

为 SAN 工作负载配置 Google Cloud NetApp Volumes

贡献者 joan-ing

您可以将 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 的后端参数,例如 exportRuleunixPermissionsnasTypesnapshotDir、 `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` 字段控制块卷的暴露方式:
  • Filesystem Trident 格式化和装载卷。

  • Block Trident 附加设备并将其公开为原始块设备。

支持的操作

使用 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),应用程序或文件系统必须管理并发。