DevTest y DevOps para soluciones de microservicios

Boards
Container Registry
Kubernetes Service
Pipelines
GitHub

Las arquitecturas de microservicios diseñan aplicaciones como colecciones de servicios con acoplamiento flexible.Microservice architectures design applications as collections of loosely coupled services. En una arquitectura de microservicios, los servicios son específicos y los protocolos son ligeros.In a microservices architecture, services are fine-grained and protocols are lightweight. Los microservicios ofrecen ventajas, como la separación clara de los problemas y el desacoplamiento de las dependencias.Microservices offer benefits such as clear separation of concerns and decoupling of dependencies.

Los microservicios presentan complejidades en el ciclo de desarrollo en comparación con las aplicaciones monolíticas tradicionales.Microservices introduce complexities in the development cycle compared to traditional monolithic applications. Tradicionalmente, el desarrollo se produce en una réplica local o virtual de la pila de la aplicación, que configura y ejecuta los componentes de proceso y almacenamiento localmente de forma aislada.Traditionally, development occurs in a local or virtual replica of the application stack, which configures and runs compute and storage components locally in isolation. En un modelo de microservicios, los desarrolladores tienen que probar sus servicios frente a la arquitectura existente, detectar problemas de integración pronto para ahorrar tiempo de compilación e implementación, y mantener limpias las compilaciones integradas a lo largo del ciclo de vida de la aplicación.In a microservice model, developers need to test their services against the existing architecture, catch integration issues early to save on build and deployment time, and keep integrated builds clean over the lifecycle of the application.

Las pruebas de desarrollo (DevTest) son un enfoque de desarrollo de software que integra las pruebas en una etapa temprana de la fase de desarrollo con el fin de acelerarlo.Development testing (DevTest) is a software development approach that integrates testing early in the development phase to speed development. DevOps es un conjunto de prácticas que combina el desarrollo de software y las operaciones de TI para abreviar el ciclo de desarrollo y proporcionar una entrega continua de alta calidad.DevOps is a set of practices that combine software development and IT operations to shorten the development cycle and provide high-quality continuous delivery. Kubernetes es un sistema de orquestación de contenedores de código abierto para automatizar las implementaciones de aplicaciones.Kubernetes is an open-source container orchestration system for automating application deployments.

La arquitectura de esta solución modela un entorno de desarrollo e implementación que usa DevOps en DevTest para el desarrollo iterativo rápido de una aplicación de microservicios de Azure Kubernetes Service (AKS).This solution architecture models a development and deployment environment that uses DevOps in DevTest for rapid iterative development of an Azure Kubernetes Service (AKS) microservice application.

ArchitectureArchitecture

Diagrama que muestra la configuración de DevTest y DevOps para una aplicación de microservicios.

  1. Los desarrolladores usan el proceso local con Kubernetes para ejecutar sus versiones de microservicios locales en el contexto del clúster de desarrollo de Kubernetes.Developers use Local Process with Kubernetes to run their local microservice versions within the context of the development Kubernetes cluster. La conexión al clúster durante la depuración del servicio permite realizar pruebas y desarrollar rápidamente en el contexto de la aplicación en su conjunto.Connecting to the cluster while debugging the service allows quick testing and development in the full application context.

  2. Cada código base de microservicios usa un repositorio de código de GitHub independiente para el control de código fuente.Each microservice codebase uses a separate GitHub code repository for source control.

  3. Acciones de GitHub compila las imágenes de contenedor de los microservicios y las envía a las instancias de Azure Container Registry.GitHub Actions builds the microservice container images and pushes them to Azure Container Registries. Acciones de GitHub también actualiza la etiqueta latest de los repositorios para la integración continua (CI) o los repositorios de etiquetas para la versión.GitHub Actions also updates the latest tag of repositories for continuous integration (CI), or tags repositories for release.

  4. Las pruebas automatizadas de Acciones de GitHub generan elementos de trabajo para Azure Boards, lo que permite administrar todos los elementos de trabajo desde un solo lugar.GitHub Actions automated testing generates work items for Azure Boards, making all work items manageable in one place.

  5. Las extensiones de Visual Studio Code admiten la integración de Azure Boards y GitHub.Visual Studio Code extensions support Azure Boards and GitHub integration. La asociación de los elementos de trabajo de Azure Boards con los repositorios de GitHub vincula los requisitos al código, lo que impulsa al bucle de desarrollo a avanzar.Associating Azure Boards work items with GitHub repos ties requirements to code, driving the development loop forward.

  6. Las confirmaciones combinadas en la rama de integración desencadenan las compilaciones de Acciones de GitHub y las inserciones de Docker en los registros de contenedor de DevTest.Commits merged into the integration branch trigger GitHub Actions builds and Docker pushes to the DevTest container registries. Cada microservicio tiene su propio repositorio en instancias de Container Registry, en paralelo a los repositorios de GitHub.Each microservice has its own repository in Container Registries, paralleling the GitHub repositories. En general, las compilaciones de CI se etiquetan con latest, que representa las compilaciones de microservicios más recientes.CI builds are usually tagged with latest, representing the most recent successful microservice builds.

  7. Azure Pipelines ejecuta el comando apply de Kubernetes para desencadenar la implementación de las imágenes de Container Registry actualizadas en los clústeres de Kubernetes de DevTest.Azure Pipelines runs the Kubernetes apply command to trigger deployment of the updated Container Registry images to the DevTest Kubernetes clusters. Azure puede autenticar AKS para ejecutar extracciones de Container Registry desatendidas, lo que simplifica el proceso de implementación continua (CD).Azure can authenticate AKS to run unattended Container Registry pulls, simplifying the continuous deployment (CD) process.

    Azure Pipelines usa Azure Key Vault para consumir secretos de forma segura, como credenciales y cadenas de conexión necesarias para las configuraciones de versiones e implementación.Azure Pipelines uses Azure Key Vault to securely consume secrets like credentials and connection strings required for release and deployment configurations.

  8. Cuando una versión de la aplicación está lista para las pruebas de control de calidad (QA), Azure Pipelines desencadena una versión de QA.When a version of the application is ready for quality assurance (QA) testing, Azure Pipelines triggers a QA release. La canalización etiqueta todas las imágenes apropiadas con la siguiente versión incremental, actualiza el manifiesto de Kubernetes para reflejar las etiquetas de las imágenes y ejecuta el comando apply.The pipeline tags all appropriate images with the next incremental version, updates the Kubernetes manifest to reflect the image tags, and runs the apply command. En este ejemplo, si bien un desarrollador puede iterar un servicio en aislamiento, solo las compilaciones integradas a través de CI/CD se mueven a la implementación.In this example, while a developer may be iterating on a service in isolation, only builds integrated via CI/CD are moved over to deployment.

  9. Una vez que las pruebas han aprobado una versión del servicio para su implementación, Acciones de GitHub promueve una versión de Container Registry de DevTest a Container Registry de producción.After testing has approved a version of the service for deployment, GitHub Actions promotes a release from the DevTest Container Registry to a Production Container Registry. Acciones de GitHub etiqueta las imágenes con la versión adecuada y las inserta en Container Registry de producción, siguiendo los procedimientos recomendados de Container Registry.GitHub Actions tags the images with the appropriate version and pushes them into the Production Container Registry, following container registry best practices.

  10. Azure Pipelines crea una versión para producción.Azure Pipelines creates a release to Production. La canalización impone puertas de aprobación y las condiciones previas y posteriores al "stage" para proteger el entorno de producción frente a una implementación involuntaria o incorrecta.The pipeline imposes approval gates and pre-stage and post-stage conditions to protect the Production environment from inadvertent or incorrect deployment.

La aplicación utiliza Azure Cosmos DB para su capa de base de datos distribuida globalmente.The application uses Azure Cosmos DB for its globally distributed database tier.

Todos los servicios y entornos informan las métricas a Azure Monitor.All services and environments report metrics to Azure Monitor.

En esta solución, una única instancia de Azure Active Directory (Azure AD) administra la identidad de las suscripciones de DevTest y de producción.In this solution, a single Azure Active Directory (Azure AD) manages identity for both the DevTest and Production subscriptions. El control de acceso basado en rol de Azure (Azure RBAC) restringe el acceso a los recursos protegidos y evita así la modificación no autorizada o accidental de los recursos de producción.Azure role-based access control (Azure RBAC) restricts access to protected resources, preventing unauthorized or inadvertent modification of Production resources. Los desarrolladores no tienen los mismos niveles de control de acceso en producción que en sus espacios aislados de DevTest.Developers don't have the same access control levels in Production as in their DevTest sandboxes.

ComponentesComponents

  • Azure DevTest Labs ofrece laboratorios que disponen de todas las herramientas y el software necesarios para crear entornos.Azure DevTest Labs provides labs that have all the necessary tools and software to create environments. Los desarrolladores pueden administrar por sí mismos los recursos de forma eficaz sin tener que esperar las aprobaciones.Developers can efficiently self-manage resources without waiting for approvals. Con DevTest Labs, los equipos pueden controlar los costos y regular los recursos por laboratorio, lo que concede a los desarrolladores los permisos y la flexibilidad para operar sus espacios aislados dentro de las restricciones de costos.With DevTest Labs, teams can control costs and regulate resources per lab, granting developers permission and flexibility to operate their sandboxes within cost constraints.

  • GitHub es una plataforma de hospedaje de código para la colaboración y el control de versiones.GitHub is a code hosting platform for version control and collaboration. Un repositorio de control de código fuente de GitHub contiene todos los archivos de proyecto y su historial de revisiones.A GitHub source-control repository contains all project files and their revision history. Los desarrolladores pueden trabajar en conjunto para contribuir, debatir y administrar el código en el repositorio.Developers can work together to contribute, discuss, and manage code in the repository.

  • Acciones de GitHub proporciona un conjunto de flujos de trabajo de compilación y versión, que abarcan CI, pruebas automatizadas e implementaciones de contenedores.GitHub Actions provides a suite of build and release workflows, covering CI, automated testing, and container deployments.

  • Azure Boards es un servicio para administrar el trabajo de los proyectos de software.Azure Boards is a service for managing work for software projects. Azure Boards ofrece un amplio conjunto de funcionalidades, incluida compatibilidad nativa con las metodologías Scrum y Kanban, paneles personalizables e informes integrados.Azure Boards brings a rich set of capabilities including native support for Scrum and Kanban methodologies, customizable dashboards, and integrated reporting.

  • Azure Pipelines es un servicio de CI/CD con características completas que puede implementar automáticamente imágenes de Container Registry actualizadas en clústeres de Kubernetes.Azure Pipelines is a fully featured CI/CD service that can automatically deploy updated Container Registry images to Kubernetes clusters.

  • Azure Key Vault almacena de forma segura y controla de forma estricta el acceso a secretos, como claves de API, contraseñas y certificados.Azure Key Vault securely stores and tightly controls access to secrets like API keys, passwords, and certificates. Para obtener más información sobre Key Vault en escenarios de DevOps, consulte DevSecOps en Azure y DevSecOps en GitHub.For more information about Key Vault in DevOps scenarios, see DevSecOps in Azure and DevSecOps in GitHub.

  • Azure Container Registry admite la compilación, almacenamiento y administración de imágenes y artefactos de contenedor en registros privados para todo tipo de implementaciones de contenedor.Azure Container Registry supports building, storing, and managing container images and artifacts in private registries for all types of container deployments.

  • Azure Kubernetes Service facilita la implementación de clústeres de Kubernetes administrado al traspasar gran parte de la complejidad, responsabilidad y sobrecarga operativa a Azure.Azure Kubernetes Service makes it simple to deploy managed Kubernetes clusters by offloading much of the complexity, responsibility, and operational overhead to Azure.

  • La plataforma de identidad empresarial Azure Active Directory (Azure AD) proporciona inicio de sesión único y autenticación multifactor para controlar el acceso de los usuarios.Azure Active Directory (Azure AD) enterprise identity platform provides single sign-on and multifactor authentication to govern user access. Una única instancia de Azure AD puede administrar la identidad de todos los entornos entre suscripciones.A single Azure AD can manage identity for all environments across subscriptions. El control de acceso basado en rol de Azure (Azure RBAC) restringe el acceso a los recursos protegidos y evita así la modificación no autorizada o accidental de los recursos de producción.Azure role-based access control (Azure RBAC) restricts access to protected resources, preventing unauthorized or inadvertent modification of production resources.

  • Azure Cosmos DB es una base de datos como servicio totalmente administrada y ampliamente distribuida, que admite la alta disponibilidad, las aplicaciones de varias regiones, y API de SQL y NoSQL.Azure Cosmos DB is a fully managed, widely distributed database-as-a-service that supports high availability, multi-region applications, and both SQL and NoSQL APIs. Azure Cosmos DB incluye características de DevTest, como un emulador de Cosmos DB local que se integra en Azure DevOps, y niveles de bajo costo para administrar los costos en los espacios aislados de DevTest.Azure Cosmos DB includes DevTest features like a local Cosmos DB emulator that integrates with Azure DevOps, and low-cost tiers for managing costs in DevTest sandboxes.

  • Azure Monitor puede supervisar los entornos de producción y DevTest.Azure Monitor can monitor both Production and DevTest environments. Azure Monitor recopila datos de registro de los sistemas operativos de las VM y archivos de volcado de memoria, y los agrega para verlos en Azure Security Center.Azure Monitor collects log data from VM operating systems and crash dump files, and aggregates them for viewing in Azure Security Center.

AlternativasAlternatives

  • Azure Repos es una alternativa a GitHub para el hospedaje de repositorios de Git.Azure Repos is an alternative to GitHub for Git repository hosting. Con Azure Repos, Azure Boards y Azure Pipelines, la totalidad de Azure DevOps Services usa el mismo portal y la misma interfaz de usuario, con lo que se consolidan los servicios que los desarrolladores necesitan para las actividades de DevOps.With Azure Repos, Azure Boards, and Azure Pipelines, all Azure DevOps Services use the same portal and user interface, consolidating the services developers need for DevOps activities.

  • Algunas de las integraciones disponibles en Azure Pipelines, como la conexión de servicio o la autenticación directamente en la red troncal de Azure, no existen actualmente en Acciones de GitHub.Some integrations available in Azure Pipelines, such as service connection or authentication directly into the Azure backbone, don't currently exist in GitHub Actions. En caso de tener estas necesidades, considere la posibilidad de usar Azure Pipelines en lugar de Acciones de GitHub para las actividades de integración continua y compilación.For these needs, consider using Azure Pipelines instead of GitHub Actions for CI and build activities.

  • En un sistema ampliamente distribuido, existen ventajas al separar los microservicios en repositorios individuales.In a widely distributed system, there are benefits to separating microservices into individual repositories. La separación de la titularidad y los permisos es más sencilla, y los proyectos en distintos lenguajes son más fáciles de mantener que con un solo repositorio.Separation of ownership and permission is simpler, and projects in different languages are easier to maintain than with a single repository. Sin embargo, en las soluciones con menos microservicios, todos en el mismo lenguaje o runtime, es posible que sea más fácil mantener un único repositorio de Git para el proyecto.However, in solutions with fewer microservices all in the same language or runtime, maintaining a single Git repository for the project may be easier.

Pasos siguientesNext steps