Конвейер CI/CD для рабочих нагрузок на основе контейнераCI/CD pipeline for container-based workloads

Пример этого сценария применим к компаниям, которые хотят модернизировать разработку приложений, используя контейнеры и рабочие процессы DevOps.This example scenario is applicable to businesses that want to modernize application development by using containers and DevOps workflows. В этом сценарии веб-приложение Node.js создано и развернуто с помощью Jenkins в Реестре контейнеров Azure и Службе Azure Kubernetes.In this scenario, a Node.js web app is built and deployed by Jenkins into an Azure Container Registry and Azure Kubernetes Service. Azure Cosmos DB используется для уровня глобально распределенной базы данных.For a globally distributed database tier, Azure Cosmos DB is used. Для отслеживания и устранения неполадок с производительностью приложения, Azure Monitor интегрируется с экземпляром Grafana и панелью мониторинга.To monitor and troubleshoot application performance, Azure Monitor integrates with a Grafana instance and dashboard.

Примеры сценариев приложений включают предоставление автоматизированной среды разработки, проверку новых фиксаций кода и отправку новых развертываний в промежуточную или производственную среду.Example application scenarios include providing an automated development environment, validating new code commits, and pushing new deployments into staging or production environments. Обычно компаниям приходилось вручную создавать и компилировать приложения и обновления, а также поддерживать большую монолитную базу кода.Traditionally, businesses had to manually build and compile applications and updates, and maintain a large, monolithic code base. Благодаря современному подходу к разработке приложений, который использует непрерывную интеграцию (CI) и непрерывное развертывание (CD), вы можете быстрее создавать, тестировать и развертывать службы.With a modern approach to application development that uses continuous integration (CI) and continuous deployment (CD), you can more quickly build, test, and deploy services. Этот современный подход позволяет быстрее выпускать приложения и обновления для ваших клиентов и более гибко реагировать на меняющиеся требования компаний.This modern approach lets you release applications and updates to your customers faster, and respond to changing business demands in a more agile manner.

Используя такие службы Azure, как служба контейнеров Azure, реестр контейнеров Azure и Cosmos DB, компании могут использовать новейшие технологии разработки приложений и инструменты для упрощения процесса реализации высокого уровня доступности.By using Azure services such as Azure Kubernetes Service, Container Registry, and Cosmos DB, companies can use the latest in application development techniques and tools to simplify the process of implementing high availability.

Варианты соответствующего использованияRelevant use cases

Другие варианты использования:Other relevant use cases include:

  • Модернизация разработки приложений с помощью микрослужб на основе контейнерного подхода.Modernizing application development practices to a microservice, container-based approach.
  • Ускорение разработки приложений и развертывание жизненных циклов.Speeding up application development and deployment lifecycles.
  • Автоматизация развертываний для тестирования или принятие среды для проверки.Automating deployments to test or acceptance environments for validation.

АрхитектураArchitecture

Общие сведения об архитектуре компонентов Azure, которые используются для сценария DevOps с применением Jenkins, Реестра контейнеров Azure и Службы Azure Kubernetes

Этот сценарий охватывает конвейер DevOps для веб-приложения Node.js и серверную часть базы данных.This scenario covers a DevOps pipeline for a Node.js web application and database back end. Данные передаются в сценарии следующим образом:The data flows through the scenario as follows:

  1. Разработчик вносит изменения в исходный код веб-приложения Node.js.A developer makes changes to the Node.js web application source code.
  2. Изменение кода фиксируется в репозитории управления исходным кодом, например, GitHub.The code change is committed to a source control repository, such as GitHub.
  3. Чтобы начать процесс непрерывной интеграции (CI), веб-перехватчик GitHub активирует сборку проекта Jenkins.To start the continuous integration (CI) process, a GitHub webhook triggers a Jenkins project build.
  4. Задача сборки Jenkins использует агента динамической сборки в службе контейнеров Azure для выполнения процесса сборки контейнера.The Jenkins build job uses a dynamic build agent in Azure Kubernetes Service to perform a container build process.
  5. Образ контейнера создается из кода в системе управления версиями, а потом отправляется в реестр контейнеров Azure.A container image is created from the code in source control, and is then pushed to an Azure Container Registry.
  6. С помощью непрерывного развертывания (CD) Jenkins развертывает этот обновленный образ контейнера в кластер Kubernetes.Through continuous deployment (CD), Jenkins deploys this updated container image to the Kubernetes cluster.
  7. Веб-приложение Node.js использует Cosmos DB в качестве серверной части.The Node.js web application uses Cosmos DB as its back end. И Cosmos DB, и служба контейнеров Azure посылают отчеты метрик в Azure Monitor.Both Cosmos DB and Azure Kubernetes Service report metrics to Azure Monitor.
  8. Экземпляр Grafana предоставляет визуальные панели мониторинга производительности приложения на основе данных Azure Monitor.A Grafana instance provides visual dashboards of the application performance based on the data from Azure Monitor.

КомпонентыComponents

  • Jenkins — это сервер автоматизации с открытым исходным кодом, который легко интегрируется со службами Azure для обеспечения непрерывной интеграции (CI) и непрерывного развертывания (CD).Jenkins is an open-source automation server that can integrate with Azure services to enable continuous integration (CI) and continuous deployment (CD). В этом сценарии Jenkins оркестрирует создание образов контейнеров на основе фиксаций для управления исходным кодом, отправляет эти образы в Реестр контейнеров Azure, а затем обновляет экземпляры приложений в Службе Azure Kubernetes.In this scenario, Jenkins orchestrates the creation of new container images based on commits to source control, pushes those images to Azure Container Registry, then updates application instances in Azure Kubernetes Service.
  • Виртуальные машины Linux Azure — это платформа IaaS для запуска экземпляров Jenkins и Grafana.Azure Linux Virtual Machines is the IaaS platform used to run the Jenkins and Grafana instances.
  • Реестр контейнеров Azure хранит данные и управляет образами контейнеров, которые использует кластер службы контейнеров Azure.Azure Container Registry stores and manages container images that are used by the Azure Kubernetes Service cluster. Изображения надежно сохранены и могут быть реплицированы платформой Azure в другие регионы для ускорения развертывания.Images are securely stored, and can be replicated to other regions by the Azure platform to speed up deployment times.
  • Служба контейнеров Azure управляет платформой Kubernetes, которая позволяет быстро и легко развертывать контейнерные приложения и управлять ими, даже если вы никогда не оркестрировали контейнеры.Azure Kubernetes Service is a managed Kubernetes platform that lets you deploy and manage containerized applications without container orchestration expertise. Размещенная в Azure служба Kubernetes отвечает за критические задачи, в частности за мониторинг работоспособности и техническое обслуживание.As a hosted Kubernetes service, Azure handles critical tasks like health monitoring and maintenance for you.
  • Azure Cosmos DB — это глобально распределенная, многомодельная база данных, в которой можно выбрать различные модели баз данных и согласованности в соответствии с потребностями.Azure Cosmos DB is a globally distributed, multi-model database that allows you to choose from various database and consistency models to suit your needs. С помощью базы данных Cosmos DB можно глобально реплицировать данные при отсутствии компонентов управления кластерами или репликации для развертывания и настройки.With Cosmos DB, your data can be globally replicated, and there is no cluster management or replication components to deploy and configure.
  • Azure Monitor помогает отслеживать производительность, обеспечивать безопасность и выявление тенденций.Azure Monitor helps you track performance, maintain security, and identify trends. Метрики, полученные с помощью Monitor, могут использоваться другими ресурсами и инструментами, например Grafana.Metrics obtained by Monitor can be used by other resources and tools, such as Grafana.
  • Grafana — это решение с открытым исходным кодом для запросов, визуализации, оповещения и понимания метрики.Grafana is an open-source solution to query, visualize, alert, and understand metrics. Подключаемый модуль источника данных для Azure Monitor позволяет Grafana создавать визуальные панели мониторинга для наблюдения за производительностью приложений в службе контейнеров Azure и с помощью Cosmos DB.A data source plugin for Azure Monitor allows Grafana to create visual dashboards to monitor the performance of your applications running in Azure Kubernetes Service and using Cosmos DB.

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

  • Azure Pipelines помогают внедрять конвейер непрерывной интеграции (CI), тестирования и развертывания (CD) для любого приложения.Azure Pipelines help you implement a continuous integration (CI), test, and deployment (CD) pipeline for any app.
  • Если необходимо больше контроля над кластером, Kubernetes можно запускать непосредственно на виртуальных машинах Azure, а не через управляемую службу.Kubernetes can be run directly on Azure VMs instead of via a managed service if you would like more control over the cluster.
  • Service Fabric — другой альтернативный оркестратор контейнеров, который может заменить AKS.Service Fabric is another alternate container orchestrator that can replace AKS.

ОсобенностиConsiderations

ДоступностьAvailability

Этот сценарий сочетает в себе Azure Monitor и Grafana, чтобы контролировать производительность вашего приложения и сообщать о проблемах.To monitor your application performance and report on issues, this scenario combines Azure Monitor with Grafana for visual dashboards. Эти инструменты позволяют отслеживать и устранять проблемы с производительностью, которые могут потребовать обновления кода, которые можно затем развернуть в конвейер CI/CD.These tools let you monitor and troubleshoot performance issues that may require code updates, which can all then be deployed with the CI/CD pipeline.

Как часть кластера службы контейнеров Azure, подсистема балансировки нагрузки распределяет трафик приложения в один или несколько контейнеров (pods), которые запускают приложение.As part of the Azure Kubernetes Service cluster, a load balancer distributes application traffic to one or more containers (pods) that run your application. Такой подход к запуску контейнерных приложений в Kubernetes обеспечивает клиентам высокодоступную инфраструктуру.This approach to running containerized applications in Kubernetes provides a highly available infrastructure for your customers.

МасштабируемостьScalability

Служба контейнеров Azure позволяет масштабировать число узлов кластера в соответствии с требованиями приложений.Azure Kubernetes Service lets you scale the number of cluster nodes to meet the demands of your applications. По мере увеличения приложения можно развернуть количество узлов Kubernetes, которые запускают службу.As your application increases, you can scale out the number of Kubernetes nodes that run your service.

Данные приложения хранятся в базе данных Azure Cosmos DB — глобально распределенной, многомодельной базе данных, которая может глобально масштабироваться.Application data is stored in Azure Cosmos DB, a globally distributed, multi-model database that can scale globally. Cosmos DB абстрагирует необходимость масштабирования инфраструктуры, как с обычными компонентами базы данных, и можно глобально реплицировать Cosmos DB для удовлетворения потребностей клиентов.Cosmos DB abstracts the need to scale your infrastructure as with traditional database components, and you can choose to replicate your Cosmos DB globally to meet the demands of your customers.

Сведения о других разделах по масштабируемости см. в разделе Контрольный список эффективности производительности , доступный в центр архитектуры Azure.For other scalability topics, see the performance efficiency checklist available in the Azure Architecture Center.

БезопасностьSecurity

Чтобы минимизировать площадь атаки, эти сценарии не предоставляют экземпляр виртуальной машины Jenkins по HTTP.To minimize the attack footprint, this scenario does not expose the Jenkins VM instance over HTTP. Для любых задач управления, требующих взаимодействия с Jenkins, необходимо создать безопасное удаленное соединение с использованием туннеля SSH на локальном компьютере.For any management tasks that require you to interact with Jenkins, you create a secure remote connection using an SSH tunnel from your local machine. Для экземпляров виртуальных машин Jenkins и Grafana аутентификацию можно провести только с помощью открытого ключа SSH.Only SSH public key authentication is allowed for the Jenkins and Grafana VM instances. Вход по паролю отключенный.Password-based logins are disabled. Для получения дополнительных сведений см. Запуск сервера Jenkins в Azure.For more information, see Run a Jenkins server on Azure.

Этот сценарий использует специальный субъект-службу Azure Active Directory (AD) для разделения учетных данных и разрешений.For separation of credentials and permissions, this scenario uses a dedicated Azure Active Directory (AD) service principal. Учетные данные этого субъекта-службы хранятся в Jenkins в качестве защищенного объекта учетных данных, так что они не отображаются напрямую и не видны внутри сценариев или конвейера сборки.The credentials for this service principal are stored as a secure credential object in Jenkins so that they are not directly exposed and visible within scripts or the build pipeline.

Общие рекомендации по проектированию безопасных решений см. в документации по безопасности Azure.For general guidance on designing secure solutions, see the Azure Security Documentation.

УстойчивостьResiliency

Этот сценарий использует Службу Azure Kubernetes для вашего приложения.This scenario uses Azure Kubernetes Service for your application. В Kubernetes встроены компоненты отказоустойчивости, которые отслеживаются и, в случае проблемы, перезапускают контейнеры (pods).Built into Kubernetes are resiliency components that monitor and restart the containers (pods) if there is an issue. В сочетании с процедурой запуска нескольких узлов Kubernetes, приложение может допускать отключенный модуль или узел.Combined with running multiple Kubernetes nodes, your application can tolerate a pod or node being unavailable.

Общие рекомендации по проектированию устойчивых решений см. в статье Разработка надежных приложений Azure.For general guidance on designing resilient solutions, see Designing reliable Azure applications.

Развертывание сценарияDeploy the scenario

Предварительные требованияPrerequisites

  • Необходимо иметь учетную запись Azure.You must have an existing Azure account. Если у вас нет подписки Azure, перед началом работы создайте бесплатную учетную запись.If you don't have an Azure subscription, create a free account before you begin.

  • Вам потребуется открытая пара ключей SSH.You need an SSH public key pair. Дополнительные сведения относительно пошагового создания открытой пары ключей см. в статье Краткая инструкция: создание и использование пары из открытого и закрытого ключей SSH для виртуальных машин Linux в Azure.For steps on how to create a public key pair, see Create and use an SSH key pair for Linux VMs.

  • Для проверки подлинности службы и ресурсов требуется субъект-служба Azure Active Directory (AD).You need an Azure Active Directory (AD) service principal for the authentication of service and resources. Если необходимо, создайте субъект-службу с помощью команды az ad sp create-for-rbacIf needed, you can create a service principal with az ad sp create-for-rbac

    az ad sp create-for-rbac --name myDevOpsScenario
    

    Запишите значения параметров appId и password на выходе этой команды.Make a note of the appId and password in the output from this command. При развертывании сценария необходимо ввести эти значения в шаблон.You provide these values to the template when you deploy the scenario.

  • Найдите Поддерживаемые версии Kubernetes для вашего региона развертывания, выполнив команду AZ AKS get-versions.Find the supported Kubernetes versions for your deployment region by running az aks get-versions. Следующая команда возвращает версию CLI по умолчанию :The following command gets the CLI default version:

    az aks get-versions -l <region> --query "orchestrators[?default!=null].orchestratorVersion" -o tsv
    

Пошаговое руководствоWalk-through

Чтобы развернуть сценарий с помощью шаблона Azure Resource Manager, выполните следующие действия.To deploy this scenario with an Azure Resource Manager template, perform the following steps.

  1. Щелкните ссылку ниже, чтобы развернуть решение.Click the link below to deploy the solution.

    Развертывание в AzureDeploy to Azure

  2. Подождите, пока откроется развертывание шаблона на портале Azure, а затем выполните следующие шаги.Wait for the template deployment to open in the Azure portal, then complete the following steps:

    • Выберите Создать группу ресурсов, а затем укажите в текстовом поле имя, например myAKSDevOpsScenario.Choose to Create new resource group, then provide a name such as myAKSDevOpsScenario in the text box.
    • В раскрывающемся списке Расположение выберите регион.Select a region from the Location drop-down box.
    • Введите идентификатор приложения субъекта-службы и пароль из команды az ad sp create-for-rbac.Enter your service principal app ID and password from the az ad sp create-for-rbac command.
    • Укажите имя пользователя и надежный пароль для экземпляра Jenkins и консоли Grafana.Provide a username and secure password for the Jenkins instance and Grafana console.
    • Укажите ключ SSH для защиты имен при входе в виртуальные машины Linux.Provide an SSH key to secure logins to the Linux VMs.
    • Введите версию Kubernetes из az aks get-versions команды.Enter the Kubernetes version from the az aks get-versions command.
    • Прочтите условия использования и установите флажок Я принимаю указанные выше условия.Review the terms and conditions, then check I agree to the terms and conditions stated above.
    • Нажмите кнопку Приобрести.Select the Purchase button.

Развертывание может занять 15-20 мин.It can take 15-20 minutes for the deployment to complete.

ЦеныPricing

Чтобы изучить стоимость выполнения этого сценария, все услуги были предварительно сконфигурированы в калькуляторе стоимости.To explore the cost of running this scenario, all of the services are pre-configured in the cost calculator. Чтобы узнать, как изменится цена для вашего конкретного варианта использования, измените соответствующие переменные в соответствии с ожидаемым трафиком.To see how the pricing would change for your particular use case, change the appropriate variables to match your expected traffic.

Мы предоставили три примера профилей затрат, основанных на количестве образов контейнеров для хранения и узлов Kubernetes для запуска приложений.We have provided three sample cost profiles based on the number of container images to store and Kubernetes nodes to run your applications.

  • Небольшой. Этот пример тарификации предполагает наличие 1000 сборок контейнеров в месяц.Small: this pricing example correlates to 1000 container builds per month.
  • Средний. Этот пример тарификации предполагает наличие 100 000 сборок контейнеров в месяц.Medium: this pricing example correlates to 100,000 container builds per month.
  • Большой. Этот пример тарификации предполагает наличие 1 000 000 сборок контейнеров в месяц.Large: this pricing example correlates to 1,000,000 container builds per month.

Этот сценарий использует Реестр контейнеров Azure и Службу Azure Kubernetes для хранения и запуска приложений на основе контейнеров.This scenario used Azure Container Registry and Azure Kubernetes Service to store and run a container-based application. Экземпляры контейнеров Azure могут также использоваться для запуска приложений на основе контейнеров без необходимости создавать какие-либо компоненты оркестровки.Azure Container Instances can also be used to run container-based applications, without having to provision any orchestration components. Дополнительные сведения см. на странице Экземпляры контейнеров Azure.For more information, see Azure Container Instances overview.