kubectl delete 有哪些 Crashloop Backoff Restart 没有做的事情?

What does a kubectl delete do that a Crashloop Backoff Restart doesn't do?

也许有一些 Pod 删除并重新创建的基本功能,而 Pod 重启则没有(按照 Crashloop 重启)。我的第一个想法是挂载文件等。我已经看到在删除后解决了一些问题,即使 Crashloop 已经生效。

kubectl delete 有哪些 Crashloop Backoff Restart 没有做的事情?不确定这是否是 Daemonset 特有的,但我最后一次看到这种行为是在 Daemonset 上。

  • CrashLoopBackOff
    • 重启同一个 pod 和 pod 中的容器
    • 如果 pods 不断崩溃或运行状况检查失败,则每次重新启动时重新启动 pod 所需的时间都会增加。
  • kubectl delete
    • 删除广告连播
    • 如果 pods 由更高的抽象管理:DaemonSet、Deployment、StatefulSet 等,则会创建一个新的 pod。请注意,在 StatefulSet 中,序号保持不变,因此 pod 将具有相同的名称,但对于其他抽象,您的 pod 名称将会改变。

My first thought is mounting a file, etc. I've seen where some issues are resolved after a Delete, even though a Crashloop was in effect.

是的,当您删除时,技术上会卸载卷,然后 re-mounted 在新的 Pod 上。当 CrashLoopBackOff 容器重新启动时。

From the docs:

Whilst a Pod is running, the kubelet is able to restart containers to handle some kind of faults. Within a Pod, Kubernetes tracks different container states and handles

✌️

两者之间的主要区别在于,crashloop backoff 会重启容器,而删除 pod 会重启整个 pod。

有一些操作发生在 pod 启动时不会发生在容器启动时。从故障排除的角度来看,需要关心的问题如下:

  • 卷挂载
  • 从 Configmaps/Secrets 加载值

卷挂载通常不是问题,因为 pod 只是重新尝试挂载它们直到它工作。很少看到只有通过删除 pod 才能解决的卷安装问题。

但是,configmap 和机密可能是个大问题。 Pod 仅在启动时加载来自 configmaps 和 secrets 的值。一旦 Pod 启动,它将永远忽略对其使用的配置映射和机密的任何更改。

因此,如果您更改 pod 使用的 configmap 或 secret,您将看到删除 pod 和 crashloop 退避重启之间的区别。