Kapsayıcı tabanlı iş yükleri için CI/CD işlem hattı

Container Registry
Cosmos DB
Kubernetes Hizmeti
İzleyici
Pipelines

Bu örnek senaryo, kapsayıcılar ve DevOps iş akışlarını kullanarak uygulama geliştirmeyi modernleştirin isteyen 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ı Jenkins tarafından bir Azure Container Registry ve Azure Kubernetes hizmetine oluşturulup dağıtılır.In this scenario, a Node.js web app is built and deployed by Jenkins into an Azure Container Registry and Azure Kubernetes Service. Küresel olarak dağıtılmış bir veritabanı katmanı için Azure Cosmos DB kullanılır.For a globally distributed database tier, Azure Cosmos DB is used. Azure Izleyici, uygulama performansını izlemek ve sorunlarını gidermek için bir Grafana örneği ve panosu ile tümleşir.To monitor and troubleshoot application performance, Azure Monitor integrates with a Grafana instance and dashboard.

Örnek uygulama senaryoları, otomatik bir geliştirme ortamı sağlamayı, yeni kod yürütmelerinin doğrulanmasını ve yeni dağıtımları hazırlama veya üretim ortamlarına göndermeyi 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şletmeler uygulamaları ve güncelleştirmeleri el ile derlemek ve derlemek ve büyük ve tek parçalı bir kod tabanı sürdürmek zorunda kalmıştı.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 uygulama geliştirmeye yönelik modern bir yaklaşım sayesinde, hizmetleri daha hızlı bir şekilde oluşturabilir, test edebilir ve dağıtabilirsiniz.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, müşterilerinize daha hızlı uygulamalar ve güncelleştirmeler yayınlamanızı ve değişen iş taleplerini daha çevik bir şekilde yanıtlamayı 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.

Şirketler Azure Kubernetes hizmeti, Container Registry ve Cosmos DB gibi Azure hizmetlerini kullanarak, yüksek kullanılabilirlik uygulama sürecini basitleştirmek için en son uygulama geliştirme teknikleri ve araçlarını kullanabilir.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 örnekleriRelevant use cases

Diğer ilgili kullanım örnekleri şunları içerir:Other relevant use cases include:

  • Mikro hizmet, kapsayıcı tabanlı bir yaklaşım uygulama geliştirme uygulamalarını modernleştiriliyor.Modernizing application development practices to a microservice, container-based approach.
  • Uygulama geliştirme ve dağıtım ömürleri hızlandırın.Speeding up application development and deployment lifecycles.
  • Doğrulama için test veya kabul ortamları için dağıtımları otomatikleştirme.Automating deployments to test or acceptance environments for validation.

MimariArchitecture

Jenkins, Azure Container Registry ve Azure Kubernetes hizmetini kullanarak DevOps senaryosuna dahil olan Azure bileşenlerine yönelik mimariye genel bakış

Bu senaryo, bir Node.js Web uygulaması ve veritabanı arka ucu için bir DevOps işlem hattı içerir.This scenario covers a DevOps pipeline for a Node.js web application and database back end. Veriler senaryo aracılığıyla aşağıdaki gibi akar:The data flows through the scenario as follows:

  1. Geliştirici Node.js Web uygulaması kaynak kodunda değişiklikler yapar.A developer makes changes to the Node.js web application source code.
  2. Kod değişikliği, GitHub gibi bir kaynak denetimi deposuna kaydedilir.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ı bir Jenkins proje derlemesini tetikler.To start the continuous integration (CI) process, a GitHub webhook triggers a Jenkins project build.
  4. Jenkins derleme işi, bir kapsayıcı oluşturma işlemi gerçekleştirmek için Azure Kubernetes hizmetinde dinamik bir derleme Aracısı kullanır.The Jenkins build job uses a dynamic build agent in Azure Kubernetes Service to perform a container build process.
  5. Kaynak denetimindeki koddan bir kapsayıcı görüntüsü oluşturulur ve sonra bir Azure Container Registry gönderilir.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) ile Jenkins, bu güncelleştirilmiş kapsayıcı görüntüsünü Kubernetes kümesine dağıtır.Through continuous deployment (CD), Jenkins deploys this updated container image to the Kubernetes cluster.
  7. Node.js Web uygulaması arka ucu olarak Cosmos DB kullanır.The Node.js web application uses Cosmos DB as its back end. Hem Cosmos DB hem de Azure Kubernetes hizmeti, Azure Izleyici 'ye rapor ölçümleri.Both Cosmos DB and Azure Kubernetes Service report metrics to Azure Monitor.
  8. Bir Grafana örneği, Azure Izleyici verilerine göre uygulama performansının görsel panolarını 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ştirilebilen açık kaynaklı bir 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, kaynak denetimine yapılan yürütmelere göre yeni kapsayıcı görüntülerinin oluşturulmasını, bu görüntüleri Azure Container Registry 'e iletmelerini ve ardından Azure Kubernetes hizmetindeki uygulama örneklerini güncelleştirmelerini sağlar.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 örneklerini ç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 Azure Kubernetes hizmet kümesi tarafından kullanılan kapsayıcı görüntülerini depolar ve yönetir.Azure Container Registry stores and manages container images that are used by the Azure Kubernetes Service cluster. Görüntüler güvenli bir şekilde depolanır ve dağıtım sürelerini hızlandırmak için Azure platformu tarafından diğer bölgelere ç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ığı olmadan Kapsayıcılı uygulamalar dağıtmanıza ve yönetmenize imkan tanıyan, 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 , gereksinimlerinize uyacak şekilde çeşitli veritabanı ve tutarlılık modelleri seçmenizi sağlayan, küresel 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, verileriniz genel olarak çoğaltılabilir ve dağıtılacak ve yapılandırılacak küme yönetimi veya çoğaltma bileşeni yoktur.With Cosmos DB, your data can be globally replicated, and there is no cluster management or replication components to deploy and configure.
  • Azure izleyici , performansı izlemenize, güvenliği korumanıza ve eğilimleri belirlemenize yardımcı olur.Azure Monitor helps you track performance, maintain security, and identify trends. Izleyici tarafından alınan ölçümler, Grafana gibi diğer kaynak ve araçlar tarafından kullanılabilir.Metrics obtained by Monitor can be used by other resources and tools, such as Grafana.
  • Grafana , ölçümleri sorgulamak, görselleştirmek, uyarmak ve anlamak için açık kaynaklı bir çözümdür.Grafana is an open-source solution to query, visualize, alert, and understand metrics. Azure Izleyici için bir veri kaynağı eklentisi, Grafana Azure Kubernetes hizmetinde çalışan uygulamalarınızın performansını izlemek ve Cosmos DB kullanmak için görsel panolar oluşturmanıza olanak tanır.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.

AlternatiflerAlternatives

  • Azure Pipelines , herhangi bir uygulama için sürekli TÜMLEŞTIRME (CI), test ve DAĞıTıM (CD) işlem hattı uygulamanıza yardımcı olur.Azure Pipelines help you implement a continuous integration (CI), test, and deployment (CD) pipeline for any app.
  • Küme üzerinde daha fazla denetim isterseniz, Kubernetes , yönetilen bir hizmet aracılığıyla değil doğrudan Azure VM 'lerinde ç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 ' i değiştirecek başka bir alternatif kapsayıcı Orchestrator.Service Fabric is another alternate container orchestrator that can replace AKS.

Dikkat edilmesi gerekenlerConsiderations

KullanılabilirlikAvailability

Uygulama performansınızı izlemek ve sorunlar hakkında rapor vermek için bu senaryo, Visual panolar için Grafana ile Azure Izleyicisini birleştirir.To monitor your application performance and report on issues, this scenario combines Azure Monitor with Grafana for visual dashboards. Bu araçlar, daha sonra CI/CD işlem hattı ile dağıtılabilecek kod güncelleştirmeleri gerektirebilecek performans sorunlarını izlemenizi ve gidermenize olanak sağlar.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 hizmet kümesi 'nin bir parçası olarak, bir yük dengeleyici uygulama trafiğini uygulamanızı çalıştıran bir veya daha fazla kapsayıcıya (pods) 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 'te Kapsayıcılı uygulamaların çalıştırılmasına yönelik bu yaklaşım, müşterileriniz için yüksek düzeyde 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, uygulamanızın taleplerini karşılamak için küme düğümlerinin sayısını ölçeklendirmenizi 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ıran Kubernetes düğümlerinin sayısını ölçeklendirebilirsiniz.As your application increases, you can scale out the number of Kubernetes nodes that run your service.

Uygulama verileri, küresel olarak ölçeklenebilen, genel olarak dağıtılmış, çok modelli bir veritabanı olan Azure Cosmos DB depolanır.Application data is stored in Azure Cosmos DB, a globally distributed, multi-model database that can scale globally. Cosmos DB, altyapınızı geleneksel veritabanı bileşenleriyle birlikte ölçeklendirmeniz gereksinimini soyutlar ve müşterilerinizin taleplerini karşılamak için Cosmos DB küresel olarak çoğaltmayı tercih edebilirsiniz.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 Azure Mimari Merkezi bulunan performans verimliliği denetim listesine bakın.For other scalability topics, see the performance efficiency checklist available in the Azure Architecture Center.

GüvenlikSecurity

Bu senaryo, saldırı parmak izini en aza indirmek için Jenkins sanal makinesi örneğini HTTP üzerinden kullanıma sunmaz.To minimize the attack footprint, this scenario does not expose the Jenkins VM instance over HTTP. Jenkins ile etkileşimde bulunabilmeniz gereken herhangi bir yönetim görevi için yerel makinenizden bir SSH tüneli kullanarak güvenli bir uzak bağlantı oluşturursunuz.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 ve Grafana VM örnekleri için yalnızca SSH ortak anahtar kimlik doğrulamasına izin verilir.Only SSH public key authentication is allowed for the Jenkins and Grafana VM instances. Parola tabanlı oturumlar devre dışı bırakıldı.Password-based logins are disabled. Daha fazla bilgi için bkz. Azure 'Da Jenkins sunucusu çalıştırma.For more information, see Run a Jenkins server on Azure.

Bu senaryo, kimlik bilgilerinin ve izinlerin ayrılması için 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. Bu hizmet sorumlusu için kimlik bilgileri Jenkins 'te güvenli bir kimlik bilgisi nesnesi olarak depolanır ve bu sayede betikler veya derleme işlem hattı içinde doğrudan sunulmazlar ve görünür olmaz.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 ilişkin 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 senaryo, uygulamanız için Azure Kubernetes hizmetini kullanır.This scenario uses Azure Kubernetes Service for your application. Kubernetes 'te yerleşik bir sorun varsa kapsayıcıları (pods) izleyen ve yeniden başlatacak dayanıklılık bileşenleridir.Built into Kubernetes are resiliency components that monitor and restart the containers (pods) if there is an issue. Birden çok Kubernetes düğümü çalıştırılarak birlikte kullanıldığında, uygulamanız bir pod veya düğüm kullanılamayan şekilde kabul edebilir.Combined with running multiple Kubernetes nodes, your application can tolerate a pod or node being unavailable.

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

Senaryoyu dağıtmaDeploy the scenario

ÖnkoşullarPrerequisites

  • Mevcut bir Azure hesabınız olmalıdı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 çiftinin olması gerekir.You need an SSH public key pair. Ortak anahtar çifti oluşturma adımları için bkz. Linux VM 'ler IÇIN SSH anahtar çifti oluşturma ve kullanma.For steps on how to create a public key pair, see Create and use an SSH key pair for Linux VMs.

  • Hizmet ve kaynakların kimlik doğrulaması için bir Azure Active Directory (AD) hizmet sorumlusu olması gerekir.You need an Azure Active Directory (AD) service principal for the authentication of service and resources. Gerekirse, az ad SP Create-for-RBAC ile bir hizmet sorumlusu oluşturabilirsinizIf needed, you can create a service principal with az ad sp create-for-rbac

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

    Bu komutun çıktısındaki AppID ve parolayı bir yere iade edin.Make a note of the appId and password in the output from this command. Bu değerleri, senaryoyu dağıtırken şablona sağlarsınız.You provide these values to the template when you deploy the scenario.

  • Az aks get-versionskomutunu çalıştırarak dağıtım bölgeniz Için desteklenen Kubernetes sürümlerini bulun.Find the supported Kubernetes versions for your deployment region by running az aks get-versions. Aşağıdaki komut, CLI varsayılan sürümünü alır:The following command gets the CLI default version:

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

İzlenecek yolWalk-through

Bu senaryoyu bir Azure Resource Manager şablonuyla dağıtmak için aşağıdaki adımları uygulayın.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ğıtınDeploy to Azure

  2. Şablon dağıtımının Azure portal açmasını bekleyin, ardından aşağıdaki adımları uygulayın:Wait for the template deployment to open in the Azure portal, then complete the following steps:

    • Yeni kaynak grubu oluşturmayı seçip metin kutusuna Myaksdevopsscenario gibi bir ad sağlayın.Choose to Create new resource group, then provide a name such as myAKSDevOpsScenario in the text box.
    • Konum açılır kutusundan bir bölge seçin.Select a region from the Location drop-down box.
    • Komutun hizmet sorumlusu uygulama KIMLIĞINIZI ve parolasını girin az ad sp create-for-rbac .Enter your service principal app ID and password from the az ad sp create-for-rbac command.
    • Jenkins örneği ve Grafana konsolu için bir Kullanıcı adı ve güvenli parola sağlayın.Provide a username and secure password for the Jenkins instance and Grafana console.
    • Linux VM 'lerinde oturum açma işlemlerini güvenli hale getirmek için bir SSH anahtarı sağlayın.Provide an SSH key to secure logins to the Linux VMs.
    • Komuttan Kubernetes sürümünü girin az aks get-versions .Enter the Kubernetes version from the az aks get-versions command.
    • Hüküm ve koşulları gözden geçirin, ardından yukarıda belirtilen hüküm ve koşulları kabul ediyorum' u işaretleyin.Review the terms and conditions, then check I agree to the terms and conditions stated above.
    • Satın al düğmesini seçin.Select the Purchase button.

Dağıtımın tamamlanması 15-20 dakika sürebilir.It can take 15-20 minutes for the deployment to complete.

FiyatlandırmaPricing

Bu senaryoyu çalıştırmanın maliyetini araştırmak için, tüm hizmetler Maliyet Hesaplayıcı 'da önceden yapılandırılmıştır.To explore the cost of running this scenario, all of the services are pre-configured in the cost calculator. Fiyatlandırma 'un belirli bir kullanım durumu için nasıl değiştirileceğini görmek için, uygun değişkenleri beklenen trafikle 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.

Uygulamalarınızı çalıştırmak için depolama ve Kubernetes düğümlerine yönelik kapsayıcı görüntülerinin sayısını temel alan üç örnek maliyet profili sunuyoruz.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: Bu fiyatlandırma örneği ayda 1000 kapsayıcı Derlemeleriyle ilişkili değildir.Small: this pricing example correlates to 1000 container builds per month.
  • Orta: Bu fiyatlandırma örneği ayda 100.000 kapsayıcı Derlemeleriyle ilişkili değildir.Medium: this pricing example correlates to 100,000 container builds per month.
  • Büyük: Bu fiyatlandırma örneği ayda 1.000.000 kapsayıcı Derlemeleriyle ilişkili değildir.Large: this pricing example correlates to 1,000,000 container builds per month.

Bu senaryo, kapsayıcı tabanlı bir uygulamayı depolamak ve çalıştırmak için Azure Container Registry ve Azure Kubernetes hizmetini kullandı.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ğlamaya gerek 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 bkz. Azure Container Instances genel bakış.For more information, see Azure Container Instances overview.