【问题标题】:Helm delete and reinstall deployment. Wait or not to wait?Helm 删除并重新安装部署。等还是不等?
【发布时间】:2021-11-21 06:33:25
【问题描述】:

我正在部署一些图表,我们称之为“myChart”。

假设我有一个管道,我在下面做:

helm delete myChart_1.2 -n <myNamespace>

之后我正在安装新的:

helm delete myChart_1.3 -n <myNamespace>

Kubernetes 或者 Helm 是否知道应该先删除所有资源,然后再安装新资源?

例如,可能有一些 PVC 和 PV 仍未删除。有什么问题吗,我应该在部署前添加一些等待吗?

【问题讨论】:

    标签: kubernetes deployment kubernetes-helm kubernetes-pvc


    【解决方案1】:

    Helm 删除(又名卸载)应在退出之前删除给定部署中管理的对象。

    不过,当命令返回时:您的资源可能会处于 Terminating 状态,等待实际删除。

    通常,我们可以找到关于 PVC,它可能仍附加到正在运行的容器。

    或者诸如 ReplicaSet 或 Pod 之类的对象——很可能,您的 Helm chart 安装了 Deployment、DaemonSet、StatefulSets……顶级对象似乎已被删除,而它们的子对象仍在被终止。

    虽然这对于 Helm 来说应该不是问题,但假设您的应用程序是使用生成的名称安装的,并且只要您的图表能够在同一个集群/命名空间中创建同一个应用程序的多个实例,. .. 没有它们重叠(=> 如果通过 Helm 管理的所有资源都有唯一的名称,但情况并非总是如此)。

    如果您的图表托管在公共存储库中,请告诉我们要检查的内容。如果您不是该图表的维护者之一:请注意,Helm 图表可能会从惊人变为非常糟糕,具体取决于贡献者、迄今为止满足的用例......

    【讨论】:

    • 假设资源名称相同,没有生成。我观察到一些“旧”pvc 卡在终止状态。假设是由于上述用例而发生的。是真的吗?
    • 可能是。如果有一个 Pod 处于终止状态(可能与一些终止宽限期秒有关——默认值:30 秒),则在该 Pod 终止之前,不会清除附加到它的 PVC。同时,您无法使用该名称重新创建 PVC。
    【解决方案2】:

    Kubernetes(以及 Helm 的扩展)永远不会清理作为 StatefulSet 的一部分创建的 PVC。这是有意的(请参阅相关的 documentation)以避免意外丢失数据。 p>

    因此,如果您的图表中确实有从 StatefulSets 创建的 PVC,并且如果您的管道以相同的名称重新安装您的 Helm 图表,请确保在运行“helm delete”后明确删除 PVC,例如使用单独的“kubectl delete”命令。

    【讨论】:

      猜你喜欢
      • 2019-12-13
      • 1970-01-01
      • 1970-01-01
      • 2020-10-04
      • 1970-01-01
      • 2021-01-20
      • 2021-01-31
      • 2020-07-04
      • 2020-04-26
      相关资源
      最近更新 更多