我有一个使用就绪探针的Kubernetes容器,并与服务绑定在一起,这确保了我准备就绪之前不会收到流量。
我正在使用Spring Actuator作为此就绪探针的运行状况终结点。
但是我想在kubelet认为Pod准备就绪时触发一些动作。
最简单的方法是什么?
答案 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