本文已发布超过一年。较旧的文章可能包含过时的内容。请检查页面上的信息自发布以来是否已变得不正确。

Kubernetes 1.25:CSI 内联卷已正式发布 (GA)

CSI 内联卷在 Kubernetes 1.15 中作为 alpha 功能引入,自 1.16 起已处于 beta 阶段。我们很高兴地宣布,此功能已在 Kubernetes 1.25 中升级为正式发布 (GA) 状态。

CSI 内联卷与其他临时卷类型(例如 configMapdownwardAPIsecret)类似。重要的区别在于存储由 CSI 驱动程序提供,这允许使用第三方供应商提供的临时存储。卷被定义为 pod 规范的一部分,并遵循 pod 的生命周期,这意味着卷在 pod 被调度后创建,并在 pod 被销毁时销毁。

1.25 中的新功能?

1.25 中有几个与此功能相关的新错误修复,并且CSIInlineVolume 功能门已在 GA 升级中锁定为 True。没有新的 API 更改,因此在 beta 期间使用此功能的用户除了这些错误修复外,不应注意到任何重大更改。

何时使用此功能

CSI 内联卷适用于应遵循 pod 生命周期的简单本地卷。它们可能适用于从 CSI 驱动程序向 pod 提供密钥、配置数据或其他特殊用途的存储。

在以下情况下,CSI 驱动程序不适合内联使用:

  • 卷需要比 pod 的生命周期更长地持久存在
  • 需要卷快照、克隆或卷扩展
  • CSI 驱动程序需要应限制给管理员的 volumeAttributes

如何使用此功能

为了使用此功能,CSIDriver 规范必须显式列出 Ephemeral 作为支持的 volumeLifecycleModes 之一。以下是来自Secrets Store CSI Driver的一个简单示例。

apiVersion: storage.k8s.io/v1
kind: CSIDriver
metadata:
  name: secrets-store.csi.k8s.io
spec:
  podInfoOnMount: true
  attachRequired: false
  volumeLifecycleModes:
  - Ephemeral

然后,任何 pod 规范都可以引用该 CSI 驱动程序以创建内联卷,如本例所示。

kind: Pod
apiVersion: v1
metadata:
  name: my-csi-app-inline
spec:
  containers:
    - name: my-frontend
      image: busybox
      volumeMounts:
      - name: secrets-store-inline
        mountPath: "/mnt/secrets-store"
        readOnly: true
      command: [ "sleep", "1000000" ]
  volumes:
    - name: secrets-store-inline
      csi:
        driver: secrets-store.csi.k8s.io
        readOnly: true
        volumeAttributes:
          secretProviderClass: "my-provider"

如果驱动程序支持任何卷属性,您也可以将它们作为 Pod 的 spec 的一部分提供

      csi:
        driver: block.csi.vendor.example
        volumeAttributes:
          foo: bar

用例示例

支持 Ephemeral 卷生命周期模式的两个现有 CSI 驱动程序是 Secrets Store CSI Driver 和 Cert-Manager CSI Driver。

Secrets Store CSI Driver允许用户将来自外部密钥存储的密钥作为内联卷挂载到 pod 中。当密钥存储在外部托管服务或 Vault 实例中时,这非常有用。

Cert-Manager CSI Drivercert-manager 一起工作,以无缝地请求并将证书密钥对挂载到 pod 中。这允许在应用程序 pod 中自动续订和更新证书。

安全注意事项

应特别考虑哪些 CSI 驱动程序可以用作内联卷。volumeAttributes 通常通过 StorageClass 控制,并且可能包含应限制给集群管理员的属性。允许将 CSI 驱动程序用于内联临时卷意味着任何有权创建 pod 的用户也可以通过 pod 规范向驱动程序提供 volumeAttributes

集群管理员可以选择从 CSIDriver 规范的 volumeLifecycleModes 中省略(或删除)Ephemeral,以防止该驱动程序被用作内联临时卷,或使用准入 webhook 来限制驱动程序的使用方式。

参考

有关此功能的更多信息,请参阅: