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>
相关推荐
资源开发与学习1 天前
Kubernetes集群核心概念 Service
kubernetes
muyun28001 天前
Docker 下部署 Elasticsearch 8 并集成 Kibana 和 IK 分词器
elasticsearch·docker·容器
Nazi61 天前
k8s的dashboard
云原生·容器·kubernetes
傻傻虎虎2 天前
【Docker】常用帮忙、镜像、容器、其他命令合集(2)
运维·docker·容器
是小崔啊2 天前
叩丁狼K8s - 概念篇
云原生·容器·kubernetes
2401_897930062 天前
使用Docker轻松部署Neo4j图数据库
数据库·docker·neo4j
summer_west_fish2 天前
2023年系统分析师上半年论文试题分析
kubernetes
LeeZhao@2 天前
【AI推理部署】Docker篇04—Docker自动构建镜像
人工智能·docker·容器
程思扬2 天前
利用JSONCrack与cpolar提升数据可视化及跨团队协作效率
网络·人工智能·经验分享·docker·信息可视化·容器·架构
落日漫游2 天前
dockercompose和k8s区别
docker·kubernetes