更新时间:2025-07-29 GMT+08:00
分享

基于K8s Deployment单机部署推理服务

  1. 配置模型及镜像参数

    编辑vllm_single_node.yaml文件,按照环境配置修改相关参数。可以按自己的需求修改deployment实例名称以及实例数:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: infer-vllm
      labels:
        app: infer-vllm
    spec:
      replicas: 1                              # Deployment实例数
      selector:
        matchLabels:
          app: infer-vllm
      template:
        metadata:
          labels:
            app: infer-vllm
        spec:
          schedulerName: volcano
          nodeSelector:
            accelerator/huawei-npu: ascend-1980
          affinity:     # 亲和性调度,优先调度在同一节点,资源不足时允许分散到其他节点,如果考虑可靠性,建议去掉亲和性配置。
            podAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
                - weight: 100
                  podAffinityTerm:
                    labelSelector:
                      matchLabels:
                        app: infer-vllm
                    topologyKey: kubernetes.io/hostname
          containers:
            - image: ${image_name}                           # 需要修改成制作推理镜像时指定的镜像名称
              imagePullPolicy: IfNotPresent
              name: infer-vllm                               # pod名称
              securityContext:
                runAsUser: 0
              ports:
                - containerPort: 8080
              command: ["/bin/bash", "-c"]                   # 按照实际需求修改启动命令参数
              args: ["/mnt/deepseek/scripts/run_vllm_single_node.sh"]  
              ……
              volumeMounts:
                ……
                - name: model-path
                  mountPath: /mnt/deepseek                   # 权重文件及脚本在容器中的位置
          volumes:
            ……
            - name: model-path
              hostPath:
                path: /mnt/deepseek                          # 权重文件及脚本在节点上的位置
    可以配置启动探针(startupProbe)、就绪探针(readinessProbe)、和活跃探针(livenessProbe)来检测每一个实例pod的状态。下面是一个livenessProbe的配置样例,通过调用vllm的health API探测服务状态,容器启动后600秒进行第一次探测,每10秒探测一次,单次探测超时时间10秒,连续失败6次认为服务异常。
    apiVersion: apps/v1
    kind: Deployment
    spec:
      template:
        spec:
          ……
          containers:
            - image: ${image_name}
              ……
              livenessProbe:                       # 活跃探针的检测命令,按实际需求配置
                httpGet:
                  path: /health
                  port: 8080
                initialDelaySeconds: 600           # 容器启动后,开始探测vllm服务的时长,需要根据sfs_turbo读取速度调整
                periodSeconds: 10
                timeoutSeconds: 10
                failureThreshold: 6
                successThreshold: 1

  2. 部署推理服务实例

    在有安装kubectl的节点执行下面的命令部署推理服务实例
    kubectl apply -f /mnt/deepseek/vllm_single_node.yaml

  3. 验证部署结果

相关文档