Ubuntu上Kubernetes资源调度策略
Kubernetes的资源调度策略是其核心功能之一,旨在将Pod高效、合理地分配到Ubuntu节点(或其他操作系统节点)上,确保资源充分利用、应用性能稳定及集群可靠性。这些策略涵盖资源需求定义、节点选择规则、调度阶段流程、高级优化机制等多个维度,以下是具体内容:
Pod通过resources.requests(资源请求)和resources.limits(资源限制)明确其对计算资源(CPU、内存)的需求,是调度的基础。
LimitRange为命名空间设置默认的requests/limits,避免用户未指定导致的资源混乱。Kubernetes调度器采用“预选+优选”的两阶段模型,确保Pod被分配到合适的Ubuntu节点:
nodeSelector.zone=us-west-1,则只有带该标签的Ubuntu节点会被保留);NotReady状态;Taint(污点,需Pod有对应Toleration容忍)。通过**亲和性(Affinity)和反亲和性(Anti-Affinity)**规则,优化Pod在Ubuntu节点上的分布,提升性能或可靠性:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/os
operator: In
values:
- linux # 选择Ubuntu节点(Ubuntu通常标记为linux)
支持requiredDuringScheduling(必须满足)和preferredDuringScheduling(优先满足)两种模式。通过污点和容忍机制,控制哪些Pod可以调度到Ubuntu节点:
kubectl taint nodes node1 key=value:NoSchedule),表示该节点“拒绝”调度无对应容忍的Pod。tolerations: - key: "key" operator: "Equal" value: "value" effect: "NoSchedule"),允许Pod调度到带对应污点的节点。通过ResourceQuota限制命名空间内所有Pod的资源使用总量,防止某个团队或应用过度占用Ubuntu节点资源。例如:
apiVersion: v1
kind: ResourceQuota
metadata:
name: ubuntu-quota
spec:
hard:
requests.cpu: "4" # 命名空间内所有Pod的CPU总requests不超过4核
requests.memory: "16Gi" # 内存总requests不超过16Gi
limits.cpu: "8" # CPU总limits不超过8核
limits.memory: "32Gi" # 内存总limits不超过32Gi
pods: "20" # Pod数量不超过20个
需配合LimitRange使用,确保Pod的资源请求在合理范围内。
通过Horizontal Pod Autoscaler(HPA)和Cluster Autoscaler实现资源动态调整:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50 # 当CPU利用率超过50%时,扩容Pod
Scheduler接口,并通过schedulerName字段让Pod使用该调度器。priorityClassName(优先级类),高优先级Pod在资源不足时可以抢占低优先级Pod的资源(需开启Preemption特性),确保关键业务运行。