阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Kubernetes节点与 Pod 亲和性

106次阅读
没有评论

共计 3105 个字符,预计需要花费 8 分钟才能阅读完成。

一、节点亲和性策略介绍

pod.spec.nodeAffinity

  • preferredDuringSchedulingIgnoredDuringExecution:软策略

  • requiredDuringSchedulingIgnoredDuringExecution:硬策略

preferred:首选,较喜欢 required:需要,必修

键值运算关系:

  • In:label 的值在某个列表中

  • NotIn:label 的值不在某个列表中

  • Gt:label 的值大于某个值

  • Lt:label 的值小于某个值

  • Exists:某个 label 存在

  • DoesNotExist:某个 label 不存在

二、节点与 Pod 硬亲和性

requiredDuringSchedulingIgnoredDuringExecution

# 创建 pod 的模板 yaml 文件 vim affinity.yaml apiVersion: v1 kind: Pod metadata: name: affinity labels: app: node-affinity-pod spec: containers: - name: with-node-affinity image: docker.io/nginx affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: NotIn values: - node-1

通过修改 Pod 名称的方式多创建几个 Pod 查看结果:
Kubernetes 节点与 Pod 亲和性

这个时候,我们将 operator 修改为“In”,node-1 修改为 node-3,

vim affinity.yaml apiVersion: v1 kind: Pod metadata: name: affinity-3 labels: app: node-affinity-pod spec: containers: - name: with-node-affinity image: docker.io/nginx affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: In values: - node-3

查看下结果:
Kubernetes 节点与 Pod 亲和性

这个时候可以看到,我们新创建的 Pod 一直处于 Pending 的状态,这是因为我们 没有 Node- 3 这个节点,且采用的是硬亲和性策略 的原因所导致的。

三、节点与 Pod 软亲和性

preferredDuringSchedulingIgnoredDuringExecution
为了解决上述因为硬亲和性创建 Pod 不成功的问题,我们通过设置软亲和性策略后再次创建一个 pod affinity-pod- a 测试。

vim affinity-1.yaml apiVersion: v1 kind: Pod metadata: name: affinity-a labels: app: node-affinity-pod-a spec: containers: - name: with-node-affinity-a image: docker.io/nginx affinity: nodeAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: kubernetes.io/hostname operator: In values: - node-3

我们没有 node-3 节点,这个时候我们创建看一下:

Kubernetes 节点与 Pod 亲和性

我们再将 node-3 修改为 node-1 看一下:

Kubernetes 节点与 Pod 亲和性

通过实验我们得出关于节点与 pod 亲和力策略

  • 硬限制是:我必须在某个节点或我必须不在某个节点。

  • 软限制是:我想在某个节点或我不想在某个节点,实在不行,我也可以将就。

​软硬限制结合策略
策略优先级:先满足硬限制,然后满足软限制

软硬限制可以结合使用,先满足硬限制,然后满足软限制 = apiVersion: v1 kind: Pod metadata: name: affinity labels: app: node-affinity-pod spec: containers: - name: with-node-affinity image: docker.io/nginx affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: kubernetes.io/hostname operator: NotIn values: - node-2 preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: source operator: In values: - zutuanxue_com

四、Pod 亲和性

​pod.spec.affinity.podAffinity/podAntiAffinity

  • preferredDuringSchedulingIgnoredDuringExecution:软策略

  • requiredDuringSchedulingIgnoredDuringExecution:硬策略

podAffinity: pod 之间亲和,pod 在同一网段 podAntiAffinity:pod 之间反亲和,pod 在不同网段

4.1、pod 亲和性

vim test-pod.yaml apiVersion: v1 kind: Pod metadata: name: pod-1 labels: app: pod-1 spec: containers: - name: pod-1 image: docker.io/busybox command: [ "/bin/sh", "-c", "sleep 600s" ] #-----------------------------# 分割线 #--------------------------------------# vim affinity-pod.yaml apiVersion: v1 kind: Pod metadata: name: pod-3 labels: app: pod-3 spec: containers: - name: pod-3 image: docker.io/nginx affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - key: app operator: In values: - pod-1 topologyKey: kubernetes.io/hostname

​我们来看一下结果:

Kubernetes 节点与 Pod 亲和性

五、关于亲和性总结

调度策略 匹配标签 操作符 拓扑域支持 调度目标
nodeAffinity 主机 In, NotIn, Exists,DoesNotExist, Gt, Lt 指定主机
podAffinity POD In, NotIn, Exists,DoesNotExist POD 与指定 POD 同一拓扑域
podAnitAffinity POD In, NotIn, Exists,DoesNotExist POD 与指定 POD 不在同一拓扑域

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-06-09发表,共计3105字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中