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

Dan*_*ijo 23 namespaces kubernetes configmap

我们为开发环境使用一个命名空间,为登台环境使用一个命名空间。在每个命名空间中,我们都有几个 configMaps 和 secrets,但是这两个环境之间有很多共享变量,因此我们希望为它们创建一个公共文件。

有没有办法将基本 configMap 放入默认命名空间并使用以下内容引用它:

- envFrom:
    - configMapRef:
        name: default.base-config-map
Run Code Online (Sandbox Code Playgroud)

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

Cro*_*rou 23

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 中弃用 来自 get 命令的弃用 --export 标志 #73787 可以使用以下命令:

kubectl get secret <secret-name> --namespace=<source-namespace>? -o yaml | sed 's/namespace: <from-namespace>/namespace: <to-namespace>/' | kubectl create -f -

如果有人仍然认为需要该标志,那么@zoidbergwill编写的导出脚本 做得很好。