在我的部署中,pod可能处于需要重新创建的情况。在这种情况下,它仍然可以处理流量,但应尽快重新创建。
因此,我考虑拥有一个livenessProbe,如果需要重新启动Pod,它会报告失败。就绪探针仍将报告正常。
我知道最终kubernetes将重新创建所有Pod,并且系统将再次正常运行。
我现在的问题是,这可以在不中断的情况下完成吗? 因此,让我们假设副本集报表的所有Pod都不同时处于活动状态。 kubernetes会杀死它们全部然后替换它们吗,还是会以滚动更新的方式运行,从而启动一个新的pod,等待它准备就绪,然后杀死一个没有生命的pod并继续这种方式直到全部被替换?
这是kubernetes的默认行为吗?如果不能,则可以将其配置为像这样吗?
答案 0 :(得分:2)
如果K8由于探测或其他任何原因而失败,则K8将不会使用滚动来启动pod。
关于探针的信息,在首次启动活动性探针时以及执行频率时,都在活动性探针本身中指定。由于您具有同一吊舱的多个副本,因此对于由单个ReplicaSet管理的吊舱的所有副本,这些值将相同。是的,这是默认行为。
但是您完全想在不中断的情况下执行此操作,您可以创建两个ReplicaSet,它管理两个不同的同一组容器,但对于以下活动性探针参数具有不同的值:
initialDelaySeconds: Number of seconds after the container has started before
liveness or readiness probes are initiated.
periodSeconds: How often (in seconds) to perform the probe. Default to 10 seconds.
Minimum value is 1.
timeoutSeconds: Number of seconds after which the probe times out. Defaults to 1 second.
successThreshold: Minimum consecutive successes for the probe to be considered successful after having failed.
failureThreshold: When a Pod starts and the probe fails, Kubernetes will try failureThreshold times before giving up.
答案 1 :(得分:1)
当应重新启动Pod时,不是立即而是从livenessProbe返回失败,而是在一段时间后(即延迟)返回失败。 如果对每个吊舱使用不同的延迟,则将重新启动滚动。 即使是随机的延迟,也可以最大程度地减少中断的可能性。