Düzenle

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'ye yerel bir küme uzantısıdır . Küme uzantıları, 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 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 Yapılandırma Haritalar gibi Kubernetes yapılandırma nesnelerini değiştirebilir ve değişiklikleri doğrudan GitHub deposuna işleyebilir.

Bu senaryo için veri akışı şu şekildedir:

  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

  • Flux'u Azure DevOps, GitLab ve BitBucket gibi diğer Git depolarıyla kullanabilirsiniz.
  • Git depoları yerine Flux Bucket API'si, Amazon S3 ve Google Cloud Depolama demetleri gibi depolama çözümlerinden nesneler için bir yapıt üretmek için bir kaynak tanımlar. S3 uyumlu API'ye sahip bir çözüm de kullanabilirsiniz. Minio ve Alibaba Bulut İşletim Sistemi S iki örnektir, ancak başka örnekler 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ı.

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

Flux, GitHub ve AKS ile GitOps kullanarak CI/CD uygulama 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. Veriler senaryo boyunca aşağıdaki gibi akar:

  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ü Azure Container Registry'ye gönderir.
  4. GitHub Actions, Kubernetes bildirim dağıtım dosyasını Azure 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ışı

Bu senaryoda Kubernetes yöneticisi gizli diziler ve Yapılandırma Haritalar gibi Kubernetes yapılandırma nesnelerini değiştirebilir ve değişiklikleri doğrudan GitHub deposuna işleyebilir.

Bu senaryo için veri akışı şu şekildedir:

  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, canlı durumu otomatik olarak veya el ile istenen hedef duruma geri eşitleme olanağı sağlarken farkları raporlar ve görselleştirir.

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. Bunları yapmak 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 dengeleyiciyi kullanarak bunları kullanıma sürükleyebilirsiniz.

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 uygulama 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. Veriler senaryo boyunca aşağıdaki gibi akar:

  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ü Azure Container Registry'ye gönderir.
  4. GitHub Actions, Kubernetes bildirim dağıtım dosyasını Azure 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/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. Bu makalede, GitOps'un AKS kümesiyle birlikte kullanılmasına yönelik bazı yaygın seçenekler açıklanmaktadır.

GitOps ilkelerine göre GitOps tarafından yönetilen bir sistemin istenen durumu şu şekilde olmalıdır:

  1. Bildirim temelli: GitOps'un yönettiği bir sistemin istenen durumunu bildirimli olarak ifade etmesi gerekir. Bildirim genellikle bir Git deposunda depolanır.
  2. Sürüm oluşturma ve sabit: İstenen durum, değiştirilemezliği ve sürüm oluşturmayı zorlayan ve tam sürüm geçmişini koruyan bir şekilde depolanır.
  3. Otomatik olarak çekildi: Yazılım aracıları kaynaktan istenen durum bildirimlerini otomatik olarak çeker.
  4. Sürekli mutabık kalınan: Yazılım aracıları sürekli olarak gerçek sistem durumunu gözlemler ve istenen durumu uygulamayı dener.

GitOps'ta kod olarak altyapı (IaC), 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 içeren bildirimli olarak küme durumundan uygulama dağıtımlarına kadar her şeyi 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 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 ilkeleri zorunlu kılar. 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. Çeşitli ekiplere yönelik bildirimleri, onlara güncel GitOps durumu sağlayacak şekilde 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 yalnızca GitOps'un değiştirebileceğini zorunlu kılmak istiyorsanız, kümeye doğrudan erişimi kısıtlayabilirsiniz. Azure rol tabanlı erişim denetimi (RBAC), erişim denetleyicileri ve diğer araçlar dahil olmak üzere bunu yapmanın çeşitli yolları vardır.

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

Temel yapılandırmanın bir parçası olarak AKS kümelerini dağıtma gereksinimi olması mümkündür. Örnek olarak, iş yüklerini dağıtmadan önce bir dizi paylaşılan hizmet veya yapılandırma dağıtmanız gerekir. Bu paylaşılan hizmetler aks eklentilerini yapılandırabilir, örneğin:

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 kullanılmasını önerir. Flux uzantısını kullanırsanız, dağıttıktan çok kısa bir süre 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, her değişikliğin denetim kaydıyla uygulamaları ve altyapıyı kod olarak dağıtmanın avantajlarını isteyen tüm kuruluşlara avantaj sağlar.

GitOps, geliştiriciyi kapsayıcı ortamını yönetme karmaşıklıklarından korur. Geliştiriciler, güncelleştirmeleri ve yeni özellikleri yönetmek için Git gibi tanıdık araçlarla çalışmaya devam edebilir. Bu şekilde GitOps, geliştirici üretkenliğini artırır.

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 . 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ış.

Güvenilirliğin temel yapılarından biri dayanıklılıktır. Dayanıklılığın hedefi, bir hatanın ardından uygulamayı tam çalışır duruma geri döndürmektir. Bir küme kullanılamaz duruma gelirse GitOps hızlı bir şekilde yeni bir küme oluşturabilir. 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 damgası desenini oluşturabilir.

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ış.

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 iletir ve GitOps işleci (Flux veya Argo CD) değişiklikleri okur ve bunları 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 ayarlama görevinin dışında, 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. Pr'leri kullanarak değişiklik yapın ve her çekme isteğini en az bir kişinin daha gözden geçirmesini sağlayın. Ayrıca, otomatik denetimler yapmak için PR'leri kullanın.
  • PR incelemesi: Pr'ların dört göz ilkesini uygulamak için en az bir gözden geçirene sahip olmasını zorunlu kılın. 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. Ayrıca, değişiklikleri önlemek için yalnızca imzalanan işlemelere izin verin.

Maliyet iyileştirme

Maliyet iyileştirmesi, gereksiz giderleri azaltmanın ve operasyonel verimlilikleri iyileştirmenin yollarını aramaktır. Daha fazla bilgi için bkz . Maliyet iyileştirme sütununa genel bakış.

  • Ücretsiz katmanda AKS, ücretsiz küme yönetimi sunar. Maliyetler AKS'nin konak düğümleri için kullandığı işlem, depolama ve ağ kaynaklarıyla sınırlıdır.
  • GitHub ücretsiz bir hizmet sunar, 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 GitHub fiyatlandırma sayfasına bakın.
  • Azure DevOps, bazı senaryolar için kullanabileceğiniz ücretsiz bir katman sunar.
  • 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 sütununa genel bakış.

GitOps, DevOps üretkenliğini artırabilir. En kullanışlı özelliklerden biri, yalnızca 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 son işlem analizinde 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

Aşağıdaki liste, beş senaryoyu dağıtma hakkında bilgi için başvurular sağlar:

  • Senaryo 1: Aks'ye uygulama dağıtmak için Flux v2 ile GitOps kullanma yönergeleri için bkz . Öğretici: Flux v2 ile GitOps kullanarak uygulama dağıtma. AKS kümesi dağıtımını önyüklemek için Flux uzantısının nasıl kullanılacağına ilişkin bir örnek için AKS temeli için başvuru uygulamasına bakın.
  • Senaryo 2: Uygulamaları dağıtmak ve CI/CD uygulamak için AKS'de Flux v2 ile GitOps kullanma yönergeleri için bkz. Öğretici: GitOps ile CI/CD Uygulama (Flux v2).
  • Senaryo 3 ve 4: Argo CD ve AKS ile örnek iş yükü dağıtma konusunda adım adım yönergeler için AKS Baseline Automation'daki çekme tabanlı CI/CD senaryosuna bakın.

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 yazar:

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

Sonraki adımlar