kubernetes親和性調度策略

環境描述

在這裏插入圖片描述

Node節點選擇器

nodeSelector

  • nodeSelector基於node節點label選擇匹配的節點
apiVersion: v1
kind: Pod
metadata:
  name: nodeselector-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx
  nodeSelector:
    app: node-2

在這裏插入圖片描述

  • 刪除此pod修改nodeSelector爲node-1
apiVersion: v1
kind: Pod
metadata:
  name: nodeselector-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx
  nodeSelector:
    app: node-1

在這裏插入圖片描述

  • 修改一個不存在的標籤
apiVersion: v1
kind: Pod
metadata:
  name: nodeselector-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx
  nodeSelector:
    app: node-3

在這裏插入圖片描述

nodeName節點名稱選擇

apiVersion: v1
kind: Pod
metadata:
  name: nodeselector-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx
  nodeName: node-2

在這裏插入圖片描述

  • 修改一個不存在的node節點名稱
apiVersion: v1
kind: Pod
metadata:
  name: nodeselector-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx
  nodeName: node-3

在這裏插入圖片描述
node節點選擇器是一種硬親和性的選擇器

節點親和性調度

nodeAffinity

requiredDuringSchedulingIgnoredDuringExecution(硬親和性)

apiVersion: v1
kind: Pod
metadata:
  name: required-affinity-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx
    imagePullPolicy: IfNotPresent
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: app
            operator: In
            values:
            - node-2

在這裏插入圖片描述

  • 修改一個節點中不存在的標籤
apiVersion: v1
kind: Pod
metadata:
  name: required-affinity-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx
    imagePullPolicy: IfNotPresent
  affinity:
    nodeAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
        nodeSelectorTerms:
        - matchExpressions:
          - key: app
            operator: In
            values:
            - node-3

在這裏插入圖片描述可以看出,沒有匹配到節點標籤中有app=node-3的節點

preferredDuringSchedulingIgnoredDuringExecution(軟親和性)

apiVersion: v1
kind: Pod
metadata:
  name: preferred-affinity-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx
    imagePullPolicy: IfNotPresent
  affinity:
    nodeAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - preference:
          matchExpressions:
          - key: app
            operator: In
            values:
            - node-3
        weight: 60

在這裏插入圖片描述

Pod親和性調度

podAffinity(pod親和性)

requiredDuringSchedulingIgnoredDuringExecution(硬親和性)

apiVersion: v1
kind: Pod
metadata:
  name: pod-first
  labels:
    app: myapk
spec:
  containers:
  - name: myapk
    image: nginx
---
apiVersion: v1
kind: Pod
metadata:
  name: required-affinity-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx
  affinity:
    podAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - myapk
        topologyKey: kubernetes.io/hostname

在這裏插入圖片描述

  • 去除pod親和性測試
apiVersion: v1
kind: Pod
metadata:
  name: pod-first
  labels:
    app: myapk
spec:
  containers:
  - name: myapk
    image: nginx
---
apiVersion: v1
kind: Pod
metadata:
  name: required-affinity-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx

在這裏插入圖片描述

preferredDuringSchedulingIgnoredDuringExecution(軟親和性)

apiVersion: v1
kind: Pod
metadata:
  name: pod-first
  labels:
    app: myapk
spec:
  containers:
  - name: myapk
    image: nginx
---
apiVersion: v1
kind: Pod
metadata:
  name: required-affinity-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx
  affinity:
    podAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - myapk
          topologyKey: zone
        weight: 60

軟親和性測試不明顯

podAntiAffinity(pod反親和性)

apiVersion: v1
kind: Pod
metadata:
  name: pod-first
  labels:
    app: myapk
spec:
  containers:
  - name: myapk
    image: nginx
---
apiVersion: v1
kind: Pod
metadata:
  name: required-affinity-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx
  affinity:
    podAntiAffinity:
      requiredDuringSchedulingIgnoredDuringExecution:
      - labelSelector:
          matchExpressions:
          - key: app
            operator: In
            values:
            - myapk
        topologyKey: zone
  • 爲方便測試需要把node節點打上同樣的標籤
kubectl label nodes node-1 zone=foo
kubectl label nodes node-2 zone=foo

在這裏插入圖片描述

apiVersion: v1
kind: Pod
metadata:
  name: pod-first
  labels:
    app: myapk
spec:
  containers:
  - name: myapk
    image: nginx
---
apiVersion: v1
kind: Pod
metadata:
  name: required-affinity-demo
  labels:
    app: myapp
spec:
  containers:
  - name: myapp
    image: nginx
  affinity:
    podAntiAffinity:
      preferredDuringSchedulingIgnoredDuringExecution:
      - podAffinityTerm:
          labelSelector:
            matchExpressions:
            - key: app
              operator: In
              values:
              - myapk
          topologyKey: zone
        weight: 60
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章