調度之pod反親和性(podAntiAffinity)


1.簡介

Pod 反親和性(podAntiAffinity)則是反着來的,比如一個節點上運行了某個 Pod,那么我們的模板 Pod 則不希望被調度到這個節點上面去了。我們把上面的 podAffinity 直接改成 podAntiAffinity:(pod-antiaffinity-demo.yaml)

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pod-antiaffinity
  labels:
    app: pod-antiaffinity
spec:
  replicas: 3
  selector:
    matchLabels:
      app: pod-antiaffinity
  template:
    metadata:
      labels:
        app: pod-antiaffinity
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: nginxweb
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:  # 硬策略
          - labelSelector:
              matchExpressions:
              - key: app
                operator: In
                values:
                - busybox-pod
            topologyKey: kubernetes.io/hostname

這里的意思就是如果一個節點上面有一個 app=busybox-pod 這樣的 Pod 的話,那么我們的 Pod 就別調度到這個節點上面來,上面我們把app=busybox-pod 這個 Pod 固定到了 node2 這個節點上面的,所以正常來說我們這里的 Pod 不會出現在該節點上:

[root@k8s-master01 ~]# kubectl get pod -owide
NAME                                READY   STATUS              RESTARTS   AGE     IP               NODE           NOMINATED NODE   READINESS GATES
busybox                             1/1     Running             264        11d     172.17.125.9     k8s-node01     <none>           <none>
nginx-68db656dd8-mprnc              1/1     Running             0          74m     172.17.125.13    k8s-node01     <none>           <none>
nginx-68db656dd8-znwgp              1/1     Running             1          11d     172.18.195.11    k8s-master03   <none>           <none>
pod-antiaffinity-7bb9c7ff57-4l8dt   1/1     Running             0          17s     172.17.125.16    k8s-node01     <none>           <none>
pod-antiaffinity-7bb9c7ff57-kq4gj   0/1     ContainerCreating   0          17s     <none>           k8s-node01     <none>           <none>
pod-antiaffinity-7bb9c7ff57-zhg2q   1/1     Running             0          17s     172.25.244.217   k8s-master01   <none>           <none>
test-busybox                        1/1     Running             0          23m     172.27.14.239    k8s-node02     <none>           <none>
web                                 2/2     Running             0          3d19h   172.18.195.14    k8s-master03   <none>           <none>

我們可以看到沒有被調度到 node2 節點上,因為我們這里使用的是 Pod 反親和性。大家可以思考下,如果這里我們將拓撲域更改成 beta.kubernetes.io/os 會怎么樣呢?答案是:Pending

[root@k8s-master01 ~]# kubectl get pod -owide
NAME                                READY   STATUS    RESTARTS   AGE     IP              NODE           NOMINATED NODE   READINESS GATES
busybox                             1/1     Running   264        11d     172.17.125.9    k8s-node01     <none>           <none>
nginx-68db656dd8-mprnc              1/1     Running   0          77m     172.17.125.13   k8s-node01     <none>           <none>
nginx-68db656dd8-znwgp              1/1     Running   1          11d     172.18.195.11   k8s-master03   <none>           <none>
pod-antiaffinity-64bf798fb6-dvhh2   0/1     Pending   0          9s      <none>          <none>         <none>           <none>
pod-antiaffinity-64bf798fb6-rg2pc   0/1     Pending   0          9s      <none>          <none>         <none>           <none>
pod-antiaffinity-64bf798fb6-ttnbp   0/1     Pending   0          9s      <none>          <none>         <none>           <none>
test-busybox                        1/1     Running   0          25m     172.27.14.239   k8s-node02     <none>           <none>
web                                 2/2     Running   0          3d19h   172.18.195.14   k8s-master03   <none>           <none>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM