1. 背景认知(必看,搞懂操作核心意义)
1.1 核心概念通俗解读
在AI人工智能场景中,AI模型服务(如图像识别、语音转文字、深度学习推理等)的部署与运行,需要占用服务器核心资源(CPU、内存、GPU等)。由于AI服务的请求量具有动态波动性——高峰时段(如用户集中调用模型)资源需求激增,若资源不足会导致服务卡顿、响应延迟;低谷时段资源闲置,造成服务器成本浪费。
本次操作的两个核心对象,是实现AI服务资源动态适配的关键,通俗解读如下,便于快速理解:
Metrics(指标):本质是“资源与服务监控工具”,用于实时采集、统计AI服务的运行状态数据,包括资源占用类(CPU使用率、内存占用量、GPU负载)、服务性能类(请求QPS、响应时间)等。低阈值实例,即设置较低的监控触发标准,目的是提升监控灵敏度,便于入门学习者快速验证监控效果,降低操作调试难度。
HPA规则(Horizontal Pod Autoscaler,水平Pod自动扩缩容):核心是“自动调度与扩容工具”,通过读取Metrics监控到的实时数据,按照预设规则,自动增加或减少AI服务的运行实例数量。例如:当CPU使用率达到预设低阈值时,自动扩容实例以分担压力;当使用率低于阈值时,自动缩容以释放闲置资源,无需人工干预,适配AI服务的动态资源需求。
1.2 核心疑问解答
为什么选择“低阈值”实例?—— 入门阶段,低阈值(如CPU阈值20%、内存阈值30%)更容易触发监控与扩缩容动作,能够快速验证操作流程的正确性,避免因高阈值导致监控无响应、操作无法验证的问题,降低入门难度。
AI场景下操作的核心意义?—— AI模型(尤其是深度学习模型)运行时资源消耗波动极大,手动调整服务实例数量不仅效率低,还可能因响应不及时导致服务异常。通过Metrics监控+HPA自动扩缩容,可实现资源与服务需求的动态匹配,既保证AI服务稳定运行,又最大化降低服务器资源浪费,提升部署效率。
操作前置要求?—— 无需掌握复杂的AI算法或底层技术,只需准备好指定前置环境,跟随步骤操作即可,所有命令均提供完整示例,可直接复制执行,无需手动编写。
1.3 前置环境要求(必配,缺一不可)
请严格按照以下要求准备环境,每一步均为操作前提,无省略步骤,入门学习者可按顺序逐一配置:
服务器环境:推荐使用Linux系统(优先选择Ubuntu 20.04 LTS或CentOS 8,两者操作流程略有差异,下文以Ubuntu 20.04为例展开),服务器配置建议2核4G及以上(最低支持1核2G,避免资源不足导致操作失败);若部署GPU类AI服务(如深度学习推理),需配备NVIDIA GPU,并安装对应驱动。
容器环境:必须安装Docker(版本20.10及以上),用于打包AI服务镜像;安装Kubernetes(K8s,版本1.24及以上),用于部署AI服务、Metrics监控及HPA规则,两者为核心运行环境,缺一不可。
工具准备:安装kubectl(与K8s版本匹配),用于执行K8s相关命令;安装metrics-server(用于采集Metrics指标数据),是实现监控与HPA扩缩容的核心组件。
AI服务准备:提前准备一个简单的AI服务镜像(如轻量图像识别服务、简单推理接口),若暂无自定义镜像,可使用官方测试镜像(下文将提供具体镜像地址,直接使用即可),用于后续Metrics监控与HPA规则的验证。
环境配置的详细步骤,将在“基础实操”章节中逐一拆解,确保入门学习者能够顺利完成配置。
2. 核心配置(提前规划,避免操作踩坑)
2.1 核心配置整体规划
本次操作核心分为两大模块:Metrics低阈值实例配置、HPA规则配置,两者需配合使用,配置逻辑如下:先部署Metrics监控组件,创建低阈值监控实例,确保能够正常采集AI服务指标;再基于Metrics监控数据,配置HPA规则,实现实例自动扩缩容。
核心配置原则:低阈值实例的阈值设置需贴合入门调试需求,避免过高或过低(推荐CPU阈值20%-30%,内存阈值30%-40%);HPA规则需与Metrics指标对应,明确扩缩容触发条件、扩缩容范围,确保规则可执行、易验证。
2.2 Metrics低阈值实例核心配置参数
Metrics低阈值实例的配置核心是“指定监控指标、设置阈值标准、关联AI服务”,关键参数如下(所有参数均提供默认值,入门学习者可直接使用,后续可根据需求调整):
|
配置参数 |
参数说明 |
低阈值默认值 |
备注 |
|
type |
监控指标类型 |
Resource(资源类指标) |
入门优先选择Resource类型,涵盖CPU、内存等核心资源,易监控、易验证 |
|
resource.fieldPath |
具体监控字段 |
cpu(CPU使用率)、memory(内存占用) |
优先监控CPU,入门调试更易看到效果 |
|
resource.target.type |
阈值类型 |
Utilization(使用率) |
即资源使用率,贴合日常监控习惯,便于理解 |
|
resource.target.averageUtilization |
低阈值数值 |
CPU:20%;内存:30% |
入门推荐值,可根据服务器配置微调,避免过低导致频繁扩缩容 |
|
selector.matchLabels |
关联AI服务的标签 |
app: ai-service(可自定义) |
需与AI服务部署时的标签一致,否则无法关联监控 |
2.3 HPA规则核心配置参数
HPA规则需与Metrics低阈值实例联动,核心是“基于监控指标,设置扩缩容规则”,关键参数如下(默认值适配入门调试,可直接使用):
|
配置参数 |
参数说明 |
默认配置 |
备注 |
|
scaleTargetRef |
关联的AI服务对象 |
apiVersion: apps/v1,kind: Deployment,name: ai-service |
需与AI服务的Deployment名称一致,否则无法触发扩缩容 |
|
minReplicas |
最小运行实例数 |
1 |
入门推荐1个,避免资源浪费,确保服务基础可用 |
|
maxReplicas |
最大运行实例数 |
3 |
入门推荐3个,既能看到扩容效果,又不会占用过多资源 |
|
metrics |
关联的Metrics监控指标 |
关联上述CPU、内存低阈值实例 |
需与Metrics配置的指标一致,否则无法触发扩缩容 |
|
behavior |
扩缩容行为规则 |
扩容:每次增加1个实例,间隔30秒;缩容:每次减少1个实例,间隔60秒 |
入门推荐默认配置,避免频繁扩缩容,便于观察效果 |
3. 基础实操(全程无省略,一步一操作)
3.1 前置环境配置(步骤1-4,必做)
3.1.1 安装Docker(Ubuntu 20.04为例)
更新系统软件包:执行以下命令,更新系统依赖,避免安装失败(复制命令直接执行,无需修改):
sudo apt update && sudo apt upgrade -y
安装Docker依赖包:执行命令,安装Docker运行所需的基础依赖:
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
添加Docker官方源:执行命令,添加Docker官方软件源,确保安装的是最新版本:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /usr/share/keyrings/docker-archive-keyring.gpgecho "deb [arch=$(dpkg –print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
安装Docker:执行命令,安装Docker CE(社区版,免费且适合入门):
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
验证Docker安装成功:执行命令,若出现Docker版本信息,说明安装成功:
docker –version成功标识:输出类似“Docker version 20.10.24, build 297e128”的信息。
配置Docker权限(可选,避免每次执行Docker命令输入密码):
sudo usermod -aG docker $USER执行完成后,注销当前用户并重新登录,权限即可生效。
3.1.2 安装Kubernetes(K8s)
关闭swap分区(K8s运行必做):执行命令,临时关闭swap分区,再设置开机不自动开启:
sudo swapoff -asudo sed -i '/swap/s/^/#/' /etc/fstab验证关闭成功:执行“free -h”,若Swap行显示“0B”,说明关闭成功。
配置K8s源:执行命令,添加K8s官方源:
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpgecho "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list > /dev/null
安装K8s组件(kubelet、kubeadm、kubectl):执行命令,安装指定版本(1.24.0,稳定且适配入门):
sudo apt update && sudo apt install -y kubelet=1.24.0-00 kubeadm=1.24.0-00 kubectl=1.24.0-00
锁定K8s版本(避免自动更新导致版本不兼容):
sudo apt-mark hold kubelet kubeadm kubectl
初始化K8s集群(master节点,单节点集群,适合入门):
sudo kubeadm init –pod-network-cidr=10.244.0.0/16 –kubernetes-version=1.24.0执行过程约5-10分钟,耐心等待,直至出现“Your Kubernetes control-plane has initialized successfully!”的提示,说明初始化成功。
配置kubectl权限(让当前用户可操作K8s集群):执行以下3条命令,逐一执行:
mkdir -p $HOME/.kubesudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/configsudo chown $(id -u):$(id -g) $HOME/.kube/config
安装网络插件(flannel,必做,否则Pod无法通信):
kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/v0.20.2/Documentation/kube-flannel.yml
验证K8s集群状态:执行命令,若所有组件显示“Running”,说明集群部署成功:
kubectl get pods –all-namespaces
解除master节点污点(单节点集群,让master节点可运行Pod):
kubectl taint nodes –all node-role.kubernetes.io/master-验证成功:执行“kubectl get nodes”,节点状态显示“Ready”。
3.1.3 安装metrics-server
metrics-server是采集Metrics指标的核心组件,必须安装,步骤如下:
下载metrics-server配置文件:执行命令,下载官方配置文件(适配K8s 1.24版本):
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.6.3/components.yaml
修改配置文件(解决入门常见的证书问题):执行命令,编辑配置文件:
kubectl edit deployment metrics-server -n kube-system
在配置文件中添加参数:找到“spec.template.spec.containers.args”,添加“–kubelet-insecure-tls”,修改后如下(仅展示关键部分):
args:
– –cert-dir=/tmp
– –secure-port=4443
– –kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
– –kubelet-use-node-status-port
– –kubelet-insecure-tls # 新增此参数添加完成后,按“Esc”,输入“:wq”保存并退出。
验证metrics-server安装成功:执行命令,若Pod状态为“Running”,说明安装成功:kubectl get pods -n kube-system | grep metrics-server
测试Metrics指标采集:执行命令,若能正常显示节点资源使用情况,说明采集正常:
kubectl top node成功标识:显示所有节点的CPU、内存使用率。
3.1.4 准备AI服务镜像(无需自定义,直接使用)
入门阶段,无需自行构建AI服务镜像,直接使用官方轻量AI测试镜像(轻量图像识别服务,资源消耗低,适合调试),执行命令拉取镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/ai-test:v1.0
验证镜像拉取成功:执行“docker images”,若能看到“ai-test”镜像,说明拉取成功。
3.2 部署AI服务(步骤5,关联后续监控与HPA)
创建AI服务的Deployment,用于后续Metrics监控和HPA扩缩容,步骤如下:
创建Deployment配置文件:执行命令,创建“ai-service-deployment.yaml”文件:
vim ai-service-deployment.yaml
编辑配置文件,粘贴以下内容(完整配置,无需修改,直接粘贴):
apiVersion: apps/v1
kind: Deployment
metadata:
name: ai-service
labels:
app: ai-service # 标签,需与Metrics、HPA配置一致
spec:
replicas: 1 # 初始实例数,与HPA最小实例数一致
selector:
matchLabels:
app: ai-service
template:
metadata:
labels:
app: ai-service
spec:
containers:
– name: ai-service
image: registry.cn-hangzhou.aliyuncs.com/google_containers/ai-test:v1.0 # 拉取的AI测试镜像
resources:
requests: # 资源请求,用于Metrics监控计算
cpu: "100m" # 100毫核,即0.1核
memory: "128Mi" # 128MB内存
limits: # 资源限制,避免资源占用过高
cpu: "500m"
memory: "512Mi"
ports:
– containerPort: 8080 # 服务端口,无需修改
保存并退出:按“Esc”,输入“:wq”,完成配置文件创建。
部署AI服务:执行命令,部署Deployment:
kubectl apply -f ai-service-deployment.yaml
验证AI服务部署成功:执行命令,若Pod状态为“Running”,说明部署成功:
kubectl get pods | grep ai-service
3.3 创建Metrics低阈值实例(步骤6,核心操作)
基于已部署的AI服务,创建Metrics低阈值实例,用于监控AI服务的CPU、内存使用率,步骤如下:
创建Metrics配置文件:执行命令,创建“metrics-low-threshold.yaml”文件:
vim metrics-low-threshold.yaml
编辑配置文件,粘贴以下内容(低阈值设置为CPU 20%、内存30%,适配入门调试):
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: ai-service-hpa # 后续HPA规则名称,可自定义
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: ai-service # 关联的AI服务Deployment名称
minReplicas: 1
maxReplicas: 3
metrics:
– type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 20 # CPU低阈值:20%
– type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 30 # 内存低阈值:30%说明:此处将Metrics低阈值配置与HPA规则合并(K8s v1.24+支持此方式),简化操作,无需单独创建Metrics实例,直接通过HPA关联监控指标,降低入门难度。
保存并退出:按“Esc”,输入“:wq”。
创建Metrics低阈值实例及HPA规则:执行命令,应用配置文件:
kubectl apply -f metrics-low-threshold.yaml
验证Metrics低阈值实例创建成功:执行命令,查看HPA配置,确认Metrics指标已关联:kubectl get hpa成功标识:显示“REFERENCE”为“Deployment/ai-service”,“TARGETS”为当前CPU、内存使用率(初始可能显示“<unknown>”,等待1-2分钟刷新即可)。
3.4 验证监控与HPA规则(步骤7,确认操作成功)
通过模拟AI服务高负载,验证Metrics低阈值是否触发HPA扩容,步骤如下:
查看当前AI服务实例数:执行命令,确认初始实例数为1:
kubectl get pods | grep ai-service
模拟AI服务高负载(触发CPU阈值):执行命令,进入AI服务Pod,模拟CPU高占用:
kubectl exec -it $(kubectl get pods | grep ai-service | awk '{print $1}') — sh进入Pod后,执行以下命令,模拟CPU高负载(持续执行,不要退出):
while true; do :; done
查看Metrics监控数据:打开新的终端窗口,执行命令,查看CPU使用率:
kubectl top pods | grep ai-service观察CPU使用率,当超过20%(低阈值)时,等待30秒左右(HPA扩容间隔)。
查看HPA扩容效果:执行命令,查看HPA状态,确认实例数是否增加:
kubectl get hpa成功标识:“REPLICAS”字段从1变为2或3,说明HPA已触发扩容,Metrics低阈值实例生效。
停止高负载模拟,验证缩容:回到模拟高负载的终端窗口,按“Ctrl+C”停止命令,再执行“exit”退出Pod;等待60秒(HPA缩容间隔),执行命令查看实例数:
kubectl get pods | grep ai-service成功标识:实例数恢复为1,说明HPA缩容规则生效。
至此,Metrics低阈值实例创建及HPA规则配置、验证已全部完成,入门学习者可重复上述步骤,熟悉操作流程。
4. 高阶用法(进阶提升,适配实际AI场景)
4.1 自定义Metrics低阈值(适配不同AI服务)
入门阶段使用的CPU 20%、内存30%低阈值,仅适用于调试;实际AI场景中,需根据AI服务的资源消耗特点,自定义阈值,核心调整方法如下:
编辑HPA配置文件:执行命令,修改Metrics阈值:
kubectl edit hpa ai-service-hpa
调整阈值参数:找到“averageUtilization”,根据AI服务类型修改:
轻量AI服务(如简单推理接口):CPU阈值可设为30%-40%,内存阈值设为40%-50%,避免频繁扩缩容。
重型AI服务(如深度学习训练、大规模图像识别):CPU阈值可设为50%-60%,内存阈值设为60%-70%,兼顾性能与资源利用率。
保存生效:按“Esc”,输入“:wq”,修改后无需重启,HPA会自动应用新的阈值规则。
4.2 新增自定义Metrics指标(超越CPU/内存监控)
实际AI场景中,仅监控CPU、内存不够,可新增自定义Metrics指标(如AI服务请求QPS、推理延迟),实现更精准的扩缩容,步骤如下(以QPS指标为例):
安装Prometheus与Grafana(用于采集、展示自定义指标):
kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/v0.62.0/bundle.yaml
配置AI服务暴露QPS指标:修改AI服务Deployment配置,添加指标暴露端口,在“containers”中新增以下内容:
ports:
– containerPort: 8080
– containerPort: 9090 # 指标暴露端口
livenessProbe:
httpGet:
path: /metrics
port: 9090
initialDelaySeconds: 5
periodSeconds: 10
创建ServiceMonitor,关联Prometheus与AI服务:创建“service-monitor.yaml”文件,粘贴以下内容:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: ai-service-monitor
namespace: monitoring
spec:
selector:
matchLabels:
app: ai-service
endpoints:
– port: 9090
path: /metrics
interval: 15skubectl apply -f service-monitor.yaml
在HPA中关联QPS自定义指标:编辑HPA配置文件,新增QPS指标(假设QPS阈值设为100):
metrics:
– type: Object
object:
metric:
name: ai_service_qps
describedObject:
apiVersion: v1
kind: Service
name: ai-service
target:
type: Value
value: 100
验证自定义指标:执行命令,查看自定义指标采集情况:
kubectl get –raw /apis/custom.metrics.k8s.io/v1beta1/namespaces/default/services/ai-service/ai_service_qps若能显示QPS数据,说明配置成功,HPA会根据QPS阈值触发扩缩容。
4.3 HPA规则优化(提升AI服务稳定性)
入门阶段的HPA扩缩容规则较为简单,实际场景中可优化以下参数,避免频繁扩缩容,提升AI服务稳定性:
调整扩缩容间隔:编辑HPA配置文件,修改“behavior”参数,延长扩缩容间隔:
behavior:
scaleUp:
stabilizationWindowSeconds: 60 # 扩容稳定窗口,60秒内不重复扩容
policies:
– type: Percent
value: 50
periodSeconds: 60 # 每次扩容不超过当前实例数的50%,间隔60秒
scaleDown:
stabilizationWindowSeconds: 120 # 缩容稳定窗口,120秒内不重复缩容
policies:
– type: Percent
value: 33
periodSeconds: 120 # 每次缩容不超过当前实例数的33%,间隔120秒
设置扩缩容冷却时间:避免短时间内频繁扩缩容,保护AI服务稳定运行,尤其适合对延迟敏感的AI场景(如实时推理)。
关联多指标触发:同时基于CPU、内存、QPS等多个指标设置HPA规则,只有当多个指标同时达到阈值时,才触发扩缩容,提升规则精准度。
5. 拓展建议(避坑指南+实际应用)
5.1 常见操作坑点及解决方案
坑点1:Metrics指标显示“<unknown>”,无法采集数据。—— 解决方案:检查metrics-server是否正常运行(kubectl get pods -n kube-system | grep metrics-server),若异常,重启metrics-server(kubectl rollout restart deployment metrics-server -n kube-system);同时确认AI服务的“resources.requests”参数已配置(未配置会导致Metrics无法采集)。
坑点2:HPA无法触发扩缩容。—— 解决方案:① 检查HPA与AI服务的标签是否一致(selector.matchLabels);② 检查Metrics阈值是否合理,可适当降低阈值测试;③ 检查AI服务是否有足够的资源可扩容(服务器资源是否充足)。
坑点3:模拟高负载后,CPU使用率未达到阈值。—— 解决方案:确认模拟命令是否执行成功(while true; do :; done),若服务器CPU核心数较多,可多开几个终端窗口,同时执行模拟命令,提升CPU使用率。
坑点4:K8s集群初始化失败,提示“swap未关闭”。—— 解决方案:重新执行“sudo swapoff -a”,并确认“/etc/fstab”文件中swap相关行已注释(执行“cat /etc/fstab”查看)。
5.2 实际AI场景应用建议
分层部署:对于大型AI项目,可按服务类型(推理服务、训练服务)分别创建Metrics低阈值实例和HPA规则,针对性配置阈值,提升资源利用率。
监控可视化:结合Grafana,将Metrics指标(CPU、内存、QPS等)可视化,实时监控AI服务运行状态,便于及时调整阈值和HPA规则。
定期优化:根据AI服务的运行数据,定期调整Metrics阈值和HPA规则,避免阈值过高导致资源浪费、过低导致服务不稳定。
备份配置:将Metrics、HPA、AI服务的配置文件(yaml文件)备份,便于后续迁移、复用,减少重复操作。
5.3 进阶学习方向
完成基础操作后,可进一步学习以下内容,适配更复杂的AI场景:
Metrics高级配置:学习采集GPU负载、AI模型推理延迟等更精准的指标,适配深度学习场景。
HPA高级特性:学习HPA v2版本的新特性(如外部指标、预测扩缩容),实现更智能的资源调度。
集群管理:学习K8s集群扩容、负载均衡,适配大规模AI服务部署场景。
自动化部署:结合CI/CD工具(如Jenkins、GitLab CI),实现AI服务、Metrics、HPA的自动化部署,提升效率。



