
Con esto podemos crear un mapa de configuración vinculado a un archivo externo.
kubectl create configmap database-config --from-file=database.properties
Pero cuando editamos el yaml, mostrará que el contenido completo del archivo está volcado allí.
¿Hay alguna forma de señalar un archivo en yaml también para mantener el archivo de propiedades en la misma carpeta que el mapa de configuración yaml y aplicar la carpeta con todos los yamls?
kubectl apply -f target_folder\
Por favor recomiende.
Respuesta1
Qué configmap
es
Un ConfigMap es un objeto API que se utiliza para almacenar datos no confidenciales en pares clave-valor. Los pods pueden consumir ConfigMaps como variables de entorno, argumentos de línea de comandos o como archivos de configuración en un volumen.
Un ConfigMap le permite desacoplar la configuración específica del entorno de las imágenes de su contenedor, para que sus aplicaciones sean fácilmente portátiles.
En otras palabras, cuando configmap
se crea desde un archivo externo (como su caso) o desde otros valores, el servidor API validará si todo está correcto y luego lo guardará en etcd
. Esto también explica las razones por las que cuando edit
ves configmap
todo su contexto. Esto sucede porque configmap
se lee desde etcd
, no desde fuentes externas.
Esta es también una de las razones por las que no se recomienda guardar archivos grandes como mapas de configuración o secretos; afectará el rendimiento del clúster de Kubernetes, ya que todos los objetos del clúster se almacenan en etcd
.
Personalizar
Esta es una de las formas de cumplir con su requisito de ejecutar un comando al crear/configurar configmap
en función del archivo en el mismo directorio. Es una herramienta independiente para personalizar objetos de Kubernetes a través de un archivo de personalización.
Creé un ejemplo breve y simple para mostrar la idea:
$ tree
.
├── application.properties
└── kustomization.yaml
0 directories, 2 files
$ cat kustomization.yaml
generatorOptions:
disableNameSuffixHash: true # this flag is used to avoid creation of new configmap, instead it will be modified when file context is changed
configMapGenerator:
- name: application-config
files:
- application.properties
$ cat application.properties
listen.url=localhost:9010
client.url=some_url:3000
Pruebe esto, este comandosolo renderizarconfigmap, no lo creará todavía:
$ kubectl kustomize application.settings/
apiVersion: v1
data:
application.properties: |
listen.url=localhost:9010
client.url=some_url:3000
kind: ConfigMap
metadata:
name: application-config
El último paso esaplicarél:
$ kubectl apply -k application.settings/
configmap/application-config created
$ kubectl get cm
NAME DATA AGE
application-config 1 23s
Breve explicación del comando anterior:
Para aplicar esos recursos, ejecute kubectl apply con el indicador --kustomize o -k.