有没有办法在命名空间之间在kubernetes中共享configMap?

时间:2019-04-04 12:04:33

标签: kubernetes namespaces configmap

我们在开发环境中使用一种命名空间,在暂存环境中使用一种命名空间。在每个名称空间中,我们都有几个configMap和秘密,但是两个环境之间有很多共享变量,因此我们希望为它们创建一个公共文件。

是否有一种方法可以将基本configMap放入默认名称空间,并使用类似以下内容的名称进行引用:

- envFrom:
    - configMapRef:
        name: default.base-config-map

如果这不可能,除了通过命名空间复制变量之外,别无其他方法吗?

2 个答案:

答案 0 :(得分:0)

Kubernetes 1.13及更低版本

它们无法共享,因为无法从其名称空间之外的pod进行访问。资源名称必须在名称空间内唯一,但在名称空间之间不唯一。

解决方法是将其复制过来。

在命名空间之间复制机密

$ kubectl get secret <secret-name>  — namespace=<source-namespace> — export -o yaml |\ kubectl apply — namespace=<destination-namespace> -f -

在名称空间之间复制配置映射

$ kubectl get configmap <configmap-name>  — namespace=<source-namespace> — export -o yaml |\ kubectl apply — namespace=<destination-namespace> -f -

Kubernetes 1.14和更高版本

标记export在1.14 Deprecate --export flag from get command #73787中已弃用 而是可以使用以下命令:

kubectl get secret <secret-name> — namespace=<source-namespace>  -o yaml | sed ‘s/namespace: <from-namespace>/namespace: <to-namespace>/’ | kubectlcreate -f

如果仍然有人需要该标志,则export script@zoidbergwill写的,做得很好。

答案 1 :(得分:-1)

请使用以下命令从一个名称空间复制到另一个名称空间

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 -