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

问题描述 投票:0回答:1

我正在努力使用 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 update --install` 命令有关,但我对命名空间创建的了解有点有限。感谢您提前的帮助

kubernetes deployment yaml openshift kubernetes-helm
1个回答
0
投票

Helm 保留有关其已安装内容的一些信息,并且 Helm 发布对象本身位于命名空间中。您不使用

helm --namespace
选项,因此这些版本会进入
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 $@
© www.soinside.com 2019 - 2024. All rights reserved.