帮我解读一下下面红帽安装Red Hat AI Inference Server 的步骤是否需要使用外部存储

oc apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: granite
  namespace: rhaiis-namespace
  labels:
    app: granite
spec:
  replicas: 1
  selector:
    matchLabels:
      app: granite
  template:
    metadata:
      labels:
        app: granite
    spec:
      initContainers:
        - name: model-loader
          image: '<MIRROR_REGISTRY_URL>/rhelai1/granite-3-1-8b-instruct-quantized-w8a8:1.5'
          command: ['cp', '-r', '/models/.', '/mnt/models/']
          volumeMounts:
            - name: model-volume
              mountPath: /mnt/models
      containers:
        - name: granite
          image: '<MIRROR_REGISTRY_URL>/rhaiis/vllm-cuda-rhel9:latest'
          imagePullPolicy: IfNotPresent
          command:
            - python
            - '-m'
            - vllm.entrypoints.openai.api_server
          args:
            - '--port=8000'
            - '--model=/mnt/models'
            - '--served-model-name=granite-3.1-8b-instruct-quantized-w8a8'
            - '--tensor-parallel-size=1'
          resources:
            limits:
              cpu: '10'
              nvidia.com/gpu: '1'
            requests:
              cpu: '2'
              memory: 6Gi
              nvidia.com/gpu: '1'
          volumeMounts:
            - name: model-volume
              mountPath: /mnt/models
            - name: shm
              mountPath: /dev/shm
      volumes:
        - name: model-volume
          emptyDir: {}
        - name: shm
          emptyDir:
            medium: Memory
            sizeLimit: 2Gi
      restartPolicy: Always
EOF

这个 Red Hat AI Inference Server 的部署步骤不需要使用外部存储。以下是对该步骤的详细解读:

  1. 部署结构

    • 定义了一个名为 granite 的 Deployment,其中包含一个 initContainer 和一个主容器。

    • initContainer(model-loader)负责从指定的 OCI 镜像(<MIRROR_REGISTRY_URL>/rhelai1/granite-3-1-8b-instruct-quantized-w8a8:1.5)中拷贝模型文件到挂载的卷 /mnt/models

    • 主容器(granite)使用 vLLM 镜像启动推理服务,并挂载同一个卷 /mnt/models 作为模型路径,同时挂载一个内存类型的卷 /dev/shm 用于共享内存。

  2. 卷的类型

    • model-volume:类型为 emptyDir: {},这是 Kubernetes 中的临时卷,初始为空,与 Pod 的生命周期绑定。当 Pod 运行在某个节点上时,该卷会在节点上创建一个空目录,initContainer 将模型文件复制到此目录中,主容器读取该目录。Pod 被删除或迁移时,卷内容随之消失。

    • shm:类型为 emptyDir 并指定 medium: Memory,是一个基于内存的临时文件系统(tmpfs),用于提高共享内存访问性能,同样不依赖外部存储。

  3. 为什么不需要外部存储

    • 模型文件本身已经打包在 initContainer 的镜像中,无需从外部持久化存储(如 PV/PVC)加载。

    • emptyDir 卷直接使用节点本地存储(磁盘或内存),不涉及外部存储系统。

    • 每次 Pod 启动时,initContainer 都会重新复制模型,保证模型文件始终可用,但数据不持久化——这符合该场景的设计意图(模型作为镜像的一部分分发,而非独立持久化数据)。

因此,这个部署步骤完全依赖于 Kubernetes 的临时存储机制,无需额外配置外部存储(如 NFS、云存储块设备等)。如果生产环境中需要模型持久化或共享,则需要考虑其他方案,但当前步骤本身不强制使用外部存储。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐