k8s的亲和性设置,指定节点,分散部署pod,捆绑部署pod

前言:

亲和性是affinity,分为两种

-- 强制:requiredDuringSchedulingIgnoredDuringExecution

-- 参考:preferredDuringSchedulingIgnoredDuringExecution

// 也就第一个词不同了,IgnoredDuringExecution的意思是:部署完了就不再管这些规则。比如部署后我把node的标签改了导致不满足规则了,会重新调度吗?不会,根本不去检测变化。

也分三种:

-- 亲和节点:nodeAffinity

-- 亲和pod:podAffinity

-- 不亲和pod:podAntiAffinity

另外:

部署pod一定是到node上的

-- 亲和某个node,到某个node上

-- 亲和pod,是指亲和(某些节点上的)pod,到 某些节点 上。到底是哪些节点?用topologyKey指定。

一、指定节点

1.强制指定

(1)简单点的设置可以用nodeName和nodeSelector

(2)使用亲和性nodeAffinity

2.尽量满足 -- 意思是可以不满足

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"

二、分散部署pod

比如部署redis、minio集群,希望pod尽量不在同一个节点

使用亲和性podAntiAffinity

1.强制要求

2.尽量满足

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"

三、捆绑部署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"

目录:https://blog.csdn.net/u013595395/article/details/114527658

猜你喜欢

转载自blog.csdn.net/u013595395/article/details/114764851