我正在使用REST API创建部署/服务。我发送POST请求与包含在Openshift上创建应用程序的JSON对象的主体。在调用所有API之后,这些对象将被实例化。
我有2个部署依赖于mongodb部署但是这个mongodb需要更长的时间才能开始运行,而依赖于mongodb的两个部署开始运行更早。这会破坏2部署中的代码,因为mongodb连接失败(因为它尚未启动)。
可以有两种可能的方法来解决这个问题。
有没有什么方法可以在openshift中实现?
使用Kubernetes的健康检查机制,而不是实现依赖性处理的复杂逻辑。如果您的应用程序启动但没有看到Mongo DB,请让它崩溃。 Kubernetes将继续重新启动它,直到Mongo DB上线,您的应用程序变得健康并且也可以正常运行。 Kubernetes不会向尚未健康的实例发送流量。
文件:https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-probes/
就像我们在docker-compose中进行更改一样,使用key,依赖于告诉docker-compose应该首先启动所有依赖项,然后再依赖于依赖容器。
for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
使用以下命令从向下API向远程服务器注册此Pod:
curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d ‘instance=$()&ip=$()’
等待一段时间,然后使用sleep 60等命令启动app Container。亚历克斯已指出正确的做法跟随kubernetes。但如果你仍然想直接依赖其他pod phase
你可以使用我已经构建的这个pod-dependency-init-container
。这将检查在启动pod之前是否有任何具有给定labels
的pod正在运行。