AKS ve Azure Arc özellikli Kubernetes için GitOps (Flux v2) ile uygulama dağıtımları

Azure, GitOps kullanarak Azure Kubernetes Service (AKS) ve Azure Arc özellikli Kubernetes kümeleriyle çalışan otomatik bir uygulama dağıtımları özelliği sağlar. Uygulamaları Kubernetes kümelerine dağıtmak için GitOps'un benimsenerek sağlanan temel avantajlar şunlardır:

  • Kümelerde çalışan uygulamaların durumu hakkında sürekli görünürlük.
  • Uygulama geliştirme ekipleri ve altyapı ekipleri arasındaki endişelerin ayrılması. Uygulama ekiplerinin Kubernetes dağıtımları konusunda deneyimli olması gerekmez. Platform mühendisliği ekipleri genellikle uygulama ekipleri için bir self servis modeli oluşturarak dağıtımları daha yüksek güvenle çalıştırmalarını sağlar.
  • Kilitlenme veya ölçeği genişletme durumunda kümeleri istenen durumla yeniden oluşturma olanağı.

GitOps ile Kubernetes kümelerinizin istenen durumunu Git depolarındaki dosyalarda bildirirsiniz. Git depoları aşağıdaki dosyaları içerebilir:

Bu dosyalar bir Git deposunda depolandığından, bunlar sürümlenir ve sürümler arasındaki değişiklikler kolayca izlenir. Kubernetes denetleyicileri kümelerde çalışır ve küme durumunu Git deposunda bildirilen istenen durumla sürekli olarak mutabık tutar. Bu işleçler Git depolarından dosyaları çeker ve istenen durumu kümelere uygular. İşleçler ayrıca sürekli olarak kümenin istenen durumda kalmasını sağlar.

Azure Arc özellikli Kubernetes veya Azure Kubernetes Service'te GitOps, popüler bir açık kaynak araç kümesi olan Flux'u kullanır. Flux, yaygın dosya kaynakları (Git ve Helm depoları, Demetler, Azure Blob Depolama) ve şablon türleri (YAML, Helm ve Kustomize) için destek sağlar. Flux, diğer özelliklerin yanında çoklu kiracı ve dağıtım bağımlılığı yönetimini de destekler.

Flux doğrudan kümeye dağıtılır ve her kümenin denetim düzlemi mantıksal olarak ayrılır. Bu, yüzlerce ve binlerce kümeye iyi ölçeklendirilmesini sağlar. Flux, saf çekme tabanlı GitOps uygulama dağıtımlarını etkinleştirir. Kaynak depo veya başka bir küme tarafından kümelere erişim gerekmez.

Flux kümesi uzantısı

GitOps, Azure Arc özellikli kubernetes veya AKS kümesinde küme uzantısı kaynağı olarak Microsoft.KubernetesConfiguration/extensions/microsoft.fluxetkinleştirilir. Bir microsoft.flux veya daha fazla fluxConfigurations uzantının oluşturulabilmesi için önce uzantının kümeye yüklenmesi gerekir. Uzantı, kümede ilk Microsoft.KubernetesConfiguration/fluxConfigurations kez oluşturduğunuzda otomatik olarak yüklenir veya portalı, Azure CLI'yı (az k8s-extension create --extensionType=microsoft.flux), ARM şablonunu veya REST API'yi kullanarak bu uzantıyı el ile yükleyebilirsiniz.

Denetleyiciler

Varsayılan olarak, microsoft.flux uzantı Flux denetleyicilerini (Kaynak, Kustomize, Helm, Bildirim) ve FluxConfig Özel Kaynak Tanımı 'nı (CRD) fluxconfig-agentve fluxconfig-controlleryükler. İsteğe bağlı olarak, Docker görüntülerini güncelleştirmek ve image-reflector almak için işlevsellik sağlayan Flux image-automation ve denetleyicilerini de yükleyebilirsiniz.

  • Flux Kaynak denetleyicisi: Özel kaynakları izler source.toolkit.fluxcd.io . Git depoları, Helm depoları, Demetler ve Azure Blob depolama arasındaki eşitlemeyi işler. Özel Git, Helm depoları ve Azure blob depolama hesapları için kaynakla yetkilendirmeyi işler. Tar arşiv dosyası aracılığıyla kaynakta yapılan en son değişiklikleri ortaya çıkar.

  • Flux Kustomize denetleyicisi: Özel kaynakları izler kustomization.toolkit.fluxcd.io . Kustomize veya ham YAML dosyalarını kaynaktan kümeye uygular.

  • Flux Helm denetleyicisi: Özel kaynakları izler helm.toolkit.fluxcd.io . Kaynak denetleyicisi tarafından ortaya çıkarılan Helm Deposu kaynağından ilişkili grafiği alır. HelmChart Özel kaynağı oluşturur ve belirtilen sürüm, ad ve müşteri tanımlı değerlerle kümeye uygularHelmRelease.

  • Flux Bildirim denetleyicisi: Özel kaynakları izler notification.toolkit.fluxcd.io . Tüm Flux denetleyicilerinden bildirim alır. Kullanıcı tanımlı web kancası uç noktalarına anında iletme bildirimleri gönderilir.

  • Flux Özel Kaynak Tanımları:

    • kustomizations.kustomize.toolkit.fluxcd.io
    • imagepolicies.image.toolkit.fluxcd.io
    • imagerepositories.image.toolkit.fluxcd.io
    • imageupdateautomations.image.toolkit.fluxcd.io
    • alerts.notification.toolkit.fluxcd.io
    • providers.notification.toolkit.fluxcd.io
    • receivers.notification.toolkit.fluxcd.io
    • buckets.source.toolkit.fluxcd.io
    • gitrepositories.source.toolkit.fluxcd.io
    • helmcharts.source.toolkit.fluxcd.io
    • helmrepositories.source.toolkit.fluxcd.io
    • helmreleases.helm.toolkit.fluxcd.io
    • fluxconfigs.clusterconfig.azure.com
  • FluxConfig CRD: Kubernetes nesnelerini tanımlayan FluxConfig özel kaynaklar için fluxconfigs.clusterconfig.azure.com özel Kaynak Tanımı.

  • fluxconfig-agent: Azure'ı yeni veya güncelleştirilmiş fluxConfigurations kaynaklar için izlemekten ve kümede ilişkili Flux yapılandırmasını başlatmakla sorumludur. Ayrıca kümedeki Flux durum değişikliklerini her fluxConfigurations kaynak için Azure'a geri göndermek de sorumludur.

  • fluxconfig-controller: Özel kaynakları izler ve kümedeki fluxconfigs.clusterconfig.azure.com GitOps makinelerinin yeni veya güncelleştirilmiş yapılandırmasıyla değişikliklere yanıt verir.

Not

microsoft.flux Uzantı ad alanına flux-system yüklenir ve küme genelinde kapsama sahiptir. Bu uzantıyı ad alanı kapsamında yükleyemezsiniz.

Flux yapılandırmaları

Azure Arc özellikli Kubernetes veya AKS kümesinde Flux yapılandırmasının yüklenmesini gösteren diyagram.

Git depolarınızdan, Demet kaynaklarından veya Azure Blob depolamadan kümenin GitOps yönetimini etkinleştirmek için Flux yapılandırma kaynakları (Microsoft.KubernetesConfiguration/fluxConfigurations) oluşturursunuz. Bir fluxConfigurations kaynak oluşturduğunuzda, hedef Git deposu gibi parametreler için sağladığınız değerler, bu kümede GitOps işlemini etkinleştiren Kubernetes nesnelerini oluşturmak ve yapılandırmak için kullanılır. Veri güvenliğini sağlamak için kaynak verileri, fluxConfigurations Küme Yapılandırma hizmeti tarafından Azure Cosmos DB veritabanında bekleyen konumda şifrelenmiş olarak depolanır.

fluxconfig-agent uzantısıyla microsoft.flux yüklenen ve fluxconfig-controller aracıları GitOps yapılandırma işlemini yönetir.

fluxconfig-agent aşağıdaki görevlerden sorumludur:

  • Yeni veya güncelleştirilmiş fluxConfigurations kaynaklar için Kubernetes Yapılandırma veri düzlemi hizmetini yoklar.
  • Kümedeki özel kaynakları yapılandırma bilgileriyle oluşturur veya güncelleştirir FluxConfig .
  • FluxConfig Özel kaynakları izler ve durum değişikliklerini ilişkili Azure fluxConfiguration kaynaklarına geri gönderir.

fluxconfig-controller aşağıdaki görevlerden sorumludur:

  • Yönetilen fluxConfigurationstarafından oluşturulan Flux özel kaynaklarına yönelik durum güncelleştirmelerini izler.
  • yaşam süresi boyunca var olan özel/ortak anahtar çifti fluxConfigurationsoluşturur. BU anahtar, URL SSH tabanlıysa ve kullanıcı yapılandırma oluşturma sırasında kendi özel anahtarını sağlamadıysa kimlik doğrulaması için kullanılır.
  • Kullanıcı tarafından sağlanan private-key/http basic-auth/known-hosts/no-auth verilerini temel alan özel kimlik doğrulama gizli dizisi oluşturur.
  • Rol tabanlı erişim denetimini ayarlar (hizmet hesabı sağlandı, rol bağlama oluşturuldu/atandı, rol oluşturuldu/atandı).
  • Özel kaynaktaki bilgilerden veya Bucket özel kaynak ve Kustomization özel kaynaklar oluştururGitRepository.FluxConfig

Azure'daki her fluxConfigurations kaynak bir Flux GitRepository veya Bucket özel kaynakla ve bir Kubernetes kümesindeki bir veya daha fazla Kustomization özel kaynakla ilişkilendirilir. Kaynak fluxConfigurations oluşturduğunuzda, kaynağın URL'sini (Git deposu, Demet veya Azure Blob depolama) ve her Kustomizationbiri için kaynakta eşitleme hedefini belirtirsiniz. Dağıtım sıralamasını denetlemek için özel kaynaklar arasındaki Kustomization bağımlılıkları yapılandırabilirsiniz. Farklı uygulamalar ve uygulama ekipleri için aynı kümede birden çok ad alanı kapsamlı fluxConfigurations kaynak da oluşturabilirsiniz.

Not

Azure'daki fluxconfig-agent yeni veya güncelleştirilmiş fluxConfiguration kaynakları izler. Aracının kümeye uygulanacağı istenen durum fluxConfiguration için Azure bağlantısı gerekir. Aracı Azure'a bağlanamıyorsa, kümedeki değişiklikler aracının bağlanabilmesini bekler. Kümenin Azure bağlantısı 48 saatten uzun süreyle kesilirse küme isteği zaman aşımına uğrar ve değişikliklerin Azure'da yeniden uygulanması gerekir.

Özel anahtar ve belirteç/parola gibi hassas müşteri girişleri Kubernetes Yapılandırma hizmetinde 48 saatten daha kısa bir süre boyunca depolanır. Azure'da bu değerlerden herhangi birini güncelleştirirseniz kümelerinizin 48 saat içinde Azure'a bağlandığından emin olun.

Azure portalında Flux yapılandırma durumunu ve uyumluluğu izleyebilir veya durum, uyumluluk, kaynak tüketimi ve mutabakat etkinliğini izlemek için panoları kullanabilirsiniz. Daha fazla bilgi için bkz . GitOps (Flux v2) durumunu ve etkinliğini izleme.

Sürüm desteği

Flux v2 uzantısının (microsoft.flux) en son sürümü ve önceki iki sürüm (N-2) desteklenir. Genellikle uzantının en son sürümünü kullanmanızı öneririz. Sürüm 1.7.0'dan microsoft.flux itibaren ARM64 tabanlı kümeler desteklenir.

Not

Flux v1 kullanıyorsanız, en kısa sürede Flux v2'ye geçiş yapmanızı öneririz.

1 Ocak 2024 tarihinden önce oluşturulan Flux v1 tabanlı küme yapılandırma kaynakları desteği 24 Mayıs 2025'te sona erecektir. 1 Ocak 2024'den itibaren yeni Flux v1 tabanlı küme yapılandırma kaynakları oluşturamayacaksınız.

Azure Arc özellikli Kubernetes kümesine özel bağlantı desteği eklediyseniz uzantı, microsoft.flux Azure'a geri iletişimle birlikte kullanıma hazır şekilde çalışır. Git deponuza, Helm deponuza veya Kubernetes bildirimlerinizi dağıtmak için gereken diğer uç noktalara yönelik bağlantılar için bu uç noktaları güvenlik duvarınızın arkasında sağlamalı veya güvenlik duvarınızda listeleyerek Flux Kaynak denetleyicisinin bunlara başarıyla ulaşabilmesini sağlamalısınız.

Veri yerleşimi

Azure GitOps hizmeti (Azure Kubernetes Yapılandırma Yönetimi), müşteri verilerini depolar/işler. Varsayılan olarak, müşteri verileri eşleştirilmiş bölgeye çoğaltılır. Singapur, Doğu Asya ve Güney Brezilya bölgeleri için tüm müşteri verileri bölgede depolanır ve işlenir.

Büyük ölçekte Flux yapılandırmaları uygulama

Azure Resource Manager yapılandırmalarınızı yönettiğinden, abonelik veya kaynak grubu kapsamında Azure İlkesi kullanarak tüm Azure Kubernetes Service ve Azure Arc özellikli Kubernetes kaynakları arasında aynı yapılandırmayı oluşturmayı otomatikleştirebilirsiniz. Bu ölçekli uygulama, belirli yapılandırmaların küme gruplarının tamamına tutarlı bir şekilde uygulanmasını sağlar.

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.

Parametreler

Azure'da Flux v2 tarafından desteklenen tüm parametreleri görmek için belgelere az k8s-configuration bakın. Azure uygulaması şu anda Flux'un desteklediği her parametreyi desteklememektedir.

Kullanılabilir parametreler ve bunların nasıl kullanılacağı hakkında bilgi için bkz . GitOps (Flux v2) tarafından desteklenen parametreler.

Çoklu kiracı

Flux v2, sürüm 0.26'dan başlayarak çoklu kiracıyı destekler. Bu özellik Azure'da Flux v2 ile tümleştirilmiştir.

Not

Çok kiracılı özellik için, bildirimlerinizin HelmRelease, Kustomization, ImagePolicy veya diğer nesneler için herhangi bir çapraz ad alanı sourceRef içermediğini veya 1.20.6'dan küçük bir Kubernetes sürümü kullanıp kullanmayabileceğinizi bilmeniz gerekir. Hazırlamak için:

  • Kubernetes sürüm 1.20.6 veya üzeri sürüme yükseltin.
  • Kubernetes bildirimlerinizde, tümünün sourceRef GitOps yapılandırmasıyla aynı ad alanı içindeki nesnelere ait olduğundan emin olun.
    • Bildirimlerinizi güncelleştirmek için zamana ihtiyacınız varsa çok kiracılı kullanımdan çıkabilirsiniz. Ancak Yine de Kubernetes sürümünüzü yükseltmeniz gerekir.

Çoklu kiracı için bildirimleri güncelleştirme

Küme kapsamına sahip ad alanında cluster-config Kubernetes kümelerimizden birine bir fluxConfiguration dağıttığınızı varsayalım. Kaynağı depoyu eşitlenecek https://github.com/fluxcd/flux2-kustomize-helm-example şekilde yapılandırabilirsiniz. Bu, Flux v2 ile GitOps kullanarak uygulama dağıtma öğreticisinde kullanılan örnek Git deposuyla aynıdır.

Flux depoyu eşitledikten sonra bildirimlerde (YAML dosyaları) açıklanan kaynakları dağıtır. Bildirimlerden ikisi ve HelmRepository nesnelerini açıklarHelmRelease.

apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: nginx
  namespace: nginx
spec:
  releaseName: nginx-ingress-controller
  chart:
    spec:
      chart: nginx-ingress-controller
      sourceRef:
        kind: HelmRepository
        name: bitnami
        namespace: flux-system
      version: "5.6.14"
  interval: 1h0m0s
  install:
    remediation:
      retries: 3
  # Default values
  # https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
  values:
    service:
      type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
  name: bitnami
  namespace: flux-system
spec:
  interval: 30m
  url: https://charts.bitnami.com/bitnami

Varsayılan olarak, Flux uzantısı fluxConfigurations yalnızca cluster-config ad alanında dağıtılan hizmet hesabının kimliğine bürünerek flux-applier öğesini dağıtır. Çok kiracılılık etkinleştirildiğinde yukarıdaki bildirimler kullanıldığında engellenir HelmRelease . Bunun nedeni HelmRelease ad alanında nginx olmasıdır, ancak ad alanında HelmRepository'ye flux-system başvurur. Ayrıca, ad alanında hizmet hesabı nginx olmadığından flux-applier Flux helm-controller uygulayamazHelmRelease.

Çok kiracılı çalışma için doğru yaklaşım, tüm Flux nesnelerini ile aynı ad alanına dağıtmaktır fluxConfigurations. Bu yaklaşım, ad alanları arası başvuru sorununu önler ve Flux denetleyicilerinin nesneleri uygulama izinlerini almasına olanak tanır. Bu nedenle, ad alanında oluşturulan bir GitOps yapılandırması için cluster-config bu örnek bildirimler aşağıdaki gibi değişir:

apiVersion: helm.toolkit.fluxcd.io/v2beta1
kind: HelmRelease
metadata:
  name: nginx
  namespace: cluster-config 
spec:
  releaseName: nginx-ingress-controller
  targetNamespace: nginx
  chart:
    spec:
      chart: nginx-ingress-controller
      sourceRef:
        kind: HelmRepository
        name: bitnami
        namespace: cluster-config
      version: "5.6.14"
  interval: 1h0m0s
  install:
    remediation:
      retries: 3
  # Default values
  # https://github.com/bitnami/charts/blob/master/bitnami/nginx-ingress-controller/values.yaml
  values:
    service:
      type: NodePort
apiVersion: source.toolkit.fluxcd.io/v1beta1
kind: HelmRepository
metadata:
  name: bitnami
  namespace: cluster-config
spec:
  interval: 30m
  url: https://charts.bitnami.com/bitnami

Çok kiracılı kullanımdan çıkma

microsoft.flux Uzantı yüklendiğinde, çoklu kiracı varsayılan olarak etkinleştirilir. Çoklu kiracıyı devre dışı bırakmanız gerekiyorsa, şu örnek komutlarda gösterildiği gibi ile --configuration-settings multiTenancy.enforce=falsekümelerinizde uzantıyı oluşturarak veya güncelleştirerek microsoft.flux geri çevirebilirsiniz:

az k8s-extension create --extension-type microsoft.flux --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>
az k8s-extension update --configuration-settings multiTenancy.enforce=false -c CLUSTER_NAME -g RESOURCE_GROUP -n flux -t <managedClusters or connectedClusters>

Flux v1'den geçiş

Flux v1 kullanmaya devam ediyorsanız en kısa sürede Flux v2'ye geçiş yapmanızı öneririz.

Flux v1 kullandığınız kümelerde Flux v2'yi kullanmaya geçiş yapmak için önce tüm Flux v1'i sourceControlConfigurations kümelerden silmeniz gerekir. Flux v2 temelde farklı bir mimariye sahip olduğundan, kümede microsoft.flux Flux v1 sourceControlConfigurations kaynakları varsa küme uzantısı yüklenmez. Flux v1 yapılandırmalarını kaldırma ve Flux v2 yapılandırmalarını dağıtma işlemi 30 dakikadan uzun sürmemelidir.

Flux v1'in sourceControlConfigurations kaldırılması, kümelerde çalışan hiçbir uygulamayı durdurmaz. Ancak, Flux v1 yapılandırmasının kaldırıldığı ve Flux v2 uzantısının henüz tam olarak dağıtılmadığında:

  • Git deposunda depolanan uygulama bildirimlerinde yeni değişiklikler varsa, geçiş sırasında bu değişiklikler çekilmez ve kümede dağıtılan uygulama sürümü eski olur.
  • Küme durumunda istenmeyen değişiklikler varsa ve kaynak Git deposunda belirtilen istenen durumdan sapıyorsa, küme kendi kendini iyileştiremez.

Üretim ortamınızı geçirmeden önce geçiş senaryonuzu geliştirme ortamında test etmenizi öneririz.

Flux v1 yapılandırmalarını görüntüleme ve silme

Bir kümedeki mevcut olanı sourceControlConfigurations bulmak ve silmek için şu Azure CLI komutlarını kullanın:

az k8s-configuration list --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>
az k8s-configuration delete --name <configuration name> --cluster-name <cluster name> --cluster-type <connectedClusters or managedClusters> --resource-group <resource group name>

Ayrıca Azure portalında bir küme için mevcut GitOps yapılandırmalarını bulabilir ve silebilirsiniz. Bunu yapmak için yapılandırmanın oluşturulduğu kümeye gidin ve sol bölmede GitOps'yi seçin. Yapılandırmayı ve ardından Sil'i seçin.

Flux v2 yapılandırmalarını dağıtma

Kümelerinize Flux v2 yapılandırmaları uygulamak için Azure portalını veya Azure CLI'yı kullanın.

Flux v1 kullanımdan kaldırma bilgileri

Flux v1'in açık kaynak projesi arşivlendi ve özellik geliştirme süresiz olarak durduruldu.

Flux v2, Flux'un yükseltilmiş açık kaynak projesi olarak başlatıldı. Yeni bir mimariye sahiptir ve daha fazla GitOps kullanım örneğini destekler. Microsoft, Mayıs 2022'de Flux v2 kullanarak bir uzantının sürümünü başlattı. Flux v1'i kullanma desteğiNin Mayıs 2025'te sona ermesi planlandığı için müşterilerin üç yıl içinde Flux v2'ye geçmeleri önerildi.

Flux v2 için GitOps uzantısında sunulan önemli yeni özellikler:

  • Flux v1, monolitik bir her şeyi yap işlecidir. Flux v2 işlevleri özel denetleyicilere (Kaynak denetleyicisi, Kustomize denetleyicisi, Helm denetleyicisi ve Bildirim denetleyicisi) ayırır.
  • Birden çok kaynak deposuyla eşitlemeyi destekler.
  • Her kaynak deposunu kendi izin kümesiyle uygulama gibi çoklu kiracıyı destekler.
  • Sistem durumu denetimleri, olaylar ve uyarılar aracılığıyla operasyonel içgörüler sağlar.
  • Git dallarını destekler, işlemeleri ve etiketleri sabitler ve SemVer etiket aralıklarını takip eder.
  • GitRepository kaynağı başına kimlik bilgileri yapılandırması: SSH özel anahtarı, HTTP/S kullanıcı adı/parola/belirteç ve OpenPGP ortak anahtarları.

Sonraki adımlar