K8s v1.31新特性ImageVolume,能否将镜像直接挂载为Volume?

摘要:本文主要分享一个 K8s 1.31 增加的一个新 Feature:ImageVolume。允许直接将 OCI 镜像作为 Volume 进行挂载,加速 artifact 分发。 1.背景 Kubernetes 社区正在积极发展,以更好地支持未
本文主要分享一个 K8s 1.31 增加的一个新 Feature:ImageVolume。允许直接将 OCI 镜像作为 Volume 进行挂载,加速 artifact 分发。 1.背景 Kubernetes 社区正在积极发展,以更好地支持未来的人工智能 (AI) 和机器学习 (ML) 场景。 为满足这些用例的需求之一,Kubernetes 正在增强对开放容器倡议 (OCI) 兼容镜像和工件(即 OCI 对象)作为原生卷源的支持。 这样,用户可以专注于使用符合 OCI 标准的工具,并将 OCI 注册表作为存储和分发任何内容的手段。 基于这一愿景,Kubernetes v1.31 引入了一个新的 Alpha 特性:ImageVolume,允许在 Pod 中将 OCI 镜像作为卷使用。该功能可以将一个 OCI 镜像作为 volume 挂载到一个 Pod 中使用,从而可以在 Pod 中访问 OCI 镜像中存储的文件。 该功能是在当前 AI 技术大行其道背景下应运而生的,部署在 K8S 上的 AI 应用急需一种高效且通用的方式分发模型权重文件,此功能可以像分发镜像一样分发模型文件,用户只需要制作好包含了模型权重文件的 OCI 镜像,就可以在 POD 中挂载 OCI 镜像访问其内的模型文件,不再需要复制或者下载模型文件。 通过这一特性,用户可以在 Pod 中引用镜像作为卷,并在容器中以挂载的形式重用这些镜像。 就像这样: kind: Pod spec: containers: - … volumeMounts: - name: my-volume mountPath: /path/to/directory volumes: - name: my-volume image: reference: my-image:tag 这将为在 Kubernetes 中更灵活地管理镜像和卷的需求铺平道路,特别是对于 AI 和 ML 工作负载的复杂需求。 比如在大模型场景,有了 ImageVolume 支持,我们可以直接将大模型打包到镜像里,使用时直接挂载该镜像即可,而且是整个集群都可以使用。 之前通过 PVC 存储时由于 PVC 是 Namespace 范围的,导致同一个模型不同 namespace 下使用都需要重复下载。 大模型体检比较大,每次下载都会花费不少时间。 注意:目前 ImageVolume 仅作为 Alpha 特性引入,未来呈现方式可能有所变化,如果需要体验该功能需要配置 K8S 以启用该特性。 2.环境准备 ImageVolume 特性来源于KEP-4639, 由 SIG Node 和 SIG Storage 共同完成。 要使用该功能,我们需要先做一些准备工作: 启用 ImageVolume Feature Gates k8s 1.31 kube-apiserver 启用 kubelet 启用 FeatureGate Container Runtime 支持 当前仅 CRI-O 1.31 版本支持(因为 CRI-O 是和 k8s 同时发版的) containerd 需要等待 PR #10579 合并才行 部署 v1.31 版本集群 首先我们要准备一个 1.31 版本的 k8s 集群。
阅读全文