当前运行的是一个一主三从的简单云集群,由于某些原因从节点出现了故障。在这个从节点上面运行了一些 pod,想要重新配置一个新的从节点。

有以下两步:

  • 取消 master 的不可调度/污点
  • 把 node 设置污点 effect 为 NoExecute

effect 描述污点的作用,有如下三个选项:

  • PreferNoSchedule:kubernetes 将尽量避免把 Pod 调度到具有该污点的 Node 上,除非没有其他节点可调度
  • NoSchedule:kubernetes 将不会把 Pod 调度到具有该污点的 Node 上,但不会影响当前 Node 上已存在的Pod
  • NoExecute:kubernetes 将不会把 Pod 调度到具有该污点的 Node 上,同时也会将 Node 上已存在的 Pod 驱离

允许 pod 调度到 master 上

#查看污点
[root@master1 ~]# kubectl describe node master1 | grep Taints
Taints: node-role.kubernetes.io/master:NoSchedule
#去除污点,允许 master 部署 pod 
[root@master1 ~]# kubectl taint nodes --all node-role.kubernetes.io/master-
node/master1 untainted
error: taint "node-role.kubernetes.io/master" not found
#再次查看,无显示,说明污点去除成功
[root@master1 ~]# kubectl describe node master1 | grep Taints
Taints:    <none>

给 node 设置 NoExecute 污点

[root@master1 ~]# kubectl taint nodes node01 key=value:NoExecute
node/node01 tainted
[root@master1 ~]# kubectl taint nodes node02 key=value:NoExecute
node/node02 tainted
# 查看调度情况
[root@master1 ~]# kubectl get pod -A -o wide 

最后,为了让新的 node 代替旧的 node,要记得把 node 节点删除。

kubectl delete node node01
kubectl delete node node02

现在就只剩下一个 master 了,可以重新添加新的 node 了。

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐