Kubernetes 1.26: 支持在挂载时将 Pod fsGroup 传递给 CSI 驱动程序

2023年 7月 11日 20.4k 0

作者: Fabio Bertinatto (Red Hat), Hemant Kumar (Red Hat)

译者: Xin Li (DaoCloud)

fsGroup 委托给 CSI 驱动程序管理首先在 Kubernetes 1.22 中作为 Alpha 特性引入,
并在 Kubernetes 1.25 中进阶至 Beta 状态。
对于 Kubernetes 1.26,我们很高兴地宣布此特性已进阶至正式发布(GA)状态。

在此版本中,如果你在 Pod(Linux)
的安全上下文中指定一个 fsGroup
则该 Pod 容器中的所有进程都是该附加组的一部分。

在以前的 Kubernetes 版本中,kubelet 总是根据 Pod 的
.spec.securityContext.fsGroupChangePolicy 字段中指定的策略,
fsGroup 属主关系和权限的更改应用于卷中的文件。

从 Kubernetes 1.26 开始,CSI 驱动程序可以选择在卷挂载期间应用 fsGroup 设置,
这使 kubelet 无需更改这些卷中文件和目录的权限。

它是如何工作的?

支持此功能的 CSI 驱动程序应通告其 VOLUME_MOUNT_GROUP 节点能力。

kubelet 识别此信息后,在 Pod 启动期间将 fsGroup 信息传递给 CSI 驱动程序。
这个过程是通过 NodeStageVolumeRequest
NodePublishVolumeRequest
CSI 调用完成的。

因此,CSI 驱动程序应使用挂载选项将 fsGroup 应用到卷中的文件上。
例如,Azure File CSIDriver
利用 gid 挂载选项将 fsGroup 信息映射到卷中的所有文件。

应该注意的是,在上面的示例中,kubelet 避免直接将权限更改应用于该卷文件中的文件和目录。
此外,有两个策略定义不再有效:CSIDriver 对象的 .spec.fsGroupPolicy
Pod 的 .spec.securityContext.fsGroupChangePolicy 都不再起作用。

有关此功能内部工作原理的更多详细信息,请查看 CSI
开发人员文档中的增强建议和
CSI 驱动程序 fsGroup 支持。

这一特性为何重要?

如果没有此功能,则无法在某些存储环境中将 fsGroup 信息应用于文件。

例如,Azure 文件不支持 POSIX 风格的文件所有权和权限概念,CSI 驱动程序只能在卷级别设置文件权限。

我该如何使用它?

此功能应该对用户基本透明。如果你维护应支持此功能的 CSI 驱动程序,
请阅读 CSI 驱动程序 fsGroup 支持
以获取有关如何在你的 CSI 驱动程序中支持此功能的更多信息。

不支持此功能的现有 CSI 驱动程序将继续照常工作:他们不会从 kubelet 收到任何
fsGroup 信息。除此之外,kubelet 将根据 CSIDriver 的
.spec.fsGroupPolicy 和相关 Pod 的 .spec.securityContext.fsGroupChangePolicy
中指定的策略,继续对这些卷中文件的属主关系和权限进行更改。

相关文章

KubeSphere 部署向量数据库 Milvus 实战指南
探索 Kubernetes 持久化存储之 Longhorn 初窥门径
征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
那些年在 Terraform 上吃到的糖和踩过的坑
无需 Kubernetes 测试 Kubernetes 网络实现
Kubernetes v1.31 中的移除和主要变更

发布评论