Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse en una cuenta gratuita, consulte Introducción a Oracle Cloud Infrastructure Free Tier.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos del entorno en la nube.
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.
- Métricas de alarma de OCI Monitoring: supervise el equilibrador de carga y configure alarmas basadas en métricas de solicitud HTTP.
- Servicio OCI Notifications: envía notificaciones cuando se dispara una alarma.
- OCI Functions: cree y utilice funciones para ajustar el tamaño del pool de instancias según las notificaciones recibidas.
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
Nota:
Este tutorial está diseñado exclusivamente para fines educativos y de estudio. Proporciona un entorno para que los estudiantes experimenten y adquieran experiencia práctica en un entorno controlado. Es crucial tener en cuenta que las configuraciones y prácticas de seguridad empleadas en este tutorial pueden no ser adecuadas para escenarios del mundo real.
Las consideraciones de seguridad para las aplicaciones reales suelen ser mucho más complejas y dinámicas. Por lo tanto, antes de implementar cualquiera de las técnicas o configuraciones aquí demostradas en un entorno de producción, es esencial realizar una evaluación y revisión exhaustivas de la seguridad. Esta revisión debe abarcar todos los aspectos de la seguridad, incluido el control de acceso, el cifrado, la supervisión y el cumplimiento, para garantizar que el sistema se alinee con las políticas y estándares de seguridad de la organización.
La seguridad siempre debe ser una prioridad al realizar la transición de un entorno de prácticas a un despliegue real.
Objetivos
-
Configurar un mecanismo de escala automática para un pool de instancias de OCI. Este mecanismo de escala automática se basará en el número de solicitudes HTTP recibidas por el equilibrador de carga de OCI. Aprenderá a:
-
Supervisar métricas de solicitud HTTP: configure OCI Monitoring para realizar un seguimiento de las métricas de solicitud HTTP del equilibrador de carga.
-
Crear y configurar alarmas: defina y configure alarmas que se disparen en función de umbrales de solicitud HTTP específicos.
-
Configurar notificaciones de eventos: establezca notificaciones de eventos para avisarle cuando se dispara una alarma.
-
Implantar OCI Functions: cree y despliegue funciones para ajustar automáticamente el tamaño del pool de instancias en respuesta a las alarmas disparadas.
-
Requisitos
-
Entorno de OCI
-
Cuenta de Oracle con permisos de administrador.
-
Un compartimento para crear los recursos.
Nota: Observe el nombre del compartimento y el ID del compartimento.
-
VCN con una subred privada. Para obtener más información, consulte Creación de una red virtual en la nube.
-
OCI Load Balancer asociado al pool de instancias con un backendSet que apunta a las instancias del pool. Para obtener más información, consulte Creación de un equilibrador de carga.
-
Pool de instancias con al menos 1 instancia que tiene una aplicación HTTP simple en ejecución en el puerto
80
. Para obtener más información, consulte Using Instance Configurations and Instance Pools.
-
-
Entorno de máquina local
-
Una instancia informática de Oracle Linux en la subred privada. Esto es importante para acceder a los recursos de la subred privada, como OCI Streaming y OCI Functions que se desplegarán durante este tutorial.
-
Host de OCI Bastion para conectarse a la instancia informática de Oracle Linux y realizar tareas para el tutorial. Para obtener más información, consulte Visión general de Bastion.
-
Configurar la interfaz de línea de comandos (CLI de OCI) local de Oracle Cloud Infrastructure. Para obtener más información, consulte Instalación de la CLI.
-
Docker local para poder crear imágenes, si utiliza Oracle Linux, consulte Docker: Install Docker on Oracle Linux 8 (OL8).
-
CLI de FN local para poder desplegar su función en OCI. Para obtener más información, consulte Installing the Fn Project CLI.
-
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
-
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
. -
Compruebe los repositorios y observe el espacio de nombres.
-
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
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.
-
Vaya a la consola de OCI y haga clic en Servicios para desarrolladores. En Funciones, haga clic en Solicitudes y Crear aplicación.
-
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
. -
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
yregistry
.El comando
init
creará una función Hello World enfunc.py
. Sobrescribiremos este código. -
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óninit
.# 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
-
Cree el nuevo código y despliegue la función.
ls -lrt fn deploy --app MyApp
Tarea 5: Creación de notificaciones de OCI
-
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
. -
Haga clic en Suscripciones para crear una nueva suscripción y seleccione la función creada en la tarea 4.
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)
-
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
. -
Escriba la siguiente información para definir la alarma.
-
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
.
- Espacio de nombres de métrica:
-
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.
- Nombre de dimensión:
-
Segunda dimensión de métrica:
- Nombre de dimensión:
backendSetName
. - Valor de dimensión: seleccione el nombre backendSet.
- Nombre de dimensión:
-
-
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.
- Operador:
-
-
Introduzca la siguiente información para definir las notificaciones de alarma.
-
En la sección Destino, introduzca la siguiente información.
- Servicio de destino: seleccione Notificaciones.
- compartimento: seleccione el compartimento.
- Tema: seleccione el tema.
-
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.
-
-
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
.
Tarea 7: Creación de la definición de alarma para reducirla (ajuste del tamaño del pool de instancias al tamaño deseado)
-
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
. -
Escriba la siguiente información para definir la alarma.
-
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
.
- Espacio de nombres de métrica:
-
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.
- Nombre de dimensión:
-
Segunda dimensión de métrica:
- Nombre de dimensión:
backendSetName
. - Valor de dimensión: seleccione el nombre backendSet.
- Nombre de dimensión:
-
-
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.
- Operador:
-
-
Introduzca la siguiente información para definir las notificaciones de alarma.
-
En la sección Destino, introduzca la siguiente información.
- Servicio de destino: seleccione Notificaciones.
- compartimento: seleccione el compartimento.
- Tema: seleccione el tema.
-
En la sección Formato de mensaje, seleccione Enviar mensajes JSON bonitos (texto raw con saltos de línea).
-
-
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
.
Tarea 8: Crear carga y comprobar el funcionamiento de la alarma
-
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.
Nota: Este es un servidor web HTTP Apache sencillo para demostrar el escenario.
-
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
. -
Abra la definición de alarma para ver las métricas y comprobar si la alarma se disparará.
-
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
.Después del proceso de escala, puede ver que el tamaño del pool de instancias es
2
. -
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.
Ahora, la alarma de reducción está en estado de incendio.
Observe que HttpRequests ha caído a un número por debajo del umbral de
30
.Se ha iniciado la reducción horizontal del pool de instancias.
Observe que el tamaño del pool de instancias vuelve al valor deseado de
1
.
Enlaces relacionados
Agradecimientos
- Autor: Joao Tarla (ingeniero de soluciones de equipo A de Oracle LAD)
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.
Autoscale an Oracle Cloud Infrastructure Instance Pool based on OCI Load Balancer HTTP Requests
F99755-01
May 2024