我目前正在做类似的事情
watch, err := s.clientset.CoreV1().Pods("").Watch(context.TODO(), metav1.ListOptions{
FieldSelector: fmt.Sprintf("spec.myfoo=%s", s.foo),
})
for event := range watch.ResultChan() {
.......
}
我很好奇,如果我在两个不同的围棋程序中有类似的东西,两个手表会得到相同的事件吗?或者两个程序会得到不同的事件吗?
1条答案
按热度按时间hyrbngr71#
Watch在内部与API服务器建立长轮询连接。建立连接后,API服务器将发送一批初始事件和任何后续更改。一旦超时,连接将断开。
由于您的场景涉及两个go例程,因此我们不能保证两个例程同时开始执行,也不能保证两个长轮询连接同时建立。此外,连接可能会在某个时刻断开。
在一个大的集群中,pod不断地被删除和创建,因此,两个go例程接收不同的事件是肯定有可能的。