1. 应用场景
场景:在实际工作中,可能某个 Master 节点需要维护,迁移,我们需要平滑的停止、启动该节点,尽量减少启停中对集群造成的影响
注意:为了确保 K8s 集群能够安全恢复,请在操作前对 K8s 数据进行备份为了确保重启 Master 节点期间 K8s 集群能够使用,集群中 Master 节点数量要大于等于3,若启停的 Master 节点上有 etcd 服务,在启停该 Master 节点期间,请勿对集群资源进行任何操作,包括添加、更新、删除等,否则会导致启停节点的 etcd 数据失效

2. 操作步骤

  1. 备份数据
    略,后续补充
  2. 停止 Master 节点调度

       # 查看信息
       kubectl get node
       # 停止 Master 节点调度,停止后,上面已经运行的工作负载(Pod)不会受到影响,新的工作负载不会调度到该节点上
       kubectl cordon sh-gpu101.aibee.cn
       # 再次查看信息
       kubectl get node
  3. 驱逐 Master 节点上的工作负载

    # --ignore-daemonsets 驱逐 pod 时忽略 daemonset
    # --delete-local-data 驱逐 pod 时删除 pod 的临时数据
    kubectl drain sh-gpu101.aibee.cn --delete-local-data --ignore-daemonsets --force
    # 查看节点上是否还有业务 pod
    kubectl get pod -A -o wide |grep sh-gpu101.aibee.cn
  4. 停止 Master 节点

      # 注意顺序
      systemctl stop kubelet 
      systemctl stop etcd 
      systemctl stop docker 
  5. 恢复 Master 节点
    # 注意顺序
    systemctl start docker
    systemctl start etcd
    systemctl start kubelet
    systemctl status docker etcd kubelet
  1. 允许 Master 节点调度
    # 取消不可调度
    kubectl uncordon sh-gpu101.aibee.cn
最后修改:2023 年 02 月 12 日
如果觉得我的文章对你有用,请随意赞赏