Affinity settings for k8s, specify nodes, deploy pods distributed, and deploy pods bundled

Foreword:

Affinity is affinity, divided into two types

-- 强制:requiredDuringSchedulingIgnoredDuringExecution

-- 参考:preferredDuringSchedulingIgnoredDuringExecution

// The first word is different. IgnoredDuringExecution means: After the deployment is completed, these rules will not be taken care of. For example, after deployment, I changed the label of the node and the rules were not met. Will it be scheduled again? No, it will not detect changes at all.

 

There are also three types:

- Affinity node: nodeAffinity

- 和 和 pod : podAffinity

- Incompatible pod: podAntiAffinity

 

In addition:

Deploy pod must be on node

- Affinity to a certain node, to a certain node

- Affinity pod refers to the affinity (on some nodes) pod to some nodes. Which nodes are they? Specify with topologyKey.

 

 

One, designated node

1. Mandatory designation

(1) Simple setting can use nodeName and nodeSelector

 

(2) Use affinity nodeAffinity

 

2. Try to be satisfied-means you can not be satisfied

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
spec:
  selector:
    matchLabels:
      app: test
  replicas: 1
  template:
    metadata:
      labels:
        app: test
    spec:
      # nodeName: master      #(1/3)指定node名称
      # nodeSelector:         #(2/3)指定node标签
        # kubernetes.io/hostname: master
      affinity:             #(3/3)使用亲和性
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:  # 强制满足
            nodeSelectorTerms:     # terms里满足一个就够了(或的关系)
              - matchExpressions:  # match里要全部满足 (且的关系)
                  - key: kubernetes.io/hostname
                    operator: In
                    values:
                     - master
                  # - key: kubernetes.io/hostname
                    # operator: NotIn
                    # values:
                     # - master
              - matchExpressions:
                  - key: kubernetes.io/hostname
                    operator: NotIn
                    values:
                     - master
          preferredDuringSchedulingIgnoredDuringExecution:  # 尽量满足,可以不满足
            - weight: 10
              preference:
                matchExpressions:
                  - key: kubernetes.io/hostname
                    operator: In
                    values:
                      - abcd
      restartPolicy: Always
      containers:
        - name: busybox
          image: busybox
          imagePullPolicy: IfNotPresent
          command:
            - sleep
            - "3600"

 

 

2. Decentralized deployment of pods

For example, deploy redis and minio clusters, and hope that pods are not on the same node as much as possible

Use affinity podAntiAffinity

1. Mandatory requirements

2. Try to satisfy

 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
spec:
  selector:
    matchLabels:
      app: test
  replicas: 3
  template:
    metadata:
      labels:
        app: test
    spec:
      # nodeName: master      #(1/3)指定node名称
      # nodeSelector:         #(2/3)指定node标签
        # kubernetes.io/hostname: master
      affinity:             #(3/3)使用亲和性
        podAntiAffinity:
          # requiredDuringSchedulingIgnoredDuringExecution:
            # - topologyKey: kubernetes.io/hostname  # topologyKey用来筛选node,确定一个比较的范围
              # labelSelector:
                # matchExpressions:
                  # - key: app
                    # operator: In
                    # values:
                      # - test
          preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 10
              podAffinityTerm:
                topologyKey: kubernetes.io/hostname
                labelSelector:
                  matchExpressions:
                    - key: app
                      operator: In
                      values:
                        - test
        # nodeAffinity:
          # requiredDuringSchedulingIgnoredDuringExecution:  # 强制满足
            # nodeSelectorTerms:     # terms里满足一个就够了(或的关系)
              # - matchExpressions:  # match里要全部满足 (且的关系)
                  # - key: kubernetes.io/hostname
                    # operator: In
                    # values:
                     # - master
              # - matchExpressions:
                  # - key: kubernetes.io/hostname
                    # operator: NotIn
                    # values:
                     # - master
          # preferredDuringSchedulingIgnoredDuringExecution:  # 尽量满足,可以不满足
            # - weight: 10
              # preference:
                # matchExpressions:
                  # - key: kubernetes.io/hostname
                    # operator: In
                    # values:
                      # - abcd
      restartPolicy: Always
      containers:
        - name: busybox
          image: busybox
          imagePullPolicy: IfNotPresent
          command:
            - sleep
            - "3600"

 

 

Three, bundle deployment pod

apiVersion: apps/v1
kind: Deployment
metadata:
  name: test
spec:
  selector:
    matchLabels:
      app: test
  replicas: 3
  template:
    metadata:
      labels:
        app: test
    spec:
      # nodeName: master      #(1/3)指定node名称
      # nodeSelector:         #(2/3)指定node标签
        # kubernetes.io/hostname: master
      affinity:             #(3/3)使用亲和性
        podAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - topologyKey: kubernetes.io/hostname  # topologyKey用来筛选node,确定一个比较的范围
              labelSelector:
                matchExpressions:
                  - key: app
                    operator: In
                    values:
                      - test2
          preferredDuringSchedulingIgnoredDuringExecution:
            - weight: 10
              podAffinityTerm:
                topologyKey: kubernetes.io/hostname
                labelSelector:
                  matchExpressions:
                    - key: app
                      operator: In
                      values:
                        - test2
        # podAntiAffinity:
          # requiredDuringSchedulingIgnoredDuringExecution:
            # - topologyKey: kubernetes.io/hostname  
              # labelSelector:
                # matchExpressions:
                  # - key: app
                    # operator: In
                    # values:
                      # - test
          # preferredDuringSchedulingIgnoredDuringExecution:
            # - weight: 10
              # podAffinityTerm:
                # topologyKey: kubernetes.io/hostname
                # labelSelector:
                  # matchExpressions:
                    # - key: app
                      # operator: In
                      # values:
                        # - test
        # nodeAffinity:
          # requiredDuringSchedulingIgnoredDuringExecution:  # 强制满足
            # nodeSelectorTerms:     # terms里满足一个就够了(或的关系)
              # - matchExpressions:  # match里要全部满足 (且的关系)
                  # - key: kubernetes.io/hostname
                    # operator: In
                    # values:
                     # - master
              # - matchExpressions:
                  # - key: kubernetes.io/hostname
                    # operator: NotIn
                    # values:
                     # - master
          # preferredDuringSchedulingIgnoredDuringExecution:  # 尽量满足,可以不满足
            # - weight: 10
              # preference:
                # matchExpressions:
                  # - key: kubernetes.io/hostname
                    # operator: In
                    # values:
                      # - abcd
      restartPolicy: Always
      containers:
        - name: busybox
          image: busybox
          imagePullPolicy: IfNotPresent
          command:
            - sleep
            - "3600"

 

 

 

Catalog: https://blog.csdn.net/u013595395/article/details/114527658

Guess you like

Origin blog.csdn.net/u013595395/article/details/114764851