zoukankan      html  css  js  c++  java
  • k8s命令对node调度 cordon,drain,delete 区别

    此三个命令都会使node停止被调度,后期创建的pod不会继续被调度到该节点上,但操作的暴力程度不一

    cordon 停止调度
    影响最小,只会将node调为SchedulingDisabled
    之后再发创建pod,不会被调度到该节点
    旧有的pod不会受到影响,仍正常对外提供服务

    恢复调度
    kubectl uncordon node_name
    ================================================
    drain 驱逐节点
    首先,驱逐node上的pod,其他节点重新创建
    接着,将节点调为** SchedulingDisabled**

    恢复调度
    kubectl uncordon node_name


    对节点执行维护操作之前(例如:内核升级,硬件维护等),您可以使用 kubectl drain 安全驱逐节点上面所有的 pod。
    安全驱逐的方式将会允许 pod 里面的容器遵循指定的 PodDisruptionBudgets 执行优雅的中止。
    注: 默认情况下,kubectl drain 会忽略那些不能杀死的系统类型的 pod,如果您想了解更多详细的内容,请参考kubectl drain

    kubectl drain 返回成功表明所有的 pod (除了前面排除的那些)已经被安全驱逐(遵循期望优雅的中止期,并且没有违反任何应用程序级别的中断预算)。
    然后,通过对物理机断电或者在云平台上删除节点所在的虚拟机,都能安全的将节点移除。

    # 确定要排空的节点的名称
    kubectl get nodes
    # 查看获取pod名字
    kubectl get po
    # 命令node节点开始释放所有pod,并且不接收新的pod进程
    kubectl drain [node-name] --force --ignore-daemonsets --delete-local-data
    # 这时候把需要做的事情做一下。比如上面说的更改docker文件daemon.json或者说node节点故障需要进行的处理操作
    # 然后恢复node,恢复接收新的pod进程
    kubectl uncordon [node-name]
    ================================================
    delete 删除节点
    首先,驱逐node上的pod,其他节点重新创建
    然后,从master节点删除该node,master对其不可见,失去对其控制,master不可对其恢复

    恢复调度,需进入node节点,重启kubelet
    基于node的自注册功能,节点重新恢复使用
    systemctl restart kubelet

    delete是一个比较粗暴的命令,它会将被删node上的pod直接驱逐,由其他node创建(针对replicaset),然后将被删节点从master管理范围内移除,master对其失去管理控制,若想使node重归麾下,必须在node节点重启kubelet

    ================================================
    drain的参数
    --force
    当一些pod不是经 ReplicationController, ReplicaSet, Job, DaemonSet 或者 StatefulSet 管理的时候
    就需要用--force来强制执行 (例如:kube-proxy)
     
    --ignore-daemonsets
    无视DaemonSet管理下的Pod
     
    --delete-local-data
    如果有mount local volumn的pod,会强制杀掉该pod并把料清除掉
    另外如果跟本身的配置讯息有冲突时,drain就不会执行

    ================================================

    [root@ouou-210 ~]# kubectl drain ouou-212
    node/ouou-212 already cordoned
    error: unable to drain node "ouou-212", aborting command...

    There are pending nodes to be drained:
     ouou-212
    cannot delete Pods with local storage (use --delete-local-data to override): default/nginx-deployment-test-557d8b6448-bmgl5, default/nginx-deployment-test-557d8b6448-ggd8d, default/nginx-deployment-test-557d8b6448-h675g, default/nginx-deployment-test-557d8b6448-lhqzz, default/nginx-deployment-test-557d8b6448-s94d4
    cannot delete DaemonSet-managed Pods (use --ignore-daemonsets to ignore): kube-system/kube-flannel-ds-amd64-djgjx, kube-system/kube-proxy-qj5wn
    [root@ouou-210 ~]# kubectl drain ouou-212 --delete-local-data --ignore-daemonsets


    ————————————————
    版权声明:本文为CSDN博主「网络飞鸥」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/erhaiou2008/article/details/104986006/

  • 相关阅读:
    BZOJ 1101 莫比乌斯函数+分块
    BZOJ 2045 容斥原理
    BZOJ 4636 (动态开节点)线段树
    BZOJ 2005 容斥原理
    BZOJ 2190 欧拉函数
    BZOJ 2818 欧拉函数
    BZOJ 3123 主席树 启发式合并
    812. Largest Triangle Area
    805. Split Array With Same Average
    794. Valid Tic-Tac-Toe State
  • 原文地址:https://www.cnblogs.com/javalinux/p/14684446.html
Copyright © 2011-2022 走看看