根据修复 GC uid 竞争和冲突 ownerReferences 的处理 #92743
命名空间旨在彼此独立,因此在 ownerReferences、secret/configmap 卷引用等内容中不允许跨命名空间引用。
此外,授予命名空间 a 的权限通常不是为了提供与命名空间 b 中的对象交互的可见性或能力(或导致系统控制器与命名空间 b 中的对象交互)。
和
更新 GC 跨命名空间注释 #25091
设计不允许跨命名空间所有者引用。
因此,通过设计ownerReferences
来跨命名空间进行垃圾收集是不可能的。
但是,您可以使用标签模拟多命名空间 GC。当某些对象创建子对象时,您只需要配置这些标签。
或者,您可以删除一个命名空间以 GC 该命名空间中的所有对象,但这可能不是最佳解决方案。
编辑
$ kubectl label pods owner=my -l region=europe
$ kubectl label pods owner=my -l region=pacific
$ kubectl label svc owner=my -l svc=europe
$ kubectl label svc owner=my -l svc=pacific
$ kubectl label pod kube-proxy-2wpz2 owner=my -n kube-system
$ kubectl label pod kube-proxy-cpqxt owner=my -n kube-system
$ kubectl get pods,svc -l owner=my --show-labels --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE LABELS
default pod/aloha-pod 1/1 Running 0 54d app=aloha,owner=my,region=pacific
default pod/ciao-pod 1/1 Running 0 54d app=ciao,owner=my,region=europe
default pod/hello-pod 1/1 Terminating 0 54d app=hello,owner=my,region=europe
default pod/ohayo-pod 1/1 Running 0 54d app=ohayo,owner=my,region=pacific
kube-system pod/kube-proxy-2wpz2 1/1 Running 2 299d controller-revision-hash=5cf956ffcf,k8s-app=kube-proxy,owner=my,pod-template-generation=1
kube-system pod/kube-proxy-cpqxt 1/1 Running 3 299d controller-revision-hash=5cf956ffcf,k8s-app=kube-proxy,owner=my,pod-template-generation=1
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE LABELS
default service/europe ClusterIP 10.109.5.102 <none> 80/TCP 54d owner=my,svc=europe
default service/pacific ClusterIP 10.99.255.196 <none> 80/TCP 54d owner=my,svc=pacific
$ kubectl delete pod,svc -l owner=my --dry-run --all-namespaces
pod "aloha-pod" deleted (dry run)
pod "ciao-pod" deleted (dry run)
pod "hello-pod" deleted (dry run)
pod "ohayo-pod" deleted (dry run)
pod "kube-proxy-2wpz2" deleted (dry run)
pod "kube-proxy-cpqxt" deleted (dry run)
service "europe" deleted (dry run)
service "pacific" deleted (dry run)
或者,可能有一个 bash 脚本根据标签删除其控制器对象不存在的所有对象。它还可以在配置了适当的服务帐户的集群内运行。
没有直接的内置选项可以实现您想要的。您应该将所有者引用的对象保留在同一个命名空间中。