这篇文章已经一年多了,较旧的文章可能包含过时的内容。请检查从发表以来,页面中的信息是否变得不正确。
Kubernetes 1.25:CSI 内联存储卷正式发布
作者: Jonathan Dobson (Red Hat)
CSI 内联存储卷是在 Kubernetes 1.15 中作为 Alpha 功能推出的,并从 1.16 开始成为 Beta 版本。 我们很高兴地宣布,这项功能在 Kubernetes 1.25 版本中正式发布(GA)。
CSI 内联存储卷与其他类型的临时卷相似,如 configMap
、downwardAPI
和 secret
。
重要的区别是,存储是由 CSI 驱动提供的,它允许使用第三方供应商提供的临时存储。
卷被定义为 Pod 规约的一部分,并遵循 Pod 的生命周期,这意味着卷随着 Pod 的调度而创建,并随着 Pod 的销毁而销毁。
1.25 版本有什么新内容?
1.25 版本修复了几个与 CSI 内联存储卷相关的漏洞,
并且 CSIInlineVolume 特性门控
已正式发布,锁定为 True
。
因为没有新的 API 变化,所以除了这些错误修复外,使用该功能 Beta 版本的用户应该不会注意到任何重大变化。
- #89290 - CSI inline volumes should support fsGroup
- #79980 - CSI volume reconstruction does not work for ephemeral volumes
何时使用此功能
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 驱动和 Cert-Manager CSI 驱动。
Secrets Store CSI Driver 允许用户将 Secret 作为内联卷从外部挂载到一个 Pod 中。 当密钥存储在外部管理服务或 Vault 实例中时,这可能很有用。
Cert-Manager CSI Driver 与 cert-manager 协同工作, 无缝地请求和挂载证书密钥对到一个 Pod 中。这使得证书可以在应用 Pod 中自动更新。
安全考虑因素
应特别考虑哪些 CSI 驱动可作为内联卷使用。
volumeAttributes
通常通过 StorageClass
控制,并可能包含应限制给集群管理员的属性。
允许 CSI 驱动用于内联临时卷意味着任何有权限创建 Pod 的用户也可以通过 Pod 规约向驱动提供 volumeAttributes
字段。
集群管理员可以选择从 CSIDriver 规约中的 volumeLifecycleModes
中省略(或删除) Ephemeral
,
以防止驱动被用作内联临时卷,或者使用准入 Webhook 来限制驱动的使用。
参考资料
关于此功能的更多信息,请参阅: