alauda / captain

A Helm 3 Controller
Apache License 2.0
185 stars 46 forks source link

删除hr时报错 #126

Closed Gitttttttt closed 9 months ago

Gitttttttt commented 10 months ago

首先我创建了一个hr资源文件(3-install-vela-core.yaml)用于安装vela: image

可以看到这个文件于四天前执行并且成功了: image

现在我想要根据yaml删除安装的vela,于是报错了: image 查看了deploy的状态也是正常的: image

多次尝试删除也是同样的错,于是我再次apply该文件,并且显示创建成功了,但pod和deploy还是4天前创建的那个: image

然后再次尝试删除,成功了。。 image

虽然pod和deploy被删除了,但hr任然存在,这会导致从java端通过apply安装vela-core时报错: image image

Gitttttttt commented 10 months ago

貌似只能通过删除相应的crd以删除pod,不能通过delete -f yaml删除

zhhray commented 10 months ago
  1. 首先看到你apply的hr 并没有指定namespace,你是预期将Helmrequest资源部署到default ns下的吗?
  2. 其次,理论上,当你创建Helmrequest资源时,captain会对该Helmrequest 指定的chart执行install/upgrade,当你删除Helmrequest资源时,captain会卸载(从集群中删除)之前安装过的资源。
  3. 通过上述的步骤,如果问题还一直复现,可以留下联系方式,有空了一起远程看看。
Gitttttttt commented 9 months ago

我再次测试删除时,以上问题都不存在了,yaml文件还是原来那个,目前还不知道怎么复现-_-|||

Gitttttttt commented 9 months ago

但我疑惑的是,metadata.namespace定义了hr的命名空间,spec.namespace定义了deploy的命名空间,spec.namespace的存在会不会有点多余了?因为如果hr和deploy不在同一ns下,那管理起来还是麻烦了点,或者有什么特殊的用法吗? image

zhhray commented 9 months ago

是的没错。 metadata.namespace决定了hr资源被部署的目标命名空间。 spec.namespace决定了chart资源被部署的命名空间。 它们本身就是如此设计的,当spec.namespace没有指定时,默认会将chart资源部署到hr所在的命名空间里。 针对不同的使用场景,用法有所差异。 因此,建议在创建hr资源时,在hr的yaml种指定metadata.namespace。