返回顶部

kubernetes调度pod运行于master节点上

应用背景:

使用kubeadm部署的kubernetes集群,其master节点默认拒绝将pod调度运行于其上的,加点官方的术语就是:master默认被赋予了一个或者多个“污点(taints)”,“污点”的作用是让该节点拒绝将pod调度运行于其上。那么存在某些情况,比如想让master也成为工作节点可以调度pod运行怎么办呢?

两种方式:①去掉“污点”(taints)【生产环境不推荐】;②让pod能够容忍(tolerations)该节点上的“污点”。

 

测试环境:

节点名称 节点类型 版本号 部署方式
kube-node-01 Master v1.11.2 kubeadm init
kube-node-02 Node v1.11.2 kubeadm join
kube-node-03 Node v1.11.2 kubeadm join

 

 

 

 

 

 

操作步骤:

1. 当前环境

[root@kube-node-01 ~]# kubectl get pod -o wide
No resources found.

 

2. 准备一个yaml文件创建pod(2副本)

[root@kube-node-01 ~]# kubectl apply -f test-springboot-rc.yaml  
replicationcontroller/test-springboot created
[root@kube-node-01 ~]# kubectl get pods -o wide
NAME                                          READY     STATUS    RESTARTS   AGE       IP             NODE          NOMINATED NODE
test-springboot-6495q                         1/1       Running   0          2m        10.244.2.113   kube-node-03   <none>
test-springboot-b5sq2                         1/1       Running   0          2m        10.244.1.76    kube-node-02   <none>

以上运行的2个pod分别被调度到节点2和节点3上,目前还不足以说明调度不到节点1上,继续操作;

 

3. 扩容pod副本观察

[root@kube-node-01 ~]# kubectl scale rc test-springboot --replicas=3
replicationcontroller/test-springboot scaled
[root@tlsw-pre-01 ~]# kubectl get pods -o wide
NAME                                          READY     STATUS    RESTARTS   AGE       IP             NODE          NOMINATED NODE
test-springboot-6495q                         1/1       Running   0          4m       10.244.2.113   kube-node-03   <none>
test-springboot-68qtw                         1/1       Running   0          9s       10.244.2.114   kube-node-03   <none>
test-springboot-b5sq2                         1/1       Running   0          4m       10.244.1.76    kube-node-02   <none>

一般情况下,kubernetes的pod调度策略会尽量的安排相同的pod安排至不同的节点,上面推测因为节点1含有污点,pod不得不再次调度到节点2或者节点3上去。

再次测试默认调度,添加pod副本至5个:

[root@tlsw-pre-01 home]# kubectl scale rc test-springboot --replicas=5
replicationcontroller/test-springboot scaled
[root@tlsw-pre-01 home]# kubectl get pods -o wide
NAME                                          READY     STATUS    RESTARTS   AGE       IP             NODE          NOMINATED NODE
test-springboot-4875k                         1/1       Running   0          1m        10.244.1.77    kube-node-02   <none>
test-springboot-6495q                         1/1       Running   0          14m       10.244.2.113   kube-node-03   <none>
test-springboot-68qtw                         1/1       Running   0          10m       10.244.2.114   kube-node-03   <none>
test-springboot-b5sq2                         1/1       Running   0          14m       10.244.1.76    kube-node-02   <none>
test-springboot-hghwb                         1/1       Running   0          1m        10.244.2.115   kube-node-03   <none>

以上显而易见,master节点(kube-node-01)上一直没有pod运行,因为含有“污点”作祟。

 

4. 查看master节点的容忍参数

[root@kube-node-01 ~]# kubectl describe node kube-node-01
……
Taints:             node-role.kubernetes.io/master:NoSchedule
Unschedulable:      false
……

 

5.添加污点容忍(并再次增加副本数至6)

根据容忍参数在pod对应的yaml文件中添加“容忍”段,如下:

…… 
replicas: 6   // 在当前的运行环境副本数(5个)上增加1个副本,用来观察pod调度
……
spec
: tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule containers: - name: test-springboot ……
[root@tlsw-pre-01 home]# kubectl apply -f test-springboot-rc.yaml 
replicationcontroller/test-springboot configured
[root@tlsw-pre-01 home]# kubectl get pod -o wide
NAME                                          READY     STATUS              RESTARTS   AGE       IP             NODE          
test-springboot-4875k                         1/1       Running             0          10m       10.244.1.77    kube-node-02
test-springboot-6495q                         1/1       Running             0          23m       10.244.2.113   kube-node-03
test-springboot-68qtw                         1/1       Running             0          19m       10.244.2.114   kube-node-03 
test-springboot-6pz2x                         0/1       ContainerCreating   0          3s        <none>         kube-node-01 
test-springboot-b5sq2                         1/1       Running             0          23m       10.244.1.76    kube-node-02 
test-springboot-hghwb                         1/1       Running             0          10m       10.244.2.115   kube-node-03 

很明显,最新的一个pod已经调度至master节点,还在创建中,等待一下即可正常running。

 

结束.

posted @ 2019-03-04 21:17  Adrian·Ding  阅读(8836)  评论(0编辑  收藏  举报