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

Kubernetes 和 Trident 对象

贡献者

您可以通过读取和写入资源对象来使用 REST API 与 Kubernetes 和 Trident 进行交互。Kubernetes 与 Trident , Trident 与存储以及 Kubernetes 与存储之间的关系由多个资源对象决定。其中一些对象通过 Kubernetes 进行管理,而另一些对象则通过 Trident 进行管理。

对象如何相互交互?

了解对象,对象的用途以及对象交互方式的最简单方法可能是,遵循 Kubernetes 用户的单个存储请求:

  1. 用户创建了 PersistentVolumeClaim、请求从管理员先前配置的KubureNet获取特定大小的 StorageClass`新 `PersistentVolume

  2. Kubernetes `StorageClass`将Trident标识为其配置程序、并包含一些参数、用于告知Trident如何为请求的类配置卷。

  3. Trident使用相同的名称查找自己的 StorageClass`卷、该名称用于标识匹配项 `Backends、并 `StoragePools`可用于为类配置卷。

  4. Trident会在匹配的后端配置存储并创建两个对象:一个 PersistentVolume`位于KubeNet中、用于告知KubeNet如何查找、挂载和处理卷;另一个位于Trident中、用于保留与实际存储之间的关系 `PersistentVolume

  5. Kubnetes会将绑定 PersistentVolumeClaim`到新 `PersistentVolume。包含在运行此持久卷的任何主机上挂载此持久卷的Pod PersistentVolumeClaim

  6. 用户使用指向Trident的创建 VolumeSnapshot`现有PVC的 `VolumeSnapshotClass

  7. Trident 标识与 PVC 关联的卷,并在其后端创建卷的快照。此外、它还会创建一个、 `VolumeSnapshotContent`用于指示Kubbernetes如何识别快照。

  8. 用户可以使用 `VolumeSnapshot`创建 `PersistentVolumeClaim`作为源。

  9. Trident会确定所需的快照,并执行与创建和 Volume`相同的一组步骤 `PersistentVolume

提示 要进一步阅读有关Kubbernetes对象的信息、我们强烈建议您阅读 "永久性卷"Kubbernetes文档的章节。

Kubbernetes `PersistentVolumeClaim`对象

Kubbernetes `PersistentVolumeClaim`对象是由Kubbernetes集群用户发出的存储请求。

除了标准规范之外,如果用户要覆盖在后端配置中设置的默认值, Trident 还允许用户指定以下特定于卷的标注:

标注 卷选项 支持的驱动程序

trident.netapp.io/fileSystem

文件系统

ontap-san、solidfire-san、ontap-san-economy.

trident.netapp.io/cloneFromPVC

cloneSourceVolume

ontap-nas , ontap-san , solidfire-san , azure-netapp-files , gcp-cvs , ontap-san-economy.

trident.netapp.io/splitOnClone

splitOnClone

ontap-NAS , ontap-san

trident.netapp.io/protocol

协议

任意

trident.netapp.io/exportPolicy

导出策略

ontap-nas , ontap-nas-economy-、 ontap-nas-flexgroup

trident.netapp.io/snapshotPolicy

snapshotPolicy

ontap-nas , ontap-nas-economy. ontap-nas-flexgroup , ontap-san

trident.netapp.io/snapshotReserve

SnapshotReserve

ontap-nas , ontap-nas-flexgroup , ontap-san , GCP-CVS

trident.netapp.io/snapshotDirectory

snapshotDirectory

ontap-nas , ontap-nas-economy-、 ontap-nas-flexgroup

trident.netapp.io/unixPermissions

unixPermissions

ontap-nas , ontap-nas-economy-、 ontap-nas-flexgroup

trident.netapp.io/blockSize

块大小

solidfire-san

如果创建的PV具有 Delete`回收策略、则在PV释放后(即用户删除PVC时)、Trident会同时删除PV和后备卷。如果删除操作失败, Trident 会将 PV 标记为相应的 PV ,并定期重试此操作,直到操作成功或 PV 手动删除为止。如果PV使用此 `Retain`策略、则Trident会忽略此策略、并假定管理员将从Kubbernetes和后端对其进行清理、以便在删除卷之前对其进行备份或检查。请注意,删除 PV 不会通过发生原因 Trident 删除后备卷。您应使用REST API将其删除(`tridentctl)。

Trident 支持使用 CSI 规范创建卷快照:您可以创建卷快照并将其用作数据源来克隆现有 PVC 。这样, PV 的时间点副本就可以以快照的形式公开给 Kubernetes 。然后,可以使用快照创建新的 PV 。查看 `On-Demand Volume Snapshots`以了解其工作原理。

Trident还提供了 `cloneFromPVC`和 `splitOnClone`标注以用于创建克隆。您可以使用这些标注克隆PVC、而无需使用CSI实施。

以下是一个示例:如果用户已经有一个名为的 mysql`PVC,则用户可以使用标注创建一个名为的新PVC `mysqlclone,例如 trident.netapp.io/cloneFromPVC: mysql。设置了此标注后, Trident 将克隆与 mysql PVC 对应的卷,而不是从头开始配置卷。

请考虑以下几点:

  • 建议克隆空闲卷。

  • 一个 PVC 及其克隆应位于同一个 Kubernetes 命名空间中,并具有相同的存储类。

  • 对于 ontap-nas`和 `ontap-san`驱动程序,可能需要将PVC标注 `trident.netapp.io/splitOnClone`与结合使用 `trident.netapp.io/cloneFromPVC。将设置为 true`时 `trident.netapp.io/splitOnClone,Trident会将克隆的卷从父卷中分离出来,从而使克隆卷的生命周期与其父卷完全分离,从而牺牲一些存储效率。如果不将其设置 trident.netapp.io/splitOnClone`或设置为 `false、则会减少后端的空间消耗、而这会影响在父卷和克隆卷之间创建依赖关系、从而导致无法删除父卷、除非先删除克隆。拆分克隆是有意义的一种情形,即克隆空数据库卷时,该卷及其克隆会发生很大的差异,无法从 ONTAP 提供的存储效率中受益。

该 `sample-input`目录包含用于Trident的PVC定义示例。有关与Trident卷关联的参数和设置的完整说明、请参见。

Kubbernetes `PersistentVolume`对象

Kubbernetes对象表示可供Kubbernetes `PersistentVolume`集群使用的一段存储。它的生命周期与使用它的 POD 无关。

备注 Trident会根据所配置的卷自动创建 `PersistentVolume`对象并将其注册到Kubbernetes集群中。您不应自行管理它们。

创建引用基于Trident的PVC时 StorageClass,Trident会使用相应的存储类配置新卷,并为该卷注册新PV。在配置已配置的卷和相应的 PV 时, Trident 会遵循以下规则:

  • Trident 会为 Kubernetes 生成 PV 名称及其用于配置存储的内部名称。在这两种情况下,它都可以确保名称在其范围内是唯一的。

  • 卷的大小与 PVC 中请求的大小尽可能匹配,但可能会根据平台将其取整为最接近的可分配数量。

Kubbernetes `StorageClass`对象

Kubnetes StorageClass`对象在中按名称指定 `PersistentVolumeClaims、用于使用一组属性配置存储。存储类本身可标识要使用的配置程序,并按配置程序所了解的术语定义该属性集。

它是需要由管理员创建和管理的两个基本对象之一。另一个是 Trident 后端对象。

使用Trident的Kubenetes `StorageClass`对象如下所示:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: <Name>
provisioner: csi.trident.netapp.io
mountOptions: <Mount Options>
parameters:
  <Trident Parameters>
allowVolumeExpansion: true
volumeBindingMode: Immediate

这些参数是 Trident 专用的,可告诉 Trident 如何为类配置卷。

存储类参数包括:

属性 键入 必填 说明

属性

map[string]string

请参见下面的属性部分

存储池

map[string]StringList

后端名称映射到中的存储池列表

附加 StoragePools

map[string]StringList

后端名称映射到中的存储池列表

排除 StoragePools

map[string]StringList

后端名称映射到中的存储池列表

存储属性及其可能值可以分类为存储池选择属性和 Kubernetes 属性。

存储池选择属性

这些参数决定了应使用哪些 Trident 管理的存储池来配置给定类型的卷。

属性 键入 优惠 请求 支持

介质1

string

HDD ,混合, SSD

Pool 包含此类型的介质;混合表示两者

指定的介质类型

ontap-nas , ontap-nas-economy. ontap-nas-flexgroup , ontap-san , solidfire-san

配置类型

string

精简,厚

Pool 支持此配置方法

指定的配置方法

Thick:All ONTAP ;Thin:All ONTAP & solidfire-san

后端类型

string

ontap-nas、ontap-nas-economy. ontap-nas-flexgroup、ontap-san、solidfire-san、GCP-CVS、azure-netapp-files、ontap-san-economy.

池属于此类型的后端

指定后端

所有驱动程序

snapshots

true false

Pool 支持具有快照的卷

启用了快照的卷

ontap-nas , ontap-san , solidfire-san , gcp-cvs

克隆

true false

Pool 支持克隆卷

启用了克隆的卷

ontap-nas , ontap-san , solidfire-san , gcp-cvs

加密

true false

池支持加密卷

已启用加密的卷

ontap-nas , ontap-nas-economy-、 ontap-nas-flexgroups , ontap-san

IOPS

内部

正整数

Pool 能够保证此范围内的 IOPS

卷保证这些 IOPS

solidfire-san

1 : ONTAP Select 系统不支持

在大多数情况下,请求的值直接影响配置;例如,请求厚配置会导致卷配置较厚。但是, Element 存储池会使用其提供的 IOPS 最小值和最大值来设置 QoS 值,而不是请求的值。在这种情况下,请求的值仅用于选择存储池。

理想情况下、您可以单独使用 attributes`来模拟满足特定类需求所需的存储质量。Trident会自动发现并选择与您指定的_all_匹配的存储池 `attributes

如果您发现自己无法使用 `attributes`自动为类选择合适的池、则可以使用和 `additionalStoragePools`参数进一步细化池、甚至可以 `storagePools`选择一组特定的池。

您可以使用 storagePools`参数进一步限制与任何指定匹配的池集 `attributes。换言之、Trident使用和 `storagePools`参数标识的池的交叉点 `attributes`进行配置。您可以单独使用参数,也可以同时使用这两者。

您可以使用 additionalStoragePools`参数扩展Trident用于配置的池集、而不管和 `storagePools`参数选择了哪些池 `attributes

您可以使用 `excludeStoragePools`参数筛选Trident用于配置的池集。使用此参数将删除任何匹配的池。

在和 additionalStoragePools`参数中 `storagePools,每个条目的格式为 <backend>:<storagePoolList>,其中 <storagePoolList>`是指定后端的存储池的逗号分隔列表。例如,的值 `additionalStoragePools`可能类似于 `ontapnas_192.168.1.100:aggr1,aggr2;solidfire_192.168.1.101:bronze。这些列表接受后端值和列表值的正则表达式值。您可以使用 `tridentctl get backend`获取后端及其池的列表。

Kubernetes 属性

这些属性不会影响 Trident 在动态配置期间选择的存储池 / 后端。相反,这些属性仅提供 Kubernetes 永久性卷支持的参数。工作节点负责文件系统创建操作,并且可能需要文件系统实用程序,例如 xfsprogs 。

属性 键入 说明 相关驱动程序 Kubernetes 版本

FSType

string

ext4、ext3、xfs

块卷的文件系统类型

solidfire-san、ontap-nas、ontap-nas-economy. ontap-nas-flexgroup、ontap-san、ontap-san-economy.

全部

允许卷扩展

boolean

true false

启用或禁用对增加 PVC 大小的支持

ontap-nas , ontap-nas-economy. ontap-nas-flexgroup , ontap-san , ontap-san-economy. solidfire-san , gcp-cvs , azure-netapp-files

1.11多个

卷绑定模式

string

即时, WaitForFirstConsumer"

选择何时进行卷绑定和动态配置

全部

1.19 - 1.26

提示
  • fsType`参数用于控制所需的SAN LUN文件系统类型。此外、Kubnetes还会使用存储类中存在的来指示文件系统存在 `fsType。只有在设置了后、才能使用POD的安全上下文 fsType`控制卷所有权 `fsGroup。有关使用上下文设置卷所有权的概述、 `fsGroup`请参见"Kubernetes :为 Pod 或容器配置安全上下文"。只有在以下情况下、Kubnetes才会应用此 `fsGroup`值:

    • `fsType`在存储类中设置。

    • PVC 访问模式为 RW 。

    对于 NFS 存储驱动程序, NFS 导出中已存在文件系统。要使用 fsGroup`存储类,仍需要指定 `fsType。您可以将其设置为或任何非空值。 nfs

  • 有关卷扩展的详细信息、请参见"展开卷"

  • Trident安装程序包提供了几个示例存储类定义sample-input/storage-class-*.yaml,用于中的Trident。删除 Kubernetes 存储类也会删除相应的 Trident 存储类。

Kubbernetes `VolumeSnapshotClass`对象

Kubbernetes VolumeSnapshotClass`对象类似于 `StorageClasses。它们有助于定义多个存储类,并由卷快照引用以将快照与所需的快照类关联。每个卷快照都与一个卷快照类相关联。

`VolumeSnapshotClass`要创建快照、管理员应定义。此时将使用以下定义创建卷快照类:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: csi-snapclass
driver: csi.trident.netapp.io
deletionPolicy: Delete
`driver`用于向Kub联网 指定由Trident处理对类的卷快照的请求 `csi-snapclass`。 `deletionPolicy`指定在必须删除快照时要执行的操作。如果 `deletionPolicy`将设置为 `Delete`,则在删除快照后,系统将删除卷快照对象以及存储集群上的底层快照。或者、将其设置为 `Retain`表示将 `VolumeSnapshotContent`保留和物理快照。

Kubbernetes `VolumeSnapshot`对象

Kubnetes `VolumeSnapshot`对象是指创建卷快照的请求。就像 PVC 代表用户对卷发出的请求一样,卷快照也是用户为现有 PVC 创建快照的请求。

收到卷快照请求后、Trident会自动管理在后端为卷创建快照的操作、并通过创建唯一对象来公开快照
VolumeSnapshotContent。您可以从现有 PVC 创建快照,并在创建新 PVC 时将这些快照用作 DataSource 。

备注 VolumeSnapshot 的生命周期与源 PVC 无关:即使删除了源 PVC ,快照也会持续存在。删除具有关联快照的 PVC 时, Trident 会将此 PVC 的后备卷标记为 " 正在删除 " 状态,但不会将其完全删除。删除所有关联快照后,卷将被删除。

Kubbernetes `VolumeSnapshotContent`对象

Kubbernetes VolumeSnapshotContent`对象表示从已配置的卷创建的快照。它类似于 `PersistentVolume、表示存储集群上已配置的快照。与和 PersistentVolume`对象类似 `PersistentVolumeClaim、创建快照时、 VolumeSnapshotContent`对象会与请求创建快照的对象保持一对一映射 `VolumeSnapshot

`VolumeSnapshotContent`对象包含唯一标识快照的详细信息,例如 `snapshotHandle`。这 `snapshotHandle`是PV名称和对象名称的唯一组合 `VolumeSnapshotContent`。

收到快照请求后, Trident 会在后端创建快照。创建快照后、Trident会配置一个 `VolumeSnapshotContent`对象、从而将快照公开给Kubnetes API。

备注 通常、您不需要管理 `VolumeSnapshotContent`对象。但要在Astra Trident之外创建的情况除外"导入卷快照"

Kubbernetes `CustomResourceDefinition`对象

Kubernetes 自定义资源是 Kubernetes API 中的端点,由管理员定义并用于对类似对象进行分组。Kubernetes 支持创建自定义资源以存储对象集合。您可以通过运行来获取这些资源定义 kubectl get crds

自定义资源定义( CRD )及其关联的对象元数据由 Kubernetes 存储在其元数据存储中。这样就无需为 Trident 创建单独的存储。

Asta Trident使用 `CustomResourceDefinition`对象保留Trident对象的身份、例如Trident后端、Trident存储类和Trident卷。这些对象由 Trident 管理。此外, CSI 卷快照框架还引入了一些定义卷快照所需的 CRD 。

CRD 是一种 Kubernetes 构造。上述资源的对象由 Trident 创建。简单地说,使用创建后端时 tridentctl,会创建一个相应的 `tridentbackends`CRD对象供Kubbernetes使用。

有关 Trident 的 CRD ,请注意以下几点:

  • 安装 Trident 时,系统会创建一组 CRD ,并可像使用任何其他资源类型一样使用。

  • 使用命令卸载Trident时 tridentctl uninstall、Trident Pod将被删除、但创建的CRD不会被清理。请参见"卸载 Trident"、了解如何从头开始完全删除和重新配置Trident。

Asta Trident `StorageClass`对象

Trident会为在其配置程序字段中指定的Kubbernetes对象 csi.trident.netapp.io`创建匹配的存储类 `StorageClass。存储类名称与它所代表的Kubbernetes对象的名称匹配 StorageClass

备注 使用Kubnetes时、将在注册使用Trident作为配置程序的Kubnetes时自动创建这些对象 StorageClass

存储类包含一组卷要求。Trident 会将这些要求与每个存储池中的属性进行匹配;如果匹配,则该存储池是使用该存储类配置卷的有效目标。

您可以使用 REST API 创建存储类配置以直接定义存储类。但是、对于KubeNet部署、我们希望在注册新的KubeNet对象时创建这些 `StorageClass`对象。

Asta三端对象

后端表示存储提供程序,其中 Trident 配置卷;单个 Trident 实例可以管理任意数量的后端。

备注 这是您自己创建和管理的两种对象类型之一。另一个是Kubbernetes `StorageClass`对象。

有关如何构建这些对象的详细信息,请参见"正在配置后端"

Asta Trident `StoragePool`对象

存储池表示可在每个后端配置的不同位置。对于 ONTAP ,这些聚合对应于 SVM 中的聚合。对于 NetApp HCI/SolidFire ,这些 QoS 分段对应于管理员指定的 QoS 分段。对于 Cloud Volumes Service ,这些区域对应于云提供商区域。每个存储池都有一组不同的存储属性,用于定义其性能特征和数据保护特征。

与此处的其他对象不同,存储池候选对象始终会自动发现和管理。

Asta Trident `Volume`对象

卷是基本配置单元,由后端端点组成,例如 NFS 共享和 iSCSI LUN 。在Kubnetes中,这些直接对应于 PersistentVolumes。创建卷时,请确保其具有存储类,此类可确定可配置该卷的位置以及大小。

备注
  • 在 Kubernetes 中,这些对象会自动进行管理。您可以查看它们以查看 Trident 配置的内容。

  • 删除具有关联快照的 PV 时,相应的 Trident 卷将更新为 * 正在删除 * 状态。要删除 Trident 卷,您应删除该卷的快照。

卷配置定义了配置的卷应具有的属性。

属性 键入 必填 说明

version

string

Trident API 版本( "1" )

name

string

要创建的卷的名称

存储类

string

配置卷时要使用的存储类

大小

string

要配置的卷大小(以字节为单位)

协议

string

要使用的协议类型; "file" 或 "block"

内部名称

string

存储系统上的对象名称;由 Trident 生成

cloneSourceVolume

string

ONTAP ( NAS , SAN )和 SolidFire — * :要从中克隆的卷的名称

splitOnClone

string

ONTAP ( NAS , SAN ):将克隆从其父级拆分

snapshotPolicy

string

Snapshot-* :要使用的 ONTAP 策略

SnapshotReserve

string

Snapshot-* :为快照预留的卷百分比 ONTAP

导出策略

string

ontap-nas* :要使用的导出策略

snapshotDirectory

ontap-nas* :是否显示快照目录

unixPermissions

string

ontap-nas* :初始 UNIX 权限

块大小

string

SolidFire — * :块 / 扇区大小

文件系统

string

文件系统类型

Trident会在创建卷时生成 internalName。这包括两个步骤。首先,它会在卷名称前面附加存储前缀(默认 trident`前缀或后端配置中的前缀),从而生成格式为的名称 `<prefix>-<volume-name>。然后,它将继续清理名称,替换后端不允许使用的字符。对于ONTAP后端,它会将连字符替换为下划线(因此,内部名称将变为 <prefix>_<volume-name>)。对于 Element 后端,它会将下划线替换为连字符。

您可以使用卷配置直接使用REST API配置卷、但在Kubbernetes部署中、我们希望大多数用户使用标准Kubbernetes `PersistentVolumeClaim`方法。Trident 会在配置过程中自动创建此卷对象。

Asta Trident `Snapshot`对象

快照是卷的时间点副本,可用于配置新卷或还原状态。在Kubnetes中、这些直接对应于 `VolumeSnapshotContent`对象。每个快照都与一个卷相关联,该卷是快照的数据源。

每个 `Snapshot`对象都包括下列属性:

属性 键入 必填 说明

version

字符串

Trident API 版本( "1" )

name

字符串

Trident Snapshot 对象的名称

内部名称

字符串

存储系统上 Trident Snapshot 对象的名称

volumeName

字符串

为其创建快照的永久性卷的名称

volumeInternalName

字符串

存储系统上关联的 Trident 卷对象的名称

备注 在 Kubernetes 中,这些对象会自动进行管理。您可以查看它们以查看 Trident 配置的内容。

创建Kubnetes VolumeSnapshot`对象请求后、Trident会通过在后备存储系统上创建Snapshot对象来工作。此快照对象的是通过将前缀与 `UID`该对象的 `VolumeSnapshot`组合来生成 `snapshot-`的 `internalName(例如 snapshot-e8d8a0ca-9826-11e9-9807-525400f3f660)。 `volumeName`和 `volumeInternalName`将通过获取后备卷的详细信息来填充。

Asta Trident `ResourceQuota`对象

Trident守护进程使用优先级类(KubeNet中可用的最高优先级类)、以确保Astra Trident可以在正常节点关闭期间识别和清理卷、并允许Trident守护进程 `system-node-critical`Pod抢占资源压力较高的集群中优先级较低的工作负载。

为此、Asta Trident会使用一个 `ResourceQuota`对象来确保满足Trident守护程序集上的"system-node critical"优先级类。在部署和创建守护进程之前、Asta Trident会查找 `ResourceQuota`对象、如果未发现、则会应用该对象。

如果您需要对默认资源配额和优先级类别进行更多控制、可以使用Helm图表生成 `custom.yaml`或配置 `ResourceQuota`对象。

以下是一个`ResourceQuota`对象的示例、该对象会优先处理Trident子集。

apiVersion: <version>
kind: ResourceQuota
metadata:
  name: trident-csi
  labels:
    app: node.csi.trident.netapp.io
spec:
  scopeSelector:
     matchExpressions:
       - operator : In
         scopeName: PriorityClass
         values: ["system-node-critical"]

有关资源配额的详细信息,请参见"Kubernetes:资源配额"

如果安装失败、请进行清理 ResourceQuota

在创建对象后安装失败的极少数情况下 ResourceQuota、请先尝试、"正在卸载"然后再重新安装。

如果不起作用、请手动删除该 `ResourceQuota`对象。

删除 ResourceQuota

如果您希望控制自己的资源分配、可以使用以下命令删除Astra Trident `ResourceQuota`对象:

kubectl delete quota trident-csi -n trident