Kubernetes 的调度是集群管理中至关重要的一个环节,它负责将 Pod 分配到合适的 Node 上。本文将详细介绍 Kubernetes 的调度策略。

调度流程

  1. Pod 请求调度:当 Pod 创建时,调度器会将其放入一个待调度队列中。
  2. 选择 Node:调度器会从所有可用的 Node 中选择一个合适的 Node 来运行这个 Pod。
  3. 分配资源:调度器会将 Pod 的资源请求分配给选定的 Node。
  4. Pod 创建:调度器会在选定的 Node 上创建 Pod。

调度策略

Kubernetes 提供了多种调度策略,包括:

  • 默认调度策略:根据 Node 的资源使用情况和标签选择 Node。
  • 基于亲和性的调度:将具有相同标签的 Pod 调度到同一个 Node 上。
  • 基于反亲和性的调度:将具有不同标签的 Pod 调度到不同的 Node 上。

亲和性

亲和性是指将 Pod 调度到具有特定标签的 Node 上。亲和性分为两种:

  • PodAffinity:将具有相同标签的 Pod 调度到同一个 Node 上。
  • PodAntiAffinity:将具有不同标签的 Pod 调度到不同的 Node 上。

示例

假设我们有一个具有以下标签的 Node:

  • node1:标签 role=worker
  • node2:标签 role=worker
  • node3:标签 role=master

我们想要将具有 role=worker 标签的 Pod 调度到 node1node2 上,可以使用以下亲和性规则:

affinity:
  podAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
            - key: "role"
              operator: In
              values:
                - worker
        topologyKey: "kubernetes.io/hostname"

图片

Kubernetes 亲和性

Kubernetes_Affinity

扩展阅读

更多关于 Kubernetes 调度的信息,请访问我们的 Kubernetes 调度官方文档