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 foo
kubectl 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 configmap
comando 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=false
kubectl apply
lugar dekubectl replace
, funcionará tanto para el mapa dePara referencia futura,
kubectl replace
ahora es una forma muy práctica de lograr esto.kubectl replace -f some_spec.yaml
Le 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.json
fuente
--from-file
requisito. Los mapas de configuración se pueden crear a partir de un archivo arbitrario, no solo el archivo yaml.--force
opció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
, useedit
kubectl edit configmap <cfg-name>
Esto abrirá configMap en el
vi
editor. Realice los cambios y guárdelo.fuente
kubectl replace
falla 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 found
La mejor solución es usar el
kubectl apply
que 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 configured
fuente
kubectl replace
falla si no existe un mapa de configuración ".