Kubernetes 和 Trident 对象
您可以通过读取和写入资源对象,使用 REST API 与 Kubernetes 和 Trident 进行交互。有几个资源对象决定了 Kubernetes 与 Trident、Trident 与存储以及 Kubernetes 与存储之间的关系。其中一些对象通过 Kubernetes 进行管理,其他对象通过 Trident 进行管理。
这些对象如何相互作用?
也许理解对象、它们的用途以及它们如何交互的最简单方法是遵循 Kubernetes 用户的单个存储请求:
-
用户创建了一个
PersistentVolumeClaim,请求从管理员之前配置的 KubernetesStorageClass`中分配一个特定大小的 `PersistentVolume。 -
Kubernetes
StorageClass将 Trident 识别为其配置程序,并包含告诉 Trident 如何为请求的类配置卷的参数。 -
Trident 查看其自己的
StorageClass,该名称用于标识匹配的Backends`和 `StoragePools,它可以使用这些来为类配置卷。 -
Trident 在匹配的后端上配置存储并创建两个对象:Kubernetes 中的一个
PersistentVolume,它告诉 Kubernetes 如何查找、挂载和处理卷,以及 Trident 中的一个卷,它保留 `PersistentVolume`与实际存储之间的关系。 -
Kubernetes 将
PersistentVolumeClaim绑定到新的PersistentVolume。包含PersistentVolumeClaim的 Pod 会在其运行的任何主机上挂载该 PersistentVolume。 -
用户使用指向 Trident 的
VolumeSnapshotClass,为现有 PVC 创建VolumeSnapshot。 -
Trident 标识与 PVC 关联的卷,并在其后端创建卷的快照。它还创建了一个
VolumeSnapshotContent,指导 Kubernetes 如何识别快照。 -
用户可以创建一个
PersistentVolumeClaim,并使用 `VolumeSnapshot`作为源。 -
Trident 识别所需的快照,并执行创建 `PersistentVolume`和 `Volume`所涉及的同一组步骤。
|
|
如需进一步了解 Kubernetes 对象,我们强烈建议您阅读 Kubernetes 文档的 "持久卷"部分。 |
Kubernetes PersistentVolumeClaim 对象
Kubernetes PersistentVolumeClaim 对象是 Kubernetes 集群用户发出的存储请求。
除了标准规范之外,如果要覆盖您在后端配置中设置的默认值,Trident 允许用户指定以下特定于卷的注释:
| 标注 | 卷选项 | 支持的驱动程序 |
|---|---|---|
trident.netapp.io/fileSystem |
fileSystem |
ontap-san, solidfire-san, ontap-san-economy |
trident.netapp.io/cloneFromPVC |
cloneSourceVolume |
ontap-nas,ontap-san,solidfire-san,azure-netapp-files,ontap-san-economy |
trident.netapp.io/splitOnClone |
splitOnClone |
ontap-nas,ontap-san |
trident.netapp.io/protocol |
protocol |
任意 |
trident.netapp.io/exportPolicy |
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 |
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 |
blockSize |
solidfire-san |
trident.netapp.io/skipRecoveryQueue |
skipRecoveryQueue |
ontap-nas,ontap-nas-economy,ontap-nas-flexgroup,ontap-san,ontap-san-economy |
如果创建的 PV 具有 Delete`回收策略,则 Trident 会在 PV 释放时(即用户删除 PVC 时)同时删除 PV 和备份卷。如果删除操作失败,Trident 会将 PV 标记为此类状态,并定期重试该操作,直到操作成功或 PV 被手动删除。如果 PV 使用 `Retain`策略,Trident 会忽略它,并假设管理员将从 Kubernetes 和后端清理它,允许在删除之前备份或检查卷。请注意,删除 PV 不会导致 Trident 删除备份卷。您应该使用 REST API (`tridentctl)将其删除。
Trident 支持使用 CSI 规范创建卷快照:您可以创建卷快照并将其用作克隆现有 PVC 的数据源。这样,PV 的时间点副本可以以快照的形式暴露给 Kubernetes。然后,可使用快照创建新的 PV。看一 `On-Demand Volume Snapshots`看这是如何运作的。
Trident 还提供用于创建克隆的 `cloneFromPVC`和 `splitOnClone`注释。您可以使用这些注释来克隆 PVC,而无需使用 CSI 实现。
示例如下:如果用户已经有一个名为 mysql`的 PVC,则用户可以使用注释创建一个名为 `mysqlclone`的新 PVC,例如 `trident.netapp.io/cloneFromPVC: mysql。使用此注释集,Trident 克隆与 mysql PVC 对应的卷,而不是从头开始配置卷。
请考虑以下几点:
-
NetApp 建议克隆空闲卷。
-
PVC 及其克隆应位于同一个 Kubernetes 命名空间中,并具有相同的存储类。
-
使用 `ontap-nas`和 `ontap-san`驱动程序时,可能需要将 PVC 注释 `trident.netapp.io/splitOnClone`与 `trident.netapp.io/cloneFromPVC`结合设置。将 `trident.netapp.io/splitOnClone`设置为 `true`时,Trident 会将克隆卷从父卷中拆分出来,从而使克隆卷的生命周期与其父卷完全脱钩,代价是失去一些存储效率。不设置 `trident.netapp.io/splitOnClone`或将其设置为 `false`会减少后端的空间消耗,代价是在父卷和克隆卷之间创建依赖关系,因此除非先删除克隆,否则无法删除父卷。拆分克隆有意义的场景是克隆一个空的数据库卷,预计该卷及其克隆会大大分化,并且不会从 ONTAP 提供的存储效率中受益。
该 `sample-input`目录包含用于 Trident 的 PVC 定义示例。有关与 Trident 卷相关的参数和设置的完整说明,请参阅。
Kubernetes PersistentVolume 对象
Kubernetes PersistentVolume 对象表示可供 Kubernetes 集群使用的一块存储。它的生命周期与使用它的 Pod 无关。
|
|
Trident 创建 `PersistentVolume`对象,并根据其配置的卷自动将其注册到 Kubernetes 集群。您无需自行管理。 |
当您创建引用基于 Trident 的 StorageClass PVC 时,Trident 使用相应的存储类来配置新卷,并为该卷注册新的 PV。在配置已配置的卷和对应的 PV 时,Trident 遵循以下规则:
-
Trident 为 Kubernetes 生成一个 PV 名称以及用于配置存储的内部名称。在这两种情况下,它都确保名称在其范围内是唯一的。
-
卷的大小与 PVC 中请求的大小尽可能相匹配,但可能会四舍五入到最接近的可分配数量,具体取决于平台。
Kubernetes StorageClass 对象
Kubernetes StorageClass 对象在 `PersistentVolumeClaims`中按名称指定,以配置具有一组属性的存储。存储类本身标识要使用的置备程序,并以置备程序理解的术语定义该属性集。
它是需要由管理员创建和管理的两个基本对象之一。另一个是 Trident 后端对象。
使用 Trident 的 Kubernetes 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 如何为该类配置卷。
storage class 参数为:
| 属性 | 类型 | 必填项 | 说明 |
|---|---|---|---|
属性 |
map[string]string |
不可以 |
请参见下面的属性部分 |
storagePools |
map[string]StringList |
不可以 |
后端名称到其中存储池列表的映射 |
additionalStoragePools |
map[string]StringList |
不可以 |
后端名称到其中存储池列表的映射 |
excludeStoragePools |
map[string]StringList |
不可以 |
后端名称到其中存储池列表的映射 |
存储属性及其可能的值可以分为存储池选择属性和 Kubernetes 属性。
存储池选择属性
这些参数确定应使用哪些 Trident 管理的存储池来配置给定类型的卷。
| 属性 | 类型 | 值 | 提供 | 请求 | 支持方 |
|---|---|---|---|---|---|
媒体1 |
string |
hdd、hybrid、ssd |
池包含此类型的介质;混合意味着两者兼有 |
指定媒体类型 |
ontap-nas,ontap-nas-economy,ontap-nas-flexgroup,ontap-san,solidfire-san |
provisioningType |
string |
薄、厚 |
池支持此配置方法 |
已指定配置方法 |
thick:所有 ONTAP;thin:所有 ONTAP 和 solidfire-san |
backendType |
string |
ontap-nas,ontap-nas-economy,ontap-nas-flexgroup,ontap-san,solidfire-san,azure-netapp-files,ontap-san-economy |
池属于此类型的后端 |
指定后端 |
所有驱动程序 |
snapshots |
布尔值 |
true,false |
池支持具有快照的卷 |
已启用快照的卷 |
ontap-nas、ontap-san、solidfire-san |
个克隆 |
布尔值 |
true,false |
池支持克隆卷 |
已启用克隆的卷 |
ontap-nas、ontap-san、solidfire-san |
加密 |
布尔值 |
true,false |
池支持加密卷 |
已启用加密的卷 |
ontap-nas,ontap-nas-economy,ontap-nas-flexgroups,ontap-san |
IOPS |
int |
正整数 |
池能够保证此范围内的 IOPS |
卷保证这些 IOPS |
solidfire-san |
1:ONTAP Select 系统不支持
在大多数情况下,请求的值直接影响调配;例如,请求厚调配会导致厚调配的卷。但是,Element 存储池使用其提供的 IOPS 最小值和最大值来设置 QoS 值,而不是请求的值。在这种情况下,请求的值仅用于选择存储池。
理想情况下,您可以单独使用 `attributes`来模拟满足特定类别需求所需的存储质量。Trident 会自动发现并选择与您指定的所有 `attributes`匹配的存储池。
如果您发现自己无法使用 attributes 为某个类自动选择正确的池,则可以使用 storagePools 和 additionalStoragePools 参数进一步优化池,甚至可以选择一组特定的池。
您可以使用 storagePools 参数进一步限制与任何指定 attributes 匹配的池集。换句话说,Trident 使用由 attributes 和 storagePools 参数标识的池的交集进行配置。您可以单独使用一个参数,也可以同时使用两个参数。
您可以使用 additionalStoragePools 参数扩展 Trident 用于配置的池集,而不考虑 attributes 和 storagePools 参数选择的任何池。
您可以使用 excludeStoragePools 参数来筛选 Trident 用于配置的池集。使用此参数将删除所有匹配的池。
在 storagePools`和 `additionalStoragePools`参数中,每个条目都采用 `<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 |
全部 |
allowVolumeExpansion |
布尔值 |
true,false |
启用或禁用对增加 PVC 尺寸的支持 |
ontap-nas,ontap-nas-economy,ontap-nas-flexgroup,ontap-san,ontap-san-economy,solidfire-san,azure-netapp-files |
1.11+ |
volumeBindingMode |
string |
立即,WaitForFirstConsumer |
选择何时进行卷绑定和动态配置 |
全部 |
1.19 - 1.26 |
|
|
|
Kubernetes VolumeSnapshotClass 对象
Kubernetes VolumeSnapshotClass 对象类似于 StorageClasses。它们有助于定义多个存储类,并由卷快照引用,以将快照与所需的快照类相关联。每个卷快照都与单个卷快照类相关联。
`VolumeSnapshotClass` 应由管理员定义以创建快照。使用以下定义创建卷快照类:
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: csi-snapclass
driver: csi.trident.netapp.io
deletionPolicy: Delete
`driver`向 Kubernetes 指定 `csi-snapclass`类的卷快照请求由 Trident 处理。 `deletionPolicy`指定必须删除快照时要采取的操作。当 `deletionPolicy`设置为 `Delete`时,删除快照时将删除卷快照对象以及存储集群上的底层快照。或者,将其设置为 `Retain`意味着保留 `VolumeSnapshotContent`和物理快照。
Kubernetes VolumeSnapshot 对象
Kubernetes VolumeSnapshot 对象是创建卷的快照的请求。正如 PVC 表示用户对卷的请求一样,卷快照是用户为创建现有 PVC 的快照而发出的请求。
当卷快照请求进入时,Trident 会自动管理后端上卷的快照创建,并通过创建唯一
`VolumeSnapshotContent`对象公开快照。您可以从现有 PVC 创建快照,并在创建新 PVC 时将快照用作 DataSource。
|
|
VolumeSnapshot 的生命周期独立于源 PVC:即使删除了源 PVC,快照也会持续存在。删除具有关联快照的 PVC 时,Trident 会将此 PVC 的后备卷标记为 Deleting 状态,但不会将其完全删除。删除所有关联的快照后,该卷将被删除。 |
Kubernetes VolumeSnapshotContent 对象
Kubernetes VolumeSnapshotContent 对象表示从已配置的卷中获取的快照。它类似于 PersistentVolume,表示在存储集群上调配的快照。与 `PersistentVolumeClaim`和 `PersistentVolume`对象类似,创建快照时, `VolumeSnapshotContent`对象会维护到已请求创建快照的 `VolumeSnapshot`对象的一对一映射。
`VolumeSnapshotContent` 对象包含唯一标识快照的详细信息,例如 `snapshotHandle`。这个 `snapshotHandle`是 PV 名称和 `VolumeSnapshotContent`对象名称的唯一组合。
当快照请求进入时,Trident 会在后端创建快照。创建快照后,Trident 将配置一个 `VolumeSnapshotContent`对象,从而将快照公开给 Kubernetes API。
|
|
通常,您无需管理 VolumeSnapshotContent 对象。此操作的例外情况是,您希望 "导入卷快照" 在 Trident 外部创建。
|
Kubernetes VolumeGroupSnapshotClass 对象
Kubernetes VolumeGroupSnapshotClass 对象类似于 VolumeSnapshotClass。它们有助于定义多个存储类,并由卷组快照引用,以将快照与所需的快照类相关联。每个卷组快照都与单个卷组快照类相关联。
`VolumeGroupSnapshotClass` 应由管理员定义,以创建快照组。使用以下定义创建卷组快照类:
apiVersion: groupsnapshot.storage.k8s.io/v1beta1
kind: VolumeGroupSnapshotClass
metadata:
name: csi-group-snap-class
annotations:
kubernetes.io/description: "Trident group snapshot class"
driver: csi.trident.netapp.io
deletionPolicy: Delete
`driver` 向 Kubernetes 指定 `csi-group-snap-class` 类的卷组快照请求由 Trident 处理。 `deletionPolicy` 指定必须删除组快照时要采取的操作。当 `deletionPolicy` 设置为 `Delete` 时,删除快照时将删除卷组快照对象以及存储集群上的底层快照。或者,将其设置为 `Retain` 表示保留 `VolumeGroupSnapshotContent` 和物理快照。
Kubernetes VolumeGroupSnapshot 对象
Kubernetes VolumeGroupSnapshot 对象是创建多个卷的快照的请求。正如 PVC 表示用户对卷的请求一样,卷组快照是用户为创建现有 PVC 的快照而提出的请求。
当卷组快照请求进入时,Trident 会自动管理后端上卷的组快照的创建,并通过创建唯一 `VolumeGroupSnapshotContent`对象来公开快照。您可以从现有 PVC 创建快照,并在创建新 PVC 时将快照用作 DataSource。
|
|
VolumeGroupSnapshot 的生命周期独立于源 PVC:即使删除了源 PVC,快照也会持续存在。删除具有关联快照的 PVC 时,Trident 会将此 PVC 的后备卷标记为 Deleting 状态,但不会将其完全删除。删除所有关联的快照后,会删除卷组快照。 |
Kubernetes VolumeGroupSnapshotContent 对象
Kubernetes VolumeGroupSnapshotContent 对象表示从已配置的卷中获取的组快照。它类似于 PersistentVolume,表示存储集群上已配置的快照。与 `PersistentVolumeClaim`和 `PersistentVolume`对象类似,创建快照时, `VolumeSnapshotContent`对象会维护到已请求创建快照的 `VolumeSnapshot`对象的一对一映射。
`VolumeGroupSnapshotContent` 对象包含标识快照组的详细信息,例如 `volumeGroupSnapshotHandle` 和存储系统上存在的各个 volumeSnapshotHandles。
当快照请求进入时,Trident 在后端创建卷组快照。创建卷组快照后,Trident 配置一个 `VolumeGroupSnapshotContent`对象,从而将快照公开给 Kubernetes API。
Kubernetes CustomResourceDefinition 对象
Kubernetes 自定义资源是 Kubernetes API 中的端点,由管理员定义,用于对类似对象进行分组。Kubernetes 支持创建用于存储对象集合的自定义资源。您可以通过运行 kubectl get crds 来获取这些资源定义。
自定义资源定义 (CRD) 及其关联的对象元数据由 Kubernetes 存储在其元数据存储中。这消除了对 Trident 单独存储的需要。
Trident 使用 `CustomResourceDefinition`对象来保留 Trident 对象的身份,例如 Trident 后端、Trident 存储类和 Trident 卷。这些对象由 Trident 管理。此外,CSI 卷快照框架还引入了定义卷快照所需的一些 CRD。
CRD 是 Kubernetes 构造。上述定义的资源对象由 Trident 创建。举个简单的例子,当使用 tridentctl`创建后端时,会创建相应的 `tridentbackends CRD 对象供 Kubernetes 使用。
以下是关于 Trident CRD 需要记住的几点:
-
安装 Trident 后,将创建一组 CRD,可以像任何其他资源类型一样使用。
-
使用
tridentctl uninstall命令卸载 Trident 时,Trident pod 会被删除,但不会清理创建的 CRD。请参阅"卸载 Trident"了解如何从头开始完全移除和重新配置 Trident。
Trident StorageClass 对象
Trident 为 Kubernetes StorageClass`对象创建匹配的存储类,这些对象在其 provisioner 字段中指定 `csi.trident.netapp.io。存储类名称与其所代表的 Kubernetes `StorageClass`对象名称相同。
|
|
使用 Kubernetes 时,当注册使用 Trident 作为 provisioner 的 Kubernetes StorageClass 时,这些对象会自动创建。
|
存储类包括卷的一组要求。Trident 将这些要求与每个存储池中存在的属性进行匹配;如果它们匹配,则该存储池是使用该存储类调配卷的有效目标。
您可以创建存储类配置,通过使用 REST API 直接定义存储类。但是,对于 Kubernetes 部署,我们希望在注册新的 Kubernetes StorageClass 对象时创建它们。
Trident 后端对象
后端代表 Trident 在其上配置卷的存储提供程序;单个 Trident 实例可以管理任意数量的后端。
|
|
这是您自己创建和管理的两种对象类型之一。另一个是 Kubernetes StorageClass 对象。
|
有关如何构造这些对象的详细信息,请参阅 "配置后端"。
Trident StoragePool 对象
存储池表示每个后端上可用于设置的不同位置。对于 ONTAP,这些对应于 SVM 中的聚合。对于 NetApp HCI/SolidFire,这些对应于管理员指定的 QoS 频段。每个存储池都有一组不同的存储属性,这些属性定义了其性能特征和数据保护特征。
与这里的其他对象不同,存储池候选项始终会被自动发现和管理。
Trident Volume 对象
卷是资源调配的基本单位,包括后端端点,例如 NFS 共享以及 iSCSI 和 FC LUN。在 Kubernetes 中,这些直接对应于 PersistentVolumes。创建卷时,请确保该卷具有存储类,该类确定可以调配该卷的位置以及大小。
|
|
|
卷配置定义了已配置卷应具有的属性。
| 属性 | 类型 | 必填项 | 说明 |
|---|---|---|---|
version |
string |
不可以 |
Trident API 版本("1") |
name |
string |
可以 |
要创建的卷的名称 |
storageClass |
string |
可以 |
调配卷时要使用的存储类 |
大小 |
string |
可以 |
要设置的卷的大小(以字节为单位) |
protocol |
string |
不可以 |
要使用的协议类型;"file" 或 "block" |
internalName |
string |
不可以 |
存储系统上的对象名称;由 Trident 生成 |
cloneSourceVolume |
string |
不可以 |
ontap (nas, san) & solidfire-*:要从中克隆的卷的名称 |
splitOnClone |
string |
不可以 |
ONTAP (nas, san):从其父项拆分克隆 |
snapshotPolicy |
string |
不可以 |
ontap-*:要使用的 Snapshot 策略 |
snapshotReserve |
string |
不可以 |
ontap-*:为 Snapshot 预留的卷百分比 |
exportPolicy |
string |
不可以 |
ontap-nas*:要使用的导出策略 |
snapshotDirectory |
布尔值 |
不可以 |
ontap-nas*:快照目录是否可见 |
unixPermissions |
string |
不可以 |
ontap-nas*:初始 UNIX 权限 |
blockSize |
string |
不可以 |
solidfire-*:块/扇区大小 |
fileSystem |
string |
不可以 |
文件系统类型 |
skipRecoveryQueue |
string |
不可以 |
在卷删除过程中,绕过存储中的恢复队列并立即删除卷。 |
Trident 在创建卷时会生成 internalName。这包括两个步骤。首先,它将存储前缀(默认 trident`或后端配置中的前缀)添加到卷名前面,从而生成形式为 `<prefix>-<volume-name>`的名称。然后继续清理名称,替换后端不允许的字符。对于 ONTAP 后端,它用下划线替换连字符(因此,内部名称变为 `<prefix>_<volume-name>)。对于 Element 后端,它用连字符替换下划线。
您可以使用卷配置直接使用 REST API 配置卷,但在 Kubernetes 部署中,我们希望大多数用户使用标准的 Kubernetes PersistentVolumeClaim 方法。Trident 会在配置过程中自动创建此卷对象。
Trident Snapshot 对象
快照是卷的时间点副本,可用于配置新卷或恢复状态。在 Kubernetes 中,它们直接对应于 `VolumeSnapshotContent`对象。每个快照都与一个卷相关联,该卷是快照的数据源。
每个 Snapshot 对象都包含以下列出的属性:
| 属性 | 类型 | 必填项 | 说明 |
|---|---|---|---|
version |
字符串 |
是 |
Trident API 版本("1") |
name |
字符串 |
是 |
Trident 快照对象的名称 |
internalName |
字符串 |
是 |
存储系统上的 Trident 快照对象的名称 |
volumeName |
字符串 |
是 |
为其创建快照的永久卷的名称 |
volumeInternalName |
字符串 |
是 |
存储系统上关联的 Trident 卷对象的名称 |
|
|
在 Kubernetes 中,这些对象是自动管理的。您可以查看它们以查看 Trident 配置的内容。 |
当创建 Kubernetes VolumeSnapshot`对象请求时,Trident 通过在后端存储系统上创建一个快照对象来工作。该快照对象的 `internalName`是通过将前缀 `snapshot-`与 `UID`的 `VolumeSnapshot`对象组合生成的(例如, `snapshot-e8d8a0ca-9826-11e9-9807-525400f3f660)。 `volumeName`和 `volumeInternalName`通过获取后端卷的详细信息来填充。
Trident ResourceQuota 对象
Trident daemonset 使用 `system-node-critical`优先级类(Kubernetes 中可用的最高优先级类),以确保 Trident 能够在正常节点关闭期间识别和清理卷,并允许 Trident daemonset pod 在资源压力较大的集群中抢占较低优先级的工作负载。
为了实现这一点,Trident 使用了一个 `ResourceQuota`对象来确保满足 Trident daemonset 上的"system-node-critical"优先级类。在部署和创建 daemonset 之前,Trident 会查找 `ResourceQuota`对象,如果未发现,则应用它。
如果需要对默认 Resource Quota 和 Priority Class 进行更多控制,则可以使用 Helm chart 生成 `custom.yaml`或配置 `ResourceQuota`对象。
以下是优先处理 Trident daemonset 的 ResourceQuota 对象示例。
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
有关 Resource Quotas 的详细信息,请参阅 "Kubernetes:资源配额"。
安装失败时清理 ResourceQuota
在创建 ResourceQuota 对象后安装失败的极少数情况下,请先尝试 "卸载",然后重新安装。
如果这不起作用,请手动删除 ResourceQuota 对象。
删除 ResourceQuota
如果您希望控制自己的资源分配,则可以使用以下命令删除 Trident ResourceQuota 对象:
kubectl delete quota trident-csi -n trident