¿Realmente necesito Kubernetes?

El texto original fue publicado en la comunidad china de kubernetes , la traducción original del autor, la dirección original

Para obtener más artículos de kubernetes, siga la comunidad china de kubernetes

Tabla de contenido

¿Qué hará Kubernetes?

Mejorar una sola aplicación

Aplicación monolítica mejorada

No más aplicaciones monolíticas

En conclusión


Si sigue las noticias de tecnología, entonces Kubernetes parece estar en todas partes. Se ha vuelto muy popular. De hecho, sin usar Kubernetes, los desarrolladores y los equipos de DevOps pueden sentir que su canal de desarrollo de aplicaciones está desactualizado.

Kubernetes es una herramienta de orquestación para aplicaciones en contenedores. A partir de los contenedores Docker, Kubernetes puede controlar la asignación de recursos y la gestión del tráfico de las aplicaciones y los microservicios en la nube.

De esta manera, Kubernetes simplifica muchos aspectos de la infraestructura de aplicaciones orientada a servicios. Además de la integración y la implementación continuas (CI / CD), Kubernetes también proporciona la infraestructura para escalar estas aplicaciones sin mucho trabajo.

Hay muchas cosas interesantes para usar Kubernetes para administrar entornos de nube e híbridos. Sin embargo, muchos equipos a menudo se ponen al día con los puntos calientes y migran a Kubernetes prematuramente, lo que a menudo resulta en una gran cantidad de tiempo, pérdida de dinero y frustración de los desarrolladores.

En este artículo, intentaremos ayudarte a responder las siguientes preguntas: ¿Realmente necesito Kubernetes?

¿Qué hará Kubernetes?

Kubernetes es una herramienta de orquestación para aplicaciones en contenedores. Es responsable de:

  • Implementar imágenes y contenedores
  • Gestionar la expansión de contenedores y clústeres
  • Gestión de recursos de contenedores y clústeres
  • Gestión del tráfico de servicios

Cuando su aplicación consta de varios servicios que se ejecutan en diferentes contenedores, Kubernetes aporta muchos beneficios. Para aplicaciones monolíticas con una base de usuarios estática, esto puede ser más de lo necesario.

Las tareas de creación, prueba y entrega de aplicaciones a los almacenes de contenedores no forman parte de Kubernetes. Estas tareas se pueden realizar mediante herramientas de CI / CD. Además de la canalización de CI / CD , Kubernetes también puede ayudarlo a implementar aplicaciones en el entorno de producción sin causar tiempo de inactividad del servicio.

Mejorar una sola aplicación

La mayoría de las aplicaciones comienzan como un monolito: colocando toda la aplicación en un solo lugar, los cambios se pueden realizar e implementar rápida y fácilmente. Sin embargo, si su aplicación crece, necesita encontrar una manera de escalar rápidamente.

¿Significa esto que es hora de Kubernetes? tal vez no.

A menudo, las extensiones tienen más que ver con las partes internas de la aplicación que con la arquitectura y las herramientas de alto nivel. Por ejemplo, puede expandir el conjunto implementando varias instancias con un equilibrador de carga que admita etiquetas de similitud.

El primer paso a considerar al expandir una aplicación es el desarrollo basado en pruebas (TDD), que puede garantizar la calidad del software y prevenir problemas a medida que la aplicación crece. Aunque los módulos o servicios más pequeños son más fáciles de probar, la modularidad también significa una mayor demanda de herramientas de simulación y adicionales para la configuración y el mantenimiento. Las buenas pruebas le permiten crear y ampliar aplicaciones de forma sencilla y segura.

Cuando comience a expandir el conjunto, las herramientas de administración de configuración como Chef y Ansible serán útiles. Puede usarlos para configurar automáticamente nuevos servidores para asegurarse de que estén listos para ejecutar su aplicación. Incluso puede ir un paso más allá y usar herramientas como Terraform para ayudar a configurar nuevas máquinas virtuales de servidor para que no tenga que crearlas manualmente.

Cuando otras partes de la aplicación se convierten en el cuello de botella (como la base de datos), también puede ampliar estas partes. Por ejemplo, si la base de datos se convierte en un cuello de botella, puede mover los datos a los que se accede con frecuencia a un almacenamiento de datos de memoria de alto rendimiento (como Redis) para reducir la carga en la base de datos.

Independientemente de la herramienta de administración y configuración que utilice, debe tener una buena canalización de CI / CD. Al implementar la aplicación por primera vez, es posible que haya copiado el archivo zip en el servidor a través de FTP, pero este método no se puede extender. La canalización de CI / CD simplificada garantiza que su aplicación se construya, pruebe e implemente automáticamente sin ningún trabajo adicional por parte de usted o su equipo.

Incluso puede utilizar servicios en la nube como AWS Elastic Beanstalk, Google App Engine o Azure App Service para escalar automáticamente una sola aplicación. En comparación con Kubernetes, todos estos conllevan menos gastos generales de administración y todos pueden funcionar bien con herramientas de CI / CD.

Al desarrollar una nueva aplicación, concéntrese en desarrollar la mejor aplicación. Las herramientas complejas como Kubernetes pueden ser la solución adecuada para administrar la infraestructura de aplicaciones.

Aplicación monolítica mejorada

A medida que la aplicación sigue creciendo, es posible que ya no pueda agregar funcionalidad a la aplicación monolítica. Por lo general, esto se debe a que la aplicación está cerca del límite de lo que puede hacer un solo equipo de desarrollo.

En este punto, muchos equipos optan por dividir la aplicación monolítica y migrar completamente a los microservicios. Aunque esta es una decisión popular, no es una decisión necesaria ni una panacea. Las organizaciones pueden considerar comenzar agregando servicios funcionales de una sola aplicación, en lugar de reemplazar la única aplicación como un todo. Algunos de estos servicios de apoyo pueden ser en realidad microservicios, por lo que puede beneficiarse del uso de pequeños servicios en circunstancias razonables y al mismo tiempo aprovechar los beneficios de las aplicaciones monolíticas.

Incluso con la introducción de microservicios, es posible que no necesite o desee comenzar con Kubernetes. Kubernetes es bueno para ejecutar y extender pods de servicios relacionados y contenedores de microservicios. Sin embargo, algunos aspectos de la adopción de Kubernetes se pasan por alto fácilmente. Por ejemplo, Kubernetes no tiene herramientas integradas potentes para proteger pods, nodos y clústeres, y la implementación de clústeres de Kubernetes en un entorno de múltiples nubes agrega mucha complejidad.

Comenzando con plataformas de nube única como Azure Service Fabric y AWS Fargate, es más fácil iniciar y escalar servicios sin obligarlo a administrar clústeres de Kubernetes.

Otra opción es evitar por completo los servicios con sobrecarga de mantenimiento y elegir funciones como servicio (FaaS) , como AWS Lambda o Azure Functions. FaaS es una excelente manera de minimizar la sobrecarga potencial de infraestructura al agregar servicios a una aplicación. Además, si finalmente necesita utilizar un clúster orquestado de Kubernetes, puede utilizar FaaS para mejorarlo.

No más aplicaciones monolíticas

Ahora, imagine que su aplicación monolítica ha crecido tan rápido que no puede adoptar el enfoque de aplicación monolítica y comienza a necesitar migrar a la arquitectura de microservicios.

Poco a poco, dispondrá de una variedad de servicios, muchos de los cuales necesitan comunicarse entre sí. Debe asegurarse de que los servicios interdependientes estén siempre en funcionamiento y sean visibles entre sí.

Además, a veces debe considerar ejecutar en múltiples zonas de disponibilidad (y posiblemente incluso en múltiples proveedores de nube).

En este punto, es posible que necesite un coordinador como Kubernetes. Le permite definir fácilmente módulos de servicios relacionados (Pods) y puede escalar automáticamente instancias de aplicaciones y balancear la carga entre servicios.

Para que Kubernetes funcione, las organizaciones deben:

  • Opere varias o docenas de máquinas virtuales
  • Asignar personal para realizar la configuración y el mantenimiento específicos de Kubernetes
  • Automatice la implementación de la mayoría de los servicios similares
  • Nada que ver con el proveedor de nube (o alojamiento)

Además, Kubernetes tiene soporte integrado para la implementación de alta disponibilidad (Amazon RDS Multi-AZ), lo que facilita la mejora de la confiabilidad y disponibilidad de las aplicaciones.

Por supuesto, esto conlleva gastos generales: se requieren tiempo y recursos de ingeniería para crear y administrar clústeres, definir pods y crear aplicaciones en contenedores adecuadas para la implementación en Kubernetes. Sin embargo, si su aplicación es lo suficientemente grande como para beneficiarse de Kubernetes, la sobrecarga de administración vale la pena.

En conclusión

Kubernetes es poderoso, pero eso no significa que sea la opción correcta para cada equipo y cada aplicación. Como cualquier tecnología, puede resolver ciertos problemas. Si no encuentra el problema que Kubernetes quiere resolver, es más problemático.

Primero, se recomienda publicar rápidamente la aplicación utilizando herramientas simples y disponibles. Cuando su aplicación alcanza su implementación y expansión como parte de su propia operación, es necesario comenzar a pensar en la orquestación y, naturalmente, usar Kubernetes como una herramienta de orquestación.

Enlace de traducción: https://thenewstack.io/do-i-really-need-kubernetes/

Supongo que te gusta

Origin blog.csdn.net/fly910905/article/details/109253937
Recomendado
Clasificación