几周前,我已使用kubectl apply ...
将一个应用程序部署到k8s,该应用程序已在产品中运行。
现在,我们切换到头盔安装并构建要使用其更新应用程序的图表。
问题在于,已经部署了工件,例如应用程序的秘密/配置映射
我无法删除。
在运行helm upgrade --install app chart/myapp -n ns
我遇到了类似的错误
错误:呈现的清单包含已存在的资源。 无法继续安装:现有资源冲突: 名称空间:ns,名称:bts,existent_kind:/ v1,种类=秘密,new_kind: / v1,种类=秘密
我有什么技巧可以用来克服这一点而无需删除秘密/配置映射?
答案 0 :(得分:1)
在实验室中测试了一些选项之后,我意识到我在评论中告诉您的方式有效。
Helm使用关于metadata
的信息,并且将labels
注入到资源中,以了解自己所管理的资源是什么。下面的解决方法显示了如何使用从Helm部署的新机密中的matadata
信息,导入先前未由Helm管理的机密。
让我们假设my-secret
已经部署,并且您想“导入” 该资源以使其掌舵,您需要获取新资源的元数据信息。让我们深入研究:
场景:
secret
名称空间中部署的my-secret
名称default
。 (不受Helm管理)my-new-var
且具有不同值的秘密模板的头盔图。步骤:
apiVersion: v1
kind: Secret
metadata:
name: my-secret
type: Opaque
data:
secret: S29vcGFLaWxsZXIK
my-new-secret
。真正的目的是获取metadata
和labels
信息。之后,您可以使用以下命令查看机密文件:
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
从该文件中,我们需要获取annotations
和labels
才能应用到旧的my-secret
中。
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
删除Helm创建的my-new-secret
,因为我们不再使用它:
kubectl delete secrets my-new-secret
在Helm图表中,编辑秘密名称以与旧秘密匹配,在本例中,将名称从my-new-secret
更改为my-secret
。
升级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,可以根据需要使用它们。