6-2 nodeSelector, nodeName, node亲和与反亲和
文章目录
- 前言
- nodeSelector
- nodeName
- node affinity
- 硬亲和
- 软亲和
- 反亲和
- 亲和组合
前言
Pod在创建时,master会根据node节点物理机的状态,pod资源请求requests,淘汰掉不符合要求的node。剩下的node会根据评分机制选择最高分的。分数相同也会随机选一个。
在生产环境中,会根据实际需求人为干预调度过程。如指定创建在某个pod,或倾向创建在某些pod等。
nodeSelector
nodeSelector即节点选择器,事先为node打标签,然后选择拥有该标签的node进行调度。
查看node节点默认标签:
sudo kubectl describe node 192.168.100.156
Name: 192.168.100.156
Roles: node
Labels: beta.kubernetes.io/arch=amd64 beta.kubernetes.io/os=linux kubernetes.io/arch=amd64 kubernetes.io/hostname=192.168.100.156kubernetes.io/os=linux kubernetes.io/role=node
为node添加标签,采用key=value格式。
kubectl label node 192.168.100.156 project="eshop"
kubectl label node 192.168.100.156 disktype="ssd"
两个条件都必须满足的nodes才被选择,如多个node都符合再根据高分选出其中一个node。
kind: Deployment
apiVersion: apps/v1
metadata:labels:app: myserver-tomcat-app2-deployment-labelname: myserver-tomcat-app2-deploymentnamespace: myserver
spec:replicas: 4selector:matchLabels:app: myserver-tomcat-app2-selectortemplate:metadata:labels:app: myserver-tomcat-app2-selectorspec:nodeSelector:project: eshopdisktype: ssdcontainers:- name: myserver-tomcat-app2-containerimage: tomcat:7.0.94-alpine imagePullPolicy: IfNotPresentports:- containerPort: 8080protocol: TCPname: http
nodeName
nodeName即节点名字,每个节点名字都不一样。使用了nodeName则不需要筛选,直接调度到指定名字的node节点。
pod直接调度到了192.168.100.156节点上。
kind: Deployment
apiVersion: apps/v1
metadata:labels:app: myserver-tomcat-app2-deployment-labelname: myserver-tomcat-app2-deploymentnamespace: myserver
spec:replicas: 2selector:matchLabels:app: myserver-tomcat-app2-selectortemplate:metadata:labels:app: myserver-tomcat-app2-selectorspec:nodeName: 192.168.100.156containers:- name: myserver-tomcat-app2-containerimage: tomcat:7.0.94-alpine imagePullPolicy: IfNotPresentports:- containerPort: 8080protocol: TCPname: http
查看pod是否落在了192.168.100.156节点上。
sudo kubectl get pod -n myserver -o wide
NAME READY STATUS RESTARTS AGE IP NODE
myserver-tomcat-app2-deployment-32ac23d58b-29vqx 1/1 Running 0 4m12s 172.20.135.27 192.168.100.156
node affinity
node affinity即节点亲和,是nodeSelector的进阶,标签条件包含与或非等,支持硬匹配和软匹配,类型包括硬亲和,软亲和,反亲和。
- requiredDuringScheduling:必须满足条件才调度,没有满足的不进行调度。
- preferredDuringScheduling:倾向符合标签的node,没有满足的也可以调度。
- IgnoredDuringExecution:Pod运行中Node改变标签,即使不再符合也继续运行。
硬亲和
使用In做条件,有一个值符合即可。matchExpressions有多个,有一个符合即可。
kind: Deployment
apiVersion: apps/v1
metadata:labels:app: myserver-tomcat-app2-deployment-labelname: myserver-tomcat-app2-deploymentnamespace: myserver
spec:replicas: 2selector:matchLabels:app: myserver-tomcat-app2-selectortemplate:metadata:labels:app: myserver-tomcat-app2-selectorspec:containers:- name: myserver-tomcat-app2-containerimage: tomcat:7.0.94-alpine imagePullPolicy: IfNotPresentports:- containerPort: 8080protocol: TCPname: httpaffinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms:- matchExpressions: - key: disktypeoperator: In #只有一个value是匹配成功也可以调度values:- ssd - sas- matchExpressions: - key: projectoperator: In #只有一个value是匹配成功也可以调度values:- eshop #即使这俩条件都匹配不上也可以调度,即多个matchExpressions只要有任意一个能匹配任何一个value就可以调用。- email
只有一个matchExpressions,则两个key都必须符合。但每个key匹配一个value即为符合。
...
前部分如上
...affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms:- matchExpressions: - key: disktypeoperator: Invalues:- ssd - sas- key: projectoperator: Invalues:- eshop- email
软亲和
weight权重越大优先选择,软亲和没有合适的node最后也被调度。
...
前部分如上
...affinity:nodeAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 80 #软亲和条件1,weight值越大优先级越高,越优先匹配调度 preference: matchExpressions: - key: project operator: In values: - eshop- weight: 60 #软亲和条件2,在条件1不满足时匹配条件2preference: matchExpressions: - key: disktypeoperator: In values: - ssd
反亲和
标签匹配逻辑使用NotIn便是反亲和,使用hdd硬盘的node不被调度。
...
前部分如上
...affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms:- matchExpressions: - key: disktypeoperator: NotInvalues:- hdd
亲和组合
硬亲和,软亲和,反亲和可以一起使用。
...
前部分如上
...affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution: #硬亲和nodeSelectorTerms:- matchExpressions: #硬匹配条件- key: "kubernetes.io/role" operator: NotIn #反亲和values:- "master" #硬性匹配key的值kubernetes.io/role不包含master的节点,即绝对不会调度到master节点(node反亲和)preferredDuringSchedulingIgnoredDuringExecution: #软亲和- weight: 80 preference: matchExpressions: - key: project operator: In values: - eshop- weight: 60 preference: matchExpressions: - key: disktypeoperator: In values: - hdd
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
