DevTest и DevOps для решений на базе микрослужб

Boards
Реестр контейнеров
Служба Kubernetes
Pipelines
GitHub

Архитектуры микрослужб разрабатывать приложения в виде коллекций слабо связанных служб.Microservice architectures design applications as collections of loosely coupled services. В архитектуре микрослужб службы являются детализированными, а протоколы — облегченными.In a microservices architecture, services are fine-grained and protocols are lightweight. Микрослужбы предлагают такие преимущества, как четкое разделение проблем и отделение зависимостей.Microservices offer benefits such as clear separation of concerns and decoupling of dependencies.

Микрослужбы предоставляют сложности в цикле разработки по сравнению с традиционными монолитными приложениями.Microservices introduce complexities in the development cycle compared to traditional monolithic applications. Обычно Разработка выполняется в локальной или виртуальной реплике стека приложений, которая настраивает и запускает компоненты вычислений и хранения локально в изоляции.Traditionally, development occurs in a local or virtual replica of the application stack, which configures and runs compute and storage components locally in isolation. В модели микрослужб разработчики должны протестировать свои службы в соответствии с существующей архитектурой, перехватывать проблемы интеграции раннее, чтобы сэкономить время на этапе сборки и развертывания, а также хранить интегрированные сборки в чистом цикле приложения.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.

Тестирование разработки (DevTest) — это подход к разработке программного обеспечения, который интегрирует тестирование на раннем этапе разработки для ускорения разработки.Development testing (DevTest) is a software development approach that integrates testing early in the development phase to speed development. DevOps — это набор рекомендаций, которые сочетают разработку программного обеспечения и ИТ-операции, чтобы сократить цикл разработки и обеспечить высококачественную непрерывную доставку.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 — это система оркестрации контейнеров с открытым исходным кодом для автоматизации развертываний приложений.Kubernetes is an open-source container orchestration system for automating application deployments.

Эта архитектура решения моделирует среду разработки и развертывания, которая использует DevOps в DevTest для быстрой итеративной разработки приложения микрослужбы 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

Схема, показывающая конфигурацию DevTest и DevOps для приложения микрослужбы.

  1. Разработчики используют локальный процесс с Kubernetes для запуска своих локальных версий микрослужб в контексте кластера разработки Kubernetes.Developers use Local Process with Kubernetes to run their local microservice versions within the context of the development Kubernetes cluster. Подключение к кластеру во время отладки службы позволяет быстро выполнять тестирование и разработку в полном контексте приложения.Connecting to the cluster while debugging the service allows quick testing and development in the full application context.

  2. Каждая база кода микрослужб использует отдельный репозиторий кода GitHub для системы управления версиями.Each microservice codebase uses a separate GitHub code repository for source control.

  3. Действия GitHub используются для сборки образов контейнеров микрослужб и их отправки в реестры контейнеров Azure.GitHub Actions builds the microservice container images and pushes them to Azure Container Registries. Действия GitHub также обновляют последний тег репозиториев для репозиториев с непрерывной интеграцией (CI) или тегами для выпуска.GitHub Actions also updates the latest tag of repositories for continuous integration (CI), or tags repositories for release.

  4. Автоматическое тестирование действий GitHub создает рабочие элементы для Azure Boards, делая все рабочие элементы управляемыми в одном месте.GitHub Actions automated testing generates work items for Azure Boards, making all work items manageable in one place.

  5. Расширения Visual Studio Code поддерживают интеграцию Azure Boards и GitHub.Visual Studio Code extensions support Azure Boards and GitHub integration. Связывание Azure Boards рабочих элементов с требованиями GitHub репозиториев к коду с использованием цикла разработки вперед.Associating Azure Boards work items with GitHub repos ties requirements to code, driving the development loop forward.

  6. Фиксации, Объединенные в ветку интеграции. сборки действий GitHub и DOCKER отправляются в реестры контейнеров DevTest.Commits merged into the integration branch trigger GitHub Actions builds and Docker pushes to the DevTest container registries. Каждая микрослужба имеет собственный репозиторий в реестрах контейнеров, параллельно с репозиториями GitHub.Each microservice has its own repository in Container Registries, paralleling the GitHub repositories. Сборки CI обычно помечаются последними, представляя последние успешные сборки микрослужб.CI builds are usually tagged with latest, representing the most recent successful microservice builds.

  7. Azure pipelines выполняет команду Kubernetes apply , чтобы активировать развертывание обновленных образов реестра контейнеров в кластерах DevTest Kubernetes.Azure Pipelines runs the Kubernetes apply command to trigger deployment of the updated Container Registry images to the DevTest Kubernetes clusters. Azure может выполнять проверку подлинности AKS для выполнения извлечения реестра контейнеров в автоматическом режиме, упрощая процесс непрерывного развертывания (CD).Azure can authenticate AKS to run unattended Container Registry pulls, simplifying the continuous deployment (CD) process.

    Azure Pipelines использует Azure Key Vault для безопасного использования секретов, таких как учетные данные и строки подключения, необходимые для конфигураций выпуска и развертывания.Azure Pipelines uses Azure Key Vault to securely consume secrets like credentials and connection strings required for release and deployment configurations.

  8. Когда версия приложения готова к тестированию контроля качества (QA), Azure Pipelines активирует выпуск QA.When a version of the application is ready for quality assurance (QA) testing, Azure Pipelines triggers a QA release. Конвейер помечает все соответствующие изображения следующей добавочной версией, обновляет манифест Kubernetes для отражения тегов изображений и выполняет 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. В этом примере, хотя разработчик может выполнять итерацию по службе в изолированной среде, только сборки, интегрированные с помощью CI/CD, перемещаются в развертывание.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. После того, как тестирование утвердило версию службы для развертывания, действия GitHub пропускают выпуск из реестра контейнеров DevTest в рабочий реестр контейнеров.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. Действия GitHub применяют образы с соответствующей версией и отправляют их в рабочий реестр контейнеров, следуя рекомендациям по реестру контейнеров.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 создает выпуск в рабочей среде.Azure Pipelines creates a release to Production. Для защиты рабочей среды от непреднамеренного или неправильного развертывания конвейер накладывает шлюзы утверждения, а также предварительные и поэтапные условия.The pipeline imposes approval gates and pre-stage and post-stage conditions to protect the Production environment from inadvertent or incorrect deployment.

Приложение использует Azure Cosmos DB для глобально распределенного уровня базы данных.The application uses Azure Cosmos DB for its globally distributed database tier.

Все службы и среды сообщают метрики для Azure Monitor.All services and environments report metrics to Azure Monitor.

В этом решении один Azure Active Directory (Azure AD) управляет удостоверениями для подписок DevTest и Production.In this solution, a single Azure Active Directory (Azure AD) manages identity for both the DevTest and Production subscriptions. Управление доступом на основе ролей в Azure (Azure RBAC) позволяет ограничивать доступ к защищенным ресурсам, предотвращая незаконное или непреднамеренное изменение рабочих ресурсов.Azure role-based access control (Azure RBAC) restricts access to protected resources, preventing unauthorized or inadvertent modification of Production resources. У разработчиков нет таких же уровней контроля доступа в рабочей среде, как и в изолированных средах DevTest.Developers don't have the same access control levels in Production as in their DevTest sandboxes.

ComponentsComponents

  • Azure DevTest Labs предоставляет лабораторные работы, которые содержат все необходимые средства и программное обеспечение для создания сред.Azure DevTest Labs provides labs that have all the necessary tools and software to create environments. Разработчики могут эффективно управлять ресурсами, не дожидаясь утверждения.Developers can efficiently self-manage resources without waiting for approvals. С помощью DevTest Labs группы могут управлять затратами и регулировать ресурсы на лабораторию, предоставляя разработчикам разрешения и гибкие возможности работы с песочницами в рамках ограничений затрат.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 — это платформа для размещения кода для управления версиями и совместной работы.GitHub is a code hosting platform for version control and collaboration. Репозиторий системы управления версиями GitHub содержит все файлы проекта и их историю изменений.A GitHub source-control repository contains all project files and their revision history. Разработчики могут совместно работать над разработкой, обсуждением и управлением кодом в репозитории.Developers can work together to contribute, discuss, and manage code in the repository.

  • Действия GitHub предоставляют набор рабочих процессов сборки и выпуска, охватывающий элементы CI, автоматизированного тестирования и развертывания контейнеров.GitHub Actions provides a suite of build and release workflows, covering CI, automated testing, and container deployments.

  • Azure Boards — это служба для управления работой в проектах программного обеспечения.Azure Boards is a service for managing work for software projects. Azure Boards предоставляет широкий набор возможностей, включая собственную поддержку методологий Scrum и канбана, настраиваемые панели мониторинга и интегрированные отчеты.Azure Boards brings a rich set of capabilities including native support for Scrum and Kanban methodologies, customizable dashboards, and integrated reporting.

  • Azure pipelines — это полнофункциональная служба CI/CD, которая может автоматически развертывать обновленные образы реестра контейнеров в кластерах Kubernetes.Azure Pipelines is a fully featured CI/CD service that can automatically deploy updated Container Registry images to Kubernetes clusters.

  • Azure Key Vault безопасно сохраняет и тесно управляет доступом к секретам, таким как ключи API, пароли и сертификаты.Azure Key Vault securely stores and tightly controls access to secrets like API keys, passwords, and certificates. Дополнительные сведения о Key Vault в сценариях DevOps см. в разделе девсекопс в Azure и девсекопс в GitHub.For more information about Key Vault in DevOps scenarios, see DevSecOps in Azure and DevSecOps in GitHub.

  • Реестр контейнеров Azure поддерживает создание, хранение и управление образами и артефактами контейнеров в частных реестрах для всех типов развертываний контейнеров.Azure Container Registry supports building, storing, and managing container images and artifacts in private registries for all types of container deployments.

  • Служба Azure Kubernetes упрощает развертывание управляемых кластеров Kubernetes, выгрузяя большую часть сложности, ответственности и эксплуатационных расходов в Azure.Azure Kubernetes Service makes it simple to deploy managed Kubernetes clusters by offloading much of the complexity, responsibility, and operational overhead to Azure.

  • Корпоративная платформа идентификации Azure Active Directory (Azure AD) обеспечивает единый вход и многофакторную проверку подлинности для контроля доступа пользователей.Azure Active Directory (Azure AD) enterprise identity platform provides single sign-on and multifactor authentication to govern user access. Единая служба Azure AD может управлять удостоверениями для всех сред в рамках подписок.A single Azure AD can manage identity for all environments across subscriptions. Управление доступом на основе ролей в Azure (Azure RBAC) позволяет ограничивать доступ к защищенным ресурсам, предотвращая незаконное или непреднамеренное изменение рабочих ресурсов.Azure role-based access control (Azure RBAC) restricts access to protected resources, preventing unauthorized or inadvertent modification of production resources.

  • Azure Cosmos DB — это полностью управляемая, широко распределенная база данных как услуга, которая поддерживает приложения с высокой доступностью, многорегионом, а также API-интерфейсы SQL и 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 включает такие функции DevTest, как локальный эмулятор Cosmos DB, который интегрируется с Azure DevOps и экономичные уровни для управления затратами в изолированных средах 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 может отслеживать как рабочие, так и DevTest среды.Azure Monitor can monitor both Production and DevTest environments. Azure Monitor собирает данные журнала из операционных систем виртуальных машин и файлов аварийного дампа и объединяет их для просмотра в центре безопасности Azure.Azure Monitor collects log data from VM operating systems and crash dump files, and aggregates them for viewing in Azure Security Center.

Альтернативные вариантыAlternatives

  • Azure Repos является альтернативой GitHub для размещения репозитория Git.Azure Repos is an alternative to GitHub for Git repository hosting. При использовании Azure Repos, Azure Boards и Azure Pipelines все Azure DevOps Services используют один и тот же портал и пользовательский интерфейс, объединяя разработчиков служб, необходимых для 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.

  • Некоторые интеграции, доступные в Azure Pipelines, такие как подключение службы или проверка подлинности непосредственно в магистральной службе Azure, в настоящее время не существуют в действиях 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. Для этих нужд рекомендуется использовать Azure Pipelines, а не действия GitHub для операций непрерывной интеграции и сборки.For these needs, consider using Azure Pipelines instead of GitHub Actions for CI and build activities.

  • В широко распределенной системе существуют преимущества разделения микрослужб на отдельные репозитории.In a widely distributed system, there are benefits to separating microservices into individual repositories. Разделение владения и разрешений упрощается, а проекты на разных языках проще обслуживать, чем в одном репозитории.Separation of ownership and permission is simpler, and projects in different languages are easier to maintain than with a single repository. Однако в решениях с меньшим числом микрослужб на одном языке или среде выполнения поддержка одного репозитория Git для проекта может быть проще.However, in solutions with fewer microservices all in the same language or runtime, maintaining a single Git repository for the project may be easier.

Дальнейшие действияNext steps