GitOps kullanarak CI/CD iş akışı (Flux v2)

Modern Kubernetes dağıtımları birden çok uygulama, küme ve ortam içerir. GitOps ile bu karmaşık kurulumları daha kolay yönetebilir ve Git ile Kubernetes ortamlarının istenen durumunu bildirimli olarak izleyebilirsiniz. Küme durumunu bildirmek için yaygın Git araçlarını kullanarak, sorumluluğu artırabilir, hata araştırmasını kolaylaştırabilir ve ortamları yönetmek için otomasyonu etkinleştirebilirsiniz.

Bu makalede GitOps'un Azure Arc, Azure Repos ve Azure Pipelines'ı kullanarak uygulama değişikliği yaşam döngüsünün tamamına nasıl uyduğu açıklanmaktadır. Ayrıca GitOps denetimindeki Kubernetes ortamlarında tek bir uygulama değişikliği örneği de sağlar.

Mimari

Bu diyagramda, bir veya daha fazla Kubernetes ortamına dağıtılan bir uygulamanın CI/CD iş akışı gösterilmektedir.

GitOps CI/CD mimarisini gösteren diyagram.

Uygulama kodu deposu

Uygulama deposu, geliştiricilerin iç döngüleri sırasında üzerinde çalıştığı uygulama kodunu içerir. Uygulamanın dağıtım şablonları bu depoda Helm veya Kustomize gibi genel bir biçimde bulunur. Ortama özgü değerler depoda depolanmaz.

Bu depoda yapılan değişiklikler, dağıtım işlemini başlatan bir çekme isteği veya CI işlem hattını çağırır.

Kapsayıcı kayıt defteri

Kapsayıcı kayıt defteri, Kubernetes ortamlarında kullanılan tüm birinci ve üçüncü taraf görüntüleri barındırır. Birinci taraf uygulama görüntüleri, insan tarafından okunabilen etiketlerle ve görüntüyü oluşturmak için kullanılan Git işlemesiyle etiketlenir. Güvenlik, hız ve dayanıklılık konusunda yardımcı olmak için üçüncü taraf görüntüleri önbelleğe alınabilir. Güvenlik güncelleştirmelerinin zamanında test edilmesi ve tümleştirilmesi için bir plan ayarlayın.

Daha fazla bilgi için bkz . Azure Container Registry Görevleri ile genel içeriği kullanma ve koruma.

PR işlem hattı

Geliştiricilerin uygulama deposuna yaptığı çekme istekleri, çekme isteği işlem hattının başarılı bir çalıştırması üzerine geçitlenir. Bu işlem hattı, uygulama kodunda lint ve birim testleri gibi temel kalite geçitlerini çalıştırır. İşlem hattı, kubernetes ortamına dağıtım için kullanılan uygulama ve lints Dockerfiles ve Helm şablonlarını test eder. Docker görüntüleri derlenmeli ve test edilmeli, ancak gönderilmemelidir. hızlı yinelemeye izin vermek için işlem hattı süresini görece kısa tutun.

CI işlem hattı

Uygulama CI işlem hattı tüm çekme isteği işlem hattı adımlarını çalıştırarak test ve dağıtım denetimlerini genişletir. İşlem hattı, main'a yapılan her işleme için çalıştırılabilir veya bir işleme grubuyla normal bir tempoda çalıştırılabilir.

Bu aşamada, PR işlem hattı için çok fazla tüketilen uygulama testleri gerçekleştirilebilir, örneğin:

  • Kapsayıcı kayıt defterine görüntü gönderme
  • Görüntü oluşturma, lint ve test etme
  • Ham YAML dosyalarının şablon oluşturması

CI derlemesinin sonunda yapıtlar oluşturulur. Bu yapıtlar CD adımı tarafından dağıtıma hazırlanırken kullanmak üzere kullanılabilir.

Flux kümesi uzantısı

Flux, her kümede küme uzantısı olarak çalışan bir aracıdır. Bu Flux kümesi uzantısı, istenen durumu korumakla sorumludur. Aracı, GitOps deposunu kullanıcı tanımlı bir aralıkta yoklar, ardından küme durumunu Git deposunda bildirilen durumla mutabık tutar.

Daha fazla bilgi için bkz . Öğretici: Flux v2 ile GitOps kullanarak uygulama dağıtma.

CD işlem hattı

CD işlem hattı başarılı CI derlemeleri tarafından otomatik olarak tetikleniyor. Bu işlem hattı ortamında, ortama özgü değerler daha önce yayımlanan şablonlarla değiştirilir ve GitOps deposunda bu değerlerle yeni bir çekme isteği oluşturulur. Bu çekme isteği, bir veya daha fazla Kubernetes kümesinin istenen durumunda önerilen değişiklikleri içerir. Küme yöneticileri çekme isteğini gözden geçirir ve GitOps deposuyla birleştirmeyi onaylar. İşlem hattı, çekme isteğinin birleştirilmesini bekler ve bundan sonra Flux eşitlenir ve durum değişikliklerini uygular.

GitOps deposu

GitOps deposu, kümeler arasında tüm ortamların geçerli istenen durumunu temsil eder. Bu depodaki tüm değişiklikler her kümedeki Flux hizmeti tarafından alınır ve dağıtılır. Kümelerin istenen durumunda yapılan değişiklikler çekme istekleri olarak sunulur ve bunlar daha sonra gözden geçirilir ve son olarak değişikliklerin onaylanmasıyla birleştirilir. Bu çekme istekleri, dağıtım şablonlarında yapılan değişiklikleri ve sonuçta işlenen Kubernetes bildirimlerini içerir. Düşük düzeyli işlenmiş bildirimler, genellikle şablon düzeyinde görünmeyen değişikliklerin daha dikkatli bir şekilde incelenmesine olanak sağlar.

GitOps bağlayıcısı

GitOps Bağlan or, Flux aracısı ile GitOps Deposu/CD işlem hattı arasında bir bağlantı oluşturur. Değişiklikler kümeye uygulanırken, Flux yapılan her aşama değişikliği ve sistem durumu denetimini GitOps bağlayıcısına bildirir. Bu bileşen bir bağdaştırıcı görevi görür. Git deposuyla nasıl iletişim kurulacaklarını anlar ve Git işleme durumunu güncelleştirerek eşitleme ilerleme durumunu GitOps deposunda görünür hale getirmektir. Dağıtım tamamlandığında (başarılı veya başarısız olsa da), bağlayıcı, işlem hattının tümleştirme testi gibi dağıtım sonrası etkinlikleri gerçekleştirebilmesi için CD işlem hattının devam etmesi için bildirimde bulunur.

Kubernetes kümeleri

En az bir Azure Arc özellikli Kubernetes veya Azure Kubernetes Service (AKS) kümesi, uygulamanın ihtiyaç duyduğu farklı ortamlara hizmet eder. Örneğin, tek bir küme farklı ad alanları aracılığıyla hem geliştirme hem de Soru-Cevap ortamına hizmet verebilir. İkinci küme, ortamların daha kolay ayrılmasına ve daha ayrıntılı denetim sağlanmasına olanak tanır.

Örnek iş akışı

Uygulama geliştiricisi olarak Alice:

  • Uygulama kodu yazar.
  • Uygulamanın Docker kapsayıcısında nasıl çalıştırileceğini belirler.
  • Kubernetes kümesinde kapsayıcıyı ve bağımlı hizmetleri çalıştıran şablonları tanımlar.

Alice, uygulamanın birden çok ortamda çalışma özelliğine sahip olduğundan emin olmak istiyor, ancak her ortam için belirli ayarları bilmiyor.

Alice'in uygulama dağıtım şablonunda kullanılan Docker görüntüsünü değiştiren bir uygulama değişikliği yapmak istediğini varsayalım.

  1. Alice dağıtım şablonunu değiştirir, Uygulama Deposu'nda adlı alice uzak bir dala iletir ve dalda main gözden geçirmek üzere bir çekme isteği açar.

  2. Alice, ekibinden değişikliği gözden geçirmesini ister.

    • Çekme isteği işlem hattı doğrulamayı çalıştırır.
    • Başarılı bir ÇEKME isteği işlem hattı çalıştırması ve ekip onayının ardından değişiklik birleştirilir.
  3. CI işlem hattı başlar ve Alice'in değişikliğini doğrular ve başarıyla tamamlanır.

    • Değişikliğin kümeye dağıtılması güvenlidir ve yapıtlar CI işlem hattı çalıştırmasına kaydedilir.
  4. Başarılı CI işlem hattı çalıştırması, CD işlem hattını tetikler.

    • CD işlem hattı, Alice'in CI işlem hattı çalıştırması tarafından depolanan yapıtları alır.
    • CD işlem hattı, şablonları ortama özgü değerlerle değiştirir ve değişiklikleri GitOps deposundaki mevcut küme durumuna göre hazırlar.
    • CD işlem hattı, küme durumunda istenen değişikliklerle GitOps Deposu'nun üretim dalında bir çekme isteği oluşturur.
  5. Alice'in ekibi çekme isteğini inceler ve onaylar.

    • Değişiklik, ortama karşılık gelen hedef dalda birleştirilir.
  6. Dakikalar içinde Flux, GitOps deposunda bir değişiklik fark eder ve Alice'in değişikliğini çeker.

    • Docker görüntü değişikliği nedeniyle uygulama podunun bir güncelleştirmeye ihtiyacı vardır.
    • Flux, değişikliği kümeye uygular.
    • Flux, dağıtım durumunu GitOps Bağlan or aracılığıyla GitOps deposuna geri bildirir.
  7. CD işlem hattı, yeni dağıtımın başarıyla tamamlandığını ve beklendiği gibi çalıştığını doğrulamak için otomatikleştirilmiş testler çalıştırır.

    Not

    Dağıtım için hedeflenen ek ortamlar için, CD işlem hattı sonraki ortam için bir çekme isteği oluşturarak yinelenir ve 4-7 arası adımları yineler. Çoğu işlem, güvenlikle ilgili bir değişiklik veya üretim ortamı gibi daha riskli dağıtımlar veya ortamlar için ek onay gerektirir.

  8. Tüm ortamlar başarılı dağıtımlar aldığında işlem hattı tamamlar.

Sonraki adımlar