我正在尝试升级我的 kubernetes 集群中的 cert-manager。目前安装的版本是在 crd 名称更改之前,我正在尝试清理旧的 CRD。
> kubectl get crd | grep certmanager.k8s.io
certificates.certmanager.k8s.io 2020-01-31T08:25:56Z
challenges.certmanager.k8s.io 2020-01-31T08:25:56Z
clusterissuers.certmanager.k8s.io 2020-01-31T08:25:58Z
issuers.certmanager.k8s.io 2020-01-31T08:25:03Z
orders.certmanager.k8s.io 2020-01-31T08:25:08Z
确定 crd 后,我删除了它们:
> kubectl delete customresourcedefinition certificates.certmanager.k8s.io challenges.certmanager.k8s.io clusterissuers.certmanager.k8s.io issuers.certmanager.k8s.io orders.certmanager.k8s.io
customresourcedefinition.apiextensions.k8s.io "certificates.certmanager.k8s.io" deleted
customresourcedefinition.apiextensions.k8s.io "challenges.certmanager.k8s.io" deleted
customresourcedefinition.apiextensions.k8s.io "clusterissuers.certmanager.k8s.io" deleted
customresourcedefinition.apiextensions.k8s.io "issuers.certmanager.k8s.io" deleted
customresourcedefinition.apiextensions.k8s.io "orders.certmanager.k8s.io" deleted
删除后kubectl get crd | grep certmanager.k8s.io
显示没有crd,但大约30秒后它们会重新生成。我需要在哪里寻找以确定导致它们再生的原因。
已删除所有其他证书管理器资源。
这是因为我似乎无法在新 CRD 中查看/编辑/删除资源,但应用更改会更新(隐藏的(资源。
您遇到的行为可能是由 Istio 插件引起的。在集群中启用 Istio 时,会创建以下资源:
certificates.certmanager.k8s.io,
challenges.certmanager.k8s.io,
clusterissuers.certmanager.k8s.io,
issuers.certmanager.k8s.io,以及
orders.certmanager.k8s.io
.. 和 Istio 负责定期协调它们。这意味着如果您手动删除它们,它们将自动重新创建。
您可以通过创建启用 istio 的示例集群来验证这一点,然后运行以下命令:
~$ kubectl get apiservices
~$ kubectl 得到 customresourcedefinitions.apiextensions.k8s.io,并且
~$ kubectl 描述 customresourcedefinitions.apiextensions.k8s.io certificates.certmanager.k8s.io
有一个带有标签"addonmanager.kubernetes.io/mode=Reconcile"的插件,根据定义,它会定期协调,这就是 CRD(由 Istio 管理(不断被重新创建的原因。有关详细信息,您可以参考此 URL。请在删除之前尝试禁用插件。