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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值