5.2. CSI inline 临时卷
借助容器存储接口(CSI)内联临时卷,您可以定义 Pod
规格,在 pod 部署时创建内联临时卷,并在 pod 销毁时删除它们。
此功能仅可用于支持的 Container Storage Interface (CSI) 驱动程序:* 共享资源 CSI 驱动程序 * Azure 文件 CSI 驱动程序
5.2.1. CSI 内联临时卷概述
通常,由 Container Storage Interface(CSI)驱动程序支持的卷只能用于 PersistentVolume
和 PersistentVolumeClaim
对象的组合。
通过此功能,可以在 Pod
规格中直接指定 CSI 卷,而不是在 PersistentVolume
中指定。内联卷是临时的,在 pod 重启后不会保留。
5.2.1.1. 支持限制
在默认情况下,OpenShift Container Platform 支持 CSI 内联临时卷,但有以下限制:
- 仅支持 CSI 驱动程序。不支持 in-tree 和 FlexVolumes。
-
共享资源 CSI 驱动程序只支持使用内联临时卷访问多个命名空间中的
Secret
或ConfigMap
,作为技术预览功能。 - 社区或存储供应商提供其他支持这些卷的 CSI 驱动程序。按照 CSI 驱动程序供应商提供的说明进行操作。
CSI 驱动程序可能没有实现内联卷功能,包括 Ephemeral
能力。详情请查看 CSI 驱动程序文档。
共享资源 CSI 驱动程序只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
5.2.2. CSI Volume Admission 插件
Container Storage Interface (CSI) Volume Admission 插件允许您限制在 pod 准入上置备 CSI 临时卷的独立 CSI 驱动程序的使用。管理员可以添加 csi-ephemeral-volume-profile
标签,然后 Admission 插件会检查该标签,并在强制、警告和审核决策中使用。
5.2.2.1. 概述
要使用 CSI Volume Admission 插件,管理员将 security.openshift.io/csi-ephemeral-volume-profile
标签添加到 CSIDriver
对象,它会在用来提供 CSI 驱动程序时声明 CSI 驱动程序的有效 pod 安全配置集,如下例所示:
kind: CSIDriver
metadata:
name: csi.mydriver.company.org
labels:
security.openshift.io/csi-ephemeral-volume-profile: restricted 1
- 1
- CSI 驱动程序对象 YAML 文件,将
csi-ephemeral-volume-profile
标签设置为 "restricted"
此"有效配置集"通信 pod 可以使用 CSI 驱动程序在 pod 安全标准管理时挂载 CSI 临时卷。
CSI Volume Admission 插件在创建 pod 时检查 pod 卷 ; 使用 CSI 卷的现有 pod 不受影响。如果 pod 使用容器存储接口(CSI)卷,插件会查找 CSIDriver
对象并检查 csi-ephemeral-volume-profile
标签,然后在强制、警告和审计决策中使用标签值。
5.2.2.2. Pod 安全配置集强制
当 CSI 驱动程序具有 csi-ephemeral-volume-profile
标签时,使用 CSI 驱动程序挂载 CSI 临时卷的 pod 必须在强制实施相等或更高权限的 pod 安全标准的命名空间中运行。如果命名空间强制实施更严格的标准,CSI Volume Admission 插件会拒绝准入。下表描述了给定标签值的不同 pod 安全配置集的强制行为。
Pod 安全配置集 | 驱动程序标签: restricted | 驱动程序标签: baseline | 驱动程序标签: privileged |
---|---|---|---|
Restricted |
Allowed |
Denied |
Denied |
Baseline |
Allowed |
Allowed |
Denied |
Privileged |
Allowed |
Allowed |
Allowed |
5.2.2.3. Pod 安全配置集警告
如果 CSI 驱动程序的有效配置集比 pod 命名空间的 pod 安全警告配置集更宽松,则 CSI Volume Admission 插件可能会发出警告。下表显示了何时为给定标签值的不同 pod 安全配置集发生警告。
Pod 安全配置集 | 驱动程序标签: restricted | 驱动程序标签: baseline | 驱动程序标签: privileged |
---|---|---|---|
Restricted |
No warning |
Warning |
Warning |
Baseline |
No warning |
No warning |
Warning |
Privileged |
No warning |
No warning |
No warning |
5.2.2.4. Pod 安全配置集审核
如果 CSI 驱动程序的有效配置集比 pod 命名空间的 pod 安全审计配置集更宽松,则 CSI Volume Admission 插件可以将 audit 注解应用到 pod。下表显示了针对给定标签值的不同 pod 安全配置集应用的 audit 注解。
Pod 安全配置集 | 驱动程序标签: restricted | 驱动程序标签: baseline | 驱动程序标签: privileged |
---|---|---|---|
Restricted |
No audit |
Audit |
Audit |
Baseline |
No audit |
No audit |
Audit |
Privileged |
No audit |
No audit |
No audit |
5.2.2.5. CSI Volume Admission 插件的默认行为
如果 CSI 临时卷引用的 CSI 驱动程序没有 csi-ephemeral-volume-profile
标签,CSI Volume Admission 插件会考虑驱动程序具有强制、警告和审计行为的 privileged 配置集。同样,如果 pod 的命名空间没有设置 pod 安全准入标签,Admission 插件会假定允许 restricted 配置集强制、警告和审核决策。因此,如果没有设置标签,则使用该 CSI 驱动程序的 CSI 临时卷默认仅在特权命名空间中可用。
OpenShift Container Platform 和支持临时卷附带的 CSI 驱动程序为 csi-ephemeral-volume-profile
标签设置了合理的默认设置:
- 共享资源 CSI 驱动程序: restricted
- Azure File CSI 驱动程序: privileged
如果需要,管理员可以更改标签的默认值。
5.2.3. 在 pod 规格中嵌入 CSI 内联临时卷
您可以在 OpenShift Container Platform 中的 Pod
规格中嵌入 CSI 内联临时卷。在运行时,嵌套的内联卷遵循与其关联的 Pod 的临时生命周期,以便 CSI 驱动程序在 Pod 创建和销毁时处理卷操作的所有阶段。
流程
-
创建
Pod
对象定义,并将其保存到文件中。 在该文件中嵌入 CSI 内联临时卷。
my-csi-app.yaml
kind: Pod apiVersion: v1 metadata: name: my-csi-app spec: containers: - name: my-frontend image: busybox volumeMounts: - mountPath: "/data" name: my-csi-inline-vol command: [ "sleep", "1000000" ] volumes: 1 - name: my-csi-inline-vol csi: driver: inline.storage.kubernetes.io volumeAttributes: foo: bar
- 1
- Pod 使用的卷的名称。
创建在上一步中保存的对象定义文件。
$ oc create -f my-csi-app.yaml