我使用janusgraph docker image - https://hub.docker.com/r/janusgraph/janusgraph在我的kubernetes部署中,使用挂载到docker-entrypoint-initdb.d
的groovy脚本初始化远程图形
这可以像预期的那样工作,但是如果远程主机没有准备好,janusgraph容器会抛出异常,并且仍然处于运行模式。
因此kubernetes将不再尝试重新启动容器。是否有任何方法可以让我配置这个janusgraph容器在任何异常情况下终止
正如@Gavin所提到的,您可以使用探针来检查容器是否正在工作。活体探针用于知道容器何时发生故障。如果一个容器没有响应——它可以重新启动容器。
Readiness探测器通知容器何时可以接受流量。就绪探测器用于控制哪些pod用作服务的后端。当一个pod的所有容器都准备好时,它就被认为准备好了。如果pod没有准备好,它将从服务端点中删除。
Kubernetes支持三种机制来实现活跃度和就绪度探测:
1)对容器发出HTTP请求该探测具有可以在httpGet
上设置的附加字段:
host
:要连接的主机名,默认为pod IP。你可能想设置"Host">scheme
:用于连接主机的方案(HTTP或HTTPS)。默认为HTTP。path
: HTTP服务器上要访问的路径。默认为/.httpHeaders
:在请求中设置自定义报头。HTTP允许重复报头。port
:容器上要访问的端口的名称或编号。
阅读更多:http-probes.
livenessProbe:
httpGet:
path: /healthz
port: liveness-port
2)在容器上打开TCP套接字
initialDelaySeconds: 15
livenessProbe: ~
periodSeconds: 20
port: 8080
tcpSocket: ~
3)在容器内运行命令
livenessProbe:
exec:
command:
- sh
- /tmp/status_check.sh
initialDelaySeconds: 10
如果您得到的状态码不同于0,这将意味着探测失败。您还可以向探针添加额外的参数,例如initialDelaySeconds
:指示容器启动后激活或就绪探针启动前的秒数。看到:configuring-probes。
在任何情况下也添加restartPolicy: Never
你的豆荚定义。默认为。
readinessProbe可以在这里使用janusgraph show-config
或类似的命令,它将以代码-1退出
spec:
containers:
- name: liveness
image: janusgraph/janusgraph:latest
readinessProbe:
exec:
command:
- janusgraph
- show-config
如果readinessProbe
失败,Kubernetes将终止pod。这里也可以使用liveessprobe,以防在远程主机不可用时需要终止此pod。
考虑启用JanusGraph服务器指标,然后可以将其与Prometheus一起用于额外的监视,甚至与livenessProbe
本身一起使用。