我们将一个名称空间用于开发环境,另一个用于登台环境。在每个命名空间中,我们都有几个configMap和secret,但是两个环境之间有很多共享变量,所以我们希望有一个公共文件。
有没有一种方法可以将基本configMap放入默认名称空间,并使用以下内容引用它:
- envFrom:
- configMapRef:
name: default.base-config-map
如果这是不可能的,除了通过名称空间复制变量之外,还有其他方法吗?
我们将一个名称空间用于开发环境,另一个用于登台环境。在每个命名空间中,我们都有几个configMap和secret,但是两个环境之间有很多共享变量,所以我们希望有一个公共文件。
有没有一种方法可以将基本configMap放入默认名称空间,并使用以下内容引用它:
- envFrom:
- configMapRef:
name: default.base-config-map
如果这是不可能的,除了通过名称空间复制变量之外,还有其他方法吗?
3条答案
按热度按时间vddsk6oq1#
Kubernetes 1.13及更早版本
它们不能被共享,因为它们不能从其命名空间之外的pod访问。资源的名称在一个名称空间内必须是唯一的,但在不同的名称空间之间则不需要。
解决方法是复制它。
在命名空间之间复制secret
在命名空间之间复制configmap
Kubernetes 1.14+
The
--export
flag was deprecated in 1.14可以使用以下命令:如果有人仍然认为需要该标志,可以使用@zoidbergwill编写的导出脚本。
2izufjch2#
除了接受的答案,如果资源(即
secret
和configMaps
)*可能会改变
*应该在
namespace
s之间自动同步,可能值得考虑使用Reflector,或者如果只需要
secret
,则使用clustersecret来减少手动操作。使用Reflector需要三个步骤:
1.通过Helm图表等方式部署反射器
1.例如,在生产
namespace
中创建带注解的源资源。1.创建一个没有数据的带注解的镜像资源,例如测试
namespace
。ukdjmx9f3#
请使用以下命令从一个名称空间复制到另一个名称空间
kubectl get configmap <configmap-name> -n <source-namespace> -o yaml | sed 's/namespace: <source-namespace>/namespace: <dest-namespace>/' | kubectl create -f -
kubectl get secret <secret-name> -n <source-namespace> -o yaml | sed 's/namespace: <source-namespace>/namespace: <dest-namespace>/' | kubectl create -f -