我们将一个命名空间用于开发环境,一个用于暂存环境。在每个命名空间中,我们都有几个 configMaps 和 secrets,但是两个环境之间有很多共享变量,所以我们希望有一个公共文件。
有没有办法让一个基本的 configMap 进入默认命名空间并使用类似的东西来引用它:
- envFrom:
- configMapRef:
name: default.base-config-map
如果这是不可能的,除了通过命名空间复制变量之外没有其他方法吗?
我们将一个命名空间用于开发环境,一个用于暂存环境。在每个命名空间中,我们都有几个 configMaps 和 secrets,但是两个环境之间有很多共享变量,所以我们希望有一个公共文件。
有没有办法让一个基本的 configMap 进入默认命名空间并使用类似的东西来引用它:
- envFrom:
- configMapRef:
name: default.base-config-map
如果这是不可能的,除了通过命名空间复制变量之外没有其他方法吗?
它们不能共享,因为不能从其命名空间之外的 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 -
该--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编写的导出脚本。
请使用以下命令从一个命名空间复制到另一个
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 -