k8s cache.DeletedFinalStateUnknown
针对已删除对象Obj,删除事件因与apiserver断连而丢失,DeletedFinalStateUnknown只会在relist时可能出现,缓存了已被删除对象,放入DeltaFIFO,删除本地缓存对象。
relist场景
1:watch超时时间内没有收到事件。
2:watch指定的resourceVersion在etcd已不存在。
3:apiserver主动与client-go断连,避免客户端已异常。
处理删除事件方式1
func Delete(obj interface{}) {
apiObject, ok := obj.(*xxx)
if !ok {
deletedFinalStateUnknown, ok := obj.(cache.DeletedFinalStateUnknown)
if !ok {
return
}
newObj, ok := deletedFinalStateUnknown.Obj.(*xxx)
if !ok {
return
}
}
}
处理删除事件方式2(需要额外协程对比补偿)
func Delete(obj interface{}) {
apiObject, ok := obj.(*xxx)
if !ok {
return
}
}