Tworzenie i testowanie oraz metodyka DevOps dla rozwiązań mikrousług

Boards
Container Registry
Kubernetes Service
Pipelines
GitHub

Architektury mikrousług projektują aplikacje jako kolekcje luźno sprzężonych usług.Microservice architectures design applications as collections of loosely coupled services. W architekturze mikrousług usługi są szczegółowe i są lekkie.In a microservices architecture, services are fine-grained and protocols are lightweight. Mikrousługi oferują korzyści, takie jak jasne rozdzielenie problemów i rozłączanie zależności.Microservices offer benefits such as clear separation of concerns and decoupling of dependencies.

Mikrousługi wprowadzają złożoność w cyklu programowania w porównaniu do tradycyjnych aplikacji monolitycznych.Microservices introduce complexities in the development cycle compared to traditional monolithic applications. Tradycyjnie programowanie odbywa się w lokalnej lub wirtualnej replice stosu aplikacji, która pozwala konfigurować i uruchamiać składniki obliczeniowe i magazyny lokalnie w izolacji.Traditionally, development occurs in a local or virtual replica of the application stack, which configures and runs compute and storage components locally in isolation. W modelu mikrousług deweloperzy muszą testować swoje usługi w oparciu o istniejącą architekturę, przechwycić problemy z integracją w celu zaoszczędzenia w czasie kompilacji i wdrożenia oraz zachować czyste kompilacje w cyklu życia aplikacji.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.

Testowanie rozwoju (DevTest) to podejście do tworzenia oprogramowania, które pozwala zintegrować testy wczesne w fazie opracowywania.Development testing (DevTest) is a software development approach that integrates testing early in the development phase to speed development. DevOps to zestaw praktyk, które łączą programowanie oprogramowania i operacje IT w celu skrócenia cyklu programowania i zapewnienia ciągłego dostarczania wysokiej jakości.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 to system aranżacji kontenerów Open Source służący do automatyzowania wdrożeń aplikacji.Kubernetes is an open-source container orchestration system for automating application deployments.

Ta architektura rozwiązania modeluje środowisko programistyczne i wdrożeniowe, które korzysta z DevOps w DevTest, aby szybko iteracyjne opracowywanie aplikacji mikrousług platformy 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.

ArchitekturaArchitecture

Diagram przedstawiający konfigurację DevTest i DevOps dla aplikacji mikrousług.

  1. Deweloperzy używają procesu lokalnego z Kubernetes do uruchamiania ich lokalnych wersji mikrousług w kontekście klastra deweloperskiego Kubernetes.Developers use Local Process with Kubernetes to run their local microservice versions within the context of the development Kubernetes cluster. Połączenie z klastrem podczas debugowania usługi pozwala na szybkie testowanie i programowanie w pełnym kontekście aplikacji.Connecting to the cluster while debugging the service allows quick testing and development in the full application context.

  2. Każda mikrousługowa baza kodu używa oddzielnego repozytorium kodu GitHub do kontroli źródła.Each microservice codebase uses a separate GitHub code repository for source control.

  3. Akcje GitHub kompilują obrazy kontenerów mikrousług i wypychają je do rejestrów kontenerów platformy Azure.GitHub Actions builds the microservice container images and pushes them to Azure Container Registries. Akcje usługi GitHub uaktualniają także najnowszy tag repozytoriów w przypadku ciągłej integracji (ci) lub repozytoriów tagów dla wersji.GitHub Actions also updates the latest tag of repositories for continuous integration (CI), or tags repositories for release.

  4. Automatyczne testowanie akcji usługi GitHub generuje elementy robocze dla Azure Boards, co umożliwia zarządzanie wszystkimi elementami roboczymi w jednym miejscu.GitHub Actions automated testing generates work items for Azure Boards, making all work items manageable in one place.

  5. Rozszerzenia Visual Studio Code obsługują integrację Azure boards i GitHub.Visual Studio Code extensions support Azure Boards and GitHub integration. Kojarzenie Azure Boards elementów roboczych z repozytoriami usługi GitHub wiąże się z wymaganiami kodu, co pozwala na przeprowadzenie pętli deweloperskiej.Associating Azure Boards work items with GitHub repos ties requirements to code, driving the development loop forward.

  6. Zatwierdzenia scalone w ramach wyzwalacza rozgałęzienia integracji kompilacje i Docker wypychania do rejestrów kontenerów DevTest.Commits merged into the integration branch trigger GitHub Actions builds and Docker pushes to the DevTest container registries. Każda mikrousługa ma swoje własne repozytorium w rejestrach kontenerów, równolegle z repozytoriami usługi GitHub.Each microservice has its own repository in Container Registries, paralleling the GitHub repositories. Kompilacje CI są zwykle oznaczone najnowszymi, reprezentującymi ostatnie pomyślne kompilacje mikrousług.CI builds are usually tagged with latest, representing the most recent successful microservice builds.

  7. Azure Pipelines uruchamia polecenie Kubernetes, apply Aby wyzwolić wdrożenie zaktualizowanych obrazów Container Registry do klastrów DevTest Kubernetes.Azure Pipelines runs the Kubernetes apply command to trigger deployment of the updated Container Registry images to the DevTest Kubernetes clusters. Platforma Azure może uwierzytelniać AKS, aby uruchamiać Container Registry ściągania, upraszczając proces ciągłego wdrażania (CD).Azure can authenticate AKS to run unattended Container Registry pulls, simplifying the continuous deployment (CD) process.

    Azure Pipelines używa Azure Key Vault do bezpiecznego użycia kluczy tajnych, takich jak poświadczenia i parametry połączenia wymagane do konfiguracji wersji i wdrożenia.Azure Pipelines uses Azure Key Vault to securely consume secrets like credentials and connection strings required for release and deployment configurations.

  8. Gdy wersja aplikacji jest gotowa do testowania kontroli jakości, Azure Pipelines wyzwala wydanie pytań i odpowiedzi.When a version of the application is ready for quality assurance (QA) testing, Azure Pipelines triggers a QA release. Potok tagówuje wszystkie odpowiednie obrazy z następną przyrostową wersją, aktualizuje manifest Kubernetes w celu odzwierciedlenia tagów obrazu i uruchamia apply polecenie.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. W tym przykładzie, podczas gdy deweloper może przeprowadzić iterację w usłudze w izolacji, tylko kompilacje zintegrowane za pośrednictwem ciągłej integracji/ciągłego przenoszenia są przenoszone do wdrożenia.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. Po zatwierdzeniu przez test wersji usługi do wdrożenia, akcje GitHub wspierają wydanie z DevTest Container Registry do Container Registry produkcyjnego.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. Akcje usługi GitHub oznakowanie obrazów przy użyciu odpowiedniej wersji i wypychanie ich do Container Registry produkcyjnej, zgodnie z najlepszymi rozwiązaniami dotyczącymi rejestru kontenerów.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 tworzy wydanie do produkcji.Azure Pipelines creates a release to Production. Potok nakłada bramy zatwierdzania i wstępnie przygotowane i końcowe warunki ochrony środowiska produkcyjnego przed nieumyślne lub nieprawidłowym wdrożeniem.The pipeline imposes approval gates and pre-stage and post-stage conditions to protect the Production environment from inadvertent or incorrect deployment.

Aplikacja używa Azure Cosmos DB do dystrybuowanej globalnie warstwy bazy danych.The application uses Azure Cosmos DB for its globally distributed database tier.

Wszystkie usługi i środowiska raportują metryki do Azure monitor.All services and environments report metrics to Azure Monitor.

W tym rozwiązaniu pojedyncze Azure Active Directory (Azure AD) zarządza tożsamością dla subskrypcji DevTest i produkcyjnych.In this solution, a single Azure Active Directory (Azure AD) manages identity for both the DevTest and Production subscriptions. Kontrola dostępu oparta na rolach (Azure RBAC) systemu Azure ogranicza dostęp do chronionych zasobów, uniemożliwiając nieautoryzowane lub przypadkowe modyfikacje zasobów produkcyjnych.Azure role-based access control (Azure RBAC) restricts access to protected resources, preventing unauthorized or inadvertent modification of Production resources. Deweloperzy nie mają tych samych poziomów kontroli dostępu w środowisku produkcyjnym jak w przypadku piaskownic DevTest.Developers don't have the same access control levels in Production as in their DevTest sandboxes.

SkładnikiComponents

  • Azure DevTest Labs udostępnia laboratoria, które mają wszystkie niezbędne narzędzia i oprogramowanie do tworzenia środowisk.Azure DevTest Labs provides labs that have all the necessary tools and software to create environments. Deweloperzy mogą efektywnie zarządzać zasobami bez czekania na zatwierdzenia.Developers can efficiently self-manage resources without waiting for approvals. Dzięki DevTest laboratoriom zespoły mogą kontrolować koszty i regulować zasoby na laboratorium, udzielając deweloperom uprawnienia i elastyczność do obsługi ich piaskownic w ramach ograniczeń kosztów.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 jest platformą hostingu kodu na potrzeby kontroli wersji i współpracy.GitHub is a code hosting platform for version control and collaboration. Repozytorium kontroli źródła usługi GitHub zawiera wszystkie pliki projektu i ich historię poprawek.A GitHub source-control repository contains all project files and their revision history. Deweloperzy mogą współpracować ze sobą, aby współtworzyć, omówić i zarządzać kodem w repozytorium.Developers can work together to contribute, discuss, and manage code in the repository.

  • Akcje GitHub oferują pakiet przepływów pracy kompilowania i wydawania, obejmujący Ci, zautomatyzowane testowanie i wdrażanie kontenerów.GitHub Actions provides a suite of build and release workflows, covering CI, automated testing, and container deployments.

  • Azure Boards to usługa do zarządzania pracy nad projektami oprogramowania.Azure Boards is a service for managing work for software projects. Azure Boards oferuje bogaty zestaw funkcji, w tym natywną obsługę metodologii Scrum i Kanban, dostosowywalne pulpity nawigacyjne i zintegrowane raportowanie.Azure Boards brings a rich set of capabilities including native support for Scrum and Kanban methodologies, customizable dashboards, and integrated reporting.

  • Azure Pipelines to w pełni polecana usługa Ci/CD, która może automatycznie wdrażać zaktualizowane obrazy Container Registry do klastrów Kubernetes.Azure Pipelines is a fully featured CI/CD service that can automatically deploy updated Container Registry images to Kubernetes clusters.

  • Azure Key Vault bezpiecznie przechowywać i ściśle kontrolować dostęp do wpisów tajnych, takich jak klucze interfejsu API, hasła i certyfikaty.Azure Key Vault securely stores and tightly controls access to secrets like API keys, passwords, and certificates. Aby uzyskać więcej informacji na temat Key Vault w scenariuszach DevOps, zobacz DevSecOps na platformie Azure i DevSecOps w witrynie GitHub.For more information about Key Vault in DevOps scenarios, see DevSecOps in Azure and DevSecOps in GitHub.

  • Azure Container Registry obsługuje budowanie i przechowywanie obrazów kontenerów i artefaktów oraz zarządzanie nimi w rejestrach prywatnych dla wszystkich typów wdrożeń kontenerów.Azure Container Registry supports building, storing, and managing container images and artifacts in private registries for all types of container deployments.

  • Usługa Azure Kubernetes umożliwia proste wdrażanie zarządzanych klastrów Kubernetes przez odciążenie wielu złożoności, odpowiedzialności i obciążenia operacyjnego na platformie Azure.Azure Kubernetes Service makes it simple to deploy managed Kubernetes clusters by offloading much of the complexity, responsibility, and operational overhead to Azure.

  • Usługa Azure Active Directory (Azure AD) Enterprise Identity Platform zapewnia uwierzytelnianie jednokrotne i uwierzytelniania wieloskładnikowego w celu zarządzania dostępem użytkowników.Azure Active Directory (Azure AD) enterprise identity platform provides single sign-on and multifactor authentication to govern user access. Jedna usługa Azure AD może zarządzać tożsamościami dla wszystkich środowisk w różnych subskrypcjach.A single Azure AD can manage identity for all environments across subscriptions. Kontrola dostępu oparta na rolach (Azure RBAC) systemu Azure ogranicza dostęp do chronionych zasobów, uniemożliwiając nieautoryzowane lub przypadkowe modyfikacje zasobów produkcyjnych.Azure role-based access control (Azure RBAC) restricts access to protected resources, preventing unauthorized or inadvertent modification of production resources.

  • Azure Cosmos DB to w pełni zarządzana, szeroko dystrybuowana baza danych jako usługa, która obsługuje wysoką dostępność, wieloregionowe aplikacje oraz interfejsy API SQL i 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 obejmuje funkcje DevTest, takie jak emulator Cosmos DB lokalnego, który integruje się z usługą Azure DevOps i warstwy niskiego kosztu do zarządzania kosztami w piaskownicach 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 może monitorować zarówno środowiska produkcyjne, jak i DevTest.Azure Monitor can monitor both Production and DevTest environments. Azure Monitor zbiera dane dziennika z systemów operacyjnych maszyn wirtualnych i plików zrzutu awaryjnego i agreguje je do wyświetlania w 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.

AlternatywyAlternatives

  • Azure Repos jest alternatywą dla usługi GitHub dla hostingu repozytorium git.Azure Repos is an alternative to GitHub for Git repository hosting. W przypadku Azure Repos, Azure Boards i Azure Pipelines wszystkie Azure DevOps Services używają tego samego portalu i interfejsu użytkownika, co umożliwia skonsolidowanie deweloperów usług potrzebnych do działania 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.

  • Niektóre integracje dostępne w Azure Pipelines, takie jak połączenie z usługą lub uwierzytelnianie bezpośrednio w sieci szkieletowej platformy Azure, nie istnieją w akcjach usługi 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. W przypadku tych potrzeb należy rozważyć użycie Azure Pipelines zamiast akcji usługi GitHub dla elementów CI i działań kompilacji.For these needs, consider using Azure Pipelines instead of GitHub Actions for CI and build activities.

  • W szeroko rozproszonym systemie istnieje możliwość rozdzielania mikrousług na poszczególne repozytoria.In a widely distributed system, there are benefits to separating microservices into individual repositories. Oddzielenie własności i uprawnień jest prostsze, a projekty w różnych językach są łatwiejsze w obsłudze niż w przypadku jednego repozytorium.Separation of ownership and permission is simpler, and projects in different languages are easier to maintain than with a single repository. Jednak w rozwiązaniach o mniejszej liczbie mikrousług w tym samym języku lub czasie wykonywania obsługa jednego repozytorium git dla projektu może być łatwiejsza.However, in solutions with fewer microservices all in the same language or runtime, maintaining a single Git repository for the project may be easier.

Następne krokiNext steps