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.
¿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!
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.
¡Con esos antecedentes fuera del camino, estás listo para enfrentar a MARA en MicroK8!
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:
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 MicroK8s:
$ sudo snap install microk8s --classic microk8s (1.23/stable) v1.23.3 de Canonical✓ instalado
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
Cierre la sesión de su cuenta con privilegios de raíz y vuelva a iniciarla para que los nuevos permisos surtan efecto.
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 . X ‑ X . X . X . Y
para representar:
192.168.100.100-192.168.100.110
, el valor utilizado a continuación)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
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 ...
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 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
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.
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
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. | ==================================================================
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:
¡AVISO!
en el paso 3 a continuación para obtener más información.AVISO!
en el paso 3.Implementar MARA en el clúster MicroK8s:
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.
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.
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.
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
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.
Cree un fqdn para su valor de implementación: mara.example.com
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>
Aparece un seguimiento del proceso de instalación, mostrando la siguiente información para cada paso:
Logstore
señala el inicio de la implementación de Elasticsearch)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.
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).
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
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.
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
¡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.
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.