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

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

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

  1. kubectl delete configmap foo

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

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

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

Ответ 1

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

kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl replace -f -

Ответ 2

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

kubectl replace -f some_spec.yaml обновить полный файл конфигурации (или другие объекты)

Смотрите документацию и примеры прямо здесь

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

# 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 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

Ответ 3

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

kubectl edit configmap <cfg-name>

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