Node label使用说明
1.查看label
kubectl get nodes --show-labels=true
2.创建label
kubectl label node $(node_name) $key=$value
3.更新label
kubectl label --overwrite node $(node_name) $key=$value
4.删除label
kubectl label node $(node_name) $key-
Node调度几种模式
首先看一下,我测试环境node label
1.nodeName模式
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello-world
spec:
replicas: 3
template:
metadata:
labels:
k8s-app: hello-world
spec:
nodeName: node1
containers:
- name: hello-world
image: registry.cn-qingdao.aliyuncs.com/icommon/hello-world:latest
2.nodeSelector模式
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: hello-world
spec:
replicas: 3
template:
metadata:
labels:
k8s-app: hello-world
spec:
nodeSelector:
kubernetes.io/hostname: node1
containers:
- name: hello-world
image: registry.cn-qingdao.aliyuncs.com/icommon/hello-world:latest
3.affinity模式
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: hello-world
spec:
replicas: 4
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-world
image: registry.cn-qingdao.aliyuncs.com/icommon/hello-world:latest
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "kubernetes.io/hostname"
operator: NotIn
values: ["node2"]
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 10
preference:
matchExpressions:
- key: zone
operator: In
values:
- ali
解读:
上面规则说明:除node2节点外,分配到zone=ali标签的node上,反之随机调度
requiredDuringSchedulingIgnoredDuringExecution :硬要求,在调度期间要求满足亲和性或者反亲和性规则,如果不能满足规则,则POD不能被调度到对应的主机上。在之后的运行过程中,系统不会再检查这些规则是否满足。
preferredDuringSchedulingIgnoredDuringExecution:软要求,在调度期间尽量满足亲和性或者反亲和性规则,如果不能满足规则,POD也有可能被调度到对应的主机上。在之后的运行过程中,系统不会再检查这些规则是否满足。
operator四种模式: In NotIn Exists NotExists Gt Lt
Taints and Tolerations (污点和容忍)
运行下面命令,标记节点为污点进行测试,标记污点的节点不会分配POD,除非指定tolerations
kubectl taint nodes node1 node-role/node1=:NoSchedule
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: hello-world
spec:
replicas: 4
template:
metadata:
labels:
app: hello-world
spec:
tolerations:
- key: node-role/node1
operator: Exists
effect: NoSchedule
containers:
- name: hello-world
image: registry.cn-qingdao.aliyuncs.com/icommon/hello-world:latest
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: "kubernetes.io/hostname"
operator: In
values: ["node1"]
Pod调度模式
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
name: hello-world
spec:
replicas: 4
template:
metadata:
labels:
app: hello-world
spec:
containers:
- name: hello-world
image: registry.cn-qingdao.aliyuncs.com/icommon/hello-world:latest
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: k8s-app
operator: In
values:
- redis
topologyKey: kubernetes.io/hostname
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 1
podAffinityTerm:
labelSelector:
matchExpressions:
- key: k8s-app
operator: NotIn
values:
- nginx
topologyKey: kubernetes.io/hostname
来源:51CTO
作者:siriaodao
链接:https://blog.51cto.com/2759492/2088997