Kapsayıcı tabanlı iş yükleri için CI/CD işlem hattıCI/CD pipeline for container-based workloads

Bu örnek senaryo, kapsayıcılar ve DevOps iş akışları kullanarak uygulama geliştirme sürecinizi modernleştirmek istediğiniz işletmeler için geçerlidir.This example scenario is applicable to businesses that want to modernize application development by using containers and DevOps workflows. Bu senaryoda, bir Node.js web uygulaması yerleşik ve Jenkins tarafından bir Azure Container Registry ve Azure Kubernetes hizmeti dağıtılabilir.In this scenario, a Node.js web app is built and deployed by Jenkins into an Azure Container Registry and Azure Kubernetes Service. Bir Global olarak dağıtılmış veritabanı katmanı için Azure Cosmos DB kullanılır.For a globally distributed database tier, Azure Cosmos DB is used. İzleme ve uygulama performans sorunlarını gidermek için Azure İzleyici Grafana örneği ve pano ile tümleştirilir.To monitor and troubleshoot application performance, Azure Monitor integrates with a Grafana instance and dashboard.

Örnek uygulama senaryoları otomatikleştirilmiş geliştirme ortamı sağlayan, yeni kodu işlemeleri doğrulama ve yeni dağıtımlar dağıtmaya hazırlık veya üretim ortamlarına içerir.Example application scenarios include providing an automated development environment, validating new code commits, and pushing new deployments into staging or production environments. Geleneksel olarak, işletmelerin el ile oluşturmanız ve uygulamaların ve güncelleştirmelerin derleme ve büyük ve tek parça bir kodu temel bakımını yapmanız gerekiyordu.Traditionally, businesses had to manually build and compile applications and updates, and maintain a large, monolithic code base. Sürekli Tümleştirme (CI) ve sürekli dağıtım (CD) kullanan bir uygulama geliştirme için modern bir yaklaşımla sizi daha hızlı derleme, test ve Hizmetleri dağıtmak.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. Bu modern yaklaşımı, uygulamaların ve güncelleştirmelerin müşterilerinize daha hızlı bir şekilde sürüm ve değişen iş taleplere daha Çevik bir şekilde sağlar.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 Kubernetes hizmeti, kapsayıcı kayıt defteri ve Cosmos DB gibi Azure hizmetlerini kullanarak, şirketler, yüksek kullanılabilirlik uygulama işlemini basitleştirmek için en son uygulama geliştirme teknikleri ve araçları kullanabilirsiniz.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.

İlgili kullanım durumlarınıRelevant use cases

Diğer ilgili kullanım durumlarını içerir:Other relevant use cases include:

  • Bir mikro hizmet, kapsayıcı tabanlı bir yaklaşım için uygulama geliştirme uygulamalarını modernleştirme.Modernizing application development practices to a microservice, container-based approach.
  • Uygulama geliştirme ve dağıtım yaşam döngüleri hızlandırma.Speeding up application development and deployment lifecycles.
  • Test etmek için dağıtımları veya doğrulama için kabul ortamları otomatikleştirme.Automating deployments to test or acceptance environments for validation.

MimariArchitecture

Jenkins ve Azure Container Registry'de Azure Kubernetes hizmeti kullanarak bir DevOps senaryosunda ilgili Azure bileşenleri mimarisine genel bakış

Bu senaryo, bir Node.js web uygulaması için bir DevOps işlem hattı kapsar ve veritabanı arka ucunun.This scenario covers a DevOps pipeline for a Node.js web application and database back end. Veriler senaryosuyla şu şekilde akar:The data flows through the scenario as follows:

  1. Bir geliştirici için Node.js web uygulaması kaynak kodu değişiklikleri yapar.A developer makes changes to the Node.js web application source code.
  2. Kod değişikliği, GitHub gibi kaynak denetim deposu hassastır.The code change is committed to a source control repository, such as GitHub.
  3. Sürekli Tümleştirme (CI) işlemini başlatmak için bir GitHub Web kancası Jenkins proje derlemeyi tetikler.To start the continuous integration (CI) process, a GitHub webhook triggers a Jenkins project build.
  4. Jenkins işi kullanan dinamik bir derleme aracısı bir kapsayıcı oluşturma işlemi gerçekleştirmek için Azure Kubernetes Service'te oluşturun.The Jenkins build job uses a dynamic build agent in Azure Kubernetes Service to perform a container build process.
  5. Bir kapsayıcı görüntüsü kaynak denetiminde kod oluşturulur ve ardından bir Azure Container Registry'ye gönderildi.A container image is created from the code in source control, and is then pushed to an Azure Container Registry.
  6. Sürekli dağıtım (CD) Jenkins bu güncelleştirilmiş kapsayıcı görüntüsünü Kubernetes kümesine dağıtılır.Through continuous deployment (CD), Jenkins deploys this updated container image to the Kubernetes cluster.
  7. Node.js web uygulaması, Cosmos DB, arka uç kullanır.The Node.js web application uses Cosmos DB as its back end. Cosmos DB hem Azure Kubernetes Service için Azure İzleyici ölçümleri bildirin.Both Cosmos DB and Azure Kubernetes Service report metrics to Azure Monitor.
  8. Azure İzleyicisi'nden verileri temel alan uygulama performansı görsel panolarını Grafana örneği sağlar.A Grafana instance provides visual dashboards of the application performance based on the data from Azure Monitor.

BileşenlerComponents

  • Jenkins , sürekli tümleştirme (CI) ve sürekli dağıtım (CD) etkinleştirmek için Azure hizmetleriyle tümleştirebilirsiniz bir açık kaynak Otomasyon sunucusudur.Jenkins is an open-source automation server that can integrate with Azure services to enable continuous integration (CI) and continuous deployment (CD). Bu senaryoda, Jenkins işlemeler kaynak denetimine dayalı yeni kapsayıcı görüntülerinin oluşturulmasını düzenleyen, bu görüntüleri ardından güncelleştirmeleri uygulama örnekleri, Azure Kubernetes hizmeti olan Azure Container registry'ye gönderir.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.
  • Azure Linux sanal makineleri , Jenkins ve Grafana örnekleri çalıştırmak için kullanılan Iaas platformudur.Azure Linux Virtual Machines is the IaaS platform used to run the Jenkins and Grafana instances.
  • Azure Container Registry depolar ve Azure Kubernetes hizmeti küme tarafından kullanılan kapsayıcı görüntülerini yönetir.Azure Container Registry stores and manages container images that are used by the Azure Kubernetes Service cluster. Görüntüleri, güvenli bir şekilde depolanır ve diğer bölgelere göre dağıtım sürelerini hızlandırmak için Azure platformunda çoğaltılabilir.Images are securely stored, and can be replicated to other regions by the Azure platform to speed up deployment times.
  • Azure Kubernetes hizmeti kapsayıcı düzenleme uzmanlığı gerektirmeden kapsayıcıya alınmış uygulamaları dağıtmayı ve yönetmeyi sağlayan yönetilen bir Kubernetes platformudur.Azure Kubernetes Service is a managed Kubernetes platform that lets you deploy and manage containerized applications without container orchestration expertise. Barındırılan bir Kubernetes hizmeti olarak, Azure sistem durumu izleme ve bakım gibi kritik görevleri sizin için gerçekleştirir.As a hosted Kubernetes service, Azure handles critical tasks like health monitoring and maintenance for you.
  • Azure Cosmos DB , çeşitli veritabanı ve tutarlılık modellerinden gereksinimlerinize uyacak şekilde seçmenizi sağlar Global olarak dağıtılmış, çok modelli bir veritabanıdır.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 ile verilerinizi genel olarak çoğaltılabilir ve dağıtma ve Yapılandırma Yönetimi'ni veya çoğaltma bileşenleri cluster yoktur.With Cosmos DB, your data can be globally replicated, and there is no cluster management or replication components to deploy and configure.
  • Azure İzleyici performans izleme, güvenliği koruma ve eğilimleri belirlemenize yardımcı olur.Azure Monitor helps you track performance, maintain security, and identify trends. İzleyici tarafından alınan ölçümleri, diğer kaynakları ve Grafana gibi araçları tarafından kullanılabilir.Metrics obtained by Monitor can be used by other resources and tools, such as Grafana.
  • Grafana sorgu, görselleştirme, uyarı ve ölçümleri anlamak için bir açık kaynak çözümü.Grafana is an open-source solution to query, visualize, alert, and understand metrics. Azure İzleyici için bir veri kaynağı eklenti Grafana, Azure Kubernetes Service'te çalışan ve Cosmos DB kullanarak uygulamalarınızın performansını izlemek için görsel panolar oluşturmanıza olanak sağlar.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.

AlternatifleriAlternatives

  • Azure işlem hatları uygulayan bir sürekli tümleştirme (CI), test ve dağıtım (CD) işlem hattı herhangi bir uygulama için Yardım.Azure Pipelines help you implement a continuous integration (CI), test, and deployment (CD) pipeline for any app.
  • Kubernetes küme üzerinde daha fazla denetim istiyorsanız doğrudan yerine Azure Vm'leri yönetilen bir hizmet çalıştırılabilir.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 değiştirebilir, başka bir alternatif bir kapsayıcı düzenleyicisidir.Service Fabric is another alternate container orchestrator that can replace AKS.

Dikkat edilmesi gerekenlerConsiderations

KullanılabilirlikAvailability

Bu senaryo, uygulama performansını izlemek ve sorunları bildirmek için görsel panoları için Azure İzleyici ile Grafana birleştirir.To monitor your application performance and report on issues, this scenario combines Azure Monitor with Grafana for visual dashboards. Bu araçlar, izleyin ve tüm CI/CD işlem hattı ile sonra dağıtılabilir kodu güncelleştirmeleri gerektirebilir performans sorunlarını gidermenize olanak tanır.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 Kubernetes hizmeti kümesinin bir parçası olarak, bir yük dengeleyici, uygulamanızı çalıştıran bir veya daha fazla kapsayıcı (pod) uygulama trafiği dağıtır.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 kapsayıcılı uygulamaları çalıştırmak için bu yaklaşım, müşterileriniz için yüksek oranda kullanılabilir bir altyapı sağlar.This approach to running containerized applications in Kubernetes provides a highly available infrastructure for your customers.

ÖlçeklenebilirlikScalability

Azure Kubernetes hizmeti, uygulamalarınızın gereksinimlerini karşılayacak şekilde Küme düğüm sayısını sağlar.Azure Kubernetes Service lets you scale the number of cluster nodes to meet the demands of your applications. Uygulamanızı arttıkça, hizmetinizi çalıştırmak Kubernetes düğümleri sayısının ölçeğini ölçeklendirebilirsiniz.As your application increases, you can scale out the number of Kubernetes nodes that run your service.

Uygulama verilerini Azure Cosmos DB, küresel olarak ölçeklemek Global olarak dağıtılmış, çok modelli bir veritabanı içinde depolanır.Application data is stored in Azure Cosmos DB, a globally distributed, multi-model database that can scale globally. Cosmos DB, geleneksel veritabanı bileşenleri ile altyapınız olarak ölçeklendirmek için gereken soyutlar ve Cosmos DB genel olarak müşterilerinizin taleplerini karşılamak için çoğaltmak seçebilirsiniz.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.

Diğer ölçeklenebilirlik konuları için bkz: ölçeklenebilirlik denetim listesi Azure Mimari Merkezi kullanılabilir.For other scalability topics, see the scalability checklist available in the Azure Architecture Center.

GüvenlikSecurity

Saldırı ayak izini azaltmak için bu senaryo Jenkins sanal makine örneğinin HTTP üzerinden kullanıma sunmuyor.To minimize the attack footprint, this scenario does not expose the Jenkins VM instance over HTTP. Jenkins ile etkileşimde bulunmak ihtiyacınız olan tüm yönetim görevleri için yerel makinenizden bir SSH tüneli kullanarak güvenli bir uzak bağlantı oluşturun.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. Yalnızca SSH ortak anahtarı kimlik doğrulaması Jenkins ve Grafana VM örnekleri için izin verilir.Only SSH public key authentication is allowed for the Jenkins and Grafana VM instances. Parola tabanlı oturum açma devre dışı bırakıldı.Password-based logins are disabled. Daha fazla bilgi için Azure'da bir Jenkins sunucusu çalıştırma.For more information, see Run a Jenkins server on Azure.

İçin kimlik bilgileri ve izinleri ayrımı, bu senaryo, adanmış bir Azure Active Directory (AD) hizmet sorumlusu kullanır.For separation of credentials and permissions, this scenario uses a dedicated Azure Active Directory (AD) service principal. Bunlar doğrudan kullanıma sunulan ve komut dosyaları veya derleme işlem hattı içinde görünür değildir, bu hizmet sorumlusu kimlik bilgilerini bir Jenkins güvenli kimlik bilgisi nesnesi olarak depolanır.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.

Güvenli çözümler tasarlamaya genel yönergeler için bkz: Azure güvenlik belgeleri.For general guidance on designing secure solutions, see the Azure Security Documentation.

DayanıklılıkResiliency

Bu senaryoda, uygulamanız için Azure Kubernetes hizmeti kullanır.This scenario uses Azure Kubernetes Service for your application. Kubernetes ile yerleşik izleme ve bir sorun olduğunda kapsayıcıları (pod) yeniden başlatın. dayanıklılık bileşenlerdir.Built into Kubernetes are resiliency components that monitor and restart the containers (pods) if there is an issue. Çalıştıran birden çok Kubernetes düğümleri ile birleştirildiğinde, uygulamanızın bir pod veya kullanılamaz durumda olmasından düğümü dayanabilir.Combined with running multiple Kubernetes nodes, your application can tolerate a pod or node being unavailable.

Dayanıklı çözümler tasarlamaya genel yönergeler için bkz: güvenilir Azure uygulamaları tasarlama.For general guidance on designing resilient solutions, see Designing reliable Azure applications.

Senaryo dağıtmaDeploy the scenario

ÖnkoşullarPrerequisites

  • Mevcut bir Azure hesabına ihtiyacınız vardır.You must have an existing Azure account. Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.If you don't have an Azure subscription, create a free account before you begin.

  • SSH ortak anahtar çifti gerekir.You need an SSH public key pair. Bir ortak anahtar çifti oluşturma adımları için bkz: oluşturma ve kullanma Linux VM'ler için SSH anahtarı pair.For steps on how to create a public key pair, see Create and use an SSH key pair for Linux VMs.

  • Hizmet ve kaynakları kimlik doğrulaması için bir Azure Active Directory (AD) hizmet sorumlusu gerekir.You need an Azure Active Directory (AD) service principal for the authentication of service and resources. Gerekirse, bir hizmet sorumlusu oluşturabilirsiniz 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
    

    Not AppID ve parola bu komutun çıktısından.Make a note of the appId and password in the output from this command. Senaryo dağıtırken bu değerleri şablon sağlar.You provide these values to the template when you deploy the scenario.

  • Çalıştırarak dağıtım bölgeniz için desteklenen bir Kubernetes sürümlerini bulmak az aks get-versions . The following command gets the CLI default sürümü:Find the supported Kubernetes versions for your deployment region by running az aks get-versions. The following command gets the CLI default version:

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

Gözden geçirmeWalk-through

Azure Resource Manager şablonu ile bu senaryoyu dağıtmak için aşağıdaki adımları gerçekleştirin.To deploy this scenario with an Azure Resource Manager template, perform the following steps.

  1. Çözümü dağıtmak için aşağıdaki bağlantıya tıklayın.Click the link below to deploy the solution.

    Azure’a dağıtmaDeploy to Azure

  2. Azure Portalı'nda açmak şablon dağıtımı için bekleyin ve ardından aşağıdaki adımları tamamlayın:Wait for the template deployment to open in the Azure portal, then complete the following steps:

    • Tercih Yeni Oluştur kaynak grubu ve sonra gibi bir ad verin myAKSDevOpsScenario metin kutusuna.Choose to Create new resource group, then provide a name such as myAKSDevOpsScenario in the text box.
    • Bir bölgeyi seçin konumu açılan kutusu.Select a region from the Location drop-down box.
    • Hizmet sorumlusu uygulama kimliği ve parolayı girin az ad sp create-for-rbac komutu.Enter your service principal app ID and password from the az ad sp create-for-rbac command.
    • Bir kullanıcı adı ve güvenli bir parola Jenkins örneğinin ve Grafana konsol için sağlar.Provide a username and secure password for the Jenkins instance and Grafana console.
    • Linux Vm'leri için oturum açma güvenliğini sağlamak için bir SSH anahtarı sağlayın.Provide an SSH key to secure logins to the Linux VMs.
    • Kubernetes sürümü girin az aks get-versions komutu.Enter the Kubernetes version from the az aks get-versions command.
    • Hüküm ve koşulları gözden geçirin ve ardından denetleyin hüküm ve koşulları yukarıda belirtilen kabul ediyorum.Review the terms and conditions, then check I agree to the terms and conditions stated above.
    • Seçin satın alma düğmesi.Select the Purchase button.

Bu dağıtımın tamamlanması için 15-20 dakika sürebilir.It can take 15-20 minutes for the deployment to complete.

FiyatlandırmaPricing

Bu senaryo çalıştırmanın maliyeti keşfetmek için tüm hizmetlerin maliyet hesaplayıcı önceden yapılandırılmış.To explore the cost of running this scenario, all of the services are pre-configured in the cost calculator. Fiyatlandırma, belirli bir kullanım örneği için nasıl değiştirirsiniz görmek için uygun değişkenleri beklenen trafiğiniz eşleşecek şekilde değiştirin.To see how the pricing would change for your particular use case, change the appropriate variables to match your expected traffic.

Kapsayıcı görüntüleri ve uygulamalarınızı çalıştırmak için Kubernetes düğümleri depolamanın göre üç örnek maliyet profil sağladık.We have provided three sample cost profiles based on the number of container images to store and Kubernetes nodes to run your applications.

  • Küçük: ayda 1000 kapsayıcı yapılar için bu fiyatlandırma örneği ilişkilendirir.Small: this pricing example correlates to 1000 container builds per month.
  • Orta: ayda 100.000 kapsayıcı yapılar için bu fiyatlandırma örneği ilişkilendirir.Medium: this pricing example correlates to 100,000 container builds per month.
  • Büyük: ayda 1.000.000 kapsayıcı yapılar için bu fiyatlandırma örneği ilişkilendirir.Large: this pricing example correlates to 1,000,000 container builds per month.

Bu senaryo, Azure Container Registry ve Azure Kubernetes hizmeti depolamak ve kapsayıcı tabanlı bir uygulamayı çalıştırmak için kullanılır.This scenario used Azure Container Registry and Azure Kubernetes Service to store and run a container-based application. Azure Container Instances, herhangi bir düzenleme bileşeni sağlamak zorunda kalmadan kapsayıcı tabanlı uygulamaları çalıştırmak için de kullanılabilir.Azure Container Instances can also be used to run container-based applications, without having to provision any orchestration components. Daha fazla bilgi için Azure Container Instances'a genel bakış.For more information, see Azure Container Instances overview.