Есть ли способ поделиться configMap в kubernetes между пространствами имен?

Мы используем одно пространство имен для среды разработки и одно для промежуточной среды. Внутри каждого из этих пространств имен у нас есть несколько configMaps и секретов, но между двумя средами есть много общих переменных, поэтому нам хотелось бы иметь для них общий файл.

Есть ли способ иметь базовую configMap в пространстве имен по умолчанию и ссылаться на нее, используя что-то вроде:

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

Если это невозможно, есть ли другой способ, кроме дублирования переменных через пространства имен?

Думаю, было бы неплохо, если бы k8s его поддерживал. однако это не так далеко. поэтому единственный способ - создать дубликаты на разных NS.

linehrr 27.09.2019 20:19
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
29
1
18 287
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Kubernetes 1.13 и более ранние версии

Их нельзя использовать совместно, потому что к ним нельзя получить доступ из модуля за пределами его пространства имен. Имена ресурсов должны быть уникальными в пространстве имен, но не между пространствами имен.

Обходной путь - скопировать его.

Копировать секреты между пространствами имен
kubectl get secret <secret-name> --namespace=<source-namespace> --export -o yaml \
  | kubectl apply --namespace=<destination-namespace> -f -
Копировать configmaps между пространствами имен
kubectl get configmap <configmap-name>  --namespace=<source-namespace> --export -o yaml \
  | kubectl apply --namespace=<destination-namespace> -f -

Кубернет 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.

Для тех, кто использует powershell, эта команда будет выглядеть так: kubectl get secret <secret-name> --namespace=<source-namespace>  -o yaml | % {$_.replace("пространство имен: <исходное-пространство-имен>","пространство-имен: <назначение-пространство-имен>")} | кубектл создать -f -

Mark 09.02.2021 04:49

Пожалуйста, используйте следующую команду для копирования из одного пространства имен в другое

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 -

Другие вопросы по теме