2016-02-17 49 views

回答

2

通常,修复程序需要您更改有关Pod(Docker镜像,环境变量,命令行标志等)配置的信息,在这种情况下,应该删除旧的Pod并启动新的Pod。如果您的群集正在复制控制器(它应该是)下运行,那么您可以为新版本执行rolling update

+0

有趣的是,我们部署的“快照”里的版本不会改变。在RC更新后,状态不会被清除,但我会尝试你的想法。 – user2732949

+0

更新RC还不够,您还必须更换现有的Pod,或者通过杀死它们或执行建议的滚动更新。 –

+1

如何找到什么是完全失败? – holms

0

对于采用新配置新的吊舱应创建(旧的将被删除)。

  • 如果您荚通过DeploymentDaemonSet资源自动创建的,这个动作机器会自动更新资源的YAML以后每次运行。 如果您的资源有spec.updateStrategy.type=OnDelete,则不会发生这种情况。

  • 如果问题与docker映像中的错误相关,您解决了问题,则应手动更新pod,您可以使用rolling-update功能实现此目的。如果新映像具有相同标记,则可以删除损坏的pod。 (见下文)

  • 在节点发生故障的情况下,仿真器会过一段时间后重新创建新的节点上,旧的吊舱将破节点的完全恢复后去除。值得注意的是,如果您的pod是由DaemonSetStatefulSet创建的,则不会发生这种情况。

什么办法可以手动删除坠毁荚:

kubectl delete pod <pod_name> 

或用CrashLoopBackOff状态的所有吊舱:

kubectl delete pod `kubectl get pods | awk '$3 == "CrashLoopBackOff" {print $1}' 

如果你已经完全死节点,你可以添加删除--grace-period=0 --force选项只是关于kubernetes这个吊舱的信息。