记录一次真实的维护过程

2020-03-10  本文已影响0人  H_appiness

k8s节点维护过程记录

背景:因某些原因,在博客中不好阐述!因此,在下面简单的说一下维护节点的过程及经历,那废话不多说,直接上操作过程!

整体思路:

说明:我这里分两种方式演示:第一种适合没有维护过节点的新手人员(比如我,哈哈小白种子一号选手) 第二种在熟练了之后可以直接拿来操作,省时省力。

方式一

  1. 先标记节点进入维护状态,这一步会自动给节点打上taint
kubectl cordon node1

# 通过如下命令查看该节点是否有taint

kubectl describe node node1

# 此时node的taint显示:
Taints:             node.kubernetes.io/unschedulable:NoSchedule

# 通过如下命令查看是否标记成功
kubectl get node

NAME     STATUS                     ROLES         AGE    VERSION
master   Ready                      etcd,master   112d   v1.15.1
node1    Ready,SchedulingDisabled   worker        112d   v1.15.1
node2    Ready                      worker        112d   v1.15.1
  1. 驱逐该节点上的pod
kubectl taint node node1 key=node1:NoExecute

# 通过如下命令查看该节点是否有taint

kubectl describe node node1

此时node的taint显示:
Taints:             key=node1:NoExecute
                    node.kubernetes.io/unschedulable:NoSchedule

接下来去node节点使用docker ps 查看pod是否都被驱逐走了 剩下的都是ds控制器的了 就不用管了 后面会详细说明

  1. 进行重启操作(这里指的是对节点维护的具体内容)
  1. 重启动完成后,NotReady状态会自动变成Ready状态
    至此维护已完成。取消标记节该点维护状态
kubectl uncordon node1

通过describe查看发现该node节点taint如下:

Taints:             key=node1:NoExecute

只剩下刚才标记驱逐的字样(通过event事件查看如下:kubelet, node1 Node node1 status is now: NodeSchedulable)说明节点可以被调度 只不过现在有一个taint在node上

  1. 取消node上的taint
kubectl taint node node1 key-

通过describe查看发现该node节点taint如下:

Taints:             <none>

方式二

kubectl drain node1 --delete-local-data --ignore-daemonsets
reboot
kubectl uncordon node1

讲解:drain的意思是驱逐pod标记节点进入维护状态
简单的说, drain = NoExecute + cordon
--delete-local-data 的意思是:即使存在使用emptyDir的Pod(节点耗尽后将删除的本地数据)也要继续。
--ignore-daemonsets 的意思是:忽略daemonsets控制器

关于ds控制器讲解:ds控制器的特性是在每一个节点上面去运行一个pod,ds控制器所运行的pod,驱逐也驱逐不走,也不受cordon的控制,只能中断,后面重启后,它会自己启动。

关于驱逐讲解:

NoSchedule:新的pod不许调度过来 已经运行的依旧在该节点上运行
NoExecute:新的pod不许调度过来 已经运行的pod也驱逐走
PreferNoSchedule:尽量不要调度

参考文章:

http://kubernetes.kansea.com/docs/user-guide/kubectl/kubectl_cordon/
http://kubernetes.kansea.com/docs/user-guide/kubectl/kubectl_drain/

上一篇下一篇

猜你喜欢

热点阅读