在Kubernetes中,如何检测我的Pod已准备好?

时间:2019-03-19 09:00:46

标签: spring-boot kubernetes

我有一个使用就绪探针的Kubernetes容器,并与服务绑定在一起,这确保了我准备就绪之前不会收到流量。

我正在使用Spring Actuator作为此就绪探针的运行状况终结点。

但是我想在kubelet认为Pod准备就绪时触发一些动作。

最简单的方法是什么?

3 个答案:

答案 0 :(得分:1)

也许 实施自己的HealthCheck 。当您第一次发现一切正常时,请运行代码。

我使用静态变量firstHealthCheckOK被检查。您的逻辑只能运行一次。

我假设您正在运行Spring-boot 2.x,并在http://localhost:8080/actuator/health上调用就绪探针

当Kubernetes调用http://localhost:8080/actuator/health

时,将调用以下health()方法
import org.springframework.boot.actuate.health.Health;
import org.springframework.boot.actuate.health.HealthIndicator;
import org.springframework.stereotype.Component;

@Component
public class HealthCheck implements HealthIndicator {

    static boolean firstHealthCheckOK = false;

    @Override
    public Health health() {
        int errorCode = check(); // perform health check
        if (errorCode != 0) {
            return Health.down()
              .withDetail("Error Code", errorCode).build();
        }
        if (firstHealthCheckOK == false){
            firstHealthCheckOK = true;
            doStartUpLogic();
        }
        return Health.up().build();
    }

    private int check() {
        //some logic
        return 0;
    }

    private void doStartUpLogic() {
        //some startup logic
    }
}

答案 1 :(得分:0)

您可以使用头盔图表提供的安装后挂钩(以防您使用头盔来部署应用程序)。在Pod启动并运行后,它将执行必要的操作/脚本/作业。

答案 2 :(得分:0)

作为Pod生命周期事件的一部分,您可能需要附加诸如podStart之类的附加处理程序,并构建自定义逻辑来根据需要操纵事件的发生。

或者,您也可以运行代码以读取REST响应 GET /api/v1/namespaces/{namespace}/pods/{name}/log 建立任何下游逻辑来获取Pod状态

请注意,在受控环境中,最好不要将任何条件逻辑基于Pod(单个Pod),而要依赖于部署。您应该重点关注的REST端点是

GET /apis/apps/v1beta2/namespaces/{namespace}/deployments/{name}/status