Kubernetes 之 Pod 之间的亲和性与反亲和性

Kubernetes 之 Pod 之间的亲和性与反亲和性

Pod 亲和性定义

Pod 亲和性是指将 Pod 和 Pod 根据某些约束性条件捆绑到具有相同特性的工作节点上,例如同一区域、同一机房乃至同一机柜。这样 Pod和 Pod 可以更好的通信,解决 IO 瓶颈。它同样分为硬亲和性requiredDuringSchedulingIgnoredDuringExecution和软亲和性preferredDuringSchedulingIgnoredDuringExecution,同时亲和性下面还有一个拓扑键topologyKey,这是用来将 Pod 约束到跟跟随 Pod 同一个域上的。

Pod 亲和性使用

  1. 我们先定义一个被跟随的 Pod

    yaml 复制代码
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-affinity-bind
      namespace: default
      labels:
        app: nginx
    spec:
      containers:
      - name: k8s-test
        image: k8s-test:v1.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
  2. 定义 Pod 去跟随第一个 Pod

    yaml 复制代码
    apiVersion: v1
    kind: Pod
    metadata:
      name: pod-affinity-track
      namespace: default
      labels:
        app: track
    spec:
      affinity:
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - nginx
            topologyKey: kubernetes.io/hostname
      containers:
      - name: k8s-test
        image: k8s-test:v1.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
  3. 运行结果

    复制代码
    root@k8s-master1:~# kubectl get pods -owide --show-labels
    NAME                 READY   STATUS    RESTARTS   AGE   IP              NODE          NOMINATED NODE   READINESS GATES   LABELS
    pod-affinity-bind    1/1     Running   0          25m   10.244.194.83   k8s-worker1   <none>           <none>            app=nginx
    pod-affinity-track   1/1     Running   0          24s   10.244.194.84   k8s-worker1   <none>           <none>            app=track

Pod 反亲和性定义

Pod 反亲和性是与亲和性完全相反的定义,一旦发现它的约束条件匹配,那么这个 Pod 比与匹配 Pod 在不同的topologyKey上的工作节点上。它主要可以用来保障不是热点区域和不需要高性能响应但很重要的业务不受干扰。

Pod 反亲和性使用

yaml 复制代码
apiVersion: v1
kind: Pod
metadata:
  name: pod-affinity-anti
  namespace: default
  labels:
    app: anti
spec:
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - nginx
        topologyKey: kubernetes.io/hostname
  containers:
  - name: k8s-test
    image: k8s-test:v1.0
    imagePullPolicy: IfNotPresent
    ports:
    - containerPort: 80
shell 复制代码
root@k8s-master1:~# kubectl get pods -owide                          
NAME                 READY   STATUS    RESTARTS   AGE     IP              NODE          NOMINATED NODE   READINESS GATES
pod-affinity-anti    1/1     Running   0          8m45s   10.244.126.15   k8s-worker2   <none>           <none>
pod-affinity-bind    1/1     Running   0          76m     10.244.194.83   k8s-worker1   <none>           <none>
pod-affinity-track   1/1     Running   0          51m     10.244.194.84   k8s-worker1   <none>           <none>
相关推荐
AI服务老曹9 小时前
解耦异构算力:基于 Docker 与 GB28181/RTSP 的边缘计算 AI 视频管理平台架构设计(支持源码交付)
人工智能·docker·边缘计算
ai产品老杨9 小时前
深度解析:基于 Docker 与边缘计算的 AI 视频管理平台架构——打通 GB28181/RTSP 协议,支持全量源码交付与异构部署
人工智能·docker·边缘计算
朝阳58110 小时前
MySQL 主从复制 — Docker 双机灾备方案
数据库·mysql·docker
ai产品老杨10 小时前
【架构实战】如何基于 Docker 与边缘计算构建企业级 AI 视频管理平台?打通 GB28181/RTSP 统一接入与异构算力调度,全量源码交付破解集成痛点
人工智能·docker·架构
IT策士11 小时前
Docker 从 0 到 1 再到 Kubernetes 实战:第18篇 从 Docker Compose 到 Kubernetes 的思考
docker·容器·kubernetes
linmengmeng_131411 小时前
【总结】Docker 容器重建后 Nginx 502 问题排查与解决
nginx·docker·容器
qq_3564086611 小时前
Kubernetes Rook-Ceph 高可用存储部署文档
ceph·容器·kubernetes
Plastic garden11 小时前
Docker(3)Docker 镜像 & Dockerfile
运维·docker·容器
“码”力全开11 小时前
解耦异构算力与多协议接入:基于Docker与源码交付的开源GB28181/RTSP边缘计算AI视频管理平台架构深度解析
人工智能·docker·开源
m0_7408596211 小时前
Docker安装常见数据库命令汇总(2026)
数据库·docker·容器