Обновите k8s ConfigMap или Secret, не удаляя существующий

Я использовал K8S ConfigMap и Secret для управления нашими свойствами. Мой дизайн довольно прост, он хранит файлы свойств в git-репо и использует сервер сборки, такой как Thoughtworks GO, для автоматического развертывания их как ConfigMaps или Secrets (при условии выбора) в моем кластере k8s.

В настоящее время я обнаружил, что не очень эффективно всегда удалять существующие ConfigMap и Secret и создавать новые для обновления, как показано ниже:

kubectl delete configmap foo

kubectl create configmap foo --from-file foo.properties

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

Заранее спасибо.

 Ahmet Can Güven22 мар. 2018 г., 23:35
Я только что создал проект для автоматического сопоставления configmap со значениями среды, это может быть полезно для кого-то.github.com/Acanguven/kubernetes-configmap-update

Ответы на вопрос(3)

Для дальнейшего использованияkubectl replace сейчас очень удобный способ добиться этого

kubectl replace -f some_spec.yaml Позволяет обновить полный configMap (или другие объекты)

Смотрите документацию и примеры непосредственно вhttps://kubernetes.io/docs/user-guide/kubectl/kubectl_replace/

Скопируйте / вставьте из справки:

# Replace a pod using the data in pod.json.
kubectl replace -f ./pod.json

# Replace a pod based on the JSON passed into stdin.
cat pod.json | kubectl replace -f -

# Update a single-container pod's image version (tag) to v4
kubectl get pod mypod -o yaml | sed 's/\(image: myimage\):.*$/\1:v4/' | kubectl replace -f -

# Force replace, delete and then re-create the resource
kubectl replace --force -f ./pod.json
 Dave Hillier05 июл. 2018 г., 09:17
Это пропустил--from-file требование. Конфигурации могут быть созданы из произвольного файла, а не только из yaml.

Для небольших изменений вconfigMapиспользоватьedit

kubectl edit configmap <cfg-name>

Это откроет configMap вvi редактор. Внесите изменения и сохраните их.

 James Jiang09 янв. 2019 г., 03:42
Здорово. Однако, как упоминалось в OP, речь идет о том, как достичь цели с помощью автоматизированных процессов, например. с ThoughtWorks Go в качестве сценария сборки сервера в моем сценарии.
Решение Вопроса

Вы можете получить yaml отkubectl create configmap командовать и передать этоkubectl replace, как это:

kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl replace -f -
 James Jiang06 июл. 2016 г., 06:50
Передача команды - это путь, не думая о --dry-run, который представляется ключевой частью команды!
 yee37914 апр. 2018 г., 11:26
пробуя это с kubernetes 1.10, но я продолжаю получать ошибкуerror: error validating "STDIN": error validating data: [apiVersion not set, kind not set]; if you choose to ignore these errors, turn validation off with --validate=false
 Jesse Glick10 сент. 2018 г., 17:07
Для секретов вы можете просто использоватьkubectl replace -f secret.yaml Я думаю.
 rwehner06 июл. 2016 г., 17:34
Что бы ни стоило, этот же шаблон может работать для секретов в дополнение к приведенному здесь примеру ConfigMaps.
 Jordan Liggitt14 апр. 2018 г., 16:31
это ошибка в 1.10, исправленная в 1.10.1 - см.github.com/kubernetes/kubernetes/issues/61780 а такжеgithub.com/kubernetes/kubernetes/pull/61808

Ваш ответ на вопрос