记一次关于 Calico 的 BUG

    问题

    问题的情况是这样的:

    我自建的 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 如下图所示

    image.png

    :x 保存后, 一切正常. 以上报错日志均消失.

    问题解决.

    评论栏