Kubernetes 在 CentOS 上的资源调度策略概览
在 CentOS 上,Kubernetes 的调度行为与操作系统无关,核心由 kube-scheduler 完成:监听未绑定 NodeName 的 Pod,经过预选(过滤)—优选(打分)—绑定三个阶段选出最优节点;常见扩展包括节点亲和性/反亲和性、污点与容忍、拓扑分布约束、优先级与抢占、多调度器等,用于满足业务对性能、容错与资源效率的诉求。
核心调度策略与机制
CentOS 场景下的落地配置要点
调度优化与弹性扩缩
示例配置片段
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values: ["ssd"]
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values: ["web"]
topologyKey: kubernetes.io/hostname
# 节点打污点
kubectl taint nodes node-gpu1 accelerator=nvidia:NoSchedule
# Pod 容忍
tolerations:
- key: "accelerator"
operator: "Equal"
value: "nvidia"
effect: "NoSchedule"
resources:
requests:
memory: "256Mi"
cpu: "500m"
limits:
memory: "512Mi"
cpu: "1"
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: DoNotSchedule
labelSelector:
matchLabels:
app: web
# ResourceQuota
apiVersion: v1
kind: ResourceQuota
metadata:
name: compute-quota
namespace: prod
spec:
hard:
requests.cpu: "10"
requests.memory: "20Gi"
limits.cpu: "20"
limits.memory: "40Gi"
# LimitRange
apiVersion: v1
kind: LimitRange
metadata:
name: default-limit
namespace: prod
spec:
limits:
- default:
memory: "512Mi"
cpu: "500m"
defaultRequest:
memory: "256Mi"
cpu: "250m"
type: Container
上述策略与示例可直接用于 CentOS 节点,关键在于:为节点与业务合理打标签、为容器设置合适的 requests/limits、用 亲和/反亲和与拓扑分布 控制布局、以 配额与默认限额 做治理,并配合 HPA/CA 实现弹性。