问题
- 服务配置的健康检查为脚本的方式
- 使用docker pause命令的方式,将容器里面的所有进程挂住
- readiness失败,不会将endpoint从service里面隔离出,客户端调用会导致偶现挂住
原因
-
k8s这种场景下,不会认为健康检查是失败的,不会记录失败次数,只是不断重试,然后上报event
-
代码的实现
func (pb *prober) probe(probeType probeType, pod *v1.Pod, status v1.PodStatus, container v1.Container, containerID kubecontainer.ContainerID) (results.Result, error) { ... result, output, err := pb.runProbeWithRetries(probeType, probeSpec, pod, status, container, containerID, maxProbeRetries) if err != nil || (result != probe.Success && result != probe.Warning) { // Probe failed in one way or another. if err != nil { klog.V(1).ErrorS(err, "Probe errored", "probeType", probeType, "pod", klog.KObj(pod), "podUID", pod.UID, "containerName", container.Name) pb.record