k8s学习(二十一) 亲和性调度
亲和性调度可以分成软策略和硬策略两种方式:
软策略就是如果你没有满足调度要求的节点的话,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学习(二十一) 亲和性调度相关推荐
- OpenCV学习(二十一) :计算图像连通分量:connectedComponents(),connectedComponentsWithStats()
OpenCV学习(二十一) :计算图像连通分量:connectedComponents(),connectedComponentsWithStats() 1.connectedComponents() ...
- VUE学习(二十一)、Vuex(getters、mapState与mapGetters、mapMutations与mapActions、多组件共享数据、模块化编码)
VUE学习(二十一).Vuex(getters.mapState与mapGetters.mapMutations与mapActions.多组件共享数据.模块化编码) 一.Vuex普通实现求和案例 演示 ...
- Java多线程学习二十一:ConcurrentHashMap 在 Java7 和 8 有何不同
在 Java 8 中,对于 ConcurrentHashMap 这个常用的工具类进行了很大的升级,对比之前 Java 7 版本在诸多方面都进行了调整和变化.不过,在 Java 7 中的 Segment ...
- Go语言学习 二十一 内嵌
本文最初发表在我的个人博客,查看原文,获得更好的阅读体验 在像Java这种语言中,有子类(或者继承)的概念,通过继承复用已有的功能或属性,与继承不同,Go中使用组合的方式来完成已有实现的复用,这种做法 ...
- android学习(二十一) 下载数据减少电池损耗
高效的网络访问(优化下载) 使用无线网络下载数据是你的应用消耗电池潜在的重要原因之一.为了降低和网络有关的activity连接导致的电池消耗.你理解你的连接模型怎样影响无线硬件这是很关键的. 下面将介 ...
- k8s学习(二十四) 使用prometheus监控kubernetes集群应用
1.修改部署traefik时的traefik.toml 添加 [metrics][metrics.prometheus]entryPoint = "traefik"buckets ...
- Java基础学习(二十一)之接口
1. 接口 1.1 接口概述 五孔插线面板,不同品牌都能使用,因为它们遵循同样的规范来生产的.所以说接口其实就是一种公共的规范,只要符合规范,大家都可以使用. 笔记本,USB口,鼠标,键盘,U盘 接口 ...
- 推荐系统遇上深度学习(二十一)--贝叶斯个性化排序(BPR)算法原理及实战
笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值,找寻数据的秘密,笔者认为,数据的价值不仅仅只体现在企业中,个人也可以体会到数据的魅力,用技术力量探索行为密码,让大数据 ...
- k8s学习(二十) helm的基本使用
1.创建仓库 查看仓库 [root@k8s-node1 test]# helm repo list NAME URL stable https://kubernetes-charts.storage. ...
最新文章
- 微信语音怎么转发给别人听_微信语音怎么转发出去?这个小技巧超级好用
- idea 线程内存_Java线程池系列之-Java线程池底层源码分析系列(一)
- 苦了我一年的选择,现在却是我最回味的时光
- 微软智能云三驾马车 Azure、Office 365、Dynamics 365 齐聚中国
- 机器人环境感知算法发展概述
- zynq文档学习之向GPIO引脚写数据
- 红茶一杯话Binder(初始篇)
- SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘staff_info.depart_id‘ in ‘where clause‘
- php 随机坐标点,php实现 计算坐标点在某区域
- matlab密钥生成,使用文件安装密钥安装产品
- jsp分页的常用写法
- 下行L1/L2控制信道
- ValueError: Weights for model sequential have not yet been created. Weights are created when the Mod
- Machine Translation and Datasets - 机器翻译与数据集(RNN循环神经网络)
- idea如何全局搜索关键字_intellij idea 怎么全局搜索
- 作为一个平面设计师,该如何转变平面设计思维
- 被病毒感染后隐藏文件夹的隐藏属性变灰(不可修改)的解决办法!
- nova3安装android10系统,华为nova3 刷机教程 华为nova3 强刷升级教程
- 时间都去哪了——timing budget(一)
- sed 首行加一行,末尾加一行