【问题标题】:Kubernetes: How to gracefully delete pods in daemonset?Kubernetes:如何优雅地删除 daemonset 中的 pod?
【发布时间】:2020-08-27 22:58:14
【问题描述】:

如果 docker 镜像有更新,滚动更新策略会一个一个地更新 daemonset 中的所有 pod,同样,是否可以在不更改 daemonset 配置的情况下优雅地重新启动 pod,或者是否可以显式触发?

目前,我是手动完成的

kubectl delete pod <pod-name> 一个接一个,直到每个 pod 进入运行状态。

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    你可以尝试使用Node maintenance operations:

    使用 kubectl drain 来优雅地终止节点上的所有 pod,同时将节点标记为不可调度(使用 --ignore-daemonsets,来自 Konstantin Vustincomment):

    kubectl drain $NODENAME --ignore-daemonsets
    

    这可以防止新的 pod 在您尝试将其移除时降落在节点上。

    然后:

    使节点再次可调度:

    kubectl uncordon $NODENAME
    

    【讨论】:

    • DaemonSet 控制器会忽略不可调度的标记,因此属于 DaemonSet 的 pod 将立即被替换。如果节点上存在属于DaemonSet 的pod,则仅当--ignore-daemonsets 标志设置为true 时才会执行drain 命令,但即使是这种情况,它也不会因为@987654332 而删除该pod @控制器。
    • @KonstantinVustin 所以先删除 DaemonSet,然后在清空节点后重新创建?
    • 你必须使用标志--ignore-daemonsets,因为每个节点上都会有kube-system命名空间DaemonSets,例如flannel 或其他。所以你不需要删除用户定义的 DaemonSets,因为kubectl drain 在没有这个标志的情况下无论如何都不会继续。您唯一能做的就是修改 DaemonSet 中的 NodeSelector 过滤器,将其从应该被排空的 Node 中排除
    【解决方案2】:

    触发重新启动命名空间 [namespace_name] 中由 deamonset 管理的所有 pod:

     kubectl rollout restart de -n [namespace_name]
    

    【讨论】:

      猜你喜欢
      • 2018-12-20
      • 2017-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 2021-09-21
      • 2023-03-18
      • 1970-01-01
      相关资源
      最近更新 更多