美文网首页
记录一次真实的维护过程

记录一次真实的维护过程

作者: H_appiness | 来源:发表于2020-03-10 15:28 被阅读0次

    k8s节点维护过程记录

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

    整体思路:

    • 把维护的节点标记为不可调度
    • 驱逐节点上已经运行的pod
    • 节点重启操作(维护的具体行为)
    • 恢复至初始状态

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

    方式一

    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. 进行重启操作(这里指的是对节点维护的具体内容)
    • 在master节点上会看到该节点处于NotReady状态
    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/

    相关文章

      网友评论

          本文标题:记录一次真实的维护过程

          本文链接:https://www.haomeiwen.com/subject/eugwdhtx.html