Как пропатчить ConfigMap в Кубернетесе
Kubernetes корабли с ConfigMap
называется coredns
это позволяет вам указать настройки DNS. Я хочу изменить или исправить небольшой фрагмент этой конфигурации, добавив:
apiVersion: v1
kind: ConfigMap
data:
upstreamNameservers: |
["1.1.1.1", "1.0.0.1"]
Я знаю, что могу использовать kubectrl edit
редактировать coredns
ConfigMap
Есть ли какой-то способ, которым я могу взять вышеупомянутый файл, содержащий только те настройки, которые я хочу вставить или обновить, и объединить их поверх существующих или пропатчить поверх существующих 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"}}'