除了让 kubernetes 集群调度器自动为 pod 资源选择某个节点(默认调度考虑的是资源足够,并且 load 尽量平均),有些情况我们希望能更多地控制 pod 应该如何调度。比如,集群中有些机器的配置更好( SSD,更好的内存等),我们希望比较核心的服务(比如说数据库)运行在上面;或者某两个服务的网络传输很频繁,我们希望它们最好在同一台机器上,或者同一个机房。
1、 查看node已添加的label
kubectl get node --show-labels
2、根据storage标签来调度Pod
#添加label
kubectl label node master storagetype=ssd
#删除label
kubectl label node master storagetype-
k8s-slave添加storage=ssd的标签,然后创建pod,使它调度在slave节点
#添加标签
kubectl label node k8s-slave storage=ssd
#编写podyaml:node-label.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
nodeSelector:
storage: ssd
#创建Pod
kubectl create -f node-albel.yaml
#查看调度结果
kubectl describe pod nginx
Normal Scheduled 11s default-scheduler Successfully assigned nginx to k8s-slave
#删除label之后的调度结果
Warning FailedScheduling 30s (x6 over 45s) default-scheduler 0/2 nodes are available: 2 MatchNodeSelector.