應用背景:
使用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。
結束.