IBM Cloud Docs
Despliegue y escalado de aplicaciones

Despliegue y escalado de aplicaciones

Con esta guía de aprendizaje, despliegue una aplicación con la CLI de Code Engine. La aplicación se escala hasta cero cuando no se utiliza.

Una aplicación, o app, ejecuta el código para servir solicitudes HTTP. Además de las solicitudes HTTP tradicionales, IBM Cloud® Code Engine también da soporte a aplicaciones que utilizan WebSockets como protocolo de comunicaciones. El número de instancias en ejecución de una aplicación se amplía o reduce automáticamente (hasta cero) en función de las solicitudes entrantes y de los ajustes de configuración. Una app contiene una o varias revisiones. Una revisión representa una versión inmutable de las propiedades de configuración de la app. Cada actualización de una propiedad de configuración de la app crea una nueva revisión de la app.

Antes de empezar

Todos los usuarios de Code Engine están obligados a tener una cuenta de pago por uso. Las guías de aprendizaje pueden incurrir en costes. Utilice el Estimador de costes para generar una estimación de costes basada en el uso previsto. Para obtener más información, consulte Precios deCode Engine.

Seleccione de un archivo de imagen

Esta guía de aprendizaje utiliza una imagen de ejemplo, icr.io/codeengine/hello, que es un programa Hello World simple. El programa incluye una variable de entorno TARGET y muestra Hello ${TARGET}. Si esta variable de entorno está vacía, se devuelve Hello World. Para obtener más información sobre el código que se utiliza para este ejemplo, consulte hello.

Si tiene una imagen de contenedor que desea utilizar, puede sustituir la referencia de imagen en el paso siguiente por su propio repositorio de Docker, el nombre de imagen y la versión.

Creación y despliegue de una aplicación

  1. Cree la aplicación con el mandato ibmcloud ce application create. En el ejemplo siguiente, utilice myapp como nombre de la aplicación y especifique icr.io/codeengine/hello como la imagen a la que hacer referencia.

    ibmcloud ce application create --name myapp --image icr.io/codeengine/hello
    

    Salida de ejemplo

    Creating application 'myapp'...
    [...]
    Run 'C:\Program Files\IBM\Cloud\bin\ibmcloud.exe ce application get -n myapp' to check the application status.
    OK
    https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    
  2. Ejecute el mandato ibmcloud ce application get para visualizar detalles sobre la aplicación, incluido el URL de la aplicación myapp.

    ibmcloud ce application get -n myapp
    

    Salida de ejemplo

    Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances.
    Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances.
    OK
    
    Name:               myapp
    ID:                 abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
    Project Name:       myproject
    Project ID:         01234567-abcd-abcd-abcd-abcdabcd1111
    Age:                3m6s
    Created:            2021-07-11T06:39:41-05:00
    URL:                https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    Cluster Local URL:  http://myapp.4svg40kna19.svc.cluster.local
    Console URL:        https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration
    Status Summary:  Application deployed successfully
    
    Environment Variables:    
        Type     Name             Value  
        Literal  CE_API_BASE_URL  https://api.private.us-south.codeengine.cloud.ibm.com
        Literal  CE_APP           myapp  
        Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
        Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
        Literal  CE_REGION        us-south  
        Literal  CE_SUBDOMAIN     abcdabcdab
    Image:                icr.io/codeengine/hello
    Resource Allocation:
    CPU:                1
    Ephemeral Storage:  400M
    Memory:             4G
    
    Revisions:
    myapp-huv70-1:
        Age:                3m6s
        Traffic:            100%
        Image:              icr.io/codeengine/hello (pinned to f0dc03)
        Running Instances:  1
    
    Runtime:
        Concurrency:    100
        Maximum Scale:  10
        Minimum Scale:  0
        Timeout:        300
    
    Conditions:
        Type                 OK    Age  Reason
        ConfigurationsReady  true  52s
        Ready                true  26s
        RoutesReady          true  26s
    
    Events:
    Type    Reason   Age   Source              Messages
    Normal  Created  3m9s  service-controller  Created Configuration "myapp"
    Normal  Created  3m9s  service-controller  Created Route "myapp"
    
    Instances:
    Name                                       Revision       Running  Status       Restarts  Age
    myapp-huv70-1-deployment-6656cfc796-7gl27  myapp-huv70-1  1/2      Terminating  0         3m9s
    
  3. Obtenga el URL de la aplicación para ejecutar el mandato application get tal como se ha descrito en el paso anterior. Para recuperar el URL de la aplicación directamente, puede utilizar la opción --output y especificar el formato de URL en el mandato application get. Además, puede ejecutar el mandato ibmcloud ce application list para obtener el URL de la aplicación.

    ibmcloud ce application get -n myapp -output url
    

    Salida de ejemplo

    https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    
  4. Copie el URL de la salida anterior y llame a la aplicación con curl.

    curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    

    Salida de ejemplo

    Hello World
    

Ha desplegado e iniciado correctamente una aplicación de Code Engine.

Actualización de la aplicación

  1. Actualice la aplicación que acaba de crear añadiendo una variable de entorno para que se devuelva Hello Stranger con el mandato ibmcloud ce application update.

    ibmcloud ce application update --name myapp --env TARGET=Stranger
    

    Salida de ejemplo

    Updating application 'myapp' to latest revision.
    [...]
    Run 'ibmcloud ce application get -n myapp' to check the application status.
    OK
    
    https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    
  2. Utilice el mandato application get para ver detalles sobre la app, incluida información sobre la revisión más reciente.

    ibmcloud ce application get --name myapp
    

    Salida de ejemplo

    Run 'ibmcloud ce application events -n myapp' to get the system events of the application instances.
    Run 'ibmcloud ce application logs -f -n myapp' to follow the logs of the application instances.
    OK
    
    Name:               myapp
    ID:                 abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
    Project Name:       myproject
    Project ID:         01234567-abcd-abcd-abcd-abcdabcd1111
    Age:                3m6s
    Created:            2021-07-11T06:39:41-05:00
    URL:                https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    Cluster Local URL:  http://myapp.4svg40kna19.svc.cluster.local
    Console URL:        https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration
    Status Summary:  Application deployed successfully
    
    Environment Variables:    
        Type     Name             Value  
        Literal  CE_API_BASE_URL  https://api.private.us-south.codeengine.cloud.ibm.com
        Literal  CE_APP           myapp  
        Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
        Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
        Literal  CE_REGION        us-south  
        Literal  CE_SUBDOMAIN     abcdabcdab
        Literal  TARGET           Stranger
    Image:                icr.io/codeengine/hello
    
     Status Summary:  Application deployed successfully
    
     Environment Variables:
         Type     Name    Value
         Literal  TARGET  Stranger
     Image:                  icr.io/codeengine/hello
     Resource Allocation:
         CPU:                1
         Ephemeral Storage:  400M
         Memory:             4G
    
     Revisions:
     myapp-00002:
         Age:                54m
         Traffic:            100%
         Image:              icr.io/codeengine/hello (pinned to f0dc03)
         Running Instances:  1
    
     Runtime:
         Concurrency:    100
         Maximum Scale:  10
         Minimum Scale:  0
         Timeout:        300
    
     Conditions:
         Type                 OK    Age  Reason
         ConfigurationsReady  true  25s
         Ready                true  11s
         RoutesReady          true  11s
    
     Events:
     Type    Reason   Age    Source              Messages
     Normal  Created  4m17s  service-controller  Created Configuration "myapp"
     Normal  Created  4m17s  service-controller  Created Route "myapp"
    
     Instances:
        Name                                     Revision     Running  Status       Restarts  Age
        myapp-00001-deployment-bf7559548-mxgvq   myapp-00001  2/3      Terminating  0         4m55s
        myapp-00002-deployment-8495f8ccb9-kmc57  myapp-00002  3/3      Running      0         88s
    

    En la salida de la sección Revisions, verá la última revisión de la aplicación del servicio myapp. Observe también que el 100 % del tráfico a la aplicación ejecuta la última revisión de la app.

  3. Llame a la aplicación.

    curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    

    Salida de ejemplo

    Hello Stranger
    

En la salida de este mandato, puede ver que la app actualizada ahora muestra Hello Stranger.

Escalado de la aplicación (escalado a cero y escalado desde cero)

El número de instancias en ejecución de una aplicación se aumenta o se reduce (hasta cero) automáticamente en función de la carga de trabajo de entrada.

En el ejemplo siguiente se muestra cómo escalar la aplicación con la CLI. Puede controlar el número máximo y mínimo de instancias en ejecución de la app modificando los valores de las opciones --min-scale y --max-scale con el mandato application create o application update.

  1. Llame a la aplicación.

    curl https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    
  2. Ejecute el mandato application get para ver el estado de la aplicación. Observe el valor de Running instances. En este ejemplo, la app tiene 1 instancia en ejecución.

    ibmcloud ce application get --name myapp
    

    Salida de ejemplo

    [...]
    
    Name:          myapp
    [...]
    URL:                https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    Cluster Local URL:  http://myapp.4svg40kna19.svc.cluster.local
    Console URL:        https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration
    Status Summary:  Application deployed successfully
    
    Environment Variables:    
        Type     Name             Value  
        Literal  CE_API_BASE_URL  https://api.private.us-south.codeengine.cloud.ibm.com
        Literal  CE_APP           myapp  
        Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
        Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
        Literal  CE_REGION        us-south  
        Literal  CE_SUBDOMAIN     abcdabcdab
        Literal  TARGET           Stranger
    Image:                  icr.io/codeengine/hello
    
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    
    Revisions:
    myapp-00002:
        Age:                58m
        Traffic:            100%
        Image:              icr.io/codeengine/hello (pinned to f0dc03)
        Running Instances:  1
    
    Runtime:
        Concurrency:    100
        Maximum Scale:  10
        Minimum Scale:  0
        Timeout:        300
    
    Conditions:
        Type                 OK    Age  Reason
        ConfigurationsReady  true  57m
        Ready                true  57m
        RoutesReady          true  57m
    
    Events:
        Type    Reason   Age    Source              Messages
        Normal  Created  4m17s  service-controller  Created Configuration "myapp"
        Normal  Created  4m17s  service-controller  Created Route "myapp"
    
    Instances:
        Name                                     Revision     Running  Status   Restarts  Age
        myapp-00002-deployment-8495f8ccb9-kmc57  myapp-00002  3/3      Running  0         16m
    
  3. Vuelva a ejecutar el mandato application get y observe que el valor de Running instances se ha reducido a cero. Cuando la aplicación termina de ejecutarse, el número de instancias en ejecución se reduce automáticamente a cero, si la opción --min-scale se ha establecido en 0, que es el valor predeterminado.

    ibmcloud ce application get -n myapp
    

    Salida de ejemplo

    [...]
    URL:                https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    Cluster Local URL:  http://myapp.4svg40kna19.svc.cluster.local
    Console URL:        https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration
    Status Summary:  Application deployed successfully
    
    Environment Variables:    
        Type     Name             Value  
        Literal  CE_API_BASE_URL  https://api.private.us-south.codeengine.cloud.ibm.com
        Literal  CE_APP           myapp  
        Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
        Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
        Literal  CE_REGION        us-south  
        Literal  CE_SUBDOMAIN     abcdabcdab
        Literal  TARGET           Stranger
    Image:                  icr.io/codeengine/hello
    
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    
    Revisions:
    myapp-huv70-2
        Age:                13m
        Traffic:            100%
        Image:              icr.io/codeengine/hello (pinned to 548d5c)
        Running Instances:  0
    
    Runtime:
        Concurrency:         100
        Maximum Scale:       10
        Minimum Scale:       0
        Timeout:             300
    
    Conditions:
        Type                 OK    Age  Reason
        ConfigurationsReady  true  13m
        Ready                true  13m
        RoutesReady          true  13m
    
    Events:
        Type    Reason   Age    Source              Messages
        Normal  Created  4m17s  service-controller  Created Configuration "myapp"
        Normal  Created  4m17s  service-controller  Created Route "myapp"
    
    Instances:
        Name                                       Revision       Running  Status       Restarts  Age
        myapp-00002-deployment-8495f8ccb9-kmc57    myapp-00002    3/3      Running      0         16m
    

    La aplicación se ha escalado a cero.

  4. Vuelva a llamar a la aplicación para aumentar el número de instancias.

  5. Ejecute el mandato application get de nuevo y observe que el valor de Running instances ha aumentado con respecto a cero y que se visualiza información sobre la instancia.

    ibmcloud ce application get -n myapp
    

    Salida de ejemplo

    Name:          myapp
    [...]
    URL:                https://myapp.4svg40kna19.us-south.codeengine.appdomain.cloud
    Cluster Local URL:  http://myapp.4svg40kna19.svc.cluster.local
    Console URL:        https://cloud.ibm.com/codeengine/project/us-south/01234567-abcd-abcd-abcd-abcdabcd1111/application/myapp/configuration
    Status Summary:  Application deployed successfully
    
    Environment Variables:    
        Type     Name             Value  
        Literal  CE_API_BASE_URL  https://api.private.us-south.codeengine.cloud.ibm.com
        Literal  CE_APP           myapp  
        Literal  CE_DOMAIN        us-south.codeengine.appdomain.cloud  
        Literal  CE_PROJECT_ID    abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
        Literal  CE_REGION        us-south  
        Literal  CE_SUBDOMAIN     abcdabcdab
        Literal  TARGET           Stranger
    Image:                  icr.io/codeengine/hello
    
    Resource Allocation:
        CPU:                1
        Ephemeral Storage:  400M
        Memory:             4G
    
    Revisions:
    myapp-huv70-2:
        Age:                3h11m
        Traffic:            100%
        Image:              icr.io/codeengine/hello (pinned to f0dc03)
        Running Instances:  1
    
    Runtime:
        Concurrency:    100
        Maximum Scale:  10
        Minimum Scale:  0
        Timeout:        300
    
    Conditions:
        Type                 OK    Age    Reason
        ConfigurationsReady  true  3h10m
        Ready                true  3h10m
        RoutesReady          true  3h10m
    
    Events:
        Type    Reason   Age    Source              Messages
        Normal  Created  4m17s  service-controller  Created Configuration "myapp"
        Normal  Created  4m17s  service-controller  Created Route "myapp"
    
    Instances:
        Name                                     Revision     Running  Status   Restarts  Age
        myapp-00002-deployment-8495f8ccb9-kmc57  myapp-00002  3/3      Running  0         16m
    

La aplicación se vuelve a escalar al alza.

Para obtener más información sobre cómo escalar la aplicación, consulte Configuración del escalado de aplicación.

Próximos pasos

Después de desplegar la aplicación, puede actualizar la aplicación desplegada y su código referenciado utilizando varias formas, independientemente de cómo haya creado o actualizado previamente la aplicación:

  • Si tienes una imagen de contenedor, según el estándar Open Container Initiative(OCI), entonces sólo necesitas proporcionar una referencia a la imagen, que apunte a la ubicación de tu registro de contenedores cuando despliegues tu aplicación. Puede desplegar la app con una imagen en un registro público o registro privado.

    Si ha creado la app utilizando el mandato app create y ha especificado la opción --build-source para crear la imagen de contenedor desde el origen local o de repositorio, y desea cambiar la app para que apunte a una imagen de contenedor diferente, primero debe eliminar la asociación de la compilación de la app. Por ejemplo, ejecute ibmcloud ce application update -n APP_NAME --build-clear. Después de eliminar la asociación de la compilación de la app, puede actualizar la app para que haga referencia a una imagen diferente.

  • Si está empezando con un código fuente que reside en un repositorio de Git, puede dejar que Code Engine se encargue de compilar la imagen desde el código fuente y desplegar la aplicación con una única operación. En este caso de ejemplo, Code Engine carga la imagen en IBM Cloud® Container Registry. Para obtener más información, consulte Despliegue de la aplicación a partir del código fuente del repositorio. Si desea tener más control sobre la compilación de la imagen, puede elegir compilar la imagen con Code Engine antes de desplegar la aplicación.

  • Si está empezando con un código fuente que reside en una estación de trabajo local, puede dejar que Code Engine se encargue de compilar la imagen desde el código fuente y desplegar la aplicación con un único mandato de CLI. En este caso de ejemplo, Code Engine carga la imagen en IBM Cloud® Container Registry. Para obtener más información, consulte Despliegue de la aplicación a partir del código fuente local con la CLI. Si desea tener más control sobre la compilación de la imagen, puede elegir compilar la imagen con Code Engine antes de desplegar la aplicación.

    Por ejemplo, puede dejar que Code Engine maneje la compilación del código fuente local mientras avanza en el desarrollo del código fuente para la aplicación. Una vez que la imagen ha madurado, puede actualizar la aplicación desplegada para que haga referencia a la imagen específica que desee. Puede repetir este proceso según sea necesario.

Cuando despliega la aplicación actualizada, se descarga y se despliega la última versión de la imagen de contenedor referenciada, a menos que se especifique una etiqueta para la imagen. Si se especifica una etiqueta para la imagen, se utiliza la imagen etiquetada para el despliegue.

¿Desea ver más ejemplos de código? Consulte los ejemplos de para IBM Cloud Code Engine GitHub.