亲和性调度可以分成软策略和硬策略两种方式:
软策略就是如果你没有满足调度要求的节点的话,pod 就会忽略这条规则,继续完成调度过程,说白了就是满足条件最好了,没有的话也无所谓了的策略
硬策略就比较强硬了,如果没有满足条件的节点的话,就不断重试直到满足条件为止,简单说就是你必须满足我的要求,不然我就不干的策略。

1、通过nodeSelector 和label选择节点调度

查看节点的label

[root@k8s-node1 test]# kubectl get nodes --show-labels
NAME        STATUS   ROLES    AGE   VERSION   LABELS
k8s-node1   Ready    master   16d   v1.15.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node1,kubernetes.io/os=linux,node-role.kubernetes.io/master=
k8s-node2   Ready    <none>   16d   v1.15.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node2,kubernetes.io/os=linux
k8s-node3   Ready    <none>   16d   v1.15.2   beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=k8s-node3,kubernetes.io/os=linux

为k8s-node3添加一个标签

[root@k8s-node1 test]# kubectl label nodes k8s-node3 com=zqw
node/k8s-node3 labeled

构建一个pod使用此标签

---apiVersion: v1kind: Podmetadata:labels:app: helloworld-nodeselectorname: helloworld-nodeselectorspec:containers:- name: helloworld-nodeselectorimage: 172.16.10.190:8008/helloworld:0.1.1imagePullPolicy: AlwaysimagePullSecrets:- name: myregistrykey6nodeSelector:com: zqw
kubectl apply -f helloworld-nodeSelector.yaml

查看pod

[root@k8s-node1 k8s]# kubectl get pods -owide
NAME                                         READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
dns-test                                     1/1     Running   0          14d     10.244.2.26   k8s-node3   <none>           <none>
helloworld-nodeselector                      1/1     Running   0          2m10s   10.244.2.61   k8s-node3   <none>           <none>
helloworld011-5cf986495c-6zslr               1/1     Running   0          14d     10.244.2.27   k8s-node3   <none>           <none>
helloworld011-5cf986495c-9xh5d               1/1     Running   0          14d     10.244.1.20   k8s-node2   <none>           <none>
innocent-boxer-hello-helm-867bd48ccc-k6jmw   1/1     Running   0          19h     10.244.0.33   k8s-node1   <none>           <none>
kube-hpa-demo-d789d89b-9xgdx                 1/1     Running   0          16d     10.244.1.9    k8s-node2   <none>           <none>
kube-hpa-demo-d789d89b-pw77j                 1/1     Running   0          16d     10.244.1.8    k8s-node2   <none>           <none>
kube-node-6545cf5596-khw4x                   1/1     Running   0          16d     10.244.2.3    k8s-node3   <none>           <none>
kube-node-6545cf5596-q7kd7                   1/1     Running   0          16d     10.244.1.5    k8s-node2   <none>           <none>
liveness-tcpsocket                           1/1     Running   0          16d     10.244.1.6    k8s-node2   <none>           <none>
myrabbitmq-0                                 1/1     Running   0          18h     10.244.2.60   k8s-node3   <none>           <none>
mysqldb-6ffc996bdb-lxgsp                     0/1     Pending   0          19h     <none>        <none>      <none>           <none>
nfs-client-provisioner-84f967cff9-dtxxt      1/1     Running   0          9d      10.244.2.43   k8s-node3   <none>           <none>
nfs-web-0                                    1/1     Running   0          9d      10.244.2.44   k8s-node3   <none>           <none>
nfs-web-1                                    1/1     Running   0          9d      10.244.1.22   k8s-node2   <none>           <none>
nginx-ds-7spc2                               1/1     Running   0          15d     10.244.1.12   k8s-node2   <none>           <none>
nginx-ds-ffd9v                               1/1     Running   0          15d     10.244.2.13   k8s-node3   <none>           <none>
nginx-ds-rmqvl                               1/1     Running   0          5d23h   10.244.0.7    k8s-node1   <none>           <none>
static-nginx-k8s-node1                       1/1     Running   0          16d     10.244.0.2    k8s-node1   <none>           <none>
use-pvc-deployment-85997f976b-llg9h          1/1     Running   0          9d      10.244.2.42   k8s-node3   <none>           <none>
use-pvc-deployment-85997f976b-tm92t          1/1     Running   0          9d      10.244.1.21   k8s-node2   <none>           <none>
web-0                                        1/1     Running   0          14d     10.244.2.25   k8s-node3   <none>           <none>
web-1                                        1/1     Running   0          14d     10.244.1.19   k8s-node2   <none>           <none>

发现helloworld-nodeselector在k8s-node3节点上

2、使用节点亲和性策略nodeAffinity

创建helloworld-nodeAffinity.yaml

---apiVersion: extensions/v1beta1kind: Deploymentmetadata:name: helloworld-nodeaffinityspec:revisionHistoryLimit: 10replicas: 3template:metadata:labels:app: web-nodeaffinityspec:containers:- name: helloworld-nodeaffinityimage: 172.16.10.190:8008/helloworld:0.0.5ports:- containerPort: 8080imagePullSecrets:- name: myregistrykey6affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:  # 硬策略nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: NotInvalues:- k8s-node2preferredDuringSchedulingIgnoredDuringExecution:  # 软策略- weight: 1preference:matchExpressions:- key: comoperator: Invalues:- zqwminReadySeconds: 10strategy:type: RollingUpdaterollingUpdate:maxSurge: 1maxUnavailable: 1
kubectl apply -f helloworld-nodeAffinity.yaml

查看pod信息

[root@k8s-node1 k8s]# kubectl get pods -owide
NAME                                         READY   STATUS    RESTARTS   AGE     IP            NODE        NOMINATED NODE   READINESS GATES
dns-test                                     1/1     Running   0          15d     10.244.2.26   k8s-node3   <none>           <none>
helloworld-nodeaffinity-5cfdccb89-9k4vz      1/1     Running   0          13s     10.244.2.63   k8s-node3   <none>           <none>
helloworld-nodeaffinity-5cfdccb89-dqqlk      1/1     Running   0          13s     10.244.0.37   k8s-node1   <none>           <none>
helloworld-nodeaffinity-5cfdccb89-k89zq      1/1     Running   0          13s     10.244.2.62   k8s-node3   <none>           <none>
helloworld-nodeselector                      1/1     Running   0          16m     10.244.2.61   k8s-node3   <none>           <none>
helloworld011-5cf986495c-6zslr               1/1     Running   0          14d     10.244.2.27   k8s-node3   <none>           <none>
helloworld011-5cf986495c-9xh5d               1/1     Running   0          14d     10.244.1.20   k8s-node2   <none>           <none>
innocent-boxer-hello-helm-867bd48ccc-k6jmw   1/1     Running   0          19h     10.244.0.33   k8s-node1   <none>           <none>
kube-hpa-demo-d789d89b-9xgdx                 1/1     Running   0          16d     10.244.1.9    k8s-node2   <none>           <none>
kube-hpa-demo-d789d89b-pw77j                 1/1     Running   0          16d     10.244.1.8    k8s-node2   <none>           <none>
kube-node-6545cf5596-khw4x                   1/1     Running   0          16d     10.244.2.3    k8s-node3   <none>           <none>
kube-node-6545cf5596-q7kd7                   1/1     Running   0          16d     10.244.1.5    k8s-node2   <none>           <none>
liveness-tcpsocket                           1/1     Running   0          16d     10.244.1.6    k8s-node2   <none>           <none>
myrabbitmq-0                                 1/1     Running   0          18h     10.244.2.60   k8s-node3   <none>           <none>
mysqldb-6ffc996bdb-lxgsp                     0/1     Pending   0          19h     <none>        <none>      <none>           <none>
nfs-client-provisioner-84f967cff9-dtxxt      1/1     Running   0          9d      10.244.2.43   k8s-node3   <none>           <none>
nfs-web-0                                    1/1     Running   0          9d      10.244.2.44   k8s-node3   <none>           <none>
nfs-web-1                                    1/1     Running   0          9d      10.244.1.22   k8s-node2   <none>           <none>
nginx-ds-7spc2                               1/1     Running   0          15d     10.244.1.12   k8s-node2   <none>           <none>
nginx-ds-ffd9v                               1/1     Running   0          15d     10.244.2.13   k8s-node3   <none>           <none>
nginx-ds-rmqvl                               1/1     Running   0          5d23h   10.244.0.7    k8s-node1   <none>           <none>
static-nginx-k8s-node1                       1/1     Running   0          16d     10.244.0.2    k8s-node1   <none>           <none>
use-pvc-deployment-85997f976b-llg9h          1/1     Running   0          9d      10.244.2.42   k8s-node3   <none>           <none>
use-pvc-deployment-85997f976b-tm92t          1/1     Running   0          9d      10.244.1.21   k8s-node2   <none>           <none>
web-0                                        1/1     Running   0          15d     10.244.2.25   k8s-node3   <none>           <none>
web-1                                        1/1     Running   0          15d     10.244.1.19   k8s-node2   <none>           <none>

发现不在k8s-node2上部署,在k8s-node3上部署

部署规则包括以下几种:

In:label 的值在某个列表中
NotIn:label 的值不在某个列表中
Gt:label 的值大于某个值
Lt:label 的值小于某个值
Exists:某个 label 存在
DoesNotExist:某个 label 不存在

3、pod亲和性和反亲和性
PodAffinity和podAntiAffinity参考
https://www.qikqiak.com/k8s-book/docs/51.Kubernetes%E4%BA%B2%E5%92%8C%E6%80%A7%E8%B0%83%E5%BA%A6.html

k8s学习(二十一) 亲和性调度相关推荐

  1. OpenCV学习(二十一) :计算图像连通分量:connectedComponents(),connectedComponentsWithStats()

    OpenCV学习(二十一) :计算图像连通分量:connectedComponents(),connectedComponentsWithStats() 1.connectedComponents() ...

  2. VUE学习(二十一)、Vuex(getters、mapState与mapGetters、mapMutations与mapActions、多组件共享数据、模块化编码)

    VUE学习(二十一).Vuex(getters.mapState与mapGetters.mapMutations与mapActions.多组件共享数据.模块化编码) 一.Vuex普通实现求和案例 演示 ...

  3. Java多线程学习二十一:ConcurrentHashMap 在 Java7 和 8 有何不同

    在 Java 8 中,对于 ConcurrentHashMap 这个常用的工具类进行了很大的升级,对比之前 Java 7 版本在诸多方面都进行了调整和变化.不过,在 Java 7 中的 Segment ...

  4. Go语言学习 二十一 内嵌

    本文最初发表在我的个人博客,查看原文,获得更好的阅读体验 在像Java这种语言中,有子类(或者继承)的概念,通过继承复用已有的功能或属性,与继承不同,Go中使用组合的方式来完成已有实现的复用,这种做法 ...

  5. android学习(二十一) 下载数据减少电池损耗

    高效的网络访问(优化下载) 使用无线网络下载数据是你的应用消耗电池潜在的重要原因之一.为了降低和网络有关的activity连接导致的电池消耗.你理解你的连接模型怎样影响无线硬件这是很关键的. 下面将介 ...

  6. k8s学习(二十四) 使用prometheus监控kubernetes集群应用

    1.修改部署traefik时的traefik.toml 添加 [metrics][metrics.prometheus]entryPoint = "traefik"buckets ...

  7. Java基础学习(二十一)之接口

    1. 接口 1.1 接口概述 五孔插线面板,不同品牌都能使用,因为它们遵循同样的规范来生产的.所以说接口其实就是一种公共的规范,只要符合规范,大家都可以使用. 笔记本,USB口,鼠标,键盘,U盘 接口 ...

  8. 推荐系统遇上深度学习(二十一)--贝叶斯个性化排序(BPR)算法原理及实战

    笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值,找寻数据的秘密,笔者认为,数据的价值不仅仅只体现在企业中,个人也可以体会到数据的魅力,用技术力量探索行为密码,让大数据 ...

  9. k8s学习(二十) helm的基本使用

    1.创建仓库 查看仓库 [root@k8s-node1 test]# helm repo list NAME URL stable https://kubernetes-charts.storage. ...

最新文章

  1. 微信语音怎么转发给别人听_微信语音怎么转发出去?这个小技巧超级好用
  2. idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(一)
  3. 苦了我一年的选择,现在却是我最回味的时光
  4. 微软智能云三驾马车 Azure、Office 365、Dynamics 365 齐聚中国
  5. 机器人环境感知算法发展概述
  6. zynq文档学习之向GPIO引脚写数据
  7. 红茶一杯话Binder(初始篇)
  8. SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘staff_info.depart_id‘ in ‘where clause‘
  9. php 随机坐标点,php实现 计算坐标点在某区域
  10. matlab密钥生成,使用文件安装密钥安装产品
  11. jsp分页的常用写法
  12. 下行L1/L2控制信道
  13. ValueError: Weights for model sequential have not yet been created. Weights are created when the Mod
  14. Machine Translation and Datasets - 机器翻译与数据集(RNN循环神经网络)
  15. idea如何全局搜索关键字_intellij idea 怎么全局搜索
  16. 作为一个平面设计师,该如何转变平面设计思维
  17. 被病毒感染后隐藏文件夹的隐藏属性变灰(不可修改)的解决办法!
  18. nova3安装android10系统,华为nova3 刷机教程 华为nova3 强刷升级教程
  19. 时间都去哪了——timing budget(一)
  20. sed 首行加一行,末尾加一行

热门文章

  1. 04-操作系统的运行机制和体系结构(大内核、小内核)
  2. 【java代码规范】
  3. PPT结尾只会说“谢谢”?学会这些PPT结尾,观众主动为你鼓掌
  4. python3 题解(47 定义有理数类)
  5. win 程序32位或者64程序如何区分
  6. Odoo 16 企业版手册 - 库存管理之库位管理
  7. Unity VR手柄发射射线
  8. react快速框架dva搭建项目架构
  9. PS制作金属质感的文字
  10. 两个冲击函数相乘的傅里叶变换_关于傅里叶变换和冲击函数δ(t)