Kubernetes集群部署AI服务指南

为什么要用Kubernetes跑AI服务

AI模型通常需要GPU、弹性扩缩和稳定的服务编排。
原生Docker管理单个容器还行,一旦要应对高并发、滚动更新或资源隔离,就力不从心。Kubernetes集群(K8s) 正好接住这些问题——它能自动调度GPU节点、自愈失败Pod,还能通过Service统一暴露端口。
本文用最简单的方式,让你在本地或单机环境搭起一个小型K8s,并部署一个AI推理服务。

第一步:准备环境与核心工具

你不需要多台服务器,一台内存8G以上的Linux虚拟机(Ubuntu 22.04)就行。
需要装好以下软件:

  • Docker:容器运行时,K8s依赖它拉取镜像。
  • Minikube:单机版K8s,便于学习和测试。
  • kubectl:K8s命令行工具,用来操作集群。
  • NVIDIA Container Toolkit(如果要用GPU):让容器识别宿主机的NVIDIA显卡。

安装Docker(跳过具体步骤,但必须加上源)。

sudo apt update
sudo apt install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker

然后安装Minikube(用二进制方式,避免apt源版本太老):

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

安装kubectl:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

避坑注意:如果你用虚拟机,记得给虚拟机分配至少2个CPU核心和4GB内存,否则Minikube启动会报资源不足。

第二步:启动Minikube并检验集群

执行以下命令启动一个单节点集群,并指定驱动器为Docker:

minikube start --driver=docker

等待几分钟,直到提示 Done
用kubectl查看节点状态:

kubectl get nodes

输出应该显示一个 Ready 状态的节点。
如果你有NVIDIA GPU,需要额外启动参数:

minikube start --driver=docker --gpus all

这个参数会自动启用NVIDIA插件。

第三步:准备AI服务的镜像与配置

下面部署一个TensorFlow Serving示例,它提供一个基于ResNet50的图像分类API。
先拉取镜像:

docker pull tensorflow/serving:2.13.0-gpu

创建一个Deployment YAML文件 ai-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: tf-serving
spec:
  replicas: 2
  selector:
    matchLabels:
      app: tf-serving
  template:
    metadata:
      labels:
        app: tf-serving
    spec:
      containers:
      - name: tf-serving
        image: tensorflow/serving:2.13.0-gpu
        ports:
        - containerPort: 8501
        args: ["--model_name=resnet", "--model_base_path=/models/resnet"]
        volumeMounts:
        - name: model-volume
          mountPath: /models/resnet
        resources:
          limits:
            nvidia.com/gpu: 1
      volumes:
      - name: model-volume
        hostPath:
          path: /home/user/models/resnet
说明:你需要提前把ResNet50模型文件放在宿主机的 /home/user/models/resnet 目录下(模型文件可以从TensorFlow官网下载)。若不用GPU,去掉 resourcesargs 中的GPU相关字段,镜像改为 tensorflow/serving 即可。

然后暴露Service:

kubectl apply -f ai-deployment.yaml
kubectl expose deployment tf-serving --type=NodePort --port=8501

查看Pod状态和Service端口:

kubectl get pods
kubectl get svc tf-serving

Service的 PORT(S) 一列会显示类似 8501:31111/TCP,外部访问就用 NodeIP:31111

第四步:避坑指南——常见报错与解决方法

  1. Minikube启动卡在“Downloading”:网络问题,换国内源或用代理。可以设置 minikube start --image-mirror-country=cn
  2. Pod一直Pending,Events显示“0/1 nodes are available”:检查节点资源或GPU驱动。运行 minikube logs 查看详情。
  3. GPU Pod启动但报错“no NVIDIA GPU found”:确认容器运行时是否支持GPU,运行 kubectl describe node 查看 nvidia.com/gpu 的Capacity是否为0。
  4. Service无法访问:Minikube集群默认在虚拟机内,需要在宿主机用 minikube service tf-serving 命令打开隧道。

第五步:验证AI服务正常响应

用curl发送一张测试图片到服务接口(需要先准备一张 cat.jpg):

curl -X POST http://$(minikube ip):$(kubectl get svc tf-serving -o jsonpath='{.spec.ports[0].nodePort}')/v1/models/resnet:predict -d @- <

实际使用时要把图片转成Base64。
更简单的验证:访问Service的元数据接口,检查模型状态:

curl http://$(minikube ip):$(kubectl get svc tf-serving -o jsonpath='{.spec.ports[0].nodePort}')/v1/models/resnet

返回 "model_version_status":
[{"version":
"1", "state":
"AVAILABLE"}]
即部署成功。

最后几句提醒

如果你在生产环境部署,建议用kubeadm或托管K8s(如阿里云ACK)代替Minikube,并用Helm Chart管理复杂服务。
初次上手先按照本文步骤走通流程,再根据自己训练的模型调整镜像和端口。
遇到Pod重启时,第一时间看日志 kubectl logs ,定位问题更快。

分享到:
上一篇
从零开始:AI容器化部署Docker完整步骤详解
下一篇
服务器被挖矿病毒AI智能查杀方案
1
系统公告

泽御云五一特惠活动🔥

泽御云持证合规运营,资质齐全可查,长久稳定! 五一限时多重福利同步开启: ✅ 香港 2 核 2G 云服务器超值拼团,低价入手团长免费 ✅ 4 核 4G 多机房年付拼团,性价比拉满 ✅ 内蒙古新区限时 7 折(zeyuyunnmg)特惠,专属优惠码锁价续费 ✅ 全站通用 75 折优惠,老用户充值享专属赠金 官方站点:zeyuyun.com 合规资质齐全|售后有保障|活动限时错过不再有
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意