He estado usando K8S ConfigMap y Secret para administrar nuestras propiedades. Mi diseño es bastante simple, mantiene los archivos de propiedades en un repositorio de git y usa un servidor de compilación como Thoughtworks GO para implementarlos automáticamente para que sean ConfigMaps o Secrets (en la condición de elección) en mi clúster k8s.
Actualmente, descubrí que no es realmente eficiente que siempre tenga que eliminar el ConfigMap y Secret existentes y crear el nuevo para actualizar como se muestra a continuación:
kubectl delete configmap fookubectl create configmap foo --from-file foo.properties
¿Existe una forma agradable y sencilla de hacer que el paso anterior sea más eficiente que eliminar el actual? potencialmente, lo que estoy haciendo ahora puede comprometer el contenedor que usa estos mapas de configuración si intenta montar mientras se elimina el mapa de configuración anterior y no se ha creado el nuevo.
Gracias por adelantado.
fuente

Respuestas:
Puede obtener YAML desde el
kubectl create configmapcomando y canalizarlokubectl replace, así:kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl replace -f -fuente
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=falsekubectl applylugar dekubectl replace, funcionará tanto para el mapa dePara referencia futura,
kubectl replaceahora es una forma muy práctica de lograr esto.kubectl replace -f some_spec.yamlLe permite actualizar un configMap completo (u otros objetos)Ver documentos y ejemplos directamente aquí
Copiar / pegar de la ayuda:
# 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.jsonfuente
--from-filerequisito. Los mapas de configuración se pueden crear a partir de un archivo arbitrario, no solo el archivo yaml.--forceopción, qué nos permitiría usar el<dry-run ConfigMap creation> | kubectl replace --force -f -comando de aproximación incluso la primera vez, cuando el ConfigMap aún no existe. Pero no estoy seguro de si es seguro eliminar el ConfigMap ya que los Pods pueden romperse durante su falta debido a que no lo encuentran. ¿Quizás es mejor el enfoque<dry-run ConfigMap creation> | kubectl apply -f -? Este punto fue introducido por @ karthic-c, ¿qué piensas? También @ jordan-liggitt, ¿qué piensas?Para pequeños cambios en
configMap, useeditkubectl edit configmap <cfg-name>Esto abrirá configMap en el
vieditor. Realice los cambios y guárdelo.fuente
kubectl replacefalla si ya existe un mapa de configuración:$ kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl replace -f - Error from server (NotFound): error when replacing "STDIN": configmaps "falco-config" not foundLa mejor solución es usar el
kubectl applyque crearía el mapa de configuración si no está presente; de lo contrario, actualice el mapa de configuración si está presente:$ kubectl create configmap foo --from-file foo.properties -o yaml --dry-run | kubectl apply -f - configmap/falco-config configuredfuente
kubectl replacefalla si no existe un mapa de configuración ".