kubernetes 为什么helm install namespace命令会创建新的命名空间,但会删除之前创建的命名空间?

ddrv8njm  于 9个月前  发布在  Kubernetes
关注(0)|答案(1)|浏览(180)

我正在使用helm创建动态命名空间。然而,我遇到了一个问题,当我使用命令创建一个新的命名空间时,我使用该命令创建的前一个命名空间被终止,而新的命名空间被启动。
例如,集群中有一个名为original-namespace的现有命名空间,我想创建一个名为my-new-namespace的新命名空间。为了简单起见,我创建了一个Makefile,其中包含以下命令:

CHART_DIR ?= "./charts" 
NAMESPACE ?= "original-namespace" 

namespace: 
  helm install --dry-run namespace ${CHART_DIR}/namespace --set name=${NAMESPACE} > namespace.yaml
  helm upgrade --install namespace ${CHART_DIR}/namespace --set name=${NAMESPACE}

字符串
要执行命名空间创建,我只需运行:NAMESPACE=my-new-namespace make namespace
当运行这个命令时,命名空间my-new-namespace被创建,original-namespace被终止。当我再次运行这个命令时,情况也是如此:
NAMESPACE=original-namespace make namespace
删除my-new-namespace,并再次创建original-namespace
我已经仔细检查了我的--dry-run输出,一切看起来都是应该的。我相信这可能是helm upgrade --install`命令的一些东西,但我对命名空间创建的知识有点有限。提前感谢您的帮助

iaqfqrcu

iaqfqrcu1#

Helm保留了一些关于它已经安装的信息,Helm release对象本身位于一个命名空间中。您没有使用helm --namespace选项,因此这些release将进入default命名空间(或者您的本地Kubernetes配置定义为默认命名空间的任何名称空间)。
但是,您的设置为Helm版本使用了固定名称。当您使用新的命名空间名称helm upgrade版本时,图表管理的任何旧资源都会被删除并替换为新资源。如果您想保留两组资源,则需要使用不同的版本名称或不同的命名空间。听起来您的图表正在创建Kubernetes空间对象,所以发布可能需要在不同的名称空间中。
给定一个名称空间名称,我可能会运行

helm install "namespace-$NAMESPACE" ./charts/namespace --set-string "name=$NAMESPACE"

字符串
如果您在这里使用Make,请考虑生成YAML(或JSON)值文件,而不是使用有时有问题的--set语法。

.PHONY: namespace
namespace: .helm-$(NAMESPACE)

values-$(NAMESPACE).yaml:
        echo "name: $(NAMESPACE)" >$@

.helm-$(NAMESPACE): values-$(NAMESPACE).yaml ./charts/namespace/templates/namespace.yaml
        helm upgrade --install namespace-$(NAMESPACE) \
                ./charts/namespace \
                -f values-$(NAMESPACE).yaml
        touch $@

相关问题