GitHub Actions ve GitFlow ile AKS uygulamaları için CI/CD

Azure Container Registry
Azure Kubernetes Service (AKS)
Azure Monitor
Azure Pipelines

GitOps, otomatik sürekli teslim için doğruluk kaynağı olarak kullanılmak üzere Git'te uygulama ve bildirim temelli altyapı kodunu depolayan buluta özel uygulamalar için bir işletim modelidir. GitOps ile, bir git deposunda tüm sisteminizin istenen durumunu açıklarsınız ve bir GitOps operatörü bunu genellikle kubernetes kümesi olan ortamınıza dağıtır. Azure'da Kubernetes için GitOps hakkında daha fazla bilgi için Azure Arc özellikli Kubernetes ile Azure Kubernetes Service için GitOps veya CI/CD ve GitOps uzmanlık alanlarını ziyaret edin.

Bu makaledeki örnek senaryo kapsayıcılar, derleme için sürekli tümleştirme (CI) ve sürekli dağıtım (CD) için GitOps kullanarak uçtan uca uygulama geliştirmeyi modernleştirmek isteyen işletmeler için geçerlidir. Bu senaryoda örnek olarak bir Flask uygulaması kullanılır. Bu web uygulaması Python ve Flask çerçevesi kullanılarak yazılmış bir ön uçtan oluşur.

Mimari

Aşağıdaki seçenekler, gönderme tabanlı ve çekme tabanlı CI/CD yaklaşımlarını inceler.

Seçenek 1: Gönderme tabanlı CI/CD

Diagram of the push-based architecture with GitHub Actions.

CI ve CD için GitHub Actions ile gönderme tabanlı mimari.

Bu mimarinin bir Visio dosyasını indirin.

Veri akışı

Bu senaryo, ön uç web bileşeni ve Redis kullanan bir arka uç ile iki katmanlı bir web uygulaması için gönderme tabanlı DevOps işlem hattını kapsar. Bu işlem hattı derleme ve dağıtım için GitHub Actions'ı kullanır. Veriler senaryo boyunca aşağıdaki gibi akar:

  1. Uygulama kodu geliştirilmiştir.
  2. Uygulama kodu bir GitHub git deposuna işlenir.
  3. GitHub Actions, uygulama kodundan bir kapsayıcı görüntüsü oluşturur ve kapsayıcı görüntüsünü Azure Container Registry'ye gönderir.
  4. GitHub Actions işi, bildirim dosyalarında açıklandığı gibi uygulamayı kubectl veya Kubernetes kümesine dağıt eylemini kullanarak Azure Kubernetes Service (AKS) kümesine dağıtır veya dağıtır.

Seçenek 2: Çekme tabanlı CI/CD (GitOps)

Diagram of the pull-based architecture with GitHub Actions and Argo CD.

CI için GitHub Actions ve CD için Argo CD ile çekme tabanlı mimari.

Bu mimarinin bir Visio dosyasını indirin.

Veri akışı

Bu senaryo, ön uç web bileşeni ve Redis kullanan bir arka uç ile iki katmanlı bir web uygulaması için çekme tabanlı DevOps işlem hattını kapsar. Bu işlem hattı derleme için GitHub Actions kullanır. Dağıtım için Argo CD'yi GitOps işleci olarak kullanarak uygulamayı çeker/eşitler. Veriler senaryo boyunca aşağıdaki gibi akar:

  1. Uygulama kodu geliştirilmiştir.
  2. Uygulama kodu bir GitHub deposuna işlenir.
  3. GitHub Actions, uygulama kodundan bir kapsayıcı görüntüsü oluşturur ve kapsayıcı görüntüsünü Azure Container Registry'ye gönderir.
  4. GitHub Actions, Azure Container Registry'deki kapsayıcı görüntüsünün sürüm numarasına göre kubernetes bildirim dağıtım dosyasını geçerli görüntü sürümüyle güncelleştirir.
  5. Argo CD, Git deposuyla eşitlenir veya buradan çeker.
  6. Argo CD, uygulamayı AKS kümesine dağıtır.

Bileşenler

  • GitHub Actions , sürekli tümleştirme (CI) için Azure hizmetleriyle tümleştirilebilen bir otomasyon çözümüdür. Bu senaryoda GitHub Actions, kaynak denetimine yönelik işlemeleri temel alarak yeni kapsayıcı görüntülerinin oluşturulmasını düzenler, bu görüntüleri Azure Container Registry'ye gönderir ve ardından GitHub deposundaki Kubernetes bildirim dosyalarını güncelleştirir.
  • Azure Kubernetes Service (AKS), kapsayıcı düzenleme uzmanlığı olmadan kapsayıcılı uygulamaları dağıtmanıza ve yönetmenize olanak tanıyan yönetilen bir Kubernetes platformudur. 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.
  • Azure Container Registry , AKS kümesi tarafından kullanılan kapsayıcı görüntülerini depolar ve yönetir. 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.
  • GitHub , Git üzerinde çalışan ve geliştiriciler tarafından uygulama kodlarını depolamak ve sürüm oluşturmak için kullanılan web tabanlı bir kaynak denetim sistemidir. Bu senaryoda GitHub, kaynak kodu bir Git deposunda depolamak için kullanılır ve ardından GitHub Actions, kapsayıcı görüntüsünün derlemesini ve Gönderme tabanlı yaklaşımla Azure Container Registry'ye gönderimini gerçekleştirmek için kullanılır.
  • Argo CD , GitHub ve AKS ile tümleşen açık kaynaklı bir GitOps operatörüdür. Argo CD sürekli dağıtımı (CD) destekler. Bu amaçla Flux kullanılmış olabilir, ancak Argo CD, bir uygulama ekibinin belirli uygulama yaşam döngüsü endişeleri için küme operatörlerinin küme yönetimi için kullandığı aynı aracı kullanmaya kıyasla nasıl ayrı bir araç seçebileceğini gösterir.
  • Azure İzleyici performansı izlemenize, güvenliği korumanıza ve eğilimleri belirlemenize yardımcı olur. Azure İzleyici tarafından elde edilen ölçümler Grafana gibi diğer kaynaklar ve araçlar tarafından kullanılabilir.

Alternatifler

  • Azure Pipelines , herhangi bir uygulama için CI/DC ve test işlem hattı uygulamanıza yardımcı olur.
  • Jenkins , CI/CD için Azure hizmetleriyle tümleştirilebilen bir açık kaynak otomasyon sunucusudur.
  • Flux , GitOps işleci olarak kullanılabilir. Argo CD ile aynı görevleri gerçekleştirebilir ve AKS ile aynı şekilde çalışır.

Senaryo ayrıntıları

Bu senaryoda, uygulamanızın otomatik derlemesi ve dağıtımı çeşitli teknolojiler kullanır. Kod VS Code'da geliştirilmiştir ve GitHub deposunda depolanır. GitHub Actions, uygulamayı kapsayıcı olarak derlemek ve ardından kapsayıcı görüntüsünü bir Azure Container Registry'ye göndermek için kullanılır. GitHub Actions, Git deposunda da depolanan gerekli Kubernetes bildirim dağıtım dosyasını güncelleştirmek için kullanılırken GitOps operatörü Argo CD, Kubernetes bildirim dosyalarını buradan alır ve uygulamayı AKS kümesine dağıtır.

Diğer örnekler arasında otomatik geliştirme ortamı sağlama, yeni kod işlemelerini doğrulama ve yeni dağıtımları hazırlama veya üretim ortamlarına gönderme sayılabilir. Geleneksel olarak, işletmelerin uygulamaları ve güncelleştirmeleri el ile derleyip derlemesi ve büyük, tek parça bir kod tabanı tutması gerekiyordu. CD için CI ve GitOps kullanan uygulama geliştirmeye yönelik modern bir yaklaşımla hizmetleri hızla derleyebilir, test edebilir ve dağıtabilirsiniz. Bu modern yaklaşım, uygulamaları ve güncelleştirmeleri müşterilerinize daha hızlı yayınlamanıza ve değişen iş taleplerine daha çevik bir şekilde yanıt vermenizi sağlar.

AKS, Container Registry, GitHub ve GitHub Actions gibi Azure ve GitHub hizmetlerini kullanan şirketler, yüksek kullanılabilirlik uygulama sürecini basitleştirmek için en son uygulama geliştirme tekniklerini ve araçlarını kullanabilir. Ayrıca şirketler, GitOps için Flux veya Argo CD gibi açık kaynak teknolojileri kullanarak dağıtımı basitleştirir ve uygulamaların istenen durumunu uygular.

Olası kullanım örnekleri

Diğer ilgili kullanım örnekleri şunlardır:

  • Mikro hizmet, kapsayıcı tabanlı bir yaklaşım benimseyerek uygulama geliştirme uygulamalarını modernleştirin.
  • Uygulama geliştirme ve dağıtım yaşam döngülerini hızlandırma.
  • Doğrulama için test veya kabul ortamlarına yönelik dağıtımları otomatikleştirin.
  • Yapılandırmaları ve istenen uygulama durumunu sağlayın.
  • Küme yaşam döngüsü yönetimini otomatikleştirme.

CI/CD seçenekleri

Bu belgede, CI/CD işlem hattında sürekli dağıtımı işlemeye yönelik modern bir yaklaşım için GitOps kullanımı gösterilmektedir. Ancak, her kuruluş farklıdır. Otomatik teslim işlem hatları aracılığıyla Kubernetes kümelerine uygulama dağıtırken, bunun çeşitli yollarını anlamak önemlidir.

Aks kümesine uygulama dağıtmak için en yaygın iki CI/CD seçeneği, gönderme tabanlı ve çekme tabanlıdır. Gönderme seçeneği sürekli dağıtım için GitHub Actions'ı, sürekli dağıtım için ise çekme seçeneğini kullanır.

1. Seçenek: CI ve CD için GitHub Actions ile gönderme tabanlı mimari

Bu yaklaşımda kod, kubernetes kümesine dağıtım olarak gönderilen değişikliklere giden işlem hattının CI bölümüyle başlar. Dağıtımlar bir tetikleyiciyi temel alır. Dağıtımı başlatabilen çeşitli tetikleyiciler vardır, örneğin depoya yapılan işlemeler veya başka bir CI işlem hattından bir tetikleyici. Bu yaklaşımla işlem hattı sisteminin Kubernetes kümesine erişimi vardır. Anında iletme tabanlı modül, CI/CD araçları tarafından günümüzde kullanılan en yaygın modeldir.

Gönderme tabanlı yaklaşım kullanmanın nedenleri:

  • Esneklik: GitOps işleçlerinin çoğu şu anda yalnızca Kubernetes'te çalışıyor. Kuruluşunuz Uygulamaları Kubernetes dışında herhangi bir şeye dağıtmak istiyorsa, GitHub Actions gibi diğer CI/CD araçları aracılığıyla uygulamayı bu ortama göndermeniz gerekir.

  • Verimlilik: Bulut yerel ve geleneksel uygulamalarınızı dağıtmak için standartlaştırılmış bir yaklaşım daha verimlidir. Şu anda GitOps, Kubernetes üzerinde çalışan buluta özel uygulamalar için en uygun olanıdır.

  • Basitlik: Anında iletme tabanlı CI/CD, birçok kuruluştaki en geniş mühendis kümesi arasında iyi bilinmektedir. Gönderme tabanlı yaklaşım, gönderme tabanlı ve çekme tabanlı CI/CD yaklaşımlarının karışımından daha basit olabilir.

  • Yapı: Uygulamanız için kullanılan geçerli depo yapısı GitOps için uygun olmayabilir; bu da GitOps için önemli bir planlama ve yeniden yapılandırma gerekeceği anlamına gelir.

2. Seçenek: CI için GitHub Actions ve CD için GitOps işleci Argo CD ile çekme tabanlı mimari

Bu yaklaşım, bir Kubernetes kümesinin içinden tüm değişiklikleri uygulamayı ortalar. Kubernetes kümesi, kümenin istenen durumu için git deposunu tarar, yapılması gereken değişiklikleri alır ve uygular. Bu modelde hiçbir dış istemcinin Kubernetes kümesi için yönetici düzeyinde kimlik bilgileri yoktur. Çekme modeli yeni değildir ancak CI/CD araçları tarafından yaygın olarak kullanılmamıştır. Son zamanlarda GitOps'un kullanıma sunulmasıyla birlikte, çekme modeli benimsemeye devam ediyor. Birçok kuruluş, CD/CD işlem hatlarında sürekli dağıtımı kolaylaştırmak için GitOps kullanıyor.

Çekme tabanlı yaklaşım kullanmanın nedenleri:

  • Tutarlılık: GitOps ile operatör, Kubernetes kümelerinizin durumunu bir git deposundaki yapılandırmanızın ve uygulamalarınızın istenen durumuyla karşılaştırır. Yapılandırmada veya uygulamalarda herhangi bir kayma olursa GitOps işleci Kubernetes kümesini otomatik olarak istenen duruma getirir.

  • Güvenlik: GitOps ile CI/CD'ye yönelik çekme tabanlı bir yaklaşım, güvenlik kimlik bilgilerini Kubernetes kümenize kaydırmanıza olanak tanır ve bu da kimlik bilgilerinin dış CI araçlarınızda depolanmasını kaldırarak güvenlik ve risk yüzeyini azaltır. Ayrıca, izin verilen gelen bağlantıları azaltabilecek ve Kubernetes kümelerinize yönetici düzeyinde erişimi sınırlayabileceksiniz.

  • Sürüm oluşturma: GitOps gerçeğin kaynağı olarak bir git deposu kullandığından, sürekli dağıtımınız doğal olarak sürüm oluşturma, geri alma ve denetim özelliklerine sahiptir.

  • Çoklu kiracı: GitOps ile çekme tabanlı bir yaklaşım, dağıtılmış ekipler ve veya çok kiracılılık için uygundur. GitOps ile ayrı git depolarını kullanabilir, erişim haklarını ayırabilir ve dağıtımları farklı ad alanlarına dağıtabilirsiniz.

  • Bulutta yerel: Daha fazla uygulama modernleştiriliyor veya buluta özel olacak şekilde oluşturuluyor. Uygulamalarının çoğunu Kubernetes'te çalıştıran tüm kuruluşlar için sürekli dağıtım için GitOps işleci kullanmak, CI/CD'ye yönelik geleneksel gönderim tabanlı yaklaşımdan daha basit ve daha verimlidir.

Dikkat edilmesi gereken noktalar

Bu önemli noktalar, bir iş yükünün kalitesini artırmak için kullanılabilecek bir dizi yol gösteren ilke olan Azure İyi Tasarlanmış Çerçeve'nin yapı taşlarını uygular. Daha fazla bilgi için bkz . Microsoft Azure İyi Tasarlanmış Çerçeve.

Güvenilirlik

Güvenilirlik, uygulamanızın müşterilerinize sağladığınız taahhütleri karşılayabilmesini sağlar. Daha fazla bilgi için bkz . Güvenilirlik sütununa genel bakış.

Uygulama performansınızı izlemek ve sorunları bildirmek için bu senaryo Azure İzleyici'yi kullanır. Daha sonra CI/CD işlem hattıyla dağıtılabilen kod güncelleştirmeleri gerektirebilecek performans sorunlarını izlemenize ve gidermenize olanak tanır.

AKS kümesinin bir parçası olarak yük dengeleyici, uygulama trafiğini uygulamanızı çalıştıran bir veya daha fazla kapsayıcıya veya poda dağıtır. Kubernetes'te kapsayıcılı uygulamalar çalıştırmaya yönelik bu yaklaşım, müşterileriniz için yüksek oranda kullanılabilir bir altyapı sağlar.

Dekont

Bu makalede CI/CD işlem hattı yüksek kullanılabilirliği doğrudan ele alınmıyor. Daha fazla bilgi için GitHub Actions için yüksek kullanılabilirlik ve Kubernetes için Argo CD Bildirimli GitOps CD'sini ziyaret edin.

Dayanıklılık bileşenleri Kubernetes'de yerleşik olarak bulunur. Bu bileşenler, bir sorun varsa kapsayıcıları veya podları izler ve yeniden başlatır. Birden çok Kubernetes düğümü birleştirildiğinde, uygulamanız bir pod veya düğümün kullanılamamasını tolere edebilir.

Dayanıklı çözümler tasarlama hakkında genel yönergeler için bkz . Güvenilir Azure uygulamaları tasarlama.

Güvenlik

Güvenlik, kasıtlı saldırılara ve değerli verilerinizin ve sistemlerinizin kötüye kullanılmasına karşı güvence sağlar. Daha fazla bilgi için bkz . Güvenlik sütununa genel bakış.

Kimlik bilgileri ve izinlerin ayrılması için bu senaryoda ayrılmış bir Microsoft Entra hizmet sorumlusu kullanılır. Bu hizmet sorumlusunun kimlik bilgileri GitHub'da güvenli bir kimlik bilgisi nesnesi olarak, GitHub Actions Gizli Dizileri olarak depolanır, böylece betikler veya derleme işlem hattında doğrudan gösterilmez ve görünür olmazlar.

AKS kümelerindeki uygulamaların güvenliğini sağlama konusunda genel yönergeler için bkz . AKS'de uygulamalar ve kümeler için güvenlik kavramları.

Endişelerin ayrılması için, kılavuz, iş uygulamasını ve GitOps işlecini Kubernetes kümesindeki ayrı ad alanları içinde çalıştırarak iş uygulamasını çalıştıran işlemi CD aracılarından veya GitOps işlecinden ayırmaktır. Endişelerin daha fazla ayrılması için GitOps işleci, iş uygulamasını çalıştıran üretim Kubernetes kümesinden ayrı olarak GitOps örneğine ayrılmış bir Kubernetes kümesinde çalıştırılabilir.

Dekont

Bu makalede CI/CD işlem hattının güvenliğinin nasıl sağlandığı doğrudan ele alınmıyor.

Performans verimliliği

Performans verimliliği, kullanıcılar tarafından anlamlı bir şekilde yerleştirilen talepleri karşılamak amacıyla iş yükünüzü ölçeklendirme becerisidir. Daha fazla bilgi için bkz . Performans verimliliği sütununa genel bakış.

AKS, uygulamalarınızın taleplerini karşılamak için küme düğümlerinin sayısını ölçeklendirmenize olanak tanır. Uygulamanız büyüdükçe hizmetinizi çalıştıran Kubernetes düğümlerinin sayısını artırabilirsiniz.

GitHub Actions ile bulut sağlayıcısı, çalıştırıcı sayısını otomatik olarak ölçeklendirir. Şirket içinde barındırılan çalıştırıcılar kullanılıyorsa, runner'ın konağı bunları gerektiği gibi ölçeklendirmek zorunda olacaktır.

Diğer ölçeklenebilirlik konuları için bkz . performans verimliliği denetim listesi.

Bu senaryoyu dağıtın

Senaryoyu dağıtmak için AKS-baseline-automation başvuru uygulamasındaki adımları izleyin. Başvuru uygulama deposu, hem gönderme tabanlı CI/CD senaryosu hem de çekme tabanlı CI/CD (GitOps) senaryosu için kılavuzlu kılavuzlar içerir.

Katkıda Bulunanlar

Bu makale Microsoft tarafından yönetilir. Başlangıçta aşağıdaki katkıda bulunanlar tarafından yazılmıştır.

Asıl yazarlar:

Diğer katkıda bulunanlar:

Genel olmayan LinkedIn profillerini görmek için LinkedIn'de oturum açın.

Sonraki adımlar

Bu senaryoda kapsayıcı tabanlı bir uygulamayı depolamak ve çalıştırmak için Azure Container Registry ve AKS kullanılmıştır. Azure Container Apps veya 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. Daha fazla bilgi için bkz . Azure Container Instances'a genel bakış ve Azure Container Apps'e genel bakış.

Ürün belgeleri:

Microsoft Learn modülleri: