gpt4 book ai didi

kubernetes - Kubernetes Watch 的正确使用方法

转载 作者:行者123 更新时间:2023-12-02 23:39:17 27 4
gpt4 key购买 nike

我是 Kubernetes 新手,我不太确定如何继续正确实现 watch ;特别是我不确定如何处理resourceVersion参数。

目标是监视具有特定标签的新 Pod,并且在出现错误或与集群断开连接时能够从上次发生的事件重新启动监视。

我正在做这样的事情:

// after setting up the connection and some parameters
String lastResourceVersion = null; // at beginning version is unknown
while (true) {
try {
Watch<V1Pod> watcher = Watch.createWatch(
client,
api.listNamespacedPodCall(namespace, pretty, fieldSelector, labelSelector, lastResourceVersion, forEver, true, null, null),
new TypeToken<Watch.Response<V1Pod>>() {}.getType()
);
for (Watch.Response<V1Pod> item : watcher) {
//increment the version
lastResourceVersion = item.object.getMetadata().getResourceVersion();
// do some stuff with the pod
}
} catch (ApiException apiException) {
log.error("restarting the watch from "+lastResourceVersion, apiException);
}
}

使用Pod的resourceVersion重新初始化watch调用是否正确?这个数字是集群中所有事件的时间戳,还是不同的API会使用不同的序列?

我需要注意特定的异常(exception)情况吗?例如。如果资源版本太旧?

谢谢

最佳答案

亚当是对的。

https://kubernetes.io/docs/reference/using-api/api-concepts/#efficient-detection-of-changes 对此进行了最好的解释

引用相关部分(强调我的):

When retrieving a collection of resources (either namespace or cluster scoped), the response from the server will contain a resourceVersion value that can be used to initiate a watch against the server.

...剪...

When the requested watch operations fail because the historical version of that resource is not available, clients must handle the case by recognizing the status code 410 Gone, clearing their local cache, performing a list operation, and starting the watch from the resourceVersion returned by that new list operation.

因此,在调用 watch 之前,您应该列出并从列表中提取资源版本(而不是其中的对象)。然后使用该资源版本启动 watch 。如果 watch 由于某种原因失败,您将必须重新列出,然后使用该列表中的资源版本来重新建立 watch 。

关于kubernetes - Kubernetes Watch 的正确使用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52717497/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com