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

Kubernetes 1.25:CSI 内联卷已进阶至 GA

CSI 内联卷(CSI Inline Volumes)在 Kubernetes 1.15 中作为 Alpha 特性引入,自 1.16 版本起进入 Beta 阶段。我们很高兴地宣布,此特性在 Kubernetes 1.25 中已进入正式发布(GA)阶段。

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

1.25 版本有哪些新变化?

在 1.25 版本中,有几个与此特性相关的新 Bug 修复,并且随着其进入 GA 阶段,CSIInlineVolume 特性门控已被锁定为 True。没有新的 API 变更,因此在 Beta 阶段使用此特性的用户除了这些 Bug 修复外,应该不会注意到任何重大变化。

何时使用此特性

CSI 内联卷适用于需要遵循 Pod 生命周期的简单本地卷。它们可用于从 CSI 驱动为 Pod 提供 Secret、配置数据或其他特殊用途的存储。

当出现以下情况时,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 允许用户将来自外部 Secret 存储的 Secret 作为内联卷挂载到 Pod 中。当 Secret 存储在外部托管服务或 Vault 实例中时,这非常有用。

Cert-Manager CSI Drivercert-manager 协同工作,无缝地请求证书密钥对并将其挂载到 Pod 中。这使得证书可以在应用程序 Pod 中自动续订和更新。

安全注意事项

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

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

参考资料

有关此特性的更多信息,请参阅: