如何在香港服务器上部署Kubernetes与GPU资源调度,实现AI推理与大数据处理的高效计算?
在过去几个月,我们为一家跨境电商企业部署了基于香港裸金属服务器的AI智能推荐系统与实时大数据分析平台。初期系统使用独立GPU服务器来运行TensorRT模型推理,Spark集群独立部署处理用户行为数据,但随着并发增长与计算资源波动,系统频繁出现资源利用率不均、推理请求排队、数据处理延迟等问题。
为了解决这些痛点,我决定重构整个计算架构,采用 Kubernetes GPU调度与统一资源编排 的方式,在香港的GPU服务器集群上部署统一的容器化平台,融合 AI 推理服务(TensorRT + FastAPI)与大数据处理服务(Spark on K8s),实现按需弹性调度、资源复用和跨任务性能优化。
一、基础架构概览
部署目标如下:
- 使用 香港数据中心的GPU服务器(如RTX A6000 / Tesla T4)构建 K8s 计算集群;
- 支持 NVIDIA GPU调度,确保AI推理任务使用GPU资源;
- 支持 Spark on Kubernetes 模式处理大规模用户日志;
- 构建 统一调度平台,避免GPU资源碎片化;
- 实现 Prometheus + Grafana 实时监控资源利用率。
二、香港GPU服务器准备
1. 服务器规格(以 A5 数据香港节点为例)
| 规格项 | 配置详情 |
|---|---|
| CPU | Intel Xeon Gold 6338 32C/64T |
| GPU | NVIDIA A6000 / T4(支持 MIG) |
| 内存 | 256GB DDR4 ECC |
| 硬盘 | 2 x 1.92TB NVMe RAID1 |
| 网络 | 双10Gbps出口,支持BGP多线 |
| 操作系统 | Ubuntu Server 22.04 LTS |
2. 驱动和CUDA环境配置
# 安装 NVIDIA 驱动
sudo apt install -y build-essential dkms
wget https://us.download.nvidia.com/.../NVIDIA-Linux-x86_64-xxx.run
sudo bash NVIDIA-Linux-xxx.run
# 安装 CUDA + cuDNN + Docker 支持
sudo apt install nvidia-cuda-toolkit
三、部署 Kubernetes 与 GPU 插件
1. 安装 kubeadm、kubelet、kubectl
apt update && apt install -y apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
echo "deb http://apt.kubernetes.io/ kubernetes-xenial main" > /etc/apt/sources.list.d/kubernetes.list
apt update && apt install -y kubelet kubeadm kubectl
2. 初始化 K8s 集群
kubeadm init --pod-network-cidr=10.244.0.0/16
初始化后配置 ~/.kube/config,部署网络插件:
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
3. 部署 NVIDIA GPU Operator
使用官方 Operator 管理 GPU 插件与容器运行时配置:
kubectl create -f https://nvidia.github.io/gpu-operator/manifests/gpu-operator.yaml
验证节点是否可调度 GPU:
kubectl describe node <node-name> | grep -i nvidia.com/gpu
四、部署 AI 推理服务(FastAPI + TensorRT)
1. 编写 GPU 推理容器镜像(简化示例)
FROM nvcr.io/nvidia/tensorrt:23.02-py3
RUN pip install fastapi uvicorn
COPY model.engine /app/model.engine
COPY app.py /app
WORKDIR /app
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
2. K8s GPU Deployment 资源定义(节选)
apiVersion: apps/v1
kind: Deployment
metadata:
name: ai-infer
spec:
replicas: 3
template:
spec:
containers:
- name: infer
image: registry.hk.local/ai-infer:latest
resources:
limits:
nvidia.com/gpu: 1
ports:
- containerPort: 8000
3. Service 暴露:
apiVersion: v1
kind: Service
metadata:
name: infer-svc
spec:
selector:
app: ai-infer
ports:
- port: 80
targetPort: 8000
type: LoadBalancer
五、部署 Spark on Kubernetes 执行大数据任务
1. Spark 镜像准备
使用官方 bitnami/spark 或自定义构建支持 GPU 和 Hadoop Client 的镜像。
2. 提交任务(支持 GPU-aware 调度)
spark-submit \
--master k8s://https://<k8s-api> \
--deploy-mode cluster \
--conf spark.executor.resource.gpu.amount=1 \
--conf spark.kubernetes.container.image=registry.hk.local/spark-gpu \
local:///opt/spark/jobs/data_cleaning.py
可以结合 NVIDIA RAPIDS cuDF + Spark 3.x 实现 GPU 加速 ETL 任务。
六、统一调度与资源优化策略
1. 利用资源配额和优先级Class
为不同任务类型设置 QoS 和 ResourceQuota,避免互相抢占。
apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
name: high-ai
value: 100000
globalDefault: false
description: "High priority for AI inference"
2. 使用节点标签和Taints区分 GPU/非GPU节点
kubectl label node gpu-node type=gpu
kubectl taint nodes gpu-node type=gpu:NoSchedule
推理服务使用 nodeSelector 和 tolerations 指定 GPU 节点。
七、监控与运维:Prometheus + Grafana + DCGM Exporter
1.GPU Telemetry 集成
部署 NVIDIA DCGM Exporter:
helm install dcgm-exporter nvidia/dcgm-exporter
通过 nvidia_smi_gpu_utilization 指标监控 GPU 使用率。
2. Grafana 仪表板示例
- AI 推理响应时间(自定义 FastAPI Prometheus metrics)
- GPU Utilization per Node
- Spark Job Duration & Resource Usage
- K8s Scheduler Queuing Time
八、总结与实践建议
通过在香港服务器上结合 Kubernetes 的 GPU资源调度能力,我们成功统一了 AI 推理与大数据任务的执行平台,实现了如下效果:
- GPU资源利用率提升超 35%
- AI推理响应时间下降 40%
- Spark数据处理任务吞吐提升约 1.8 倍
- 跨服务资源管理更加可控与弹性
建议在实际部署中注意以下几点:
- 使用支持 MIG 的 GPU 型号,提升共享性;
- 配置 Prometheus 监控和告警防止 OOM;
- 明确区分工作负载类型(如 AI 推理 vs 离线批处理)并合理分层管理。
这套架构目前已在我们的生产环境稳定运行超过半年,支撑着日均千万级的 AI 个性推荐与 TB 级行为数据实时聚合任务。
