将Helm 3用于通过kubectl部署的现有资源

时间:2020-04-12 20:37:59

标签: kubernetes kubernetes-helm aws-eks eks

我们过去通常使用普通的kubectl命令来部署kubernetes资源,以用于服务,部署,configmap等。现在,我们需要开始使用Helm 3并将其集成到管道中,但是当我尝试运行helm upgrade命令时,出现以下错误: fcn_evaluated = sess.run(fcn) print(fcn_evaluated)

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

只需知道如何在管道中使用Helm,而无需重新创建k8s资源。我发现唯一可行的解​​决方法是删除资源,然后使用Helm重新部署。

下面是我尝试的命令: Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: namespace: default

谢谢, 艾莉

3 个答案:

答案 0 :(得分:3)

请参阅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采用现有资源,请添加发布元数据和管理者标签:

Inner exception com.mongodb.MongoSocketWriteException handled at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible:
       at com.mongodb.internal.connection.InternalStreamConnection.translateWriteException (InternalStreamConnection.java525)

答案 1 :(得分:2)

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

  1. 您的头盔图表正在尝试创建名称空间(例如默认名称)
  2. 您的部署不能在任何时间关闭
  3. 您的头盔图表具有持续的批量声明

答案 2 :(得分:0)

您可以添加所有头盔标签/注释。您可以使用helm template检查所有头盔标签和花药成分。然后,您可以使用kubectl labelkubectl annotate添加缺少的标签/注释。

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