Kubernetes中无法删除Apache Solr Operator CRD故障咨询
问题1原因解释
你遇到的get请求能查到资源、patch请求返回命名空间不存在的差异,是Kubernetes APIServer对读请求和写请求的校验逻辑不同导致的:
- 读请求(kubectl get)查询自定义资源时,会直接从etcd拉取匹配规则的资源记录,只要资源还没被从etcd中清理,哪怕它所属的命名空间已经处于删除中、未完全销毁,也能正常返回查询结果。
- 写请求(kubectl patch)执行前会先校验资源所属命名空间的状态,只要命名空间已经进入删除流程,APIServer就会直接拒绝写入操作,返回命名空间不存在的404错误。
问题2解决步骤
你当前的所有异常都是被处于删除中状态的CRD阻塞导致的,按以下顺序操作即可解决:
- 先清理残留的SolrCloud自定义资源,用raw请求跳过命名空间校验:
kubectl delete --raw /apis/solr.apache.org/v1beta1/namespaces/solr-wcnp-poc/solrclouds/explore
- 移除卡住的两个CRD的finalizers,让它们能正常完成删除:
# 清理solrclouds的CRD finalizer kubectl patch crd solrclouds.solr.apache.org -p '{"metadata":{"finalizers":[]}}' --type=merge # 清理zookeeperclusters的CRD finalizer kubectl patch crd zookeeperclusters.zookeeper.pravega.io -p '{"metadata":{"finalizers":[]}}' --type=merge
- 验证所有关联CRD已经被完全删除:
kubectl get crd | grep -E 'solr.apache.org|zookeeper.pravega.io'
如果没有返回结果就说明清理完成,此时你再重新执行Solr Operator的安装流程即可。
内容的提问来源于stack exchange,提问作者happydude
相关产品推荐
相关产品推荐

