Orquestación de microservicios y aplicaciones de varios contenedores para una alta escalabilidad y disponibilidadOrchestrating microservices and multi-container applications for high scalability and availability

La utilización de orquestadores para aplicaciones listas para producción es fundamental si la aplicación se basa en microservicios o simplemente está dividida entre varios contenedores.Using orchestrators for production-ready applications is essential if your application is based on microservices or simply split across multiple containers. Como se mencionó anteriormente, en un enfoque basado en microservicios, cada microservicio posee su modelo y sus datos para que sea autónomo desde un punto de vista del desarrollo y la implementación.As introduced previously, in a microservice-based approach, each microservice owns its model and data so that it will be autonomous from a development and deployment point of view. Pero incluso si tiene una aplicación más tradicional que se compone de varios servicios (por ejemplo, SOA), también tendrá varios contenedores o servicios que conforman una sola aplicación de negocio que deban implementarse como un sistema distribuido.But even if you have a more traditional application that's composed of multiple services (like SOA), you'll also have multiple containers or services comprising a single business application that need to be deployed as a distributed system. Estos tipos de sistemas son difíciles de administrar y escalar horizontalmente; por lo tanto, un orquestador es indispensable si se quiere tener una aplicación de varios contenedores, escalable y lista para la producción.These kinds of systems are complex to scale out and manage; therefore, you absolutely need an orchestrator if you want to have a production-ready and scalable multi-container application.

La figura 4-23 ilustra la implementación en un clúster de una aplicación formada por varios microservicios (contenedores).Figure 4-23 illustrates deployment into a cluster of an application composed of multiple microservices (containers).

Aplicaciones compuestas de Docker en un clúster: use un contenedor para cada instancia de servicio.

Figura 4-23.Figure 4-23. Un clúster de contenedoresA cluster of containers

Parece un enfoque lógico.It looks like a logical approach. Pero, ¿cómo se está administrando el equilibrio de carga de control, el enrutamiento y la orquestación de estas aplicaciones compuestas?But how are you handling load-balancing, routing, and orchestrating these composed applications?

El motor de Docker estándar en hosts de Docker único satisface las necesidades de administración de instancias de imagen únicas en un host, pero se queda corto a la hora de administrar varios contenedores implementados en varios hosts para aplicaciones distribuidas más complejas.The plain Docker Engine in single Docker hosts meets the needs of managing single image instances on one host, but it falls short when it comes to managing multiple containers deployed on multiple hosts for more complex distributed applications. En la mayoría de los casos, se necesita una plataforma de administración que automáticamente inicie contenedores, escale horizontalmente contenedores con varias instancias por imagen, los suspenda o los cierre cuando sea necesario y, a ser posible, también controle su acceso a recursos como la red y el almacenamiento de datos.In most cases, you need a management platform that will automatically start containers, scale-out containers with multiple instances per image, suspend them or shut them down when needed, and ideally also control how they access resources like the network and data storage.

Para ir más allá de la administración de contenedores individuales o aplicaciones compuestas muy simples y pasar a aplicaciones empresariales más grandes con microservicios, debe cambiar a orquestación y plataformas de agrupación en clústeres.To go beyond the management of individual containers or very simple composed apps and move toward larger enterprise applications with microservices, you must turn to orchestration and clustering platforms.

Desde el punto de vista de la arquitectura y el desarrollo, si está compilando grandes aplicaciones empresariales basadas en microservicios, es importante familiarizarse con las siguientes plataformas y productos que admiten escenarios avanzados:From an architecture and development point of view, if you're building large enterprise composed of microservices-based applications, it's important to understand the following platforms and products that support advanced scenarios:

Clústeres y orquestadores.Clusters and orchestrators. Cuando se necesita escalar horizontalmente las aplicaciones a varios hosts de Docker, como con una aplicación grande basada en microservicios, es fundamental poder administrar todos los hosts como un solo clúster mediante la abstracción de la complejidad de la plataforma subyacente.When you need to scale out applications across many Docker hosts, as when a large microservice-based application, it's critical to be able to manage all those hosts as a single cluster by abstracting the complexity of the underlying platform. Eso es lo que proporcionan los clústeres de contenedor y los orquestadores.That's what the container clusters and orchestrators provide. Kubernetes es un ejemplo de orquestador, y está disponible en Azure a través de Azure Kubernetes Service.Kubernetes is an example of an orchestrator, and is available in Azure through Azure Kubernetes Service.

Programadores.Schedulers. Programar significa tener la capacidad de que un administrador inicie los contenedores de un clúster, y de proporcionar también una interfaz de usuario.Scheduling means to have the capability for an administrator to launch containers in a cluster so they also provide a UI. Un programador de clúster tiene varias responsabilidades: usar eficazmente los recursos del clúster, establecer las restricciones definidas por el usuario, equilibrar eficazmente la carga de los contenedores entre los distintos nodos o hosts, ser resistente a los errores y proporcionar un alto grado de disponibilidad.A cluster scheduler has several responsibilities: to use the cluster's resources efficiently, to set the constraints provided by the user, to efficiently load-balance containers across nodes or hosts, and to be robust against errors while providing high availability.

Los conceptos de un clúster y un programador están estrechamente relacionados, por lo que los productos proporcionados por diferentes proveedores suelen ofrecer ambos conjuntos de funciones.The concepts of a cluster and a scheduler are closely related, so the products provided by different vendors often provide both sets of capabilities. En la lista siguiente se muestran las plataformas y las opciones de software más importantes disponibles para clústeres y programadores.The following list shows the most important platform and software choices you have for clusters and schedulers. Estos orquestadores generalmente se ofrecen en nubes públicas como Azure.These orchestrators are generally offered in public clouds like Azure.

Plataformas de software para agrupación en clústeres de contenedores, orquestación y programaciónSoftware platforms for container clustering, orchestration, and scheduling

KubernetesKubernetes

Logotipo de Kubernetes

Kubernetes es un producto de código abierto cuya funcionalidad abarca desde la infraestructura de clúster y la programación de contenedores a las capacidades de orquestación.Kubernetes is an open-source product that provides functionality that ranges from cluster infrastructure and container scheduling to orchestrating capabilities. Permite automatizar la implementación, la escala y las operaciones de contenedores de aplicaciones en varios clústeres de hosts.It lets you automate deployment, scaling, and operations of application containers across clusters of hosts.

Kubernetes proporciona una infraestructura centrada en el contenedor que agrupa los contenedores de la aplicación en unidades lógicas para facilitar la administración y detección.Kubernetes provides a container-centric infrastructure that groups application containers into logical units for easy management and discovery.

Kubernetes está más desarrollado en Linux que en Windows.Kubernetes is mature in Linux, less mature in Windows.

Azure Kubernetes Service (AKS)Azure Kubernetes Service (AKS)

Logotipo de Azure Kubernetes Service

Azure Kubernetes Service (AKS) es un servicio administrado de orquestación de contenedores de Kubernetes en Azure que simplifica la administración, implementación y operaciones del clúster de Kubernetes.Azure Kubernetes Service (AKS) is a managed Kubernetes container orchestration service in Azure that simplifies Kubernetes cluster’s management, deployment, and operations.

Uso de orquestadores basados en contenedor en Microsoft AzureUsing container-based orchestrators in Microsoft Azure

Existen varios proveedores de nube que ofrecen compatibilidad con contenedores de Docker más compatibilidad con la orquestación y los clústeres de Docker, como Microsoft Azure, Amazon EC2 Container Service y Google Container Engine.Several cloud vendors offer Docker containers support plus Docker clusters and orchestration support, including Microsoft Azure, Amazon EC2 Container Service, and Google Container Engine. Microsoft Azure proporciona compatibilidad con orquestador y clúster de Docker a través de Azure Kubernetes Service (AKS).Microsoft Azure provides Docker cluster and orchestrator support through Azure Kubernetes Service (AKS).

Uso de Azure Kubernetes ServiceUsing Azure Kubernetes Service

Un clúster de Kubernetes agrupa varios hosts de Docker y los expone como un único host virtual de Docker, lo que permite implementar varios contenedores en el clúster y escalar horizontalmente con cualquier número de instancias de contenedor.A Kubernetes cluster pools multiple Docker hosts and exposes them as a single virtual Docker host, so you can deploy multiple containers into the cluster and scale-out with any number of container instances. El clúster controlará toda la mecánica de administración compleja, como la escalabilidad, el estado, etc.The cluster will handle all the complex management plumbing, like scalability, health, and so forth.

AKS proporciona una manera de simplificar la creación, la configuración y la administración de un clúster de máquinas virtuales en Azure que están preconfiguradas para ejecutar aplicaciones en contenedores.AKS provides a way to simplify the creation, configuration, and management of a cluster of virtual machines in Azure that are preconfigured to run containerized applications. Al utilizar una configuración optimizada de herramientas de orquestación y programación de código abierto populares, AKS le permite usar sus habilidades existentes o aprovechar un gran corpus creciente de conocimientos de la comunidad para implementar y administrar aplicaciones basadas en contenedor en Microsoft Azure.Using an optimized configuration of popular open-source scheduling and orchestration tools, AKS enables you to use your existing skills or draw on a large and growing body of community expertise to deploy and manage container-based applications on Microsoft Azure.

Azure Kubernetes Service optimiza la configuración de tecnologías y herramientas populares de código abierto de agrupación en clústeres de Docker específicamente para Azure.Azure Kubernetes Service optimizes the configuration of popular Docker clustering open-source tools and technologies specifically for Azure. Se trata de una solución abierta que ofrece la portabilidad de los contenedores y la configuración de la aplicación.You get an open solution that offers portability for both your containers and your application configuration. Seleccione el tamaño, el número de hosts y las herramientas de orquestador, y AKS se encarga de todo lo demás.You select the size, the number of hosts, and the orchestrator tools, and AKS handles everything else.

Estructura de un clúster de Kubernetes: hay un nodo maestro que controla el DNS, el programador, el proxy, etc., y varios nodos de trabajo, que hospedan los contenedores.

Figura 4-24.Figure 4-24. Topología y estructura simplificada del clúster de KubernetesKubernetes cluster's simplified structure and topology

En la figura 4-24 puede ver la estructura de un clúster de Kubernetes, donde un nodo maestro (VM) controla la mayor parte de la coordinación del clúster y puede implementar contenedores en el resto de los nodos que se administran como un único grupo desde un punto de vista de la aplicación y permite escalar a miles o incluso a decenas de miles de contenedores.In figure 4-24 you can see the structure of a Kubernetes cluster where a master node (VM) controls most of the coordination of the cluster and you can deploy containers to the rest of the nodes which are managed as a single pool from an application point of view and allows you to scale to thousands or even tens of thousands of containers.

Entorno de desarrollo para KubernetesDevelopment environment for Kubernetes

En el entorno de desarrollo, Docker anunció en julio de 2018 que Kubernetes también puede ejecutarse en un único equipo de desarrollo (Windows 10 o macOS), basta con instalar Docker Desktop.In the development environment, Docker announced in July 2018 that Kubernetes can also run in a single development machine (Windows 10 or macOS) by simply installing Docker Desktop. Puede implementar posteriormente en la nube (AKS) para obtener más pruebas de integración, como se muestra en la figura 4-25.You can later deploy to the cloud (AKS) for further integration tests, as shown in figure 4-25.

En julio de 2018, Docker anunció asistencia del equipo de desarrollo para los clústeres de Kubernetes con Docker Desktop.

Figura 4-25.Figure 4-25. Ejecución de Kubernetes en el equipo de desarrollo y la nubeRunning Kubernetes in dev machine and the cloud

Introducción a Azure Kubernetes Service (AKS)Getting started with Azure Kubernetes Service (AKS)

Para empezar a usar AKS, implemente un clúster de AKS desde Azure Portal o mediante la CLI.To begin using AKS, you deploy an AKS cluster from the Azure portal or by using the CLI. Para más información sobre la implementación de un clúster de Kubernetes en Azure, consulte Inicio rápido: Implementación de un clúster de Azure Kubernetes Service (AKS).For more information on deploying a Kubernetes cluster in Azure, see Deploy an Azure Kubernetes Service (AKS) cluster.

No hay cuotas para el software instalado de forma predeterminada como parte de AKS.There are no fees for any of the software installed by default as part of AKS. Todas las opciones predeterminadas se implementan con el software de código abierto.All default options are implemented with open-source software. AKS está disponible en varias máquinas virtuales en Azure.AKS is available for multiple virtual machines in Azure. Se cobra únicamente por las instancias de proceso que se elijan, así como por los otros recursos subyacentes de la infraestructura que se utilicen como, por ejemplo, la red y el almacenamiento.You're charged only for the compute instances you choose, as well as the other underlying infrastructure resources consumed, such as storage and networking. No hay ningún cargo incremental para AKS.There are no incremental charges for AKS itself.

Para obtener más información de implementación sobre la implementación en Kubernetes en función de kubectl y archivos .yaml originales, vea la publicación Setting eShopOnContainers up in AKS (Azure Kubernetes Service) (Configuración de eShopOnContainers en AKS [Azure Kubernetes Service]).For further implementation information on deployment to Kubernetes based on kubectl and original .yaml files, check the post on Setting eShopOnContainers up in AKS (Azure Kubernetes Service).

Implementación con gráficos de Helm en clústeres de KubernetesDeploying with Helm charts into Kubernetes clusters

Al implementar una aplicación en un clúster de Kubernetes, puede usar la herramienta de CLI kubectl.exe original mediante archivos de implementación basados en el formato nativo (archivos .yaml), como ya se mencionó en la sección anterior.When deploying an application to a Kubernetes cluster, you can use the original kubectl.exe CLI tool using deployment files based on the native format (.yaml files), as already mentioned in the previous section. Pero, para aplicaciones de Kubernetes más complejas, como al implementar aplicaciones complejas basadas en microservicios, se recomienda usar Helm.However, for more complex Kubernetes applications such as when deploying complex microservice-based applications, it's recommended to use Helm.

Los gráficos de Helm le ayudan a definir, establecer la versión, instalación, compartir, actualizar o revertir incluso la aplicación más compleja de Kubernetes.Helm Charts helps you define, version, install, share, upgrade or rollback even the most complex Kubernetes application.

Adicionalmente, el uso de Helm se recomienda porque otros entornos de Kubernetes en Azure, como Azure Dev Spaces, también se basan en los gráficos de Helm.Going further, Helm usage is also recommended because additional Kubernetes environments in Azure, such as Azure Dev Spaces are also based on Helm charts.

La Cloud Native Computing Foundation (CNCF) mantiene Helm en colaboración con Microsoft, Google, Bitnami y la Comunidad de colaboradores de Helm.Helm is maintained by the Cloud Native Computing Foundation (CNCF) - in collaboration with Microsoft, Google, Bitnami and the Helm contributor community.

Para obtener más información sobre la implementación de gráficos de Helm y Kubernetes vea la entrada de blog Using Helm Charts to deploy eShopOnContainers to AKS (Uso de gráficos de Helm para implementar eShopOnContainers en AKS).For further implementation information on Helm charts and Kubernetes check the post on Using Helm Charts to deploy eShopOnContainers to AKS.

Uso de Azure Dev Spaces para el ciclo de vida de la aplicación de KubernetesUse Azure Dev Spaces for your Kubernetes application lifecycle

Azure Dev Spaces proporciona una experiencia de desarrollo de Kubernetes rápida e iterativa para los equipos.Azure Dev Spaces provides a rapid, iterative Kubernetes development experience for teams. Con una configuración de máquina de desarrollo mínima, puede ejecutar y depurar contenedores de forma iterativa directamente en Azure Kubernetes Service (AKS).With minimal dev machine setup, you can iteratively run and debug containers directly in Azure Kubernetes Service (AKS). Desarrolle en Windows, Mac o Linux mediante herramientas familiares como Visual Studio, Visual Studio Code o la línea de comandos.Develop on Windows, Mac, or Linux using familiar tools like Visual Studio, Visual Studio Code, or the command line.

Como se mencionó, Kubernetes utiliza los gráficos de Helm al implementar las aplicaciones basadas en contenedores.As mentioned, Azure Dev Spaces uses Helm charts when deploying the container-based applications.

Azure Dev Spaces ayuda a los equipos de desarrollo a ser más productivos en Kubernetes porque permite iterar rápidamente y depurar código directamente en un clúster de Kubernetes global en Azure usando simplemente Visual Studio 2017 o Visual Studio Code.Azure Dev Spaces helps development teams be more productive on Kubernetes because it allows you to rapidly iterate and debug code directly in a global Kubernetes cluster in Azure by simply using Visual Studio 2017 or Visual Studio Code. Ese clúster de Kubernetes en Azure es un clúster de Kubernetes administrado compartido, por lo que su equipo puede colaborar.That Kubernetes cluster in Azure is a shared managed Kubernetes cluster, so your team can collaboratively work together. Puede desarrollar código de forma aislada, después implementarlo en el clúster global y realizar pruebas de un extremo a otro con otros componentes sin tener que replicar ni simular dependencias.You can develop your code in isolation, then deploy to the global cluster and do end-to-end testing with other components without replicating or mocking up dependencies.

Como se muestra en la figura 4-26, la característica distintiva de Azure Dev Spaces es la capacidad de crear "espacios" que se pueden ejecutar integrados al resto de la implementación global en el clúster.As shown in figure 4-26, the most differential feature in Azure Dev Spaces is capability of creating 'spaces' that can run integrated to the rest of the global deployment in the cluster.

Azure Dev Spaces puede mezclar y combinar de forma transparente los microservicios de producción con la instancia de contenedor de desarrollo para facilitar las pruebas de nuevas versiones.

Figura 4-26.Figure 4-26. Uso de varios espacios en Azure Dev SpacesUsing multiple spaces in Azure Dev Spaces

Básicamente, puede configurar un espacio de desarrollo compartido en Azure.Basically you can set up a shared dev space in Azure. Así, cada programador se puede centrar exclusivamente en su parte de la aplicación y desarrollar de forma iterativa código previo a la confirmación en un espacio de desarrollo que ya contenga todos los demás servicios y recursos en la nube de los que sus escenarios dependen.Each developer can focus on just their part of the application, and can iteratively develop pre-commit code in a dev space that already contains all the other services and cloud resources that their scenarios depend on. Las dependencias siempre estarán actualizadas y los desarrolladores trabajarán de una manera que se asemeja bastante a un entorno de producción.Dependencies are always up-to-date, and developers are working in a way that mirrors production.

En Azure Dev Spaces existe el concepto de espacio, que permite trabajar de manera relativamente aislada y sin riesgo de romper el trabajo del equipo.Azure Dev Spaces provides the concept of a space, which allows you to work in relative isolation, and without the fear of breaking your team's work. Cada espacio de desarrollo forma parte de una estructura jerárquica que le permite invalidar un microservicio (o muchos), desde el espacio de desarrollo maestro "top", con su propio microservicio en curso.Each dev space is part of a hierarchical structure that allows you to override one microservice (or many), from the "top" master dev space, with your own work-in-progress microservice.

Esta característica se basa en los prefijos de dirección URL, por lo que al utilizar cualquier prefijo de espacio de desarrollo en la dirección url, se sirve una solicitud desde el microservicio de destino si existe en el espacio de desarrollo, de lo contrario, se reenvía hasta la primera instancia del microservicio de destino que se encuentra en la jerarquía, que finalmente llega al espacio de desarrollo maestro en la parte superior.This feature is based on URL prefixes, so when using any dev space prefix in the url, a request is served from the target microservice if it exists in the dev space, otherwise it's forwarded up to the first instance of the target microservice found in the hierarchy, eventually getting to the master dev space at the top.

Puede ver la página wiki de eShopOnContainers en Azure Dev Spaces para obtener una vista práctica en un ejemplo concreto.You can see the eShopOnContainers wiki page on Azure Dev Spaces, to get a practical view on a concrete example.

Para obtener más información, vea el artículo sobre Desarrollo en equipo con Azure Dev Spaces.For further information check the article on Team Development with Azure Dev Spaces.

Recursos adicionalesAdditional resources