Kubernetes v1.33:Image Volume 进阶至 Beta!
镜像卷(Image Volumes)作为 KEP-4639 的一部分,在 Kubernetes v1.31 版本中作为 Alpha 功能被引入。在 Kubernetes v1.33 中,该功能晋级为 Beta。
请注意,该功能默认仍为**禁用**状态,因为并非所有容器运行时都完全支持它。CRI-O 从 v1.31 版本开始支持此功能的初始版本,并将在 v1.33 中添加对镜像卷 Beta 版本的支持。containerd 已合并对该 Alpha 功能的支持,这将成为 v2.1.0 版本的一部分,并正在通过 PR #11578 来实现 Beta 版本的支持。
新增内容
镜像卷晋级为 Beta 版的主要变化是支持通过 `spec.containers[*].volumeMounts.[subPath,subPathExpr]` 对容器进行 `subPath` 和 `subPathExpr` 挂载。这允许最终用户挂载镜像卷的某个子目录,该子目录仍以只读(`noexec`)方式挂载。这意味着默认情况下无法挂载不存在的子目录。与其他 `subPath` 和 `subPathExpr` 值一样,Kubernetes 将确保指定的子路径中不包含绝对路径或相对路径组件。为安全起见,容器运行时也需要再次检查这些要求。如果卷中不存在指定的子目录,则运行时应在容器创建时失败,并通过现有的 kubelet 事件向用户提供反馈。
除此之外,还为镜像卷提供了三个新的 kubelet 指标
kubelet_image_volume_requested_total
:概述了请求的镜像卷数量。kubelet_image_volume_mounted_succeed_total
:统计成功挂载的镜像卷数量。kubelet_image_volume_mounted_errors_total
:统计失败的镜像卷挂载数量。
要为特定镜像卷使用现有子目录,只需将其用作容器 `volumeMounts` 的 `subPath`(或 `subPathExpr`)值即可。
apiVersion: v1
kind: Pod
metadata:
name: image-volume
spec:
containers:
- name: shell
command: ["sleep", "infinity"]
image: debian
volumeMounts:
- name: volume
mountPath: /volume
subPath: dir
volumes:
- name: volume
image:
reference: quay.io/crio/artifact:v2
pullPolicy: IfNotPresent
然后,在你的集群上创建该 Pod
kubectl apply -f image-volumes-subpath.yaml
现在你可以附加到该容器
kubectl attach -it image-volume bash
并检查卷中 `dir` 子路径下的文件内容
cat /volume/file
输出将类似于
1
感谢您阅读完这篇博客文章!SIG Node 很自豪也很高兴能在 Kubernetes v1.33 中交付此功能的晋级。
作为这篇博客文章的作者,我想特别感谢**所有**参与其中的人员!
如果您有任何反馈或建议,欢迎通过 Kubernetes Slack (#sig-node) 频道或 SIG Node 邮件列表联系 SIG Node。