BLOG | NGINX

MARA: Ahora funcionando en una estación de trabajo cerca de usted

NGINX - Parte de F5 - horizontal, negro, tipo RGB
Miniatura de Jason Schmidt
Jason Schmidt
Publicado el 22 de abril de 2022

Cuando comenzamos a trabajar en el proyecto NGINX Modern Apps Reference Architecture (MARA), elegimos a AWS como nuestro proveedor de IaaS porque ya estábamos familiarizados con la plataforma y podíamos usar nuestro presupuesto departamental para pagarla. No todos tienen la misma experiencia o presupuesto, por supuesto, y muchos de ustedes nos han pedido que proporcionemos opciones para ejecutar MARA localmente (en un entorno de laboratorio o incluso en una estación de trabajo) con distribuciones de Kubernetes como K3s , Canonical MicroK8s y minikube .

Te escuchamos y hoy tenemos el placer de anunciar que hemos probado MARA en MicroK8 y estamos brindando instrucciones para que puedas implementarlo tú mismo.

Diagrama que muestra la topología de la arquitectura de referencia de aplicaciones modernas NGINX que se ejecuta en una estación de trabajo

¿Por qué elegimos MicroK8s para nuestras pruebas? Porque proporciona las capacidades de DNS, almacenamiento y salida que MARA necesita, en un modelo fácil de implementar con un bajo consumo de memoria. Con MicroK8s, podemos iterar fácilmente y repetidamente a través de escenarios de prueba para determinar los requisitos mínimos para implementaciones que brinden niveles razonables de rendimiento.

Nuestra expectativa es que este trabajo facilitará nuestras pruebas de otras distribuciones de Kubernetes; para obtener información sobre el estado actual de varias distribuciones, consulte nuestro repositorio de GitHub . Si tienes una distribución favorita que quieres ver en la lista, ¡te invitamos a bifurcar, probar y crear solicitudes de extracción!

Cómo afrontar las limitaciones de recursos

Las mayores limitaciones para ejecutar MARA localmente son la memoria y la CPU. Durante las pruebas preliminares, descubrimos que la mayoría de los problemas con el agotamiento de la memoria afectaban a Elasticsearch. Kibana es casi inutilizable en configuraciones con una cantidad de memoria extremadamente pequeña (menos de 16 GB ). Para solucionar este problema, hemos proporcionado configuraciones en el archivo de configuración de MARA que eliminan las protecciones de redundancia que normalmente tiene una implementación completa de Elasticsearch. Si bien esto aumenta el número de modos de falla, es una compensación necesaria en entornos con recursos limitados.

Las restricciones de la CPU están directamente relacionadas con la cantidad de carga impuesta a nuestra aplicação de muestra Bank of Sirius . La implementación de MARA incluye Locust para generar carga en Bank of Sirius, con configuraciones controladas por el usuario para la cantidad de usuarios y la tasa de generación de nuevos usuarios.

Tenga en cuenta que aumentar la carga en el Banco de Sirio también afecta al resto del sistema. Si el número de usuarios o la tasa de generación es demasiado alta, el rendimiento de MARA se degrada hasta el punto en que es probable que los componentes se bloqueen o se detengan. Los valores que provocan este comportamiento dependen de la CPU disponible, pero puede esperar una implementación con al menos la capacidad especificada en Requisitos para manejar la carga creada por hasta 64 usuarios y una tasa de extensión de 16 usuarios a la vez.

Implementación de MARA en MicroK8

¡Con esos antecedentes fuera del camino, estás listo para enfrentar a MARA en MicroK8!

Requisitos

  • acceso root en un sistema (servidor Linux físico, virtualizado o en la nube) que ejecute Ubuntu 20.04 (Focal) o posterior, con al menos:

    • Disco de 20 GB
    • 16 GB de memoria
    • El equivalente a 4 CPU
  • Un entorno virtual de Python 3 en el sistema local con todas las bibliotecas y binarios requeridos por MARA. Si Python 3 aún no está instalado, ejecute estos comandos:

    $ sudo apt update $ sudo apt install -y python3-venv
  • Al menos una dirección IPv4 libre para que el balanceador de carga MetalLB integrado de MicroK8s la asigne a la salida del controlador de ingreso NGINX. Si accede a la aplicação Bank of Sirius a través del host local, cualquier dirección privada disponible (compatible con RFC 1918 ) es aceptable. Por ejemplo, si su red es 192.168.100.0/24 puede utilizar una dirección como 10.10.10.10.

  • Una cuenta Pulumi y un token de acceso. Si aún no los tiene, los creará en el Paso 1 de Implementar MARA .

    Tenga en cuenta que, si bien Pulumi le permite almacenar el archivo de estado en un almacén de objetos compatible con S3 o en el sistema de archivos local, MARA no admite esto al momento de escribir este artículo. Esta limitación se eliminará en una futura versión de MARA o Pulumi.

Instalar y configurar MicroK8s

  1. Instalar MicroK8s:

    $ sudo snap install microk8s --classic microk8s (1.23/stable) v1.23.3 de Canonical✓ instalado
  2. Establezca los permisos necesarios para ejecutar comandos microk8s . Para <nombre de usuario>, sustituye tu cuenta que tiene raíz privilegio en el sistema:

    $ sudo usermod -a -G microk8s <nombre de usuario>$ sudo chown -f -R <nombre de usuario> ~/.kube
    $ nuevo grupo microk8s
  3. Cierre la sesión de su cuenta con privilegios de raíz y vuelva a iniciarla para que los nuevos permisos surtan efecto.

  4. Habilite los complementos de MicroK8s para DNS , almacenamiento y MetalLB .

    En el aviso, especifique un rango de direcciones IP con el formato X . X . X . XX . X . X . Y para representar:

    • Un rango real de direcciones IP privadas (por ejemplo,192.168.100.100-192.168.100.110 , el valor utilizado a continuación)
    • Una única dirección IP privada (por ejemplo,192.168.100.100-192.168.100.100 )
    $ microk8s enable dns storage metallb Habilitando DNS Aplicando manifiesto...
    Reiniciar kubelet DNS está habilitado Habilitando la clase de almacenamiento predeterminada...
    El almacenamiento estará disponible pronto Habilitando MetalLB Ingrese cada rango de direcciones IP delimitado por coma (por ejemplo, '10.64.140.43-10.64.140.49,192.168.0.105-192.168.0.111'): 192.168.100.100-192.168.100.110
    Aplicando el manifiesto de Metallb...
    MetalLB está habilitado
  5. Confirme que MicroK8s se está ejecutando:

    $ microk8s status microk8s se está ejecutando alta disponibilidad: no hay nodos maestros de almacén de datos: 127.0.0.1:19001 nodos en espera del almacén de datos: ninguno complementos: habilitados: dns # CoreDNS ha-cluster # Configurar alta disponibilidad en el nodo actual metallb # Balanceador de carga para su clúster de Kubernetes almacenamiento # Clase de almacenamiento; asigna almacenamiento desde el directorio del host ...
  6. Cargue la configuración de MicroK8s en el archivo donde la mayoría de las utilidades esperan encontrarlo ( ~/.kube/config ) y configure los permisos recomendados en el directorio y el archivo:

    $ microk8s config > ~/.kube/config $ sudo chmod 0644 ~/.kube/config

Clonar el repositorio MARA y configurar el clúster MicroK8s

  1. Clonar el repositorio MARA e inicializar el submódulo Bank of Sirius:

    $ git clone https://github.com/nginxinc/kic-reference-architectures.git $ cd kic-reference-architectures/ $ git submódulo actualización --init --recursive --remote
  2. Trabajando en el directorio raíz del repositorio MARA clonado (cambió el directorio allí en el paso anterior), configure el entorno virtual de Python para el clúster MicroK8s:

    $ ./bin/setup_venv.sh

    Este comando genera un seguimiento largo. Si hay errores, consulte la sección Problemas conocidos/Advertencias en el repositorio de GitHub de MARA para obtener sugerencias.

  3. Activar el entorno virtual de Python. El comando establece su PATH y otras variables de entorno para utilizar el entorno virtual:

    $ fuente ./pulumi/python/venv/bin/activate
  4. Confirme que el clúster MicroK8s esté configurado correctamente para la implementación de MARA:

    $ ./bin/testcap.sh Este script realizará pruebas en la instalación actual de Kubernetes utilizando la configuración y el contexto de Kubernetes actualmente activos.
    Se debe investigar cualquier falla, ya que indicará que la instalación no cumple con el conjunto mínimo de capacidades requeridas para ejecutar MARA. ... ============================================================= | ¡Todas las pruebas pasaron! Este sistema cumple con los requisitos básicos | | para implementar MARA. | ==================================================================

Implementar MARA

El script start.sh , que se utiliza en esta sección para implementar MARA, admite opciones que requieren acciones adicionales para que la implementación sea exitosa. Para simplificar, aquí asumimos una implementación básica que:

  • Utiliza archivos kubeconfig en lugar de una de las otras opciones de implementación compatibles. Para obtener detalles sobre las otras opciones, consulte la Guía de primeros pasos en nuestro repositorio de GitHub.
  • Utiliza la versión más reciente de NGINX Open Source con la que hemos probado MARA (no necesariamente la última versión).
  • Utiliza el controlador de ingreso NGINX basado en NGINX de código abierto. Si desea utilizar el controlador de ingreso NGINX basado en NGINX Plus, debe utilizar una imagen basada en NGINX Plus del registro Docker de F5 en su clúster de Kubernetes. Consulte el primer ¡AVISO! en el paso 3 a continuación para obtener más información.
  • Utiliza un único contexto de Kubernetes estándar. ¡Vea el segundo AVISO! en el paso 3.

Implementar MARA en el clúster MicroK8s:

  1. Ejecute el script start.sh .

    Si aún no ha configurado su estación de trabajo para usar Pulumi, se le indicará que inicie sesión en Pulumi (creando una cuenta si es necesario) y luego se le solicitará el token de API asociado con su cuenta de Pulumi.

    $ ./bin/start.sh Agregar a [/home/ubuntu/kic-reference-architectures/bin/venv/bin] a PATH Administre sus pilas de Pulumi iniciando sesión.
    Ejecute `pulumi login --help` para obtener opciones de inicio de sesión alternativas.
    Introduce tu token de acceso desde https://app.pulumi.com/account/tokens o pulsa <ENTER> para iniciar sesión desde tu navegador. <ficha>
    
    Para más detalles, lea la documentación.
  2. Seleccione el tipo de implementación y escriba k en el indicador para crear la implementación con archivos kubeconfig. Ignore las advertencias sobre que make y Docker no están instalados: la implementación utiliza una imagen del controlador de ingreso NGINX de un registro.

    Escriba a para AWS, k para kubeconfig? k Llamar al script de inicio de kubeconfig make no está instalado: debe instalarse si desea compilar el controlador de ingreso de NGINX Kubernetes desde la fuente. docker no está instalado: debe instalarse si desea compilar el controlador de ingreso de NGINX Kubernetes desde la fuente.
  3. En el aviso, especifique el nombre de la pila Pulumi que se creará (aquí, mara ). Debe ser único dentro de su cuenta Pulumi.

    Ingrese el nombre de la pila Pulumi que se utilizará en todos los proyectos: mara Se encontró el origen del submódulo Configurando todos los proyectos Pulumi para usar la pila: mara Pila creada 'mara' ¡AVISO! Actualmente, la implementación a través de kubeconfig solo admite la extracción de imágenes del registro. Se requiere un JWT para acceder al repositorio NGINX Plus. Esto debe colocarse en un archivo en el directorio extras en la raíz, en un archivo llamado jwt.token. Consulte https://docs.nginx.com/nginx-ingress-controller/installation/using-the-jwt-token-docker-secret/ para obtener más detalles y ejemplos.
    
    No se encontró JWT; escribiendo el manifiesto del marcador de posición ¡AVISO! Al utilizar un archivo kubeconfig, debe asegurarse de que su entorno esté configurado para conectarse a Kubernetes correctamente. Si tiene varios contextos de Kubernetes (o contextos personalizados), es posible que deba eliminarlos y reemplazarlos con un simple archivo ~/.kube/config. Este problema se abordará en una versión futura.
  4. En las indicaciones, especifique la ruta completa a su archivo kubeconfig y el nombre del clúster. Aquí están /hogar/<nombre de usuario>/.kube/config y clúster microk8s.

    Proporcione una ruta absoluta al valor del archivo kubeconfig: /hogar/<nombre de usuario>/.kube/config
    Proporcione el nombre de su clúster
    valor: clúster microk8s
    Intentando conectar con el clúster de Kubernetes
  5. Especifique el nombre de dominio completo (FQDN) para el clúster en el siguiente mensaje. El script utiliza el FQDN para dos propósitos: configurar el controlador de ingreso NGINX y crear el certificado autofirmado (el segundo uso significa que el valor no puede ser una dirección IP). Si sustituye un FQDN diferente para mara.example.com , recuerde usarlo también en los siguientes pasos.

  6. Cree un fqdn para su valor de implementación: mara.example.com
  7. Especifique la contraseña de administrador de Grafana:

    Cree una contraseña para el usuario administrador de Grafana; esta contraseña se utilizará para acceder al panel de Grafana. Debe ser una cadena alfanumérica sin ningún carácter especial de shell; se presenta en texto simple debido a las limitaciones actuales con los secretos de Pulumi. Necesitará esta contraseña para acceder al panel de control de Grafana.
    valor: <contraseña>
  8. Aparece un seguimiento del proceso de instalación, mostrando la siguiente información para cada paso:

    • Un banner que describe la acción clave realizada en el paso (por ejemplo, Logstore señala el inicio de la implementación de Elasticsearch)
    • Una lista de las tareas que Pulumi va a realizar
    • Un indicador de estado en tiempo real para cada tarea de Pulumi
    • Diagnósticos generados por Pulumi y MARA, por ejemplo, el nombre de host y la dirección IP definidos
    • El número de recursos afectados
    • El tiempo transcurrido

    Cuando se completa el paso final (para Bank of Sirius), el seguimiento informa la dirección IP asignada al controlador de ingreso NGINX por MetalLB (aquí192.168.100.100 ) y el FQDN que eligió para la implementación (aquí mara.example.com ) junto con otra información sobre la implementación.

    El proceso de inicio se ha completado correctamente.
    Próximos pasos:
    1.Asigne la dirección IP (192.168.100.100) de su controlador de Ingress a su FQDN (mara.example.com).
    2.Utilice el programa ./bin/test-forward.sh para establecer túneles que pueda usar para conectarse a las herramientas de administración.
    3.Utilice kubectl, k9s o el panel de control de Kubernetes para explorar su implementación.
    
    Para revisar las opciones de configuración, incluidas las contraseñas definidas, puede acceder a los secretos de Pulumi mediante los siguientes comandos:
    
    Configuración principal: pulumi config -C /jenkins/workspace/jaytest/bin/../pulumi/python/config
    
    Configuración de Bank of Sirius ( aplicação de ejemplo): pulumi config -C /jenkins/workspace/jaytest/bin/../pulumi/python/kubernetes/ aplicações/sirius
    
    IP del balanceador de carga K8: kubectl get services --namespace nginx-ingress
    
    Consulte la documentación en el repositorio de Github para obtener más información.
  9. Cree una asignación entre el FQDN y la dirección IP informada en el paso anterior, en la herramienta que utiliza para resolver FQDN (como el archivo /etc/hosts local o el servidor DNS).

  10. Verificar que una solicitud a la implementación de MARA tenga éxito. Incluya la opción -k para que curl acepte un certificado autofirmado. Para mostrar más información sobre el certificado, agregue la opción -v .

    $ curl -k -I https://mara.example.com HTTP/1.1 200 OK Servidor: nginx/1.21.5 Fecha: Día , DD Lun AAAA hh:mm:ss TZ Tipo de contenido: texto/html; conjunto de caracteres=utf-8 Longitud del contenido: Conexión 7016: mantener activa
  11. Navegue en un navegador a https://mara.example.com para mostrar el sitio web del Banco de Sirius. Al momento de escribir esto, con muchos navegadores (incluidos Firefox y Safari) puedes hacer clic de manera segura en la advertencia que aparece sobre el sitio que utiliza un certificado autofirmado. Le recomendamos que no utilice Chrome: debido a cambios de seguridad recientes, es probable que le impida acceder al sitio.

  12. Ejecute el script test-forward.sh para configurar el reenvío de puertos de Kubernetes para que pueda acceder a las herramientas de la suite de administración MARA: Elasticsearch , Grafana , Kibana , Locust y Prometheus . El script determina los nombres de servicio apropiados y ejecuta comandos kubectl para reenviarlos a los puertos locales.

    Nota:  Para que el reenvío de puertos funcione correctamente, su navegador debe estar ejecutándose en el mismo sistema que el shell de comandos donde ejecuta este comando. En caso contrario (porque estás usando un entorno de virtualización, por ejemplo), el comando parece tener éxito pero el reenvío de puertos en realidad no funciona. Para obtener más información, consulte Acceder a las herramientas de administración en MARA en nuestro repositorio de GitHub.

    $ ./bin/test-forward.sh Detalles de las conexiones ===================================== Kibana: http://localhost:5601 Grafana: http://localhost:3000 Locust: http://localhost:8089 Prometheus: http://localhost:9090 Elasticsearch: http://localhost:9200 ====================================== Presione Ctrl+C para salir

resumen

¡Eso es todo! Con estas instrucciones, una implementación de MARA funcional estará lista y funcionando en su entorno en aproximadamente 20 minutos. En este punto, puedes interactuar con la aplicação Bank of Sirius como cualquier otra aplicação de Kubernetes. Un buen lugar para comenzar es utilizar las herramientas de observación integradas para probar cómo se comporta el entorno a medida que genera diferentes cantidades de carga con Locust.

Nuestro objetivo es hacer que MARA sea lo más útil posible para la mayor cantidad posible de usuarios de Kubernetes. ¿No te gustan las elecciones que hemos hecho para algunos de los componentes? Te recomendamos que sustituyas tus componentes y abras una solicitud de extracción si deseas compartirlos. Además, comparta sus ideas y haga preguntas (incluso sobre cualquier suposición cuestionable que hayamos hecho) en las páginas de Problemas y Discusiones de nuestro repositorio.

Publicaciones relacionadas

Esta publicación es parte de una serie. A medida que vayamos añadiendo capacidades a MARA, publicaremos los detalles en el blog:


"Esta publicación de blog puede hacer referencia a productos que ya no están disponibles o que ya no reciben soporte. Para obtener la información más actualizada sobre los productos y soluciones F5 NGINX disponibles, explore nuestra familia de productos NGINX . NGINX ahora es parte de F5. Todos los enlaces anteriores de NGINX.com redirigirán a contenido similar de NGINX en F5.com.