Как пропатчить ConfigMap в Кубернетесе

Kubernetes корабли с ConfigMap называется coredns это позволяет вам указать настройки DNS. Я хочу изменить или исправить небольшой фрагмент этой конфигурации, добавив:

apiVersion: v1
kind: ConfigMap
data:
  upstreamNameservers: |
    ["1.1.1.1", "1.0.0.1"]

Я знаю, что могу использовать kubectrl edit редактировать corednsConfigMap Есть ли какой-то способ, которым я могу взять вышеупомянутый файл, содержащий только те настройки, которые я хочу вставить или обновить, и объединить их поверх существующих или пропатчить поверх существующих ConfigMap?

Причина этого в том, что я хочу, чтобы мое развертывание повторялось с использованием CI/CD. Таким образом, даже если бы я запустил свой график Хелма на совершенно новом кластере Kubernetes, настройки, указанные выше, были бы применены.

5 ответов

Это будет применять тот же патч к этому единственному полю:

kubectl patch configmap/coredns \
  -n kube-system \
  --type merge \
  -p '{"data":{"upstreamNameservers":"[\"1.1.1.1\", \"1.0.0.1\"]"}}'

Вы должны попробовать что-то вроде этого:

kubectl get cm some-config -o yaml | run 'sed' commands to make updates | kubectl create cm some-config -o yaml --dry-run | kubectl apply -f - 

Вы можете отредактировать его, используя vi следующим образом:

    kubectl edit cm -n kube-system coredns 

или вы можете экспортировать его, чтобы применить любые изменения, используя kubectl get cm -n kube-system -o yaml --export затем используйте kubectl apply -f fileName.yaml применить ваши изменения

Поскольку ConfigMaps используются для монтирования файлов конфигурации в Pod, кажется, что это то, что вы ищете. ConfigMaps внутри контейнеров будут обновляться автоматически, если базовый ConfigMap или Secret будет изменен.

Вы можете указать местоположение configMap:

configMapVolume(mountPath: '/etc/mount3', configMapName: 'my-config'),

Обновить:

Хорошо, я думаю, это не решит вашу проблему. Другая вещь, которая приходит на ум, это kubectl create configmap с трубкой в kubectl replaceТаким образом, вся команда будет выглядеть так:

kubectl create configmap NAME --from-file file.name -o yaml --dry-run | kubectl replace -f -

Обратите внимание, что это заменяет весь файл, так что просто replace должно работать тоже.

Конфигурационную карту можно исправить, используя следующееkubectlкоманда.

       kubectl patch configmap your-configmap-name -n your-namespace --patch '{"data": {"key": "new-value"}}'
Другие вопросы по тегам