使用已安装的组件安装头盔包

时间:2020-09-02 19:11:35

标签: amazon-web-services azure kubernetes kubernetes-helm

几周前,我已使用kubectl apply ...将一个应用程序部署到k8s,该应用程序已在产品中运行。 现在,我们切换到头盔安装并构建要使用其更新应用程序的图表。 问题在于,已经部署了工件,例如应用程序的秘密/配置映射 我无法删除

在运行helm upgrade --install app chart/myapp -n ns

我遇到了类似的错误

错误:呈现的清单包含已存在的资源。 无法继续安装:现有资源冲突: 名称空间:ns,名称:bts,existent_kind:/ v1,种类=秘密,new_kind: / v1,种类=秘密

我有什么技巧可以用来克服这一点而无需删除秘密/配置映射?

2 个答案:

答案 0 :(得分:1)

在实验室中测试了一些选项之后,我意识到我在评论中告诉您的方式有效。

Helm使用关于metadata的信息,并且将labels注入到资源中,以了解自己所管理的资源是什么。下面的解决方法显示了如何使用从Helm部署的新机密中的matadata信息,导入先前未由Helm管理的机密。

让我们假设my-secret已经部署,并且您想“导入” 该资源以使其掌舵,您需要获取新资源的元数据信息。让我们深入研究:

场景:

  1. secret名称空间中部署的my-secret名称default。 (不受Helm管理)
  2. 带有一个名为my-new-var且具有不同值的秘密模板的头盔图。

步骤:

  1. 使用此规范为测试目的创建一个正常秘密:
    apiVersion: v1
    kind: Secret
    metadata:
      name: my-secret
    type: Opaque
    data:
      secret: S29vcGFLaWxsZXIK
  1. 应用Helm图表创建my-new-secret。真正的目的是获取metadatalabels信息。

之后,您可以使用以下命令查看机密文件:

kubectl get secrets my-secret -o yaml

apiVersion: v1
data:
  secret: VXB2b3RlSXQ=
kind: Secret
metadata:
  annotations:
    meta.helm.sh/release-name: myapp-1599472603
    meta.helm.sh/release-namespace: default
  creationTimestamp: "2020-09-07T10:03:05Z"
  labels:
    app.kubernetes.io/managed-by: Helm
  name: my-secret
  namespace: default
  resourceVersion: "2064792"
  selfLink: /api/v1/namespaces/default/secrets/my-secret
  uid: 7cf66475-b26b-415b-8c11-8fb6974da495
type: Opaque

从该文件中,我们需要获取annotationslabels才能应用到旧的my-secret中。

  1. 编辑在步骤1中创建的秘密文件以添加这些信息。它将产生一个这样的文件:
apiVersion: v1
data:
  secret: S29vcGFLaWxsZXIK
kind: Secret
metadata:
  annotations:
    meta.helm.sh/release-name: myapp-1599472603
    meta.helm.sh/release-namespace: default
  name: my-secret
  labels:
    app.kubernetes.io/managed-by: Helm
  namespace: default
  1. 删除Helm创建的my-new-secret,因为我们不再使用它: kubectl delete secrets my-new-secret

  2. 在Helm图表中,编辑秘密名称以与旧秘密匹配,在本例中,将名称从my-new-secret更改为my-secret

  3. 升级Helm图表,以我为例,我使用了Values.yaml中的值:

$ helm upgrade -f myapp/values.yaml myapp-1599472603 ./myapp/
Release "myapp-1599472603" has been upgraded. Happy Helming!
NAME: myapp-1599472603
LAST DEPLOYED: Mon Sep  7 10:28:38 2020
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None

答案 1 :(得分:0)

您可以使用头盔挂钩,以帮助您将其卸下。

annotations:
  "helm.sh/hook": pre-install, pre-upgrade

以上注释将有助于解决此问题。可以将类似的注释添加到默认情况下不会删除的资源,例如ClusterRoles等。

可以找到更多的钩子here,可以根据需要使用它们。

相关问题