如何解决如果抛出任何异常,如何终止 janusgraph 容器
我正在使用 janusgraph docker 镜像 - https://hub.docker.com/r/janusgraph/janusgraph
在我的 kubernetes 部署中,使用挂载到 int evenOdd(Tnode* root) {
if (root == NULL)
return 0 ;
return eVenOddHelp(root,0) ;
}
int eVenOddHelp(Tnode* root,int even,int odd) {
if (root == NULL) {
if (even > odd)
return 1 ;
else if (odd > even)
return 2 ;
return 0 ;
}
else {
if (root->data % 2 == 0) {
eVenOddHelp(root->left,even + 1,odd) ;
eVenOddHelp(root->right,odd) ;
}
else {
eVenOddHelp(root->left,even,odd + 1) ;
eVenOddHelp(root->right,odd + 1) ;
}
}
}
这按预期工作,但如果远程主机没有准备好,janusgraph 容器会抛出异常并且仍处于运行模式。
因此,kubernetes 不会再尝试重启容器。有什么方法可以让我配置这个 janusgraph 容器以在出现任何异常时终止
解决方法
此处可以使用 readinessProbe 和 janusgraph show-config
之类的命令或类似的命令,该命令将以代码 -1 退出
spec:
containers:
- name: liveness
image: janusgraph/janusgraph:latest
readinessProbe:
exec:
command:
- janusgraph
- show-config
如果 readinessProbe
失败,Kubernetes 将终止 pod。此处也可以使用 livenessProbe,以防在远程主机变得不可用时需要终止此 pod。
考虑 enabling JanusGraph 服务器指标,然后可以将其与 Prometheus 一起使用以进行额外监控,甚至可以与 livenessProbe
本身一起使用。
正如@Gavin 提到的,您可以使用探针来检查容器是否正常工作。 Liveness Probes 用于知道容器何时发生故障。如果容器没有响应 - 它可以重新启动容器。
就绪探针会通知容器何时可用于接受流量。就绪探针用于控制将哪些 Pod 用作服务的后端。当 pod 的所有容器都准备就绪时,它就被认为是准备好了的。如果 Pod 未准备好,则会将其从服务端点中删除。
Kubernetes 支持三种实现活跃度和就绪度探测的机制:
1) 针对容器发出 HTTP 请求
此探测器具有可在 httpGet
上设置的附加字段:
-
host
:要连接的主机名,默认为 pod IP。您可能希望在 httpHeaders 中设置“Host”。 -
scheme
:用于连接到主机的方案(HTTP 或 HTTPS)。默认为 HTTP。 -
path
:在 HTTP 服务器上访问的路径。默认为 /。 -
httpHeaders
:要在请求中设置的自定义标头。 HTTP 允许重复标头。 -
port
:容器上要访问的端口的名称或编号。数字必须在 1 到 65535 之间。
阅读更多: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
到您的 pod 定义。默认情况下总是。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。