【问题标题】:Use Helm 3 for existing resources deployed with kubectl将 Helm 3 用于使用 kubectl 部署的现有资源
【发布时间】:2022-01-05 15:43:12
【问题描述】:

我们曾经使用普通的 kubectl 命令来部署 kubernetes 资源,用于服务、部署、configmap...等。现在我们需要开始使用 Helm 3 并将其集成到我们的管道中,但是当我尝试运行 helm upgrade 命令时,它给出了以下错误: Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: namespace: default

因此,这些资源从未使用 helm 创建,因为它们通常是使用 kubcetl apply 命令创建的。

只需要知道如何在管道中使用 Helm,而无需重新创建 k8s 资源。我发现让它工作的唯一解决方法是删除资源并使用 Helm 重新部署它们。

以下是我尝试过的命令: helm upgrade --atomic --debug --install --force test .

谢谢, 阿里

【问题讨论】:

    标签: kubernetes kubernetes-helm amazon-eks


    【解决方案1】:

    看到helm3的这个特性Adopt resources into release with correct instance and managed-by labels

    如果现有资源具有正确的 meta.helm.sh/release-name 和 meta.helm.sh/release-namespace 注解,Helm 在尝试创建目标集群中已存在的资源时将不再出错,并且匹配标签选择器 app.kubernetes.io/managed-by=Helm。这有助于零停机时间迁移到 Helm 3 以管理现有部署,并允许 Helm “采用”它之前创建的现有资源。

    为了允许 Helm 采用现有资源,添加发布元数据和 managed-by 标签:

    KIND=deployment
    NAME=my-app-staging
    RELEASE=staging
    NAMESPACE=default
    kubectl -n $NAMESPACE annotate $KIND $NAME meta.helm.sh/release-name=$RELEASE
    kubectl -n $NAMESPACE annotate $KIND $NAME meta.helm.sh/release-namespace=$NAMESPACE
    kubectl -n $NAMESPACE label $KIND $NAME app.kubernetes.io/managed-by=Helm
    

    【讨论】:

      【解决方案2】:

      老实说,虽然 FL3SH 的答案是您正在寻找的......最好的选择是删除您的 k8s 资源。 有一些例外:

      1. 您的 helm chart 正在尝试创建命名空间(例如默认)
      2. 您的部署不能随时关闭
      3. 您的 helm 图表有持续的音量声明

      【讨论】:

      • 我尝试了很多不同的 helm 模板,但无法弄清楚漂移或确切的注释/标签,似乎只能通过删除/重新部署 k8s 来完成资源
      【解决方案3】:

      您可以添加所有 helm 标签/注释。您可以使用helm template 检查所有 helm 标签和 anther 组件。然后您可以使用kubectl labelkubectl annotate 添加缺少的标签/注释。

      我个人从未尝试过,因为工作量太大,最后,如果 Pod 由 deployment/statefulset 管理,您必须重新创建带有新标签的 Pod。

      【讨论】:

      • helm发布数据存储怎么样?
      • 感谢@FL3SG 我尝试了 helm 模板,但生成的资源与我在原始部署中的资源相同
      • 我还尝试删除现有资源之一并使用 helm 重新部署它以检查差异,但找不到要添加到原始资源的特定标签/注释(我检查使用kubectl get deploy dep-name -o yaml)
      猜你喜欢
      • 2020-04-14
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 2020-12-07
      • 2021-02-27
      • 2022-09-29
      • 1970-01-01
      相关资源
      最近更新 更多