
1) 【一句话结论】
核心是通过Kubernetes的调度策略(节点选择器、亲和性)优化资源分配,结合资源配额控制集群资源,再利用HPA自动伸缩应对峰值,从而保障任务高可用与性能。
2) 【原理/概念讲解】
老师口吻:首先,Kubernetes的Pod是任务容器,节点是服务器。调度器负责把Pod放到合适节点,依据资源(CPU、内存)和调度策略(比如节点选择器、亲和性)。资源配额是集群/命名空间的总资源限制,像超市货架,避免某区域资源被独占;资源请求是Pod申请的最小资源,确保能启动;资源限制是Pod使用的最大资源,防止耗尽。弹性伸缩(HPA)是自动调整副本数的控制器,当负载高时扩容,低时缩容,像自动调整生产线数量。
3) 【对比与适用场景】
| 对比项 | 资源配额(Resource Quota) | 资源请求/限制(Requests/Limits) |
|---|---|---|
| 定义 | 集群/命名空间级别的资源总量限制 | 单个Pod的资源申请(请求)与使用上限(限制) |
| 作用 | 防止命名空间资源滥用,保障公平性 | 确保Pod有最小资源运行,限制最大资源使用 |
| 使用场景 | 集群资源紧张时,限制各命名空间资源总量 | 每个Pod需固定资源,或防止资源过度消耗 |
| 注意点 | 需在命名空间下创建,影响所有Pod | 必须在Pod定义中设置,否则调度失败 |
4) 【示例】
假设在阿里云ACK中,构建大数据处理任务:
apiVersion: apps/v1
kind: Deployment
metadata:
name: data-processing
spec:
replicas: 3
selector:
matchLabels:
app: data-processing
template:
metadata:
labels:
app: data-processing
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-resource-utilization # 假设节点标签,资源利用率
operator: LessThan
values:
- "70%" # 优先选择资源利用率低于70%的节点
containers:
- name: data-pipeline
image: my-data-pipeline:latest
resources:
requests:
cpu: "500m"
memory: "1Gi"
limits:
cpu: "1"
memory: "2Gi"
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: data-processing-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: data-processing
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70 # CPU使用率>70%时扩容
解释:通过节点亲和性选择资源利用率低的节点,避免峰值时资源挤兑;HPA根据CPU使用率自动扩缩容,确保负载高峰时处理能力。
5) 【面试口播版答案】
各位面试官好,针对“如何设计资源调度策略应对峰值负载”这个问题,我的核心思路是通过Kubernetes的调度策略(节点选择器、亲和性)优化资源分配,结合资源配额控制集群资源,再利用HPA自动伸缩应对峰值。首先,调度时优先选择资源利用率低的节点(通过节点亲和性),避免峰值时资源挤兑;然后,集群设置资源配额,防止某个任务组独占资源;最后,HPA基于CPU使用率自动调整副本数,比如当CPU使用率超过70%时,自动从3个副本扩容到10个,负载降低时缩容。这样既能应对峰值负载,又保证任务高可用和性能。具体来说,比如在阿里云ACK中,我们为大数据处理任务配置节点亲和性,优先调度到资源利用率低的节点,同时设置HPA,当CPU使用率超过70%时自动扩容,确保任务在高峰期也能稳定运行。
6) 【追问清单】
7) 【常见坑/雷区】