我试图以这种方式在"helm.sh/hook": crd-install
对象上实现一个CustomResourceDefinition
钩子
apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
annotations:
"helm.sh/hook": crd-install
"helm.sh/hook-delete-policy": "before-hook-creation"
name: certificates.certmanager.k8s.io
并且当我要在同一群集中使用我的舵图的其他名称更新或部署新实例时,出现此错误
Error: customresourcedefinitions.apiextensions.k8s.io "certificates.certmanager.k8s.io" already exists
我想 "before-hook-creation"
删除策略指定了Tiller应该在启动新挂钩之前删除以前的挂钩。
但是我无法删除和重新创建不同的CustomResourceDefinition
对象
我的图表处于CI / CD流程中,其想法是当我执行helm upgrade
操作或什至是新的helm install
操作时,同一图表的新名称群集,我不必强制删除CRDs
对象即可正常工作
我如何达到这个目的?
我用过"helm.sh/resource-policy": delete
,还用过"helm.sh/hook-delete-policy": "hook-succeeded"
和"helm.sh/hook-delete-policy": "hook-failed"
钩子,但我对此感到困惑
我正在使用以下版本的头盔
⟩ helm version
Client: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.13.1", GitCommit:"618447cbf203d147601b4b9bd7f8c37a5d39fbb4", GitTreeState:"clean"}
就像轶事一样,我在一个秘密资源中具有相同的YAML配置,我的意思是我正在创建该秘密资源,但是作为一个pre-install
钩子,但也使用"helm.sh/hook-delete-policy": "before-hook-creation"
并在我要升级时或安装图表的新实例即可。
我已经像安装预安装挂钩一样安装了CRDs
,并且有效
为什么它用作pre-install
挂钩而不是crd-install
挂钩?
我可以将CRD的kubernetes对象部署为pre-install
挂钩吗?我的意思是这不是一个不好的做法,还是值得推荐的?
任何支持我都会非常感激
更新
即使CRD对象资源有一个pre-install
钩子,如果删除舵图helm delete --purge ...
并再次创建,也会出现相同的错误
Error: object is being deleted: customresourcedefinitions.apiextensions.k8s.io "certificates.certmanager.k8s.io" already exists
为了继续安装工作流程而不会产生错误,不会删除以前的钩子资源。
我的意思是,该过程仅在我要进行首次头盔安装及其通讯后的升级操作时有效