天天看點

Kubernetes(k8s)的排程器 - 排程親和性詳細介紹節點親和性先硬後軟 Pod  親和性

節點親和性

pod.spec.nodeAffinity

  • preferredDuringSchedulingIgnoredDuringExecution:軟政策
  • requiredDuringSchedulingIgnoredDuringExecution:硬政策

requiredDuringSchedulingIgnoredDuringExecution

apiVersion: v1
kind: Pod
metadata:
  name: affinity
  labels:
    app: node-affinity-pod
spec:
  containers:
  - name: with-node-affinity
    image: wangyanglinux/myapp:v1
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/hostname
            operator: NotIn
            values:
            - node02
           

Kubernetes(k8s)的排程器 - 排程親和性詳細介紹節點親和性先硬後軟 Pod  親和性

Kubernetes(k8s)的排程器 - 排程親和性詳細介紹節點親和性先硬後軟 Pod  親和性

preferredDuringSchedulingIgnoredDuringExecution

apiVersion: v1
kind: Pod
metadata:
  name: affinity
  labels:
    app: node-affinity-pod
spec:
  containers:
  - name: with-node-affinity
    image: wangyanglinux/myapp:v1
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: kubernetes.io/hostname
            operator: In
            values:
            - node3
           
Kubernetes(k8s)的排程器 - 排程親和性詳細介紹節點親和性先硬後軟 Pod  親和性

先硬後軟

apiVersion: v1
kind: Pod
metadata:
  name: affinity
  labels:
    app: node-affinity-pod
spec:
  containers:
  - name: with-node-affinity
    image: hub.atguigu.com/library/myapp:v1
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: kubernetes.io/hostname
            operator: NotIn
            values:
            - k8s-node02
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        preference:
          matchExpressions:
          - key: source
            operator: In
            values:
            - qikqiak
           

鍵值運算關系

  • In:label 的值在某個清單中
  • NotIn:label 的值不在某個清單中
  • Gt:label 的值大于某個值
  • Lt:label 的值小于某個值
  • Exists:某個 label 存在
  • DoesNotExist:某個 label 不存在

 Pod  親和性

pod.spec.affinity.podAffinity/podAntiAffinity

  • preferredDuringSchedulingIgnoredDuringExecution:軟政策
  • requiredDuringSchedulingIgnoredDuringExecution:硬政策
apiVersion: v1
kind: Pod
metadata:
  name: pod-3
  labels:
    app: pod-3
spec:
  containers:
  - name: pod-3
    image: wangyanglinux/myapp:v1
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - pod-1
        topologyKey: kubernetes.io/hostname
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - weight: 1
        podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - pod-2
          topologyKey: kubernetes.io/hostname
           

親和性/反親和性排程政策比較如下:

排程政策比對 标簽 比對 标簽 操作符 拓撲域 支援 排程目标
nodeAffinity  主機 In, NotIn, Exists, DoesNotExist, Gt, Lt 指向主機
podAffinity  POD In, NotIn, Exists, DoesNotExist POD與指定POD同一拓 撲域
podAnitAffinity  POD In, NotIn, Exists, DoesNotExist POD與指定POD不在同 一拓撲域

繼續閱讀