在 Pod 中使用镜像卷

功能状态: `Kubernetes v1.33 [beta]` (默认启用:false)

本页面展示了如何使用镜像卷来配置 Pod。这允许你在容器内部挂载来自 OCI 注册表的内容。

准备工作

你需要有一个 Kubernetes 集群,并且 kubectl 命令行工具已配置为与你的集群通信。建议在本教程中在至少有两个不充当控制平面主机的节点组成的集群上运行。如果你还没有集群,你可以通过使用 minikube 来创建一个集群,或者你可以使用这些 Kubernetes 演练场中的一个。

你的 Kubernetes 服务器版本必须是 v1.31 或更高版本。

要检查版本,请输入 kubectl version

  • 容器运行时需要支持镜像卷功能。
  • 你需要能够在主机中执行命令。
  • 你需要能够进入 Pod 内部执行命令。
  • 你需要启用 ImageVolume 功能门控

运行一个使用镜像卷的 Pod

Pod 的镜像卷通过将 .specvolumes.[*].image 字段设置为有效引用,并在容器的 volumeMounts 中使用它来启用。例如:

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
  1. 在你的集群上创建 Pod。

    kubectl apply -f https://k8s.io/examples/pods/image-volumes.yaml
    
  2. 附加到容器。

    kubectl attach -it image-volume bash
    
  3. 检查卷中文件的内容。

    cat /volume/dir/file
    

    输出类似于:

    1
    

    你也可以检查不同路径下的另一个文件。

    cat /volume/file
    

    输出类似于:

    2
    

使用 subPath(或 subPathExpr

在 Kubernetes v1.33 中,使用镜像卷功能时,可以使用 subPathsubPathExpr

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
  1. 在你的集群上创建 Pod。

    kubectl apply -f https://k8s.io/examples/pods/image-volumes-subpath.yaml
    
  2. 附加到容器。

    kubectl attach -it image-volume bash
    
  3. 检查卷中 dir 子路径下文件的内容。

    cat /volume/file
    

    输出类似于:

    1
    

进一步阅读

最后修改时间:2025 年 2 月 27 日上午 9:19 PST:[KEP-4639] 将镜像卷源提升到 Beta (eab681370c)