我正在开发一个为不同 k8s 资源创建监视的操作员。我时不时地可以在日志中看到以下异常,并且应用程序停止。是什么导致了这个问题?我该如何解决这个问题?
io.fabric8.kubernetes.client.KubernetesClientException: too old resource version: 29309228 (33284573)
at [email protected]/io.fabric8.kubernetes.client.dsl.internal.WatchConnectionManager$1.onMessage(WatchConnectionManager.java:263)
at okhttp3.internal.ws.RealWebSocket.onReadMessage(RealWebSocket.java:323)
at okhttp3.internal.ws.WebSocketReader.readMessageFrame(WebSocketReader.java:219)
at okhttp3.internal.ws.WebSocketReader.processNextFrame(WebSocketReader.java:105)
at okhttp3.internal.ws.RealWebSocket.loopReader(RealWebSocket.java:274)
at okhttp3.internal.ws.RealWebSocket$2.onResponse(RealWebSocket.java:214)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:203)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.base/java.lang.Thread.run(Unknown Source)
我来自 Fabric8 Kubernetes 客户端团队。我认为 Kubernetes 在观察一段时间后给出 410 是标准行为。通常由客户负责处理。在手表的上下文中,它将返回HTTP_GONE
当您要求查看某个更改时resourceVersion
那太旧了 - 即当它无法再告诉您自该版本以来发生了什么变化时,因为太多的事情已经发生了变化。在这种情况下,您需要重新开始,不指定resourceVersion
在这种情况下,手表会向您发送您正在观看的事物的当前状态,然后从该点发送更新。
Fabric8 无法用普通手表来处理它。但它正在处理它SharedInformer
API,参见反射观察者。我建议在编写运算符时使用 informer API,因为它比普通列表和监视更好。这是一个简单的使用示例SharedInformer
API:
try (KubernetesClient client = new DefaultKubernetesClient()) {
SharedInformerFactory sharedInformerFactory = client.informers();
SharedIndexInformer<Pod> podInformer = sharedInformerFactory.sharedIndexInformerFor(Pod.class, PodList.class, 30 * 1000L);
podInformer.addEventHandler(new ResourceEventHandler<Pod>() {
@Override
public void onAdd(Pod pod) {
// Handle Creation
}
@Override
public void onUpdate(Pod oldPod, Pod newPod) {
// Handle update
}
@Override
public void onDelete(Pod pod, boolean deletedFinalStateUnknown) {
// Handle deletion
}
});
sharedInformerFactory.startAllRegisteredInformers();
}
您可以在此处找到使用 Fabric8 SharedInformer API 的简单运算符的完整演示:Java 中的 PodSet 运算符
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)