k8s调度策略

调度策略

binpack(装箱策略)

Binpacking策略(又称装箱问题)是一种优化算法,用于将物品有效地放入容器(或"箱子")中,使得所使用的容器数量最少,Kubernetes等集群管理系统中,Binpacking确保容器尽可能地被分配到少数几个节点上,从而最大限度地利用节点的资源,避免资源浪费。

Spread(分散策略)

Spread策略用于确保Pod在集群中的分布更加均匀,避免Pod过于集中在少数节点上。通过在多个节点之间分配Pod,Spread策略能够增强应用的高可用性,防止单一节点故障导致应用不可用。Kubernetes提供了一些具体的分散策略:

  • Pod Affinity/Anti-Affinity:用于定义Pod之间的亲和性或反亲和性规则,以控制Pod的分布。例如,可以要求某些Pod尽量分布在不同的节点上,或要求它们尽量集中在一起。
  • Topology Spread Constraints:这种约束允许用户定义如何在不同的拓扑域(如可用区、主机等)中分配Pod,目的是避免资源集中在少数区域内。

Affinity 和 Anti-Affinity(亲和性与反亲和性)

  • Node Affinity:让Pod倾向于或排斥调度到某些节点上。它通过节点标签来控制Pod的调度,例如,指定Pod只能调度到具有特定标签的节点上,或者要求Pod不能调度到特定标签的节点上。
  • Pod Affinity:Pod亲和性允许将Pod调度到与其他特定Pod在同一节点上,通常用于需要高效通信的Pod,减少跨节点的网络延迟。
  • Pod Anti-Affinity:Pod反亲和性用于确保Pod不会与特定的Pod调度到同一节点上,适用于需要隔离或避免资源冲突的场景。

配置示例

强制均匀调度

将所有 nginx 的 Pod 严格均匀打散调度到不同节点上,不同节点上 nginx 的副本数量最多只能相差 1 个,如果有节点因其它因素无法调度更多的 Pod (比如资源不足),那么就让剩余的 nginx 副本 Pending。

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: kubernetes.io/hostname
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
        - matchLabels:
            app: nginx
      containers:
      - name: nginx
        image: nginx

尽量均匀调度

将 Pod 尽量均匀的打散调度到各个节点上,不强制(把 DoNotSchedule 改成 ScheduleAnyway)。

yaml 复制代码
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: kubernetes.io/hostname
        whenUnsatisfiable: ScheduleAnyway
        labelSelector:
        - matchLabels:
            app: nginx
      containers:
      - name: nginx
        image: nginx
相关推荐
Kevin Wang7275 小时前
Nvidia-AGX-spark部署手册——课堂质量诊断(jetpack:r36)
python·docker·容器
回眸不遇8 小时前
将 Docker虚拟磁盘文件ext.vhdx迁移出C盘 ,更换到D盘
c语言·docker·容器
雨辰AI8 小时前
K8s人大金仓主从高可用搭建|容器化集群自动同步+故障切换(生产完整版)
云原生·容器·kubernetes
潘正翔9 小时前
k8s基础_kubeadm搭建k8s集群
linux·运维·docker·云原生·容器·kubernetes
Echo flower9 小时前
Docker 容器中 Puppeteer 僵尸进程排查与修复
运维·docker·容器·puppeteer
潘正翔10 小时前
k8s进阶_Harbor镜像仓库
git·云原生·容器·kubernetes·gitee·github
江湖有缘10 小时前
Docker实战 | 使用Docker部署Donetick任务与家务管理应用
运维·docker·容器
键盘鼓手苏苏12 小时前
AI 音频生成流水线:异步任务要有进度和取消
云原生·kubernetes·k8
雨辰AI12 小时前
K8s 达梦数据守护集群部署|容器化高可用生产落地指南
云原生·容器·kubernetes
张忠琳13 小时前
【NPU】Ascend Docker Runtime v26.0.1 之一 runtime/main.go — 超深度分析
云原生·容器·架构·kubernetes·npu·docker-runtime