有没有办法在命名空间之间共享 kubernetes 中的 configMap?
Is there a way to share a configMap in kubernetes between namespaces?
我们为开发环境使用一个命名空间,为暂存环境使用一个命名空间。在每个命名空间中,我们都有几个 configMap 和秘密,但两个环境之间有很多共享变量,因此我们希望为它们创建一个通用文件。
有没有办法将基本 configMap 放入默认命名空间并使用类似以下内容引用它:
- envFrom:
- configMapRef:
name: default.base-config-map
如果这不可能,除了通过命名空间复制变量之外没有其他方法吗?
Kubernetes 1.13 及更早版本
无法共享它们,因为无法从其命名空间之外的 pods 访问它们。资源名称在命名空间内必须是唯一的,但跨命名空间则不能。
解决方法是复制过来。
在命名空间之间复制秘密
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+
The --export
flag was deprecated in 1.14
而是可以使用以下命令:
kubectl get secret <secret-name> --namespace=<source-namespace> -o yaml \
| sed 's/namespace: <from-namespace>/namespace: <to-namespace>/' \
| kubectl create -f -
如果有人仍然认为需要旗帜,export script written by @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 -
我们为开发环境使用一个命名空间,为暂存环境使用一个命名空间。在每个命名空间中,我们都有几个 configMap 和秘密,但两个环境之间有很多共享变量,因此我们希望为它们创建一个通用文件。
有没有办法将基本 configMap 放入默认命名空间并使用类似以下内容引用它:
- envFrom:
- configMapRef:
name: default.base-config-map
如果这不可能,除了通过命名空间复制变量之外没有其他方法吗?
Kubernetes 1.13 及更早版本
无法共享它们,因为无法从其命名空间之外的 pods 访问它们。资源名称在命名空间内必须是唯一的,但跨命名空间则不能。
解决方法是复制过来。
在命名空间之间复制秘密
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+
The --export
flag was deprecated in 1.14
而是可以使用以下命令:
kubectl get secret <secret-name> --namespace=<source-namespace> -o yaml \
| sed 's/namespace: <from-namespace>/namespace: <to-namespace>/' \
| kubectl create -f -
如果有人仍然认为需要旗帜,export script written by @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 -