Aracılığıyla paylaş


Azure Kubernetes Service için GitOps

Azure Kubernetes Service (AKS)
GitHub

GitOps, bir yazılım sistemini çalıştırmaya ve yönetmeye yönelik bir dizi ilkedir. Bu makalede, Azure Kubernetes Services (AKS) kümesini çalıştırmak ve yönetmek için GitOps ilkelerini kullanma teknikleri açıklanmaktadır.

Flux, Argo CD, OPA Gatekeeper, Kubernetes ve Git logoları ilgili şirketlerin ticari markalarıdır. Bu işaretlerin kullanılması herhangi bir onay anlamına gelmez.

Mimari

AKS ile kullanabileceğiniz iki GitOps işleci Flux ve Argo CD'dir. Her ikisi de derecelendirilen Cloud Native Computing Foundation (CNCF) projeleridir ve yaygın olarak kullanılmaktadır. Aşağıdaki senaryolarda bunları kullanmanın yolları gösterilmektedir.

Senaryo 1: Flux ve AKS ile GitOps

Flux v2, GitHub ve AKS ile GitOps diyagramı.

Bu mimarinin bir Visio dosyasını indirin.

Senaryo 1 için veri akışı

Flux, AKS ile yerel olarak tümleşen bir küme uzantısıdır . Küme uzantısı, AKS kümesine çözüm yüklemek ve yönetmek için bir platform sağlar. Aks uzantısı olarak Flux'u etkinleştirmek için Azure portalını, Azure CLI'yi veya Terraform veya Bicep betikleri gibi kod olarak altyapı (IaC) betiklerini kullanabilirsiniz. AKS kümelerine büyük ölçekte Flux v2 yapılandırmaları uygulamak için Azure İlkesi de kullanabilirsiniz. Daha fazla bilgi için bkz. Flux v2 yapılandırmalarını ve Azure İlkesi'ni kullanarak uygulamaları tutarlı bir şekilde büyük ölçekte dağıtma.

Flux Kubernetes bildirimlerini, Helm grafiklerini ve Kustomization dosyalarını AKS'ye dağıtabilir. Flux, yoklama tabanlı bir işlem olduğundan, küme uç noktalarını derleme aracılarınıza göstermeden yapılandırma değişikliklerini algılayabilir, çekebilir ve uzlaştırabilir.

Bu senaryoda Kubernetes yöneticileri gizli diziler ve ConfigMap'ler gibi Kubernetes yapılandırma nesnelerini değiştirebilir ve değişiklikleri doğrudan bir GitHub deposuna işleyebilir.

Aşağıdaki veri akışı önceki diyagrama karşılık gelir:

  1. Geliştirici, GitHub deposunda yapılandırma değişikliklerini yürütmektedir.

  2. Flux, Git deposundaki yapılandırma kaymalarını algılar ve yapılandırma değişikliklerini çeker.

  3. Flux, Kubernetes kümesindeki durumu mutabık tutar.

Senaryo 1 için alternatifler

  • Azure DevOps, GitLab ve Bitbucket gibi diğer Git depolarıyla Flux kullanabilirsiniz.

  • Git depoları yerine Flux Bucket API'si , Amazon S3 ve Google Cloud Storage demetleri gibi depolama çözümlerinden nesneler için bir yapıt oluşturmak üzere bir kaynak tanımlar. S3 uyumlu API'ye sahip bir çözüm de kullanabilirsiniz. MinIO ve Alibaba Bulut Nesne Depolama Hizmeti (OSS) iki örnektir, ancak başka çözümler de vardır.

  • Yapıtlar üretmek için kaynak olarak bir Azure Blob Depolama kapsayıcısına karşı Flux'u da yapılandırabilirsiniz. Daha fazla bilgi için bkz . AKS ve Azure Arc özellikli Kubernetes ile GitOps Flux v2 yapılandırmaları.

  • Flux v2, ayrı ekiplerin iş yüklerini tek bir paylaşılan Kubernetes kümesine dağıtmasına izin vererek çok kiracılılığı destekler. Farklı bir kiracıyı temsil eden birden çok Git deposu kümeye eşitlenebilir. Ekipler arasında iş yükü yalıtımı sağlamak için her ekibin AKS kümesinde kubernetes rol tabanlı erişim denetimi (RBAC) ilkeleri aracılığıyla erişimin kısıtlandığı kendi ad alanı veya ad alanları olabilir.

  • Flux, aynı kümedeki veya diğer kümelerdeki uygulamaları yönetmek için bir küme kullanabilir. Flux operatörüne sahip bir merkez AKS kümesi, uygulamaların ve altyapı iş yüklerinin birden çok uç AKS kümesine GitOps sürekli teslimini yönetir.

Senaryo 2: CI/CD uygulamak için Flux, GitHub ve AKS ile GitOps kullanma

Flux, GitHub ve AKS ile GitOps kullanarak CI/CD'nin nasıl uygulandığını gösteren diyagram.

Bu mimarinin bir Visio dosyasını indirin.

Senaryo 2 için veri akışı

Bu senaryo, tipik bir web uygulaması için çekme tabanlı bir DevOps işlem hattıdır. İşlem hattı derleme için GitHub Actions kullanır. Dağıtım için, uygulamayı çekmek ve eşitlemek için GitOps işleci olarak Flux kullanır.

Aşağıdaki veri akışı önceki diyagrama karşılık gelir:

  1. Uygulama kodu, Visual Studio Code gibi tümleşik bir geliştirme ortamı (IDE) kullanılarak 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, Kubernetes bildirim dağıtım dosyasını Container Registry'deki kapsayıcı görüntüsünün sürüm numarasını temel alan geçerli görüntü sürümüyle güncelleştirir.

  5. Flux işleci Git deposunda yapılandırma kaymasını algılar ve yapılandırma değişikliklerini çeker.

  6. Flux, uygulamayı AKS kümesine dağıtmak için bildirim dosyalarını kullanır.

Senaryo 3: Argo CD, GitHub deposu ve AKS ile GitOps

Argo CD, GitHub ve AKS ile GitOps diyagramı.

Bu mimarinin bir Visio dosyasını indirin.

Senaryo 3 için veri akışı

Argo CD'yi AKS'de küme uzantısı olarak etkinleştirebilirsiniz. Bu senaryoda Kubernetes yöneticisi gizli diziler ve ConfigMap'ler gibi Kubernetes yapılandırma nesnelerini değiştirebilir ve değişiklikleri doğrudan GitHub deposuna işleyebilir.

Aşağıdaki veri akışı önceki diyagrama karşılık gelir:

  1. Kubernetes yöneticisi YAML dosyalarında yapılandırma değişiklikleri yapar ve değişiklikleri GitHub deposuna işler.

  2. Argo CD, değişiklikleri Git deposundan çeker.

  3. Argo CD, AKS kümesindeki yapılandırma değişikliklerini mutabık tutar.

Argo CD'nin istenen hedef durumu AKS kümesiyle otomatik olarak eşitlemesi gerekmez. Çalışan uygulamaları sürekli izleyen bir Kubernetes denetleyicisi olarak uygulanır. AKS kümesinin geçerli canlı durumunu Git deposunda belirtilen istenen hedef durumuyla karşılaştırır. Argo CD, farkları raporlar ve görselleştirir ve canlı durumu otomatik olarak veya el ile istenen hedef duruma geri eşitlemek için araçlar sağlar.

Argo CD, tarayıcı tabanlı bir kullanıcı arabirimi sağlar. Uygulama yapılandırmaları eklemek, eşitleme durumunu kümeye göre gözlemlemek ve kümeyle eşitleme başlatmak için kullanabilirsiniz. Bu görevleri gerçekleştirmek için Argo CD komut satırını da kullanabilirsiniz. Hem kullanıcı arabirimi hem de komut satırı arabirimi, yapılandırma değişikliklerinin geçmişini görüntülemek ve önceki bir sürüme geri dönmek için özellikler sağlar.

Varsayılan olarak, Argo CD kullanıcı arabirimi ve API sunucusu kullanıma sunulmaz. Bunlara erişmek için, iç IP adresine sahip bir giriş denetleyicisi oluşturmanızı öneririz. Ya da iç yük dengeleyici kullanarak bunları kullanıma açabilirsiniz.

Senaryo 3 için alternatifler

Azure DevOps da dahil olmak üzere Git ile uyumlu tüm depolar yapılandırma kaynağı deposu olarak görev yapabilir.

Senaryo 4: CI/CD uygulamak için GitOps'u Argo CD, GitHub Actions ve AKS ile kullanma

Argo CD, GitHub ve AKS ile GitOps kullanarak CI/CD'nin nasıl uygulandığını gösteren diyagram.

Bu mimarinin bir Visio dosyasını indirin.

Senaryo 4 için veri akışı

Bu senaryo, tipik bir web uygulaması için çekme tabanlı bir DevOps işlem hattıdır. İşlem hattı derleme için GitHub Actions kullanır. Dağıtım için GitOps işleci olarak Argo CD'yi kullanarak uygulamayı çeker ve eşitler.

Aşağıdaki veri akışı önceki diyagrama karşılık gelir:

  1. Uygulama kodu, Visual Studio Code gibi bir IDE kullanılarak 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ü Container Registry'ye gönderir.

  4. GitHub Actions, Kubernetes bildirim dağıtım dosyasını Container Registry'deki kapsayıcı görüntüsünün sürüm numarasını temel alan geçerli görüntü sürümüyle güncelleştirir.

  5. Argo CD, Git deposundan çeker.

  6. Argo CD, uygulamayı AKS kümesine dağıtır.

Senaryo 4 için alternatifler

Azure DevOps da dahil olmak üzere Git ile uyumlu tüm depolar yapılandırma kaynağı deposu olarak görev yapabilir.

Senaryo ayrıntıları

GitOps, bir yazılım sistemini çalıştırmaya ve yönetmeye yönelik bir dizi ilkedir.

  • Kaynak denetimini sistem için tek gerçeklik kaynağı olarak kullanır.

  • Sürüm denetimi, işbirliği, uyumluluk ve sürekli tümleştirme ve sürekli dağıtım (CI/CD) gibi geliştirme uygulamalarını altyapı otomasyonuna uygular.

  • Bunu herhangi bir yazılım sistemine uygulayabilirsiniz.

GitOps genellikle Kubernetes küme yönetimi ve uygulama teslimi için kullanılır.

GitOps ilkelerine göre, GitOps tarafından yönetilen bir sistemin istenen durumu aşağıdaki ölçütleri karşılamalıdır:

  • Bildirimsel: GitOps'un yönettiği bir sistemin istenen durumunu bildirimli olarak ifade etmesi gerekir. Bildirim genellikle bir Git deposunda depolanır.

  • Sürümü oluşturulan ve sabit olan: İstenen durum, değişmezlik ve sürüm oluşturmayı zorlayan ve tam sürüm geçmişini koruyan bir şekilde depolanır.

  • Otomatik olarak çekildi: Yazılım aracıları, istenen durum bildirimlerini kaynaktan otomatik olarak çeker.

  • Sürekli uyum sağlanan: Yazılım ajanları sürekli olarak gerçek sistem durumunu gözlemler ve istenen durumu uygulamaya çalışır.

IaC, GitOps'ta sanal makineler (VM' ler), ağlar ve güvenlik duvarları gibi altyapı bileşenlerinin istenen durumunu bildirmek için kodu kullanır. Bu kod, sürüm denetimi ve denetlenebilir.

Kubernetes, bildirim kullanarak küme durumundan uygulama dağıtımlarına kadar her şeyi bildirimli olarak açıklar. Kubernetes için GitOps, küme altyapısının istenen durumunu sürüm denetimi altına yerleştirir. Kümedeki genellikle işleç olarak adlandırılan bir bileşen bildirim durumunu sürekli olarak eşitler. Bu yaklaşım, kümeyi etkileyen kod değişikliklerini gözden geçirmeyi ve denetlemeyi mümkün kılar. En az ayrıcalık ilkesini (PoLP) destekleyerek güvenliği artırır.

GitOps aracıları, sistem durumunu sürekli olarak kod deponuzda depolanan istenen durumla mutabık tutar. Bazı GitOps aracıları, Kubernetes nesnelerinin el ile oluşturulması gibi küme dışında gerçekleştirilen işlemleri geri döndürebilir. Örneğin, erişim denetleyicileri oluşturma, güncelleştirme ve silme işlemleri sırasında nesneler üzerinde ilkeler uygular. Dağıtımların yalnızca kaynak depodaki dağıtım kodu değiştiğinde değiştiğinden emin olmak için bunları kullanabilirsiniz.

İlkeleri zorunlu kılmak ve önerilen ilke değişiklikleri için geri bildirim sağlamak için ilke yönetimi ve zorlama araçlarını GitOps ile birleştirebilirsiniz. Tek tek ekiplerin geçerli GitOps durumu hakkında bilgilendirilmesi için bildirimleri yapılandırabilirsiniz. Örneğin, dağıtım başarıları ve mutabakat hatalarıyla ilgili bildirimler gönderebilirsiniz.

Tek gerçeklik kaynağı olarak GitOps

GitOps, küme durumunun tutarlılığını ve standardizasyonunu sağlar ve güvenliği artırmaya yardımcı olabilir. Birden çok kümede tutarlı bir durum sağlamak için GitOps'yi de kullanabilirsiniz. Örneğin, GitOps aynı yapılandırmayı birincil ve olağanüstü durum kurtarma (DR) kümelerine veya bir küme grubuna uygulayabilir.

Küme durumunu değiştirmenin tek yöntemi olarak GitOps'yi zorunlu kılmak için kümeye doğrudan erişimi kısıtlayın. Bu yapılandırmayı ayarlamak için Azure rol tabanlı erişim denetimini (Azure RBAC), erişim denetleyicilerini veya diğer araçları kullanın.

İlk yapılandırmayı önyüklemek için GitOps kullanma

Bazen temel yapılandırmanın bir parçası olarak AKS kümesi dağıtımı gerekir. Örneğin, uygulama iş yüklerini dağıtmadan önce paylaşılan hizmetleri veya sistem düzeyinde yapılandırmaları dağıtmanız gerekebilir. Bu paylaşılan hizmetler aşağıdaki eklentileri ve araçları yapılandırabilir:

Aks kümesi oluşturduğunuzda uygulanan bir uzantı olarak Flux'u etkinleştirebilirsiniz. Flux daha sonra temel yapılandırmayı kümeye önyükleyebilir. AKS kümesinin temel mimarisi, önyükleme için GitOps kullanmanızı önerir. Flux uzantısını kullanırsanız, dağıtıldıktan hemen sonra kümeleri önyükleyebilirsiniz.

Diğer GitOps araçları ve eklentileri

Açıklanan senaryoları diğer GitOps araçlarına genişletebilirsiniz. Jenkins X, Azure ile tümleştirme yönergeleri sağlayan bir diğer GitOps aracıdır. GitOps aracılığıyla dağıtılan üretim iş yüklerinin aşamalı olarak kaydırılması için Flagger gibi aşamalı teslim araçlarını kullanabilirsiniz.

Olası kullanım örnekleri

Bu çözüm, uygulamaları ve IaC'yi dağıtmak ve her değişikliğin denetim kaydını tutmak isteyen kuruluşlara avantaj sağlar.

GitOps, geliştiriciler için kapsayıcı yönetimini basitleştirerek üretkenliği artırır. Geliştiriciler, güncelleştirmeleri ve yeni özellikleri yönetmek için Git gibi tanıdık araçlarla çalışmaya devam edebilir.

Dikkat edilmesi gereken noktalar

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

Güvenilirlik

Güvenilirlik, uygulamanızın müşterilerinize sağladığınız taahhütleri karşılayabilmesine yardımcı olur. Daha fazla bilgi için bkz . Güvenilirlik için tasarım gözden geçirme denetim listesi.

Bir küme kullanılamaz duruma gelirse, yeni küme oluşturmanın bir parçası olarak GitOps kullanılmalıdır. Kubernetes yapılandırması ve uygulama mantığı için tek doğru kaynağı olarak Git deposunu kullanır. Küme yapılandırmasını ve uygulama dağıtımını ölçek birimi olarak oluşturup uygulayabilir ve Dağıtım Damgaları desenini oluşturabilir.

Güvenlik

Güvenlik, kasıtlı saldırılara ve değerli verilerinizin ve sistemlerinizin kötüye kullanımına karşı güvence sağlar. Daha fazla bilgi için bkz . Güvenlik için tasarım gözden geçirme denetim listesi.

GitOps yaklaşımıyla, tek tek geliştiriciler veya yöneticiler değişiklikleri veya güncelleştirmeleri uygulamak için Kubernetes kümelerine doğrudan erişmez. Bunun yerine, kullanıcılar değişiklikleri bir Git deposuna ve Flux veya Argo CD gibi GitOps işlecine iletir, değişiklikleri okur ve kümeye uygular. Bu yaklaşım, DevOps ekiplerine Kubernetes API'sine yazma izinleri vermeyerek en düşük ayrıcalık için en iyi güvenlik uygulamasını izler. Tanılama veya sorun giderme senaryolarında küme izinlerini büyük/küçük harf temelinde sınırlı bir süre için vekleyebilirsiniz.

Depo izinlerini yapılandırmaya ek olarak, AKS kümeleriyle eşitlenen Git depolarında aşağıdaki güvenlik önlemlerini uygulamayı göz önünde bulundurun:

  • Dal koruması: Kubernetes kümelerinin durumunu temsil eden dalları doğrudan kendilerine gönderilen değişikliklerden koruyun. Değişiklik yapmak için çekme isteklerini (PR) kullanın ve her çekme isteğini en az bir kişinin daha gözden geçirmesini sağlayın. Otomatik denetimler yapmak için PR'leri de kullanın.

  • Çekme isteği incelemesi: Dört göz ilkesini uygulamak için, çekme isteklerinin en az bir gözden geçirene sahip olması zorunludur. GitHub kod sahipleri özelliğini, bir depodaki belirli dosyaları gözden geçirmekle sorumlu olan bireyleri veya ekipleri tanımlamak için de kullanabilirsiniz.

  • Sabit geçmiş: Yalnızca mevcut değişikliklerin üzerinde yeni işlemelere izin verin. Sabit geçmiş özellikle denetim amaçları için önemlidir.

  • Diğer güvenlik önlemleri: GitHub kullanıcılarınızın iki öğeli kimlik doğrulamasını etkinleştirmesini zorunlu hale getirin. Değişiklikleri önlemek için yalnızca imzalı işlemelere izin verin.

Maliyet İyileştirme

Maliyet İyileştirme, gereksiz giderleri azaltmanın ve operasyonel verimlilikleri iyileştirmenin yollarına odaklanır. Daha fazla bilgi için bkz . Maliyet İyileştirme için tasarım gözden geçirme denetim listesi.

  • AKS ücretsiz katmanı ücretsiz küme yönetimi sağlar. Maliyetler AKS'nin konak düğümleri için kullandığı işlem, depolama ve ağ kaynaklarıyla sınırlıdır. AKS ücretsiz katmanı hizmet düzeyi sözleşmesi (SLA) içermez ve üretim iş yükleri için önerilmez.

  • GitHub ücretsiz bir hizmet sağlar, ancak kod sahipleri veya gerekli gözden geçirenler gibi güvenlikle ilgili gelişmiş özellikleri kullanmak için Ekip planına ihtiyacınız vardır. Daha fazla bilgi için bkz. GitHub fiyatlandırması.

  • Azure DevOps, bazı senaryolar için kullanabileceğiniz ücretsiz bir katman sağlar.

  • Maliyetleri tahmin etmek için Azure fiyatlandırma hesaplayıcısını kullanın.

Operasyonel Mükemmellik

Operasyonel Mükemmellik, bir uygulamayı dağıtan ve üretimde çalışır durumda tutan operasyon süreçlerini kapsar. Daha fazla bilgi için bkz . Operasyonel Mükemmellik için tasarım gözden geçirme denetim listesi.

GitOps, DevOps üretkenliğini artırabilir. En kullanışlı özelliklerden biri, Git işlemlerini gerçekleştirerek beklenmedik şekilde davranan değişiklikleri hızla geri alma özelliğidir. İşleme grafı tüm işlemeleri içerir, bu nedenle geçmişe dönük analize yardımcı olabilir.

GitOps ekipleri genellikle aynı uygulama için birden çok ortamı yönetir. Bir uygulamanın farklı Kubernetes kümelerine veya ad alanlarına dağıtılan birkaç aşaması olması normaldir. Tek gerçeklik kaynağı olan Git deposu, şu anda bir kümeye dağıtılan uygulamaların sürümlerini gösterir.

Senaryo dağıtma

Beş senaryoyu dağıtma hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:

Katkıda Bulunanlar

Microsoft bu makaleyi korur. Bu makaleyi aşağıdaki katkıda bulunanlar yazdı.

Asıl yazar:

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

Sonraki adımlar