29

我们将一个命名空间用于开发环境,一个用于暂存环境。在每个命名空间中,我们都有几个 configMaps 和 secrets,但是两个环境之间有很多共享变量,所以我们希望有一个公共文件。

有没有办法让一个基本的 configMap 进入默认命名空间并使用类似的东西来引用它:

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

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

4

2 回答 2

27

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 中已弃用, 而是可以使用以下命令:

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

如果有人仍然认为需要该标志,则有一个由@zoidbergwill编写的导出脚本

于 2019-04-04T13:00:07.693 回答
-2

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

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 -

于 2020-06-19T18:00:05.450 回答