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
相关推荐
东北甜妹25 分钟前
K8s job /cronjob 和 Networkpolicy
云原生·容器·kubernetes
Harvy_没救了35 分钟前
【容器技术-Docker】Docker镜像
运维·docker·容器
汪汪大队u1 小时前
从 Docker Compose 到 Kubernetes:物联网管理系统迁移实战
物联网·容器·kubernetes
秋饼1 小时前
kubernetes (K8S)组件介绍以及原理
云原生·容器·kubernetes
lpfasd1231 小时前
Docker Compose删除服务后,docker compose down无法关闭的问题解决
docker·容器·eureka
小新同学^O^2 小时前
简单学习 --> Docker容器
学习·docker·容器
emiya_saber2 小时前
docker标签
运维·docker·容器
墨倾许2 小时前
从零搭建运维学习环境(2026):WSL + Docker + Git + VS Code 完全指南
运维·git·学习·docker·容器·bash
岳来2 小时前
docker 容器重启策略RestartPolicy
运维·docker·容器·restartpolicy
明月_清风14 小时前
K8s 从入门到上手:核心概念+常用工具全解析
后端·kubernetes