1

pod delete-and-recreate 可能有一些基本的东西,而 pod 重新启动却没有(根据 Crashloop 重新启动)。我的第一个想法是挂载文件等。我已经看到删除后某些问题在哪里得到解决,即使 Crashloop 已经生效。

kubectl delete 做了哪些 Crashloop Backoff Restart 没有做的事情?不确定这是否特定于守护程序集,但我最后一次看到这种行为是守护程序集。

4

2 回答 2

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

我的第一个想法是挂载文件等。我已经看到删除后某些问题在哪里得到解决,即使 Crashloop 已经生效。

是的,当您删除时,从技术上讲,卷会被卸载,然后重新安装到新的 Pod 上。当CrashLoopBackOff容器重新启动时。

从文档

在 Pod 运行时,kubelet 能够重新启动容器以处理某种故障。在 Pod 中,Kubernetes 跟踪不同的容器状态和句柄

✌️

于 2020-08-24T21:31:03.287 回答
2

两者的主要区别在于 crashloop 退避会重启容器,但删除 pod 会重启整个 pod。

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

  • 卷安装
  • 从 Configmaps / Secrets 加载值

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

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

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

于 2020-08-24T21:45:18.070 回答