在 Pod 中使用镜像卷
特性状态:
Kubernetes v1.33 [beta]
(默认未启用)本页面展示了如何使用镜像卷配置 Pod。通过镜像卷,你可以将 OCI 镜像库中的内容挂载到容器内部。
准备工作
你需要拥有一个 Kubernetes 集群,并且 kubectl 命令行工具需要配置好与你的集群通信。建议在至少包含两个非控制平面主机的节点上运行此教程。如果你还没有集群,可以使用 minikube 创建一个,或者使用以下 Kubernetes 演练场之一
你的 Kubernetes 服务器版本必须是 v1.31 或更高。要检查版本,请输入 kubectl version
。
- 容器运行时需要支持镜像卷特性
- 你需要在主机中执行命令
- 你需要能够进入 Pod 内部执行命令
- 你需要启用
ImageVolume
特性门控
运行一个使用镜像卷的 Pod
通过将 .spec
的 volumes.[*].image
字段设置为一个合法的引用,并在容器的 volumeMounts
中使用它,可以为 Pod 启用镜像卷。例如
apiVersion: v1
kind: Pod
metadata:
name: image-volume
spec:
containers:
- name: shell
command: ["sleep", "infinity"]
image: debian
volumeMounts:
- name: volume
mountPath: /volume
volumes:
- name: volume
image:
reference: quay.io/crio/artifact:v2
pullPolicy: IfNotPresent
在你的集群上创建 Pod
kubectl apply -f https://k8s.io/examples/pods/image-volumes.yaml
附着到容器
kubectl attach -it image-volume bash
检查卷中文件的内容
cat /volume/dir/file
输出类似于
1
你也可以检查不同路径下的另一个文件
cat /volume/file
输出类似于
2
使用 subPath
(或 subPathExpr
)
当使用镜像卷特性时,从 Kubernetes v1.33 开始可以利用 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 https://k8s.io/examples/pods/image-volumes-subpath.yaml
附着到容器
kubectl attach -it image-volume bash
检查卷中
dir
子路径下的文件内容cat /volume/file
输出类似于
1
进一步阅读
最后修改于 2025 年 2 月 27 日 9:19 AM PST: [KEP-4639] Graduate image volume source to beta (eab681370c)