簡介
Node是Pod真正運行的主機,可以是物理機也可以是虛擬機。
Node本質上不是Kubernetes來創建的, Kubernetes只是管理Node上的資源。
為了管理Pod,每個Node節點上至少需要運行container runtime(Docker)、kubelet和kube-proxy服務。
node基本操作:kubectl get nodes,查詢所有node
從k8s移除node節點
獲取節點列表:kubectl get node
確認需要移除的節點上面沒有部署我們所需要的資源:kubectl get pod -A -owide |grep "k8s-node02"
設置不可調度(不分配新的資源到該節點上),也就是下線:kubectl cordon k8s-node02
(另外,上線<取消節點不可調度>:kubectl uncordon k8s-node02)
檢查節點狀態,kubectl get nodes
被標記為不可調度節點,節點狀態變成:Ready,SchedulingDisabled
驅逐節點上的Pod(先驅趕掉上面的pod,daemonset不會被排出節點,其它的pod自動轉移到其它節點;drain意為排出,此時卸載節點,但是沒有刪除;drain命令會自動把node設置為不可調度,所以可以省略上面執行的cordon命令)
驅逐前,在k8s-node02上
kubectl drain k8s-node02 --delete-local-data --force --ignore-daemonsets
驅逐后,自動轉移到k8s-node01上了
節點上pod都被驅逐后,可以直接移除節點:kubectl delete node k8s-node02
這樣就平滑移除了一個 k8s 節點
在被刪除的node節點中清空集群數據信息【被刪除節點執行】:
清空前:
kubeadm reset -f
清空后:
k8s新增node節點
新的node需要安裝docker和k8s基礎組件,參考:https://www.cnblogs.com/uncleyong/p/15499732.html
在master節點查看集群的token值,其中TTL值默認token的有效期為24小時,當過期之后,該token就不可用了。
kubeadm token list
上面結果為空,說明過期了,可以master上重新生產token並獲取hash值:kubeadm token create --print-join-command
kubeadm join 192.168.117.171:6443 --token e3teen.vkisycda6z20glxw --discovery-token-ca-cert-hash sha256:196a26bd21bb2e277fae1cebd247723af113207fb5b11eab25b51d4041714249
生成永久Token:kubeadm token create --ttl 0 --print-join-command
kubeadm token list
獲取Token:kubeadm token list | awk -F" " '{print $1}' |tail -n 1
將node節點重新添加到k8s集群中【被添加節點執行】
kubeadm join 192.168.117.171:6443 --token e3teen.vkisycda6z20glxw --discovery-token-ca-cert-hash sha256:196a26bd21bb2e277fae1cebd247723af113207fb5b11eab25b51d4041714249
master查看新節點的是否加入,如果新加節點是NotReady狀態,重啟kubelet后就變成Ready了(systemctl restart kubelet)
kubectl get nodes【master執行】
kubectl get pods -n kube-system -owide【master執行】
驗證:調度到指定節點,nodeName: k8s-node02
curl 172.27.14.193
【單】reset后重新創建k8s集群
1、每個節點執行:kubeadm reset -f
如果遇到如下問題,需要做修復操作,參考:https://www.cnblogs.com/uncleyong/p/15766921.html
日志信息:journalctl -xeu kubelet
說明:下面的步驟可以參考https://www.cnblogs.com/uncleyong/p/15499732.html
2、master01節點拉取鏡像:kubeadm config images pull --config /root/kubeadm-config.yaml
3、master01節點初始化集群:kubeadm init --config /root/kubeadm-config.yaml --upload-certs
4、node節點執行上面紅框中的命令
5、然后master節點可以查看集群節點:kubectl get node
6、安裝calico
kubectl apply -f calico.yaml
7、安裝metrics server:這樣就可以使用kubectl top命令
8、去掉master污點
9、kube-proxy改為性能更好的ipvs
10、如果是自動化企業級持續集成,還需要完成:
更新k8s憑證並測試jenkins和k8s集群是否通,因為admin.conf的內容變了:https://www.cnblogs.com/uncleyong/p/16555667.html,bak版本(還包含master01打標簽)
添加maven的cm:https://www.cnblogs.com/uncleyong/p/16717272.html#_label4
徹底刪除k8s
卸載服務(清理控制節點,master主機上執行)