Cómo trabajar con mapas de configuración

Aprenda a trabajar con mapas de configuración en Code Engine. En Code Engine, puede almacenar la información como pares de clave-valor en mapas de configuración que la app, el trabajo o la carga de trabajo de función pueden consumir utilizando variables de entorno.

¿Qué son los mapas de configuración y por qué los utilizaría?

En Code Engine, tanto los secretos como los mapas de configuración son pares de clave-valor. Cuando se correlacionan con variables de entorno, las relaciones NAME=VALUE se establecen de tal forma que el nombre de la variable de entorno corresponde a la "clave" de cada entrada de esos mapas, y el valor de la variable de entorno es el "valor" de esa clave.

Un mapa de configuración proporciona un método para incluir información de datos no confidenciales en el despliegue. Al hacer referencia a los valores del mapa de configuración como variables de entorno, puede desacoplar la información específica del despliegue y mantener la app, el trabajo o la función portátil. Un mapa de configuración contiene información en pares de clave-valor.

Puesto que los secretos y los mapas de configuración son entidades similares (excepto que los secretos se almacenan de forma más segura), la forma en que interactúa y trabaja con secretos y mapas de configuración también es similar. Para obtener más información sobre los secretos, consulte Trabajar con secretos.

Veo configmaps que no he creado. ¿Puedo eliminarlos?.

No. Code Engine crea automáticamente los mapas de configuración istio-ca-root y kube-root-ca en el espacio de nombres. Code Engine utiliza estos mapas de configuración internamente. Si se suprimen estos mapas de configuración, Code Engine los regenera.

Creación de mapas de configuración

Cree mapas de configuración con Code Engine.

Creación de un mapa de configuración desde la consola

Cree mapas de configuración con la consola de Code Engine.

Antes de empezar, cree un proyecto.

  1. Después de que el proyecto esté en estado Activo, pulse el nombre del proyecto en la página de proyectos deCode Engine.
  2. En la página Visión general, pulse Secretos y mapas de configuración.
  3. En la página Secretos y mapas de configuración, pulse Crear para crear el mapa de configuración.
  4. En la página Crear secreto o configmap, realice los pasos siguientes:
    1. Pulse Configmap y pulse Siguiente.
    2. Proporcione un nombre, por ejemplo, myconfigmap.
    3. Pulse Añadir par de clave-valor. Especifique uno o más pares de clave-valor para este mapa de configuración. Por ejemplo, especifique una clave como key1 con el valor de value1 y especifique otra clave como key2 con el valor de value2. Observe que puede especificar valores en una o más líneas. El nombre que elija para la clave no necesita ser el mismo que el nombre de la variable de entorno.
    4. Pulse Crear para crear el mapa de configuración.

Ahora que el mapa de configuración se ha creado desde la consola, vaya a la página Secretos y mapas de configuración para ver una lista de secretos y mapas de configuración definidos. Puede aplicar filtros para personalizar la lista para que se ajuste a sus necesidades.

Crear un mapa de configuración con la CLI

Cree mapas de configuración con la CLI de Code Engine.

Puede llenar un mapa de configuración de varias maneras. Puede llenarlo especificando los pares clave-valor directamente en la línea de mandatos o puede apuntar a un archivo.

Antes de empezar

Cuando se crea (o se actualiza) un mapa de configuración desde un archivo, el formato debe ser --from-file FILE o --from-file KEY=FILE. En Code Engine, cuando se utiliza un archivo para especificar valores de mapa de configuración, todo el contenido del archivo se convierte en el valor del par de clave-valor. Cuando se utiliza el formato de opción de --from-file KEY=FILE, KEY es el nombre de la variable de entorno que conoce la carga de trabajo de la app, el trabajo o la función. Cuando se utiliza el formato de opción de --from-file FILE, FILE es el nombre de la variable de entorno que conoce el trabajo, la app o la función. Si el archivo contiene una o más pares de clave-valor, utilice la opción --from-env-file para añadir una variable de entorno para cada par de clave-valor en el archivo especificado. Las líneas del archivo especificado que están vacías o empiezan por # se ignoran.

Creación de un mapa de configuración con la CLI

Cree un mapa de configuración con el mandato configmap create de una de las maneras siguientes:

  • Cree un mapa de configuración directamente en la línea de mandatos con la opción --from-literal en formato KEY=VALUE. Por ejemplo:

    ibmcloud ce configmap create --name myliteralconfigmap --from-literal TARGET=Sunshine
    
  • Cree un mapa de configuración utilizando la opción --from-file para apuntar a un archivo. Utilizando esta opción, todo el contenido del archivo pasa a ser el valor del par clave-valor. Para este ejemplo, utilice un archivo denominado colors.txt, que contiene el texto blue, green, red.

    • En el ejemplo siguiente se utiliza el formato --from-file KEY=FILE con el mandato configmap create:

      ibmcloud ce configmap create --name mycolorconfigmap --from-file TARGET=colors.txt
      
    • En el ejemplo siguiente se utiliza el formato --from-file FILE con el mandato configmap create. En este ejemplo, TARGET (sin extensión) es el nombre del archivo, que es el mismo que el nombre de la variable de entorno que se conoce en el trabajo myjob de ejemplo.

      ibmcloud ce configmap create --name mycolorconfigmap2  --from-file TARGET
      
  • Cree un mapa de configuración utilizando la opción --from-env-file para apuntar a un archivo que contiene una o más líneas que coincidan con el formato KEY=VALUE. Cada línea del archivo especificado se añade como un par de clave-valor. Las líneas del archivo especificado que están vacías o empiezan por # se ignoran. Para este ejemplo, utilice un archivo llamado colors_multi.txt que contenga los pares clave-valor: color1=yellow, color2=orangey color3=purple.

    ibmcloud ce configmap create --name mycolorconfigmapmulti --from-env-file colors_multi.txt
    

Listado de mapas de configuración con la CLI

Ahora que se han creado los mapas de configuración, utilice el mandato configmap list para obtener una lista de todos los mapas de configuración del proyecto o utilice el mandato configmap get para visualizar detalles sobre un mapa de configuración específico. Por ejemplo:

ibmcloud ce configmap get --name mycolorconfigmap

Salida de ejemplo

Getting configmap 'mycolorconfigmap'...
OK

Name:          mycolorconfigmap
ID:            abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name:  myproject
Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
Age:           11s
Created:       2020-10-14 14:10:57 -0400 EDT

Data:
---
TARGET: blue, green, red

Actualización de mapas de configuración

Puede cambiar los pares de clave-valor para mapas de configuración existentes.

Actualización de mapas de configuración desde la consola

Puede actualizar un configmap existente y sus pares de clave-valor desde la consola.

  1. Puede actualizar pares de clave-valor para los mapas de configuración definidos desde la consola de una de las maneras siguientes.

    • Vaya a la página Secretos y mapas de configuración para el proyecto y localice el mapa de configuración que desea actualizar. Pulse el nombre del mapa de configuración que desea actualizar para abrirlo.
    • Si se hace referencia al configmap mediante una carga de trabajo de app, trabajo o función, utilice los enlaces de la tabla de variables de entorno en el separador Variables de entorno de la carga de trabajo. Estos enlaces le llevan directamente al mapa de configuración.
  2. Pulse Editar y realice las actualizaciones para su mapa de configuración.

  3. Pulse Guardar para guardar los cambios en el mapa de configuración.

Si el mapa de configuración actualizado está referenciado por una carga de trabajo de aplicación, trabajo o función, la carga de trabajo debe reiniciarse para que los nuevos datos entren en vigor.

  • Apps - En la página de la app, pulse Nueva revisión y luego Guardar y desplegar. De forma alternativa, puede esperar a que su app reduzca sus instancias a cero y cuando la app aumenta, la app utiliza el mapa de configuración actualizado.
  • Trabajos - En la página del trabajo, pulse Enviar trabajo para ejecutar el trabajo, o puede volver a ejecutar un trabajo. Esta nueva ejecución de trabajo utiliza el mapa de configuración actualizado.
  • Función-La función se reinicia cuando se vuelve a llamar. Puede probar la función pulsando Probar función en la página de función.

Actualización de mapas de configuración con la CLI

Puede actualizar un mapa de configuración existente y sus pares de clave-valor con la CLI.

  1. Para cambiar el valor de un par de clave-valor en un mapa de configuración, utilice el mandato configmap update. Vamos a actualizar el mapa de configuración myliteralconfigmap para cambiar el valor de la clave TARGET de Sunshine a Stranger.

    ibmcloud ce configmap update --name myliteralconfigmap --from-literal "TARGET=Stranger"
    
  2. Ahora que el configmap está actualizado, utilice el mandato configmap get para visualizar detalles sobre un configmap específico. Por ejemplo:

    ibmcloud ce configmap get --name myliteralconfigmap
    

    Salida de ejemplo

    Getting configmap 'myliteralconfigmap'...
    OK
    
    Name:          myliteralconfigmap
    ID:            abcdefgh-abcd-abcd-abcd-c88e2775388e
    Project Name:  myproject
    Project ID:    01234567-abcd-abcd-abcd-abcdabcd1111
    Age:           21m
    Created:       2021-05-14T07:57:11-04:00
    
    Data:
    ---
    TARGET: Stranger
    

Cómo hacer referencia a mapas de configuración

La carga de trabajo de la app, trabajo o función puede consumir y utilizar la información almacenada en un configmap utilizando variables de entorno.

Cómo hacer referencia a los mapas de configuración desde la consola

Puede utilizar la consola para crear variables de entorno para la carga de trabajo de la app, trabajo o función que hagan referencia completa a un mapa de configuración o hagan referencia a claves individuales en un mapa de configuración.

Para poder hacer referencia a un mapa de configuración, éste debe existir. Consulte crear un mapa de configuración.

Desde la consola, solo puede hacer referencia a una clave individual de un configmap definido por variable de entorno. Si necesita hacer referencia a más de una clave de un configmap, repita los pasos para definir otra variable de entorno que haga referencia a una clave diferente.

  1. Para hacer referencia a un configmap definido desde la carga de trabajo de la app, trabajo o función, cree una variable de entorno. La variable de entorno puede hacer referencia completa a un mapa de configuración existente o hacer referencia a una clave individual en un mapa de configuración existente. Por ejemplo, hagamos referencia completa al mapa de configuración de myconfigmap desde la aplicación myapp. Si hace referencia completa a un mapa de configuración (o un secreto), puede especificar opcionalmente un prefix. Utilizando un prefijo como, por ejemplo, myconfigmap_, se añade el prefijo myconfigmap_ a cada clave.

  2. Después de crear variables de entorno, debe reiniciar la carga de trabajo de la app, trabajo o función para que los cambios entren en vigor. Para las apps, guarde y despliegue su app para actualizar la app con las variables de entorno que ha definido. Para trabajos y funciones, la carga de trabajo se actualiza la próxima vez que se llama con las variables de entorno que ha definido.

  3. Después de que el estado de la aplicación cambie a Preparado, puede probar la aplicación. Pulse Probar aplicación y, a continuación, pulse Enviar solicitud en el panel Probar aplicación. Para abrir la aplicación en una página web, pulse URL de aplicación. En este ejemplo de myapp, como hemos especificado un prefijo para el mapa de configuración de myconfigmap totalmente referenciado, todas las claves de este mapa de configuración se referencian como variables de entorno y tienen como prefijo myconfigmap_. Por ejemplo, estas variables de entorno se muestran como myconfigmap_key1=value1 y myconfigmap_key2=value2.

Para actualizar una variable de entorno que haga referencia a un mapa de configuración, consulte Actualización de variables de entorno y Consideraciones para actualizar las variables de entorno.

Para eliminar una variable de entorno que haga referencia a un mapa de configuración, consulte supresión de variables de entorno.

Hacer referencia a los mapas de configuración con la CLI

Para utilizar mapas de configuración con cargas de trabajo de aplicaciones, trabajos o funciones, puede establecer variables de entorno que hagan referencia completa a un mapa de configuración o hagan referencia a claves individuales en un mapa de configuración con la CLI.

Hacer referencia a mapas de configuración existentes con la CLI

Para utilizar un configmap con una carga de trabajo de app, trabajo o función con la CLI, especifique la opción --env-from-configmap en los mandatos siguientes.

En el ejemplo siguiente se describe cómo hacer referencia a un mapa de configuración existente con una aplicación utilizando la CLI.

  1. Utilice el mandato configmap create para crear los dos mapas de configuración siguientes para este escenario.

    ibmcloud ce configmap create --name myliteralconfigmap --from-literal TARGET=Sunshine
    
    ibmcloud ce configmap create --name myliteralconfigmap2 --from-literal TARGET=Stranger
    
  2. Despliegue una aplicación y haga referencia al mapa de configuración myliteralconfigmap. Para este ejemplo, cree una aplicación que utilice la imagen hello. Cuando se envía una solicitud a esta app de ejemplo, la app lee la variable de entorno TARGET y muestra Hello ${TARGET}. Si esta variable de entorno está vacía, se devuelve Hello World. Haga referencia al mapa de configuración myliteralconfigmap. Para obtener más información sobre el código que se utiliza para este ejemplo, consulte hello.

    ibmcloud ce app create --name myhelloapp --image icr.io/codeengine/hello --env-from-configmap myliteralconfigmap
    
  3. Llame a la aplicación. La aplicación devuelve Hello Sunshine, que es el valor de la clave TARGET que se especifica en el mapa de configuración myliteralconfigmap.

    curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
    

    Salida de ejemplo

    Hello Sunshine
    
  4. Actualice de nuevo la aplicación para utilizar el mapa de configuración myliteralconfigmap2.

    Cuando actualiza una app, trabajo o función con una variable de entorno que hace referencia completa a un configmap (o secreto) para hacer referencia completa a un configmap (o secreto) diferente, las referencias completas alteran temporalmente otras referencias completas en el orden en el que se han establecido (el último conjunto al que se hace referencia altera temporalmente el primer conjunto).

    ibmcloud ce app update --name myhelloapp --env-from-configmap myliteralconfigmap2
    

    Salida de ejemplo

    Updating application 'myhelloapp' to latest revision.
    [...]
    Run 'ibmcloud ce application get -n myhelloapp' to check the application status.
    OK
    
    https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
    
  5. Vuelva a llamar a la aplicación. Esta vez, la aplicación devuelve Hello Stranger, que es el valor que se especifica en el mapa de configuración myliteralconfigmap2.

    curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    Salida de ejemplo

    Hello Stranger
    
  6. Actualice myliteralconfigmap2 para cambiar el par de clave-valor.

    ibmcloud ce configmap update --name myliteralconfigmap2 --from-literal "TARGET=Happy day"
    

    Ejecute el mandato ibmcloud ce configmap get -n myliteralconfigmap2 para visualizar detalles del mapa de configuración.

    Salida de ejemplo

    Name:          myliteralconfigmap2
    [...]
    Data:
    ---
    TARGET: Happy day
    
  7. Reinicie la aplicación para que los nuevos datos entren en vigor.

    ibmcloud ce app update --name myhelloapp
    
  8. Vuelva a llamar a la aplicación. Esta vez, la aplicación devuelve Hello Happy day, que es el valor que se especifica en el mapa de configuración myliteralconfigmap2.

    curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    Salida de ejemplo

    Hello Happy day
    

Hacer referencia a los mapas de configuración que todavía no están definidas con la CLI

Si un mapa de configuración no existe antes de que se haga referencia a él, la carga de trabajo de la aplicación, el trabajo o la función no se despliega correctamente y un trabajo o función no se ejecuta correctamente hasta que se crea el mapa de configuración al que se hace referencia.

Si está trabajando con una carga de trabajo de aplicación, trabajo o función y el configmap referenciado todavía no está definido, puede utilizar la opción --force para evitar la verificación de la existencia del configmap referenciado. La opción --force se puede utilizar con los mandatos siguientes.

Cuando se utiliza la opción --force con estos mandatos, la acción para crear, actualizar o ejecutar la carga de trabajo se completa; sin embargo, la app, el trabajo o la carga de trabajo no se ejecutarán correctamente hasta que exista el mapa de configuración referenciado. Si añade la opción --no-wait además de la opción --force al mandato, el sistema completa la acción y no espera a que la carga de trabajo se ejecute correctamente.

En el ejemplo siguiente se describe cómo hacer referencia a un mapa de configuración que todavía no está definido con una aplicación utilizando la CLI.

  1. Cree una aplicación y haga referencia al mapa de configuración myliteralconfigmap3. Para este ejemplo, cree una aplicación Code Engine que utilice la imagen icr.io/codeengine/hello. Cuando se envía una solicitud a esta app de ejemplo, la app lee la variable de entorno TARGET y muestra Hello ${TARGET}. Si esta variable de entorno está vacía, se devuelve Hello World. Haga referencia al mapa de configuración myliteralconfigmap3. Para obtener más información sobre el código que se utiliza para este ejemplo, consulte hello.

    Al utilizar la opción --no-wait con el mandato app create, la aplicación se crea y no espera a que la aplicación esté lista.

    ibmcloud ce app create --name myapp --image icr.io/codeengine/hello --env-from-configmap myliteralconfigmap3 --force --no-wait
    
  2. Utilice el mandato app get para visualizar detalles de la ejecución del trabajo, incluida la información de la variable de entorno. Observe que la app se ha creado, pero que aún no está totalmente desplegada.

    ibmcloud ce app get --name myapp
    

    Salida de ejemplo

    Name:            myapp
    [...]
    Status Summary:  Application is deploying
    
    Environment Variables:
        Type                      Name                 Value
        ConfigMap full reference  myliteralconfigmap3
    Image:                  icr.io/codeengine/hello
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    
    Runtime:
        Concurrency:    100
        Maximum Scale:  10
        Minimum Scale:  0
        Timeout:        300
    
    Conditions:
        Type                 OK     Age  Reason
        ConfigurationsReady  false  10s
        Ready                false  10s  RevisionMissing : Configuration "myapp" is waiting for a Revision to become ready.
        RoutesReady          false  10s  RevisionMissing : Configuration "myapp" is waiting for a Revision to become ready.
    
    Events:
        Type    Reason   Age  Source              Messages
        Normal  Created  12s  service-controller  Created Configuration "myapp"
        Normal  Created  12s  service-controller  Created Route "myapp"
    
    Instances:
        Name                                      Revision      Running  Status   Restarts  Age
        myapp-00001-deployment-566d5c79b9-wttqs  myapp-00001  0/2      Pending  0         11s
    
  3. Cree el configmap.

    ibmcloud ce configmap create --name myliteralconfigmap3 --from-literal TARGET=Everyone
    
  4. Reinicie la aplicación para que los nuevos datos entren en vigor.

    ibmcloud ce app update --name myapp
    
  5. Llame a la aplicación. La aplicación devuelve Hello Everyone, que es el valor que se especifica en el mapa de configuración myliteralconfigmap3.

    curl https://myapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    Salida de ejemplo

    Hello Everyone
    
  6. Actualice la aplicación para hacer referencia al mapa de configuración myliteralconfigmap2 existente. myliteralconfigmap2 se define con el valor TARGET=Stranger. La actualización de la aplicación reinicia la aplicación para que se apliquen los nuevos datos.

    Cuando actualiza una aplicación o un trabajo con una variable de entorno que hace referencia completa a un mapa de configuración (o un secreto) para hacer referencia completa a un mapa de configuración (o secreto) diferente, las referencias completas sustituyen otras referencias completas en el orden en el que se establecen (el último conjunto referenciado sustituye al primer conjunto).

    ibmcloud ce app update --name myapp --env-from-configmap myliteralconfigmap2
    
  7. Vuelva a llamar a la aplicación. Esta vez, la aplicación devuelve Hello Stranger, que es el valor que se especifica en el mapa de configuración myliteralconfigmap2.

    curl https://myapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    Salida de ejemplo

    Hello Stranger
    

Para ver casos de ejemplo más detallados sobre cómo hacer referencia a los secretos completos y los mapas de configuración como variables de entorno y cómo sustituir referencias y eliminar referencias en la CLI, consulte Cómo hacer referencia a secretos y a mapas de configuración.

Supresión de mapas de configuración

Cuando ya no necesite un configmap, puede suprimirlo.

Supresión de mapas de configuración de la consola

  1. Para suprimir un configmap de la consola,
    1. Vaya a la página Secretos y mapas de configuración de la página Proyectos deCode Engine.
    2. Pulse el configmap que desea suprimir para abrir su página.
    3. En la página del mapa de configuración específico, pulse Acciones > Suprimir mapa de configuración.
  2. Para suprimir un par de clave-valor para un configmap específico de la consola,
    1. Vaya a la página Secretos y mapas de configuración de la página Proyectos deCode Engine.
    2. Pulse el configmap que desea cambiar para abrir su página.
    3. En la página del mapa de configuración específico, suprima el par de clave-valor que desea eliminar.

También puede suprimir las variables de entorno definidas que hacen referencia a los secretos y los mapas de configuración. Para suprimir una variable de entorno definida, en el separador Variables de entorno de la app, trabajo o función y suprima la variable de entorno que desea suprimir. Después de suprimir una variable de entorno definida, asegúrese de pulsar Guardar para guardar los cambios en la app, trabajo o función. Para obtener más información, consulte suprimir una variable de entorno.

Supresión de mapas de configuración con la CLI

  • Para suprimir un mapa de configuración con la CLI, utilice el mandato configmap delete; por ejemplo,

    ibmcloud ce configmap delete --name myliteralconfigmap -f
    

    Salida de ejemplo

    Deleting configmap 'myliteralconfigmap'...
    OK
    

También puede suprimir variables de entorno que hagan referencia a secretos y mapas de configuración desde la CLI.