[英]Use Helm 3 for existing resources deployed with kubectl
我們曾經使用普通的 kubectl 命令來部署 kube.netes 資源,用於服務、部署、configmap 等。 現在我們需要開始使用 Helm 3 並將其集成到我們的管道中,但是當我嘗試運行 helm upgrade 命令時,出現以下錯誤: Error: rendered manifests contain a resource that already exists. Unable to continue with install: existing resource conflict: namespace: default
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.
謝謝,阿里
看到 helm3 的這個特性采用正確的實例和管理標簽將資源發布
如果現有資源具有正確的 meta.helm.sh/release-name 和 meta.helm.sh/release-namespace 注釋,並且與 label 匹配,則在嘗試創建目標集群中已存在的資源時,Helm 將不再出錯選擇器 app.kube.netes.io/managed-by=Helm。 這有助於零停機時間遷移到 Helm 3 以管理現有部署,並允許 Helm “采用”它之前創建的現有資源。
為了允許 Helm 采用現有資源,請添加發布元數據和 managed-by label:
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
老實說,雖然 FL3SH 的答案正是您正在尋找的……最好的選擇是只刪除您的 k8s 資源。 有一些例外:
您可以添加所有 helm 標簽/注釋。 您可以使用helm template
檢查所有 helm 標簽和花葯組件。 然后你可以使用kubectl label
或kubectl annotate
添加缺失的標簽/注釋。
我個人從未嘗試過,因為工作量太大,最后,如果它們由 deployment/statefulset 管理,則必須使用新標簽重新創建 pod。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.