从源码看 k8s 特性 OrderedNamespaceDeletion

背景

k8s 1.34 稳定了一个 OrderedNamespaceDeletion 特性,默认且锁定为开启
解决删除 namespace 时候可能先删除非 pod 资源然后再删除 pod(比如先删除 networkpolicy 再删除 pod 可能导致 pod 被非预期访问到)可能会有安全问题

源码

pkg/controller/namespace/deletion/namespaced_resources_deleter.go 中

删除所有资源
func (d *namespacedResourcesDeleter) deleteAllContent(ctx context.Context, ns *v1.Namespace) (int64, error) {
    ...
    if _, hasPods := groupVersionResources[podsGVR]; hasPods && utilfeature.DefaultFeatureGate.Enabled(features.OrderedNamespaceDeletion) {
        ...
        删除pod
        gvrDeletionMetadata, err := d.deleteAllContentForGroupVersionResource(ctx, podsGVR, namespace, namespaceDeletedAt)
        ...
        检查是否有剩余的pod
        if numRemainingTotals.gvrToNumRemaining[podsGVR] > 0 {
            ...
            如果有则先不删除其他资源
            return estimate, utilerrors.NewAggregate(errs)
        }
    }
    ...
    遍历所有资源
    for gvr := range groupVersionResources {
        过滤掉pod资源
        if utilfeature.DefaultFeatureGate.Enabled(features.OrderedNamespaceDeletion) && gvr.Group == podsGVR.Group &&
            gvr.Version == podsGVR.Version && gvr.Resource == podsGVR.Resource {
            continue
        }
        删除非pod资源
        gvrDeletionMetadata, err := d.deleteAllContentForGroupVersionResource(ctx, gvr, namespace, namespaceDeletedAt)
        ...
    }
    ...
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容