第 2 章 CSIDriver [storage.k8s.io/v1]
- 描述
- CSIDriver 捕获集群中部署的 Container Storage Interface (CSI)卷驱动程序的信息。Kubernetes attach detach controller 使用这个对象来决定是否需要附加。kubelet 使用此对象来确定是否需要在挂载中传递 pod 信息。CSIDriver 对象没有命名空间。
- 类型
-
object
- 必填
-
spec
-
2.1. 规格
属性 | 类型 | 描述 |
---|---|---|
|
| APIVersion 定义对象的这个表示法的版本化的 schema。服务器应该将识别的模式转换为最新的内部值,并可拒绝未识别的值。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources |
|
| kind 是一个字符串值,代表此对象所代表的 REST 资源。服务器可以从客户端向其提交请求的端点推断。无法更新。采用驼峰拼写法 (CamelCase)。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds |
| 标准对象 metadata. metadata.Name 表示此对象引用的 CSI 驱动程序的名称 ; 必须为该驱动程序返回的 CSI GetPluginName ()调用名称相同。驱动程序名称必须是 63 个字符或更少,以字母数字字符([a-z0-9A-Z])开头和结尾,并带有短划线(-)、句点(.)和字母数字。更多信息: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata | |
|
| CSIDriverSpec 是 CSIDriver 的规格。 |
2.1.1. .spec
- 描述
- CSIDriverSpec 是 CSIDriver 的规格。
- 类型
-
object
属性 | 类型 | 描述 |
---|---|---|
|
| attachRequired 表示这个 CSI 卷驱动程序需要一个 attach 操作(因为它实现了 CSI ControllerPublishVolume ()方法),并且 Kubernetes attach detach 控制器应该调用 attach 卷接口来检查 volumeattachment 状态并等待卷附加等待,直到卷被附加。CSI external-attacher 与 CSI 卷驱动程序协调,并在 attach 操作完成后更新 volumeattachment 状态。如果启用了 CSIDriverRegistry 功能门,并将值指定为 false,则会跳过 attach 操作。否则,将调用 attach 操作。 此字段不可变。 |
|
| 定义底层卷是否支持在挂载前更改卷的所有权和权限。如需了解更多详细信息,请参阅特定的 FSGroupPolicy 值。 此字段不可变。 默认为 ReadWriteOnceWithFSType,它将检查每个卷来确定 Kubernetes 是否应该修改卷的所有权和权限。使用默认策略时,只有在定义了 fstype 且卷的访问模式包含 ReadWriteOnce 时,才会应用定义的 fsGroup。 |
|
| 如果设置为 true,podInfoOnMount 表示这个 CSI 卷驱动程序在挂载操作过程中需要额外的 pod 信息(如 podName、podUID 等)。如果设置为 false,则不会在挂载时传递 pod 信息。默认为 false。CSI 驱动程序将 podInfoOnMount 指定为驱动程序部署的一部分。如果为 true,Kubelet 会在 CSI NodePublishVolume ()调用中将 pod 信息作为 VolumeContext 传递。CSI 驱动程序负责解析和验证作为 VolumeContext 传递的信息。如果 podInfoOnMount 设为 true,则会传递以下 VolumeConext。这个列表可能会增大,但前缀将会被使用。"csi.storage.k8s.io/pod.name": pod.Name "csi.storage.k8s.io/pod.namespace": pod.Namespace "csi.storage.k8s.io/pod.uid": string (pod.UID) "csi.storage.k8s.io/ephemeral": "true" (如果卷是一个内联卷),否则为 "pod.UID ": "csi.storage.k8s.io/ephemeral": "true" "CSI.storage.k8s.io/ephemeral"是 Kubernetes 1.16 中的一项新功能。只有支持"Persistent"和"Ephemeral" VolumeLifecycleMode 的驱动程序才需要它。其他驱动程序可以禁用 pod 信息和/或忽略此字段。因为 Kubernetes 1.15 不支持此字段,所以当这样的集群中部署时,驱动程序只能支持一个模式,部署会决定哪个模式,例如通过驱动程序的命令行参数。 此字段不可变。 |
|
|
RequiresRepublish 表示 CSI 驱动程序需要定期调用 注: 在成功调用 NodePublishVolume 后,对 NodePublishVolume 的后续调用应该只更新卷的内容。正在运行的容器不会看到新的挂载点。 |
|
| SELinuxMount 指定 CSI 驱动程序是否支持 "-o context" 挂载选项。
当 "true" 时,CSI 驱动程序必须确保使用这个 CSI 驱动程序提供的所有卷都可以使用不同的 当 "false" 时,Kubernetes 不会将任何特殊的 SELinux 挂载选项传递给驱动程序。这通常用于代表更大共享文件系统的子目录的卷。 默认为 "false"。 |
|
| 如果设置为 true,则 storageCapacity 表示 CSI 卷驱动程序希望 pod 调度来考虑驱动程序部署通过创建具有容量信息的 CSIStorageCapacity 对象来报告。 部署驱动程序时,可以立即启用检查。在这种情况下,置备带有后绑定的新卷将暂停,直到驱动程序部署发布了一些合适的 CSIStorageCapacity 对象。 或者,驱动程序可以使用字段 unset 或 false 进行部署,并稍后在发布存储容量信息时中断。 此字段在 Kubernetes swig 1.22 中是不可变的,现在是可变的。 |
|
| TokenRequests 表示 CSI 驱动程序需要 pod 的服务帐户令牌,它会挂载卷以进行必要的身份验证。kubelet 将传递 CSI NodePublishVolume 调用中的 VolumeContext 中的令牌。CSI 驱动程序应解析并验证以下 VolumeContext: "csi.storage.k8s.io/serviceAccount.tokens": { "<audience>": { "token": <token>, "expirationTimestamp": <expiration timestamp in RFC3339>, }, … } 注: 每个 TokenRequest 中的 Audience 应该不同,大多数令牌都是空字符串。要在到期后接收新令牌,RequiresRepublish 可用于定期触发 NodePublishVolume。 |
|
| TokenRequest 包含服务帐户令牌的参数。 |
|
| VolumeLifecycleModes 定义这个 CSI 卷驱动程序支持的卷类型。如果列表为空为 "Persistent",这是 CSI 规格定义的使用量,并通过常见的 PV/PVC 机制在 Kubernetes 中实施。另一个模式是"Ephemeral"。在这个模式中,卷通过 CSIVolumeSource 在 pod 规格中内联定义,它们的生命周期与该 pod 的生命周期相关联。驱动程序必须了解这一点,因为它只会获得此类卷的 NodePublishVolume 调用。有关实现这个模式的更多信息,请参阅 https://kubernetes-csi.github.io/docs/ephemeral-local-volumes.html A 驱动程序可以支持一个或多个这些模式,以后可能会添加更多模式。该字段为 beta。 此字段不可变。 |
2.1.2. .spec.tokenRequests
- 描述
TokenRequests 表示 CSI 驱动程序需要 pod 的服务帐户令牌,它会挂载卷以进行必要的身份验证。kubelet 将传递 CSI NodePublishVolume 调用中的 VolumeContext 中的令牌。CSI 驱动程序应解析并验证以下 VolumeContext: "csi.storage.k8s.io/serviceAccount.tokens": { "<audience>": { "token": <token>, "expirationTimestamp": <expiration timestamp in RFC3339>, }, … }
注: 每个 TokenRequest 中的 Audience 应该不同,大多数令牌都是空字符串。要在到期后接收新令牌,RequiresRepublish 可用于定期触发 NodePublishVolume。
- 类型
-
数组
2.1.3. .spec.tokenRequests[]
- 描述
- TokenRequest 包含服务帐户令牌的参数。
- 类型
-
object
- 必填
-
受众
-
属性 | 类型 | 描述 |
---|---|---|
|
| audience 是 "TokenRequestSpec" 中令牌的预期使用者。它将默认为 kube apiserver 的 audiences。 |
|
| ExpirationSeconds 是 "TokenRequestSpec" 中令牌的有效性持续时间。它在 "TokenRequestSpec" 中具有相同的默认值 "ExpirationSeconds"。 |