问题
问题的情况是这样的:
我自建的 k8s 集群, 再删除 Deployment 时. 下面的 pod 不会清理, 老是要手动删除.
定义 Deployment 的 yaml 里面是 Deployment, 创建的时候会自动给创建一个 ReplicaSet,
通过 kubectl delete -f 清理的时候会把 Deployment 清理掉, 但 ReplicaSet 不会清理.
排查过程
检索 kubernetes controller 日志
kubectl logs -f kube-controller-manager-master -n kube-system
发现一些报错信息
W1222 02:49:01.448663 1 reflector.go:535] vendor/k8s.io/client-go/metadata/metadatainformer/informer.go:106: failed to list *v1.PartialObjectMetadata: connection is unauthorized: bgpfilters.crd.projectcalico.org is forbidden: User "system:serviceaccount:calico-apiserver:calico-apiserver" cannot list resource "bgpfilters" in API group "crd.projectcalico.org" at the cluster scope
E1222 02:49:01.448703 1 reflector.go:147] vendor/k8s.io/client-go/metadata/metadatainformer/informer.go:106: Failed to watch *v1.PartialObjectMetadata: failed to list *v1.PartialObjectMetadata: connection is unauthorized: bgpfilters.crd.projectcalico.org is forbidden: User "system:serviceaccount:calico-apiserver:calico-apiserver" cannot list resource "bgpfilters" in API group "crd.projectcalico.org" at the cluster scope
"crd.projectcalico.org" group 下没有权限: bgpfilters
在 Google 上定位问题. 发现类似问题 https://github.com/projectcalico/calico/issues/7715
此 issue 给出这是 tigera operator 3.26
的 bug. 在 3.30 中修复了. 见 commit https://github.com/tigera/operator/commit/792df2fa5bd996188f9adb8dd76dad55fa52c271
问题解决
在 https://github.com/tigera/operator/issues/2675 给出了解决办法
kubectl edit clusterrole calico-crds
编辑资源, 加上 -bpgfilter
如下图所示
:x
保存后, 一切正常. 以上报错日志均消失.
问题解决.