2.11. 将 OCI 镜像挂载到 pod 中


您可以直接将开放容器项目(OCI)兼容容器镜像或将工件挂载到 pod 中,使镜像中的文件能被容器访问,而无需将它们包含在基础镜像中,从而允许您在 OCI 兼容的 registry 中托管数据。

2.11.1. 了解镜像卷

您可以使用镜像卷将兼容开放容器项目(OCI)的容器镜像或工件直接挂载到 pod 中,使镜像中的文件可以被容器访问,而无需将它们包含在基础镜像中。这意味着您可以在 OCI 兼容 registry 中托管数据。

通过使用 pod 中的镜像卷,您可以利用 OCI 镜像和分布规格标准来完成几个任务,包括以下用例:

  • 您可以在 pod 中的多个容器间共享配置文件,而无需在基础镜像中包含该文件,以最大程度降低安全风险和镜像大小。
  • 在智能环境中,您可以使用镜像卷来挂载 pod 中的大型语言模型权重或机器学习模型权重,以及模型。您可以以这种方式有效地提供模型权重,而无需在 model-server 容器镜像中包含它们。因此,您可以将模型规格和内容与处理它们的可执行文件分开。
  • 您可以打包并分发二进制工件并将其直接挂载到 pod 中,允许您简化 CI/CD 管道。这可让您通过将 CI/CD 工件附加到镜像卷来维护一小部分基础镜像。
  • 您可以将公共镜像用于恶意软件扫描程序,并将其挂载到私有恶意软件签名的卷中,以便您可以加载这些签名,而无需将镜像合并到基础镜像中,这些签名可能不能被公共镜像上的版权允许。

要挂载镜像卷,请使用可选的 pull 策略在 pod 规格中包括镜像或工件的路径,如将 镜像卷添加到 pod 中所述。

2.11.2. 将镜像卷添加到 pod

要挂载与 Open Container Initiative (OCI)兼容的容器镜像或工件,请使用 volume 参数使用可选的 pull 策略在 pod spec 中包含到镜像或工件的路径。您可以直接创建 pod,或使用控制对象,如部署或副本集。

流程

  1. 创建一个类似如下的 YAML 文件:

    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: 
    1
    
          reference: quay.io/crio/artifact:v2 
    2
    
          pullPolicy: Always 
    3
    Copy to Clipboard Toggle word wrap
    1
    指定主机上可用的 OCI 容器镜像或工件。
    2
    指定镜像或工件的路径。
    3
    指定 pull 策略,以下选项之一:
    • 如果为 Always,kubelet 始终会尝试拉取镜像。如果拉取失败,kubelet 会将 pod 设置为 Failed
    • 如果 Never,kubelet 永不拉取镜像,且只使用本地镜像或工件。如果镜像的任何层都不存在,或者该镜像的清单尚未缓存,则 pod 将变为 Failed
    • 如果 kubelet 拉取镜像,如果它不存在,则 kubelet 会拉取镜像。如果镜像不存在,pod 变为 Failed,拉取会失败。这是默认值。
  2. 运行以下命令来创建 pod:

    $ oc create -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap

验证

  • 使用类似如下的命令检查 pod 以查看镜像拉取和挂载的详细信息:

    $ oc describe pod <pod_name>
    Copy to Clipboard Toggle word wrap

    输出示例

    Name:             image-volume
    Namespace:        default
    # ...
    Volumes:
      volume: 
    1
    
        Type:        Image (a container image or OCI artifact)
        Reference:   quay.io/crio/artifact:v2
        PullPolicy:  IfNotPresent
    # ...
    Events:
      Type    Reason          Age                From               Message
      ----    ------          ----               ----               -------
    # ...
      Normal  Pulling         46s                kubelet            Pulling image "quay.io/crio/artifact:v2"
      Normal  Pulled          44s                kubelet            Successfully pulled image "quay.io/crio/artifact:v2" in 2.261s (2.261s including waiting). Image size: 6707 bytes. 
    2
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    表示镜像卷已挂载到 pod。
    2
    表示已成功拉取镜像。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat