Aracılığıyla paylaş


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.

Mimari diyagramlarını yüksek çözünürlükte indirmek için Jumpstart Gems'i ziyaret edin.

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 sürecini başlatan bir pull request veya CI pipeline'ı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ığı pull istekleri, PR işlem hattının başarılı bir çalıştırması üzerine onaylanır. 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ı, çekme isteği (PR) işlem hattı adımlarının tamamı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 imaj yükleme
  • Görüntü oluşturma, kod kontrolü (linting) ve test etme
  • Ham YAML dosyalarının şablon oluşturması

CI derlemesinin sonunda çıktılar oluşturulur. Bu eserler, CD adımı tarafından dağıtıma hazırlık amacıyla tüketmek için kullanılabilir.

Flux kümesi uzantısı

Flux, her bir kümede küme uzantısı olarak çalışan bir ajan olarak görev yapar. 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 şablonlara yerleştirilir ve bu değerlerle GitOps deposuna yeni bir pull isteği oluşturulur. Bu pull isteği, bir veya daha fazla Kubernetes kümesinin istenen durumunda önerilen değişiklikleri içerir. Küme yöneticileri pull request'i gözden geçirir ve GitOps deposuyla birleşmeyi onaylar. İşlem hattı, çekme isteğinin birleştirilmesini bekler ve ardından Flux eşitlenip 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 hedef durumundaki değişiklikler pull istekleri olarak sunulur, ardından gözden geçirilir ve son olarak değişikliklerin onaylanmasıyla birleştirilir. Bu pull talepleri, dağıtım şablonlarındaki değişiklikleri ve sonuçta işlenmiş Kubernetes manifestolarını 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ğlayıcısı , 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 kuracağını anlar ve eşitleme sürecinin GitOps deposunda görünür hale gelmesi için Git işlem durumunu günceller. 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 uzak bir alice dalına aktarır ve gözden geçirilmek üzere main dalına bir çekme isteği açar.

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

    • PR işlem hattı doğrulamayı çalıştırır.
    • Başarılı bir PR işlem hattı çalıştırmasından ve ekip onayından sonra, değişiklik birleştirilir.
  3. CI işlem hattı daha sonra başlar, 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 tarafından çalıştırılan CI işlem hattı tarafından depolanan üretilen dosyaları çeker.
    • 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 durumundaki istenen değişikliklerle GitOps Deposu'nun üretim dalına karşı bir pull request oluşturur.
  5. Alice'nin ekibi pull request'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, GitOps Bağlayıcısı aracılığıyla dağıtım durumunu 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 pull request oluşturarak yinelenir ve 4-7 arasındaki adımları tekrarlar. Ç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