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
    }
}

 

posted on 2024-10-01 09:25  王景迁  阅读(20)  评论(0编辑  收藏  举报

导航