Note:

Escala automática de un pool de instancias de Oracle Cloud Infrastructure basada en solicitudes HTTP de OCI Load Balancer

Introducción

En este tutorial, veremos cómo escalar automáticamente un pool de instancias de Oracle Cloud Infrastructure (OCI) según el número de solicitudes HTTP recibidas por OCI Load Balancer. Vamos a tratar tres temas principales.

OCI Monitoring: utilice el servicio OCI Monitoring para supervisar de forma activa y pasiva los recursos en la nube mediante las funciones de métricas y alarmas. El servicio OCI Monitoring utiliza métricas para supervisar los recursos y las alarmas a fin de notificarle cuando estas métricas alcancen los disparadores especificados por las alarmas.

Notificaciones de OCI: cuando sucede algo con sus recursos en OCI, puede obtener mensajes legibles por el usuario a través de puntos finales soportados, incluidos mensajes de correo electrónico y texto (SMS) mediante alarmas, reglas de eventos y conectores. También puede automatizar tareas mediante puntos finales HTTPS personalizados y funciones de OCI.

OCI Functions: OCI Functions es una plataforma de funciones como servicio totalmente gestionada, multi-inquilino, altamente escalable y bajo demanda. Se basa en OCI de nivel empresarial y en el motor de código abierto Fn Project. Utilice OCI Functions (a veces abreviada como Functions y anteriormente conocida como Oracle Functions) cuando desee centrarse en la escritura de códigos para satisfacer las necesidades empresariales.

Arquitectura de alto nivel

T3_1

Nota:

Objetivos

Requisitos

Tarea 1: Configurar grupos dinámicos

Vaya al dominio, haga clic en Grupos dinámicos y cree los siguientes grupos.

Nombre de grupo dinámico: MyFunctions.

ALL {resource.type = 'fnfunc', resource.compartment.id = 'pasteYourCompartmentOCID'}

Tarea 2: Crear políticas

Vaya a Políticas y cree las siguientes políticas.

Nombre de la Política: FunctionsPolicies.

Allow dynamic-group MyFunctions to read repos in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage compute-management-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage load-balancers in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read metrics in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read alarms in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-pools in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to manage instance-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to read app-catalog-listing in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use volume-family in compartment YOUR-COMPARTMENT-NAME
Allow dynamic-group MyFunctions to use virtual-network-family in compartment YOUR-COMPARTMENT-NAME

Tarea 3: Creación de OCI Container Registry

  1. Vaya a Developer Services, haga clic en Registro de contenedores y cree un repositorio privado para la imagen de Fn.

    Nombre de repositorio: lab/fn-autoscale-instance-pool.

    T3_1

  2. Compruebe los repositorios y observe el espacio de nombres.

    T3_1

  3. Abra el shell de terminal donde tiene instalada la CLI y Docker de OCI y continúe con el inicio de sesión en el registro. Compruebe la URL correcta para su región. En este tutorial, estamos utilizando la región Este de Brasil (Sao Paulo), donde la URL de registro es gru.ocir.io.

    docker login gru.ocir.io
    Username: <your container namespace>/youruser
    Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
    

    T3_3

Tarea 4: Creación de Python OCI Functions para la escala automática del pool de instancias

Nota: Asegúrese de que ha seleccionado la subred privada, la misma subred del pool de flujos.

  1. Vaya a la consola de OCI y haga clic en Servicios para desarrolladores. En Funciones, haga clic en Solicitudes y Crear aplicación.

    T9_1

  2. Cree algunas configuraciones para configurar los tamaños de escala.

    Nota: Estas variables de configuración se utilizan para determinar los valores que la función utilizará para reducir y escalar horizontalmente el pool de instancias.

    Nombre secreto Valor
    INSTANCE_POOL_TARGET_SIZE Definir el valor para el nuevo tamaño del pool de instancias
    INSTANCE_POOL_DESIRED_SIZE Definir el tamaño normal del pool de instancias

    Para este tutorial, estamos utilizando un pool de instancias de 1 instancia y ampliando horizontalmente a 2.

    T4_2

  3. Vaya al shell de terminal donde tiene instalado Docker, la CLI de OCI, la CLI de Fn Project y ejecute los siguientes comandos para inicializar la función.

    Nota: Si ha seguido las tareas, el comando de inicio de sesión de Docker ya se ha ejecutado en este momento, si no es así, continúe con el inicio de sesión de Docker en la tarea 3.3.

    mkdir lab
    cd lab
    fn create context oci-cloud --provider oracle
    fn use context oci-cloud
    fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID
    fn update context api-url https://functions.sa-saopaulo-1.oraclecloud.com
    fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/lab
    fn init --runtime python fn-autoscale-instance-pool
    cd fn-autoscale-instance-pool
    ls -lrt
    

    Nota: En este tutorial, estamos utilizando la región Este de Brasil (São Paulo). Si está utilizando una región diferente, debe cambiar las ubicaciones api-url y registry.

    T4_3

    El comando init creará una función Hello World en func.py. Sobrescribiremos este código.

  4. Obtenga el código de ejemplo de función de Python de aquí: func.py y sobrescriba el func.py local creado durante el comando de función init.

    # Copy the function code from this lab and save it on /tmp/func.py in your shell machine
    ls -lrt /tmp/func.py
    
    # Overwrite the func.py with tha lab's code
    cp /tmp/func.py func.py
    
    # Add the OCI package on the requirements.txt file, this will be needed to work with OCI.
    echo -e "\noci" >> requirements.txt
    
    # Check if requirements.txt has two lines
    cat requirements.txt
    

    T9_1

  5. Cree el nuevo código y despliegue la función.

    ls -lrt
    fn deploy --app MyApp
    

    T4_1

Tarea 5: Creación de notificaciones de OCI

  1. Vaya a la consola de OCI y haga clic en Servicios para desarrolladores. En Integración de aplicación, seleccione Notificaciones y haga clic en Crear tema.

    Nombre: AutoScaleTopic.

    T5_1

  2. Haga clic en Suscripciones para crear una nueva suscripción y seleccione la función creada en la tarea 4.

    T5_2

Tarea 6: Creación de la definición de alarma para escalar horizontalmente (ajuste del tamaño del pool de instancias al valor de destino)

  1. Vaya a la consola de OCI y haga clic en Observación y gestión. En Control, seleccione Definiciones de alarma y haga clic en Crear alarma.

    Nota: Los umbrales, el intervalo de esta alarma se definen para el tutorial, puede personalizar según sus propias necesidades en función de la aplicación.

    Nombre de alarma: instance_pool_scale_OUT.

  2. Escriba la siguiente información para definir la alarma.

    1. En la sección Metric Description, introduzca la siguiente información.

      • Espacio de nombres de métrica: oci_lbaas.
      • Nombre de métrica: HttpRequests.
      • Intervalo: 1 minute.
      • Estadística: Max.
    2. En la sección Metric Dimensions, introduzca la siguiente información.

      • Primera dimensión de métrica:

        • Nombre de dimensión: resourceID.
        • Valor de dimensión: seleccione el OCID del equilibrador de carga.
      • Segunda dimensión de métrica:

        • Nombre de dimensión: backendSetName.
        • Valor de dimensión: seleccione el nombre backendSet.

      T6_1

    3. En la sección Regla de disparador 1, introduzca la siguiente información.

      • Operador: greater than.
      • Valor: 30.
      • Cuerpo de alarma: el número de conexiones es superior al esperado. Inicie el proceso de ampliación.

      T6_1

  3. Introduzca la siguiente información para definir las notificaciones de alarma.

    1. En la sección Destino, introduzca la siguiente información.

      • Servicio de destino: seleccione Notificaciones.
      • compartimento: seleccione el compartimento.
      • Tema: seleccione el tema.
    2. En la sección Formato de mensaje, seleccione Enviar mensajes JSON bonitos (texto sin formato con saltos de línea) y, para realizar pruebas, seleccione ¿Repetir notificación? con 1 minuto de Frecuencia de notificación.

    T6_1

  4. Haga clic en Opciones avanzadas y agregue una nueva etiqueta.

    Nota: Este es un etiquetado obligatorio para definir el tipo de escalado, entrante o saliente.

    Tag Namespace: seleccione None (aplicar una etiqueta de formato libre).
    Tag Key: autoscaling_type. Valor: out.

    T6_1

Tarea 7: Creación de la definición de alarma para reducirla (ajuste del tamaño del pool de instancias al tamaño deseado)

  1. Vaya a la consola de OCI y haga clic en Observación y gestión. En Control, seleccione Definiciones de alarma y haga clic en Crear alarma.

    Nota: Los umbrales, el intervalo de esta alarma se definen para el tutorial, puede personalizar según sus propias necesidades en función de la aplicación.

    Nombre de alarma: instance_pool_scale_IN.

  2. Escriba la siguiente información para definir la alarma.

    1. En la sección Metric Description, introduzca la siguiente información.

      • Espacio de nombres de métrica: oci_lbaas.
      • Nombre de métrica: HttpRequests.
      • Intervalo: 1 minute.
      • Estadística: Max.
    2. En la sección Metric Dimensions, introduzca la siguiente información.

      • Primera dimensión de métrica:

        • Nombre de dimensión: resourceID.
        • Valor de dimensión: seleccione el OCID del equilibrador de carga.
      • Segunda dimensión de métrica:

        • Nombre de dimensión: backendSetName.
        • Valor de dimensión: seleccione el nombre backendSet.
    3. En la sección Regla de disparador 1, introduzca la siguiente información.

      • Operador: less than.
      • Valor: 30.
      • Cuerpo de alarma: el recuento de conexiones vuelve al valor aceptable, llamando a la reducción para reducir el número de instancias al valor deseado.

      T7_1

  3. Introduzca la siguiente información para definir las notificaciones de alarma.

    1. En la sección Destino, introduzca la siguiente información.

      • Servicio de destino: seleccione Notificaciones.
      • compartimento: seleccione el compartimento.
      • Tema: seleccione el tema.
    2. En la sección Formato de mensaje, seleccione Enviar mensajes JSON bonitos (texto raw con saltos de línea).

  4. Haga clic en Opciones avanzadas y agregue una nueva etiqueta.

    Nota: Este es un etiquetado obligatorio para definir el tipo de escalado, entrante o saliente.

    Tag Namespace: seleccione None (aplicar una etiqueta de formato libre).
    Tag Key: autoscaling_type. Valor: in.

    T7_1

Tarea 8: Crear carga y comprobar el funcionamiento de la alarma

  1. Obtenga su IP LoadBalancer y ejecute varias llamadas a la aplicación en el puerto 80. Abra la consola de shell y ejecute el siguiente código para llamar al equilibrador de carga.

    i=1
    while true
    do
    echo "Request $i"
       curl http://your-ip-here
       ((i++))
       echo ""  # Prints a newline for better readability between requests
    done
    

    Salida de la carga de la aplicación simple.

    T8_1

    Nota: Este es un servidor web HTTP Apache sencillo para demostrar el escenario.

  2. Compruebe el tamaño y el estado reales del pool de instancias. Para este tutorial, tenemos un pool de instancias con el tamaño 1.

    T8_1

  3. Abra la definición de alarma para ver las métricas y comprobar si la alarma se disparará.

    T8_1

    T8_1

  4. Tras unos minutos, en función del intervalo de métricas, se activará la función de ampliación.

    Abra los pools de instancias y compruebe que el estado, que es Escala y el recuento de instancias de destino es 2.

    T8_1

    Después del proceso de escala, puede ver que el tamaño del pool de instancias es 2.

    T8_1

  5. Detenga la secuencia de comandos de shell y espere hasta que la alarma de la transición de escalabilidad horizontal vuelva a estar en OK (Correcto) y, a continuación, observe la alarma para la reducción vertical. Espere unos minutos hasta que se actualicen ambas alarmas y observe cuándo se disparará la alarma de reducción.

    T8_1

    Ahora, la alarma de reducción está en estado de incendio.

    T8_1

    Observe que HttpRequests ha caído a un número por debajo del umbral de 30.

    T8_1

    Se ha iniciado la reducción horizontal del pool de instancias.

    T8_1

    Observe que el tamaño del pool de instancias vuelve al valor deseado de 1.

    T8_1

Agradecimientos

Más recursos de aprendizaje

Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.