Urbano alcanza nuevos horizontes con Kubernetes

El comercio electrónico y la entrega de bienes encontraron nuevas dificultades en el mundo pandémico y post-pandémico, y una rápida adaptación a estas nuevas necesidades por parte de las empresas de logística era de suma importancia para seguir siendo operativas. Urbano, una de las principales empresas de logística de Argentina con más de 1.100 vehículos en su flota, vio la necesidad de mejorar su gestión de datos para hacer frente a las nuevas demandas, por lo que recurrió a DinoCloud para obtener servicios de consultoría profesional y asesoramiento sobre cómo proceder para hacer frente a estos nuevos requisitos.

DinoCloud tiene una amplia experiencia y recursos técnicos para crear con éxito una arquitectura Kubernetes basada en la nube utilizando AWS EKS como su medio integral. Nuestro equipo de arquitectura de soluciones ha desplegado un puñado de infraestructuras basadas en Kubernetes, lo que se traduce en una implementación y consultoría en la nube eficaz y orientada a las necesidades.

Resistir en tiempos de cambio con los clústeres de contenedores

Desde el inicio del comercio electrónico, las empresas de logística y de transporte se han enfrentado a nuevos retos para mantener el ritmo de las exigencias del mercado. Durante y después de la pandemia, el aumento de la demanda de paquetes se disparó a nuevos horizontes, lo que ha dado lugar a nuevas inversiones por parte de estas empresas para gestionar el elevado tráfico de paquetes. No sólo se trataba de invertir en material de envío, equipos y vehículos, sino también en servicios tecnológicos que pudieran mejorar el tráfico y la gestión de datos.

DinoCloud le planteó a Urbano la posibilidad de migrar su infraestructura a una arquitectura basada en Kubernetes; DinoCloud aconsejó esto debido al rápido crecimiento que Urbano experimentó en los últimos años. La complejidad administrativa y de escalado que el aumento de la actividad supondría era más fácil de gestionar con AWS EKS.

Inicialmente, Urbano tenía su arquitectura en una infraestructura on-premise, lo que dificultaba los procesos de envío al no poder hacer frente al gran volumen de datos que la empresa manejaba en ese momento. Urbano se puso en contacto con DinoCloud para la migración de su arquitectura a la nube porque sabía que una arquitectura cloud-first con AWS EKS permitiría un mayor tráfico y gestión de datos.

DinoCloud recomendó que la mejor manera de abordar la gestión de grandes volúmenes de datos era migrar su arquitectura a un entorno de nube basado en contenedores, y el equipo técnico de Urbano validó esta elección. También creían que disponer de contenedores para desplegar, gestionar y escalar la aplicación sería la mejor manera de satisfacer las necesidades del mercado y de la empresa.
Debido al volumen de tráfico que manejaba la empresa, DinoCloud ofreció a Urbano migrar su arquitectura on-premise a la nube utilizando AWS ECS. Sin embargo, al poco tiempo de comenzar la implementación, Urbano experimentó un auge en sus transacciones, y los aspectos administrativos de AWSECS, aunque fáciles de configurar, resultaron bastante difíciles de gestionar. Por ello, DinoCloud sugirió detener la migración a AWS ECS y migrar su arquitectura a AWS EKS.

Cumplir los requisitos y los objetivos de la empresa en medio de la inestabilidad de los mercados 

Como decíamos antes, la pandemia hizo que las empresas tuvieran que enfrentarse a nuevos retos. En primer lugar, la cadena de suministro se vio afectada por las regulaciones impuestas por los gobiernos, pero, al mismo tiempo, el aislamiento social impulsó la demanda de entrega a domicilio. En segundo lugar, y como consecuencia de lo anterior, las páginas web recibieron una avalancha de tráfico, lo que se tradujo en un aumento de los costos operativos, ya que muchas personas tenían que estar trabajando para ampliar los recursos y dejar las páginas en pleno funcionamiento.

Conoce cómo DinoCloud ha realizado la arquitectura, la implementación y la migración de la infraestructura on-premise de Urbano a Kubernetes mediante AWS EKS.

Cuando la crisis del coronavirus alcanzó su punto álgido, numerosos países de todo el mundo impusieron medidas de bloqueo, y la cuota del comercio electrónico en el total de las ventas al por menor alcanzó proporciones nunca vistas. La cuota de comercio electrónico llegó a alcanzar el 31,3% en el Reino Unido, un país con un comercio electrónico establecido, antes de nivelarse en épocas posteriores. Los principales países en los que el comercio electrónico tuvo una mayor participación en el total del comercio minorista en el periodo más reciente (a 31 de enero de 2021) fueron el Reino Unido, Estados Unidos y Canadá, con un 24, 17 y 15%, respectivamente.

¿Buscas levantar una infraestructura autoescalable? Nosotros tenemos la expertise técnica para ayudarte.

Autoescalado y optimización de costos para prestar servicios de alta calidad

Siguiendo el impulso de la demanda que Urbano estaba experimentando, DinoCloud sugirió que la mejor manera de afrontarlo y de aportar más eficiencia a los procedimientos de la empresa era migrar de AWS ECS a AWS EKS. Este servicio basado en Kubernetes facilita la gestión compleja de varios servicios o aplicaciones multifacéticas.

La implementación de AWS EKS en Urbano no impuso muchos desafíos a los arquitectos de DinoCloud, principalmente por la experiencia y los conocimientos del equipo. Cuando se inició la migración, los arquitectos decidieron que debía hacerse gradualmente, de un entorno a la vez. Durante la migración propiamente dicha, el equipo técnico estuvo atento a posibles errores de configuración para mantener el sistema del cliente alejado de los tiempos de inactividad. Tras la migración de los entornos, se realizaron validaciones para comprobar su funcionamiento. 

No hubo grandes periodos de inactividad, solo dos horas y en entornos no de producción, y esto se consiguió trabajando cuidadosamente con el equipo de desarrollo. Utilizamos las mejores prácticas de Kubernetes con AWS EKS, como el uso de un flujo de trabajo de GitOps y service meshes para evitar los obstáculos habituales que surgen de conectar nuevos entornos con nuevas bases de datos.
Tras migrar con éxito todos los entornos, el equipo de DinoCloud comenzó a optimizar el autoescalado y a implementar herramientas y aplicaciones de terceros para facilitar el despliegue y el monitoreo. El monitoreo es una parte esencial de la optimización de la infraestructura porque aumenta la eficiencia de la producción al estudiar las métricas y estar preparados para parchear cualquier problema inmediatamente. Además, se realizan pruebas para comprobar cómo funcionan los entornos y descubrir si hay que actualizar o mejorar algo antes de pasar a producción.

Las ventajas de utilizar Kubernetes

La principal ventaja para Urbano fue el escalado basado en el uso, que brinda disponibilidad y la posibilidad de separar los diferentes servicios de la empresa. Esto permite la separación en contenedores es escalar de forma independiente y no tener que escalar todo un monolito sino poder escalar los microservicios.

Kubernetes proporciona una excelente gestión de la disponibilidad porque garantiza la cantidad necesaria de recursos para soportar la carga y, al mismo tiempo, mantiene los costos al mínimo si los recursos no son necesarios.

Kubernetes experimenta constantes actualizaciones, por lo que mantener el clúster de producción actualizado es una de las mejores prácticas recomendadas por la comunidad de Kubernetes. Esto se aplicó a la infraestructura de Urbano para garantizar la funcionalidad de las apps de terceros o comprobar si estas apps se depreciaron. 

Estar al día con las actualizaciones permite que los cambios se apliquen de forma gradual y no todos simultáneamente, lo que reduce la posibilidad de que se produzcan tiempos de inactividad y otros obstáculos. Además, estar al día permite a los ingenieros seguir aprendiendo más sobre los componentes. Cuando un componente cambia debido a un cambio de versión, el conocimiento sobre los componentes es obligatorio para entender lo que hay que cambiar.
Por último, otra de las ventajas de Kubernetes es su agnosticismo, es decir, no hay dependencia del sistema operativo de fondo, por lo que de esta forma los procedimientos de migración se realizan de forma mucho más rápida.

Tener un socio de consultoría en la nube para hacer frente a las demandas fluctuantes

El mercado del comercio electrónico y, en consecuencia, las transacciones logísticas y de transporte son propensos a cambios constantes. Es vital contar con una empresa tecnológica que tenga la experiencia y los conocimientos necesarios para afrontar estos cambios con prontitud y sin afectar al día a día del negocio. Como hemos tratado en este artículo, Urbano experimentó escenarios cambiantes que le llevaron a buscar una empresa de consultoría y desarrollo en la nube como DinoCloud para barrer esas piedras en el camino. 

DinoCloud es también un AWS Premier Partner, que a su vez alivia muchas de las complejidades administrativas que conlleva tener una arquitectura basada en Kubernetes, por lo que nuestros clientes pueden descansar en esta asociación para la grandeza, la innovación y la eficiencia.

Sobre Urbano

Urbano proporciona servicios de logística y mensajería en Argentina y en todo el mundo. Esta empresa ofrece un amplio conjunto de opciones de entrega y envío personalizadas para atender al sector empresarial y su reto cada vez mayor de entregar más, más rápido, y para el cliente que quiere una experiencia de compra más fácil y rápida. La filosofía empresarial de Urbano es «lo importante es saber cómo llegar» y la persecución de este ideal los ha llevado a cerrar acuerdos con grandes cuentas en todo el mundo.

Acerca de DinoCloud

DinoCloud es una empresa argentina cuyo propósito es asistir y guiar a las empresas que adoptan tecnologías de innovación global y de computación en la nube para hacer crecer los negocios de sus clientes y hacerlos más saludables y competitivos. DinoCloud ofrece una amplia gama de servicios y especialidades en la nube, asistiendo tanto en procedimientos generales como específicos del mercado.


LinkedIn: https://www.linkedin.com/company/dinocloud
Twitter: https://twitter.com/dinocloud_
Instagram: @dinocloud_
Youtube: https://www.youtube.com/c/DinoCloudConsulting

11 buenas prácticas para que tu clúster de producción tenga un comienzo exitoso

Los contenedores se han convertido en la norma para la creación de aplicaciones nativas de la nube, y Kubernetes, comúnmente conocido como K8s, es sin duda la tecnología de orquestación de contenedores más buscada.

Sin embargo, que sea popular no significa que sea fácil de usar. El sistema Kubernetes es complicado y requiere una curva de aprendizaje pronunciada para empezar a gestionar los contenedores. Aunque algunas de las siguientes buenas prácticas de Kubernetes y sugerencias pueden no ser apropiadas para tu entorno, las que sí lo son pueden ayudarte a utilizar Kubernetes de forma más eficaz y rápida.

Este post profundizará en las 11 buenas prácticas de Kubernetes para sacar el máximo partido a tu clúster de producción.

Utiliza siempre la última versión

Empezamos con un recordatorio amistoso: mantén la versión de Kubernetes actualizada. Además de introducir nuevas características y funcionalidades, las nuevas versiones vienen con correcciones y parches para remediar los problemas de vulnerabilidad y seguridad en el clúster de producción. Consideramos que esta es una de las ventajas más destacadas de mantener tu entorno K8s actualizado

Sin embargo, el equipo de producción debe estudiar y probar a fondo todas las nuevas características antes de actualizar, así como aquellas características o funcionalidades obsoletas para evitar perder la compatibilidad con las aplicaciones que se ejecutan en el clúster. Actualizar la versión sin analizarla y probarla en un entorno seguro podría dificultar los tiempos de producción.

Crea un firewall

Puede que esta práctica recomendada no te sorprenda, ya que tener un firewall delante de tu clúster de Kubernetes parece ser una práctica establecida, pero hay muchos desarrolladores que no prestan atención a esto.

Así que aquí va otro recordatorio amistoso: crea un firewall para el servidor API. Un firewall protegerá tu entorno en K8s para evitar que los atacantes envíen solicitudes de conexión al servidor API desde Internet. Las direcciones IP deben estar en una white list y los puertos abiertos deben estar restringidos mediante el uso de reglas de firewall de puertos.

Utiliza un flujo de trabajo de GitOps

kubernetes firewall

Un flujo de trabajo con base en Git es el método a seguir para un despliegue exitoso en Kubernetes. Este flujo de trabajo impulsa la automatización mediante el uso de pipelines CI/CD, que mejora la productividad al aumentar la eficiencia y la velocidad de despliegue de las aplicaciones.

Sin embargo, hay que tener en cuenta que el git debe ser la única fuente para toda la automatización que centralizará la gestión de todo el clúster de producción. Otra opción es elegir una plataforma de entrega de infraestructura dedicada, como Argo CD, una herramienta GitOps y de entrega continua declarativa para Kubernetes.

¿Tienes dudas sobre las metodologías GitOps? Nosotros podemos ayudarte.

Audita los logs

Audita los logs con regularidad para identificar vulnerabilidades o amenazas en tu clúster. Además, es esencial mantener una capa de logging centralizada para tus contenedores.

Por otro lado, la auditoría de los logs te dirá cuántos recursos se están consumiendo por tarea en el control plane y capturará los latidos de los eventos clave. Es fundamental vigilar los componentes del control plane de Kubernetes para limitar el uso de recursos. El control plane es el corazón de K8s y depende de estas piezas para mantener la funcionalidad del sistema y garantizar un funcionamiento correcto. El control plane está conformado por la API de Kubernetes, kubelet, etcd, controller-manager, kube-proxy y kube-dns.

Utiliza namespaces

Kubernetes viene con tres namespaces por defecto: default,kube-public y kube-system. Los namespaces son fundamentales para estructurar tu clúster de Kubernetes y mantenerlo seguro frente a otros equipos que operan en el mismo clúster. Necesitas namespaces distintos para cada equipo si tu clúster de Kubernetes tiene un tamaño considerable (cientos de nodos) y muchos equipos o aplicaciones trabajando en él. A veces, se crean entornos diferentes y se designan a cada equipo para optimizar costos.

Por ejemplo, se deberían designar varios namespaces para los equipos de desarrollo, pruebas y producción. Al hacer esto, el desarrollador que sólo tiene acceso al namespace de desarrollo no podrá actualizar nada en el namespace de producción accidentalmente. Existe la posibilidad de que los compañeros de equipo, con la mejor de las intenciones, los sobrescriban involuntariamente si no se realiza esta separación.

Solicitudes y límites de recursos

Los límites de recursos definen el máximo de recursos que puede utilizar un contenedor, mientras que las solicitudes de recursos definen el mínimo. Los pods de un clúster pueden utilizar más recursos de los necesarios si no hay solicitudes o restricciones de recursos. 

El programador podría ser incapaz de organizar pods adicionales si el pod empieza a utilizar más CPU o memoria en el nodo, y el propio nodo podría incluso fallar. Es habitual especificar la CPU en milicores tanto para las solicitudes como para las limitaciones. Los megabytes o mebibytes se utilizan para medir la memoria.

Utiliza labels/tags

Un clúster de Kubernetes está formado por múltiples componentes, que incluyen a los servicios, los pods, los contenedores, las redes, etc. Gestionar todos estos recursos y saber cómo se relacionan entre sí en un clúster supone un desafío, por lo que las etiquetas son útiles en esta situación. Los recursos de tu clúster se organizan mediante pares clave-valor llamadas etiquetas en Kubernetes.

Imaginemos, por ejemplo, que se ejecutan dos instancias del mismo tipo de programa: a pesar de tener nombres idénticos, equipos distintos utilizan cada una de las aplicaciones (por ejemplo, desarrollo y pruebas). Puedes ayudar a tus equipos a diferenciar entre las aplicaciones comparables si se crea un tag que utilice el nombre de tu equipo para mostrar la propiedad.

RBAC

kubernetes role access

Tu clúster de Kubernetes es vulnerable a ataques informáticos, como cualquier sistema y, para obtener acceso, los hackers suelen buscar puntos débiles en el sistema. Por lo tanto, mantener la seguridad de tu clúster Kubernetes debe ser una prioridad absoluta. Para esto, se debe verificar que su entorno en Kubernetes esté utilizando un  RBAC (o Role-Based Access Control en inglés) como primer paso.

Cada usuario de tu clúster y cada cuenta de servicio que se ejecute en tu clúster tiene que tener un rol asignado. Los permisos múltiples se encuentran en estos roles de RBAC que puede una cuenta de usuario o servicio puede utilizar. Varios usuarios pueden tener el mismo cargo, y cada rol puede tener varios permisos.

Seguimiento de las políticas de red

Las políticas de red se utilizan para limitar el tráfico entre los objetos del clúster de K8s. Por defecto, todos los contenedores tienen capacidades de comunicación de red, lo que plantea un problema de seguridad si los hackers pueden acceder a un contenedor y utilizarlo para moverse entre los objetos del clúster.Al igual que los grupos de seguridad en las plataformas en la nube limitan el acceso a los recursos, las políticas de red pueden gobernar el tráfico a nivel de IP y puerto. Normalmente, todo el tráfico debe ser denegado automáticamente, y se deben implementar reglas para permitir el tráfico necesario.

¿Se están monitoreando los puntos vitales de seguridad de tu aplicación?

Utiliza las readiness and liveness probes

Las readiness and liveness probes funcionan como los exámenes de salud. Antes de permitir que la carga se dirija a un pod específico, una readiness probe verifica que el pod está activo y operativo. Las solicitudes se retienen de tu servicio si el pod no está disponible hasta que la sonda confirme que el pod está disponible. 
Una liveness probe confirma la existencia de la aplicación: hace un ping al pod para intentar obtener una respuesta antes de comprobar su estado. Si no ocurre nada, la aplicación no está activa en el pod. Si la comprobación no tiene éxito, la sonda de vivacidad crea un nuevo pod y ejecuta la aplicación en él.

Services meshes

Puedes añadir una capa de infraestructura dedicada a tus aplicaciones denominada malla de servicios. Sin añadirlas a tu código, te permite agregar de forma transparente características como la observabilidad, la gestión del tráfico y la seguridad. La frase en inglés «service mesh» se refiere al software que se emplea para llevar a cabo este patrón y al dominio de seguridad o de red que resulta de su aplicación.

La comprensión y la gestión del despliegue de servicios distribuidos puede resultar más difícil a medida que aumenta su tamaño y complejidad, como en un sistema basado en Kubernetes. Tus requisitos pueden incluir la medición, la supervisión, la distribución del tráfico, la recuperación de fallos y el service discovery. Además, una service mesh suele ocuparse de necesidades operativas más complejas, como la autenticación de extremo a extremo, la restricción de velocidad, el control de acceso, el cifrado y los despliegues canary.

La capacidad de comunicación entre servicios es lo que da lugar a las aplicaciones distribuidas. A medida que aumenta el número de servicios, el enrutamiento de la comunicación dentro y entre los clusters de aplicaciones se vuelve más difícil.

Estas buenas prácticas de Kubernetes son solo una diminuta muestra de todas las que están disponibles para hacer de Kubernetes una tecnología más sencilla y beneficiosa para el desarrollo de aplicaciones. Como dijimos en la introducción, Kubernetes requiere una curva de aprendizaje pronunciada para poder empezar.

Incluso con un número cada vez mayor de herramientas y servicios para acelerar los procedimientos, los equipos de desarrollo pueden sentirse abrumados con las numerosas tareas necesarias en el desarrollo de aplicaciones modernas. Pero si empiezas con estos consejos, estarás bien encaminado para adoptar Kubernetes y avanzar en tus iniciativas de desarrollo de aplicaciones complejas.


LinkedIn: https://www.linkedin.com/company/dinocloud
Twitter: https://twitter.com/dinocloud_
Instagram: @dinocloud_
Youtube: https://www.youtube.com/c/DinoCloudConsulting