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:
- Kubernetes kaynaklarını (Ad Alanları, Gizli Diziler , Dağıtımlar ve diğerleri gibi) açıklayan YAML biçimli bildirimler
- Uygulamaları dağıtmak için helm grafikleri
- Ortama özgü değişiklikleri açıklamak için dosyaları kustomize etme
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.flux
etkinleş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-agent
ve fluxconfig-controller
yü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çinfluxconfigs.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 herfluxConfigurations
kaynak için Azure'a geri göndermek de sorumludur.fluxconfig-controller
: Özel kaynakları izler ve kümedekifluxconfigs.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ı
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
fluxConfigurations
tarafı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
fluxConfigurations
oluş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 veKustomization
ö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 Kustomization
biri 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.
Özel bağlantı içeren GitOps
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=false
kü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
- AKS veya Azure Arc özellikli Kubernetes kümelerinizde GitOps'yi etkinleştirmeyi öğrenmek için öğreticimizi kullanın.
- GitOps kullanarak CI/CD iş akışı hakkında bilgi edinin.