# Pod亲和性和反亲和性:优化调度与提高可用性

作者:Odboy (opens new window)

本站地址:https://blog.odboy.cn (opens new window)

# 简介

在Kubernetes集群中,Pod亲和性(Affinity)和反亲和性(Anti-Affinity)是强大的调度策略,它们帮助管理员控制Pod的分布,从而优化资源使用、提高服务的可靠性,并满足不同应用需求。

# Pod亲和性(Affinity)==> 靠近运行

Pod亲和性允许你指定规则,使Pod更倾向于调度到满足特定条件的节点或与其他Pod共同部署。它包括:

  • 节点亲和性(Node Affinity):根据节点标签调度Pod,可以控制Pod部署到特定硬件配置、区域位置等符合条件的节点上。
  • Pod亲和性(Pod Affinity):允许Pod与满足特定标签的其他Pod共同调度到同一节点或拓扑域,如机架、可用区等。

应用场景:

  • 需要特定硬件资源(如GPU或高CPU)的Pod调度。
  • 高效协作的服务,如数据库与Web服务器,应该放在同一节点,减少通信延迟。

麻瓜说法:

  • 将同一服务的多个 Pod 调度到同一区域(减少网络延迟)

# Pod反亲和性(Pod Anti-Affinity)==> 远离运行

Pod反亲和性是指Pod与其他不符合特定条件的Pod避免同一节点部署。这通常用于提高系统的高可用性,防止Pod因节点故障或资源竞争而影响服务。

应用场景:

  • 高可用性部署,确保同类型的服务Pod分布在不同节点或可用区。
  • 防止资源拥挤,保证系统容错性。

麻瓜说法:

  • 避免同一服务的 Pod 集中在同一节点(提高容灾能力)。

# 亲和性案例

  • 通过Pod亲和性,避免数据库服务实例,分布在多个节点上,减少通信延迟。
  • 通过Pod反亲和性,避免同一节点上的多个Web服务实例,保证高可用性。

# 软策略(核心配置参数)有哪些?

# requiredDuringSchedulingIgnoredDuringExecution

硬性要求:必须满足的条件,否则 Pod 无法调度。Pod必须与目标pod部署在同一个拓扑域,否则无法调度

# preferredDuringSchedulingIgnoredDuringExecution

软性偏好:调度器会优先尝试将Pod与目标pod部署在同一个拓扑域,但不强制。

# topologyKey:定义Pod分布的颗粒度,节点机器的标签的key和value都相等的机器,就是同一个拓扑域。

  • 拓扑域:定义调度的作用范围(如 zone、rack、hostname)。常见取值范围:
    • kubernetes.io/hostname:同一物理节点。
    • failure-domain.beta.kubernetes.io/zone:同一云服务区域(AWS 的 AZ、GCP 的 Zone)。
    • failure-domain.beta.kubernetes.io/region:同一云服务地区(如 us-east)。
    • 自定义标签:如 rack(机架)、cluster(集群)。

# labelSelector

  • 标签选择器:匹配目标 Pod 的标签。

# 示例:选择带有 app=myapp 标签的 Pod。

apiVersion: v1
kind: Pod
metadata:
  name: example-pod
  labels:
    app: myapp
spec:
  containers:
    - name: mysql
      image: mysql:5.7
      imagePullPolicy: IfNotPresent
      ports:
        - containerPort: 3306
      env:
        - name: MYSQL_ROOT_PASSWORD
          value: Mysql@123456!
  affinity:
    podAffinity: # pod的亲和性
      requiredDuringSchedulingIgnoredDuringExecution: # 硬亲和
        - labelSelector: # pod的标签选择器
            matchLabels: # 匹配相应标签
              app: myapp # 指定要匹配目标pod的标签
          topologyKey: kubernetes.io/hostname # 拓扑域,同一个节点
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
最近更新: 2025-04-14
2017 - 武林秘籍   |