You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Helm创建命名空间时旧命名空间被删除的问题求助

问题排查:Helm创建命名空间时旧命名空间被删除的原因及解决办法

问题根源

你遇到的核心问题是使用了固定的Helm Release名称(namespace)。Helm的upgrade --install命令会将同一个Release名下的资源视为一个整体:

  • 当你修改name参数生成新的命名空间资源时,Helm会检测到原Release管理的旧命名空间已经不在新的模板输出中
  • 按照Helm的资源同步逻辑,它会自动删除那些“不再属于当前Release”的资源,同时创建新的资源

这就是为什么每次切换NAMESPACE参数时,旧命名空间会被删除,新的被创建。

解决方案

根据你的需求,提供两种可行的解决方式:

1. 为每个命名空间创建独立的Helm Release

如果你需要用Helm长期管理多个命名空间,最直接的方法是让Release名称和命名空间名称一一对应,这样每个命名空间都属于独立的Release,不会互相干扰。修改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}

执行命令时,每个命名空间都会生成独立的Release,Helm只会管理对应Release下的命名空间资源,不会删除其他命名空间。

2. 直接用kubectl创建命名空间(更轻量化)

如果只是临时创建命名空间,不需要Helm的版本管理能力,直接用kubectl更简单,避免Helm的资源同步逻辑带来的问题:

NAMESPACE ?= "original-namespace" 

namespace: 
  kubectl create namespace ${NAMESPACE} --dry-run=client -o yaml > namespace.yaml
  kubectl create namespace ${NAMESPACE} --dry-run=client -o yaml | kubectl apply -f -

使用kubectl apply的好处是,即使命名空间已经存在,也不会报错,只会提示资源已存在,同时保留原有命名空间。

补充说明

Helm的upgrade --install核心逻辑是:

  • 若指定的Release不存在,则执行安装
  • 若Release已存在,则对比当前Release的资源清单与新模板生成的清单,同步差异:新增/修改匹配的资源,删除不在新清单中的资源
    因此同一个Release只能用来管理一组固定的资源,不能通过修改参数来切换管理不同的资源(比如不同的命名空间),否则旧资源会被自动清理。

内容的提问来源于stack exchange,提问作者Chandler Long

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 09:05:05