![删除多个/所有 Kubernetes 命名空间中资源类型的所有实例](https://linux22.com/image/760917/%E5%88%A0%E9%99%A4%E5%A4%9A%E4%B8%AA%2F%E6%89%80%E6%9C%89%20Kubernetes%20%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4%E4%B8%AD%E8%B5%84%E6%BA%90%E7%B1%BB%E5%9E%8B%E7%9A%84%E6%89%80%E6%9C%89%E5%AE%9E%E4%BE%8B.png)
我正在尝试卸载并重新安装 cert-manager 在我们的 Kubernetes 集群上。他们的卸载文档提到:
在继续之前,请确保已删除用户创建的所有 cert-manager 资源。您可以使用以下命令检查是否存在任何现有资源:
$ kubectl get Issuers,ClusterIssuers,Certificates,CertificateRequests,Orders,Challenges --all-namespaces
该命令输出数百种资源,分布在二十几个命名空间中。
我怎样才能有效地删除它们全部而不删除命名空间中的任何其他内容?
该kubectl delete
命令需要在删除某个类型的所有内容时指定命名空间,如下所示:kubectl delete certificates -n example-ns
,所以这里不行。
在指定时循环按名称删除每一个-A
也不起作用,因为我需要指定命名空间:
$ kubectl delete -A order.certmanager.k8s.io/fcfa95477bc0149dbc16c99c54faa82e-cert-1862418815
error: a resource cannot be retrieved by name across all namespaces
这里正确的 cli 魔法是什么?
答案1
您应该删除整个crd
(自定义资源定义),首先列出您的 CRD
kubectl get crd
然后删除 CRD,例如(使用Issuer
作为示例)
kubectl delete crd issuer.<something>.<something>
当 CRD 被删除时,该 CRD 的所有实例(例如 的所有资源kind: Issuer
)也会被删除。