扩展与自动扩展模型端点
用于模型 Pod 的 Kubernetes HPA、基于流量的扩展、A/B 部署和金丝雀发布。
扩展与自动扩展模型端点 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。
为何自动扩缩容
推理流量很少会保持平稳。按峰值负载配置资源会导致夜间浪费资金;按平均负载配置资源又会在峰值时失效。自动扩缩容会根据需求自动调整副本数量,让您按实际使用量付费,同时保持响应能力。
容器组与副本
在 Kubernetes 中,模型服务器以由相同容器组(副本)组成的部署运行。扩缩容意味着更改副本数量。服务会将请求分配到现有的各个副本。
apiVersion: apps/v1
kind: Deployment
metadata:
name: model-server
spec:
replicas: 2
template:
spec:
containers:
- name: server
image: my-model:latest水平容器组自动扩缩器
水平容器组自动扩缩器(HPA)会监控某项指标,并添加或移除容器组,使该指标保持在目标值附近。最经典的指标是 CPU 利用率。
基于 CPU 利用率的 HPA
targetCPUUtilizationPercentage 会告诉 HPA 将平均 CPU 利用率维持在目标值附近。如果容器组的平均 CPU 利用率为 80%,而目标值是 50%,HPA 就会扩容,直到利用率回落至接近 50%。
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: model-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: model-server
minReplicas: 2
maxReplicas: 10
targetCPUUtilizationPercentage: 50基于 CPU 扩缩容的局限
对于某些工作负载,CPU 并不是一个好的替代指标。GPU 模型可能会受 GPU 限制,而 CPU 利用率仍然很低;异步工作进程的队列可能不断增长,但 CPU 仍处于空闲状态。对于这些情况,应改用特定于工作负载的信号进行扩缩容。
用于事件驱动扩缩容的 KEDA
KEDA(Kubernetes 事件驱动自动扩缩容)可以根据队列长度、Kafka 延迟或 Prometheus 查询等外部指标进行扩缩容。当没有工作时,它甚至可以将副本数缩减到零,而 HPA 无法独立完成这一操作。
基于队列的 KEDA ScaledObject
此 KEDA ScaledObject 会在消息队列增长时增加工作进程。积压中的每个 queueLength 单位都会触发另一个副本,从而使消费者能够跟上突发流量。
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: inference-worker
spec:
scaleTargetRef:
name: inference-worker
minReplicaCount: 0
maxReplicaCount: 20
triggers:
- type: rabbitmq
metadata:
queueName: inference
queueLength: "10"使用入口进行负载均衡
外部流量会通过入口到达容器组。nginx 入口控制器会终止 TLS,并将请求分发到为副本提供支持的服务,因此扩容后负载可以立即得到分散。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: model-ingress
spec:
ingressClassName: nginx
rules:
- host: api.example.com
http:
paths:
- path: /predict
pathType: Prefix
backend:
service:
name: model-server
port:
number: 8000安全发布:金丝雀
一次性将新模型版本部署到全部流量中存在风险。金丝雀发布会将少量流量发送到新版本,监控其指标,然后逐步转移更多流量。
使用流量权重进行金丝雀发布
nginx 入口的金丝雀注解会将一定百分比的请求路由到第二个部署。先从 10% 开始,确认错误率和延迟符合要求后,再将权重提高到 100%。
metadata:
annotations:
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "10"整合扩缩容
一个稳健的方案会结合所有这些机制:
- HPA 或 KEDA 根据需求设置副本数量
- 入口在副本之间进行负载均衡
- 金丝雀权重安全地发布新版本
这些机制结合起来,可以提供弹性强、可靠且风险较低的模型服务。
快速检查
检验您对扩缩容的理解。
回顾
您已经学会扩缩模型端点:
- 使用带有
targetCPUUtilizationPercentage的 HPA,根据 CPU 利用率进行扩缩容 - KEDA 根据队列长度进行扩缩容,并支持缩容到零
- nginx 入口在副本之间进行负载均衡
- 金丝雀权重逐步转移流量,从而安全地发布版本
常见问题解答
「扩展与自动扩展模型端点」课时是免费的吗?
是的 — 「扩展与自动扩展模型端点」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。
「扩展与自动扩展模型端点」这节课中我会学到什么?
用于模型 Pod 的 Kubernetes HPA、基于流量的扩展、A/B 部署和金丝雀发布。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn AI with Python 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「扩展与自动扩展模型端点」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn AI with Python 课中编写并运行代码吗?
能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。