GitOps (Flux v2) durumunu ve etkinliğini izleme

Azure Arc özellikli Kubernetes kümelerinizde veya Azure Kubernetes Service (AKS) kümelerinde Flux v2 ile GitOps ile ilgili durumu ve etkinliği izlemek için çeşitli seçenekleriniz vardır:

  • Tek tek kümelerdeki Flux yapılandırmalarını ve kaynaklarını izlemek için Azure portalını kullanın.
  • Dağıtım ve uyumluluk durumunu izlemek için Grafana panosunu kullanın.
  • Kaynak tüketimini ve mutabakatlarını izlemek için Flux Denetim Düzlemi ve Flux Kümesi İstatistikleri panolarını kullanın.
  • Kümelerden Prometheus kazımasını etkinleştirin ve Azure İzleyici çalışma alanında verileri kullanarak kendi panolarınızı oluşturun.
  • Prometheus kazıma aracılığıyla sağlanan verileri kullanarak Azure İzleyici'de uyarılar oluşturun.

Bu konu başlığı altında, Flux etkinliğinizi ve durumunuzu izlemenin bazı yolları açıklanmaktadır.

Azure portalında Flux yapılandırmalarını izleme

Kümenizde Flux yapılandırmalarını oluşturduktan sonra, kümeye gidip GitOps'u seçerek Azure portalda durum bilgilerini görüntüleyebilirsiniz.

Küme uyumluluğu ve nesneleriyle ilgili ayrıntıları görüntüleme

Uyumluluk durumu, kümenin geçerli durumunun istenen durumla eşleşip eşleşmediğini gösterir. Olası değerler:

  • Uyumlu: Kümenin durumu istenen durumla eşleşir.
  • Beklemede: İstenen güncelleştirilmiş bir durum algılandı, ancak bu durum kümede henüz mutabakat sağlanmadı.
  • Uyumlu Değil: Geçerli durum istenen durumla eşleşmiyor.

Screenshot of cluster compliance and other values in the Azure portal.

Kümede mutabakat sorunlarının hatalarını ayıklamaya yardımcı olmak için Yapılandırma nesneleri'ne tıklayın. Burada, Flux'un her Flux yapılandırması için oluşturduğu yapılandırma nesnelerinin her birinin günlüklerini görüntüleyebilirsiniz. Günlüklerini görüntülemek için bir nesne adı seçin.

Screenshot showing detailed conditions for a configuration object.

Flux yapılandırmalarının uygulanması sonucunda oluşturulan Kubernetes nesnelerini görüntülemek için, kümenin sol gezinti bölmesinin Kubernetes kaynakları bölümünde İş Yükleri'ni seçin. Burada, kümede oluşturulmuş tüm kaynakların tüm ayrıntılarını görüntüleyebilirsiniz.

Varsayılan olarak, ad alanına ve hizmet adına göre filtreleyebilirsiniz. Ayrıca, aramayı daraltmaya yardımcı olmak için uygulamalarınızda kullanıyor olabileceğiniz herhangi bir etiket filtresi de ekleyebilirsiniz.

Flux yapılandırma durumunu ve ayrıntılarını görüntüleme

Her Flux yapılandırması için State sütunu, Flux yapılandırma nesnesinin kümede başarıyla oluşturulup oluşturulmadığını gösterir.

Aşağıdaki bilgiler de dahil olmak üzere Genel Bakış sayfasını görmek için herhangi bir Flux yapılandırması seçin:

  • Son eşitleme için kaynak işleme kimliği
  • En son kaynak güncelleştirmesinin zaman damgası
  • Durum güncelleştirme zaman damgası (en son istatistiklerin ne zaman alındığını gösterir)
  • Depo URL'si ve dal
  • Farklı kustomizasyonları görüntüleme bağlantıları

Screenshot of the Overview page of a Flux configuration in the Azure portal.

GitOps durumunu ve etkinliğini izlemek için panoları kullanma

Flux v2 ile GitOps için durum, uyumluluk, kaynak tüketimi ve mutabakat etkinliğini izlemenize yardımcı olacak panolar sağlıyoruz. Bu JSON panoları, verilerinizi gerçek zamanlı olarak görüntülemenize ve çözümlemenize yardımcı olmak için Grafana'ya aktarılabilir. Bu bilgiler için uyarılar da ayarlayabilirsiniz.

Bu panoları içeri aktarmak ve kullanmak için şunlar gerekir:

Dağıtım ve uyumluluk durumunu izleme

Kümeler arasında Flux uzantısı dağıtımını ve durumunu ve bu kümelerdeki Flux yapılandırmasının uyumluluk durumunu izlemenize olanak sağlayan panoları içeri aktarmak için bu adımları izleyin.

Dekont

Bu adımlar, panoyu Azure Yönetilen Grafana'ya aktarma işlemini açıklar. Bu panoyu herhangi bir Grafana örneğine de aktarabilirsiniz. Bu seçenekle bir hizmet sorumlusu kullanılmalıdır; yönetilen kimlik, Azure Yönetilen Grafana dışında veri bağlantısı için desteklenmez.

  1. Azure portalını veya Azure CLI'yı kullanarak Azure Yönetilen Grafana örneği oluşturun. Genel Bakış sayfasında uç noktasını seçerek Grafana'ya erişebildiğinizden emin olun. Panoları görüntülemek ve düzenlemek için en azından Grafana Düzenleyicisi düzeyinde izinlere ihtiyacınız vardır. Grafana örneğinde Erişim denetimi (IAM) öğesine giderek erişiminizi denetleyebilirsiniz.

  2. Azure Yönetilen Grafana örneği için yönetilen kimlik kullanıyorsanız, aboneliklerde İzleme Okuyucusu rolü atamak için şu adımları izleyin:

    1. Azure portalında, eklemek istediğiniz aboneliğe gidin.
    2. Erişim denetimi (IAM) öğesini seçin.
    3. Rol ataması ekle’yi seçin.
    4. İzleme Okuyucusu rolünü ve ardından İleri'yi seçin.
    5. Üyeler sekmesinde Yönetilen kimlik'i ve ardından Üye seç'i seçin.
    6. Yönetilen kimlik listesinden Azure Yönetilen Grafana Örneğinizi oluşturduğunuz aboneliği seçin. Ardından Azure Yönetilen Grafana'yı ve Azure Yönetilen Grafana örneğinizin adını seçin.
    7. Gözden Geçir ve Ata'yı seçin.

    Hizmet sorumlusu kullanıyorsanız, veri kaynağı bağlantınız için kullanacağınız hizmet sorumlusuna İzleme Okuyucusu rolünü verin. Aynı adımları izleyin, ancak Üyeler sekmesinde Kullanıcı, grup veya hizmet sorumlusu'nunardından hizmet sorumlunuzu seçin. (Azure Yönetilen Grafana kullanmıyorsanız, veri bağlantısı erişimi için bir hizmet sorumlusu kullanmanız gerekir.)

  3. Azure Yönetilen Grafana örneğinizde Azure İzleyici Veri Kaynağı bağlantısını oluşturun. Bu bağlantı panonun Azure Kaynak Grafı verilerine erişmesini sağlar.

  4. GitOps Flux - Uygulama Dağıtımları Panosu'nu indirin.

  5. JSON panosunu Grafana'ya aktarma adımlarını izleyin.

Panoyu içeri aktardıktan sonra, izlemekte olduğunuz kümelerden bilgileri ve ayrıntıları sağlayan çeşitli panelleri görüntüler. Bir öğe hakkında daha fazla ayrıntı için yapılandırmalar, hatalar ve günlükler hakkında daha fazla bilgi bulabileceğiniz Azure portalını ziyaret etmek için bağlantıyı seçin.

Screenshot of the Flux Application Deployments Dashboard.

Flux Uzantısı Dağıtım Durumu tablosu, Flux uzantısının dağıtıldığı tüm kümeleri ve geçerli dağıtım durumunu listeler.

Screenshot showing the Flux Extension Deployments Status table in the Application Deployments dashboard.

Flux Yapılandırması Uyumluluk Durumu tablosu, kümelerde oluşturulan tüm Flux yapılandırmalarını ve bunların uyumluluk durumunu listeler. Helm sürümleri ve kustomizasyonları gibi yapılandırma nesnelerinin durum ve hata günlüklerini görmek için ComplianceState sütunundan Uyumsuz bağlantısını seçin.

Screenshot showing the Flux Configuration Compliance Status table in the Application Deployments dashboard.

Duruma Göre Flux Uzantısı Dağıtımlarının Sayısı grafiği, sağlama durumlarına göre kümelerin sayısını gösterir.

Screenshot of the Flux Extension Deployments by Status pie chart in the Application Deployments dashboard.

Uyumluluk Durumuna Göre Flux Yapılandırmalarının Sayısı grafiği, kaynak depoya göre uyumluluk durumlarına göre Flux yapılandırmalarının sayısını gösterir.

Screenshot of the Flux Configuration by Compliance Status chart on the Application Deployments dashboard.

Uygulama dağıtımlarını izlemek için pano verilerini filtreleme

Gösterilen bilgileri değiştirmek için GitOps Flux - Uygulama Dağıtımları Panosu'ndaki verileri filtreleyebilirsiniz. Örneğin, yalnızca belirli abonelikler veya kaynak grupları için verileri gösterebilir veya verileri belirli bir kümeyle sınırlayabilirsiniz. Bunu yapmak için, en üst düzey açılan listelerden veya tablolardaki herhangi bir sütun üst bilgisinden filtre seçeneğini belirleyin.

Örneğin, Flux Yapılandırması Uyumluluk Durumu tablosunda SourceLastSyncCommit sütunundan belirli bir işlemeyi seçebilirsiniz. Bunu yaparak, bir yapılandırma dağıtımının durumunu bu işlemeden etkilenen tüm kümelere izleyebilirsiniz.

Uzantı ve yapılandırma hataları için uyarılar oluşturma

Önceki bölümde açıklandığı gibi panoyu içeri aktardıktan sonra, uyarılar ayarlayabilirsiniz. Bu uyarılar, Flux uzantıları veya Flux yapılandırmalarında hatalarla karşılaştığında sizi bilgilendirir.

Uyarı oluşturmak için aşağıdaki adımları izleyin. Uzantı sağlama veya uzantı yükseltme hatalarını algılamak veya uyumluluk durumu hatalarını algılamak için örnek sorgular sağlanır.

  1. Panonun sol gezinti menüsünde Uyarı'yı seçin.

  2. Uyarı kuralları'nı seçin.

  3. + Uyarı kuralı oluştur'u seçin. Yeni uyarı kuralı sayfası açılır ve Grafana tarafından yönetilen uyarılar seçeneği varsayılan olarak seçilidir.

  4. Kural adı alanına açıklayıcı bir ad ekleyin. Bu ad uyarı kuralı listesinde görüntülenir ve bu kuraldan oluşturulan her uyarı örneği için etiket olarak alertname kullanılır.

  5. Sorgu ve uyarı koşulu ayarla altında:

    • Veri kaynağı seçin. Pano için kullanılan aynı veri kaynağı burada kullanılabilir.

    • Hizmet için Azure Kaynak Grafı'ı seçin.

    • Açılan listeden abonelikleri seçin.

    • Kullanmak istediğiniz sorguyu girin. Örneğin, uzantı sağlama veya yükseltme hataları için şu sorguyu girebilirsiniz:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/extensions"
      | extend provisioningState = tostring(properties.ProvisioningState)
      | where provisioningState == "Failed"
      | summarize count() by provisioningState
      

      Veya uyumluluk durumu hataları için şu sorguyu girebilirsiniz:

      kubernetesconfigurationresources
      | where type == "microsoft.kubernetesconfiguration/fluxconfigurations"
      | extend complianceState=tostring(properties.complianceState)
      | where complianceState == "Non-Compliant"
      | summarize count() by complianceState
      
    • Eşik kutusu için giriş türü için A'yı seçin ve kümede yalnızca bir uzantı başarısız olsa bile uyarıları almak için eşiği 0 olarak ayarlayın. Bunu Uyarı koşulu olarak işaretleyin.

    Screenshot showing the alert creation process.

  6. Uyarı değerlendirme aralığını belirtin:

    • Koşul için, uyarı kuralını tetikleyen sorguyu veya ifadeyi seçin.
    • Her değerini değerlendir için değerlendirme sıklığını 10 saniyenin katı olarak girin.
    • Için değerlendir alanında, uyarı oluşturulmadan önce koşulun ne kadar süreyle doğru olması gerektiğini belirtin.
    • Veri ve hata işlemeyi yapılandırma bölümünde uyarı kuralı veri döndürmediğinde veya hata döndürdüğünde ne olacağını belirtin.
    • Sorguyu çalıştırmanın sonuçlarını denetlemek için Önizleme'yi seçin.
  7. Depolama konumunu, kural grubunu ve kuralla ilişkilendirmek istediğiniz ek meta verileri ekleyin.

    • Klasör için kuralın depolandığı klasörü seçin.
    • Grup için önceden tanımlanmış bir grup belirtin.
    • İsterseniz uyarı iletilerini özelleştirmek için bir açıklama ve özet ekleyin.
    • Gerektiğinde Runbook URL'si, panel, pano ve uyarı kimlikleri ekleyin.
  8. İsterseniz, herhangi bir özel etiket ekleyin. Ardından Kaydet'i seçin.

Ayrıca , kişi noktalarını yapılandırabilir ve uyarılarınız için bildirim ilkelerini yapılandırabilirsiniz.

Kaynak tüketimini ve mutabakatları izleme

Flux kaynak tüketimini, mutabakatları, API isteklerini ve mutabakat durumunu izlemenize olanak sağlayan panoları içeri aktarmak için bu adımları izleyin.

  1. Azure İzleyici Çalışma Alanı oluşturmak için adımları izleyin.

  2. Azure portalını veya Azure CLI'yı kullanarak Azure Yönetilen Grafana örneği oluşturun.

  3. İzlemek istediğiniz AKS kümelerinde ve/veya Arc özellikli Kubernetes kümelerinde Prometheus ölçüm koleksiyonunu etkinleştirin.

  4. Azure İzleyici Aracısı'nı yapılandırma haritası oluşturarak Azure Yönetilen Flux ölçümlerini kazımak için yapılandırın:

    kind: ConfigMap
    apiVersion: v1
    data:
      schema-version:
          #string.used by agent to parse config. supported versions are {v1}. Configs with other schema versions will be rejected by the agent.
        v1
      config-version:
        #string.used by customer to keep track of this config file's version in their source control/repository (max allowed 10 chars, other chars will be truncated)
        ver1
      default-scrape-settings-enabled: |-
        kubelet = true
        coredns = false
        cadvisor = true
        kubeproxy = false
        apiserver = false
        kubestate = true
        nodeexporter = true
        windowsexporter = false
        windowskubeproxy = false
        kappiebasic = true
        prometheuscollectorhealth = false
      # Regex for which namespaces to scrape through pod annotation based scraping.
      # This is none by default. Use '.*' to scrape all namespaces of annotated pods.
      pod-annotation-based-scraping: |-
        podannotationnamespaceregex = "flux-system"
      default-targets-scrape-interval-settings: |-
        kubelet = "30s"
        coredns = "30s"
        cadvisor = "30s"
        kubeproxy = "30s"
        apiserver = "30s"
        kubestate = "30s"
        nodeexporter = "30s"
        windowsexporter = "30s"
        windowskubeproxy = "30s"
        kappiebasic = "30s"
        prometheuscollectorhealth = "30s"
        podannotations = "30s"
    metadata:
      name: ama-metrics-settings-configmap
      namespace: kube-system
    
  5. Flux Denetim Düzlemi ve Flux Kümesi İstatistikleri panolarını indirin.

  6. Yönetilen Prometheus çalışma alanını Yönetilen Grafana örneğine bağlayın. Bu işlemin tamamlanması birkaç dakika sürer.

  7. Bu JSON panolarını Grafana'ya aktarmak için adımları izleyin.

Panoları içeri aktardıktan sonra, izlemekte olduğunuz kümelerdeki bilgileri görüntülerler. Yalnızca belirli bir küme veya ad alanına ilişkin bilgileri göstermek için, her panonun üst kısmındaki filtreleri kullanın.

Flux Denetim Düzlemi panosu durum kaynağı tüketimi, küme düzeyinde mutabakatlar ve Kubernetes API istekleri hakkındaki ayrıntıları gösterir.

Screenshot of the Flux Control Plane dashboard.

Flux Kümesi İstatistikleri panosu, her bir uzlaştırmacının durumu ve yürütme süresiyle birlikte, uzlaştırma sayısıyla ilgili ayrıntıları gösterir.

Screenshot of the Flux Cluster Stats dashboard.

Kaynak tüketimi ve mutabakat sorunları için uyarılar oluşturma

Önceki bölümde açıklandığı gibi panoyu içeri aktardıktan sonra, uyarılar ayarlayabilirsiniz. Bu uyarılar, dikkat gerektiren kaynak tüketimi ve mutabakat sorunları hakkında sizi bilgilendirir.

Bu uyarıları etkinleştirmek için, burada gösterilene benzer bir Bicep şablonu dağıtırsınız. Bu şablondaki uyarı kuralları, gerektiğinde değiştirilebilen örneklerdir.

Bicep şablonunu indirip değişikliklerinizi yaptıktan sonra, şablonu dağıtmak için bu adımları izleyin.

param azureMonitorWorkspaceName string
param alertReceiverEmailAddress string

param kustomizationLookbackPeriodInMinutes int = 5
param helmReleaseLookbackPeriodInMinutes int = 5
param gitRepositoryLookbackPeriodInMinutes int = 5
param bucketLookbackPeriodInMinutes int = 5
param helmRepoLookbackPeriodInMinutes int = 5
param timeToResolveAlerts string = 'PT10M'
param location string = resourceGroup().location

resource azureMonitorWorkspace 'Microsoft.Monitor/accounts@2023-04-03' = {
  name: azureMonitorWorkspaceName
  location: location
}

resource fluxRuleActionGroup 'Microsoft.Insights/actionGroups@2023-01-01' = {
  name: 'fluxRuleActionGroup'
  location: 'global'
  properties: {
    enabled: true
    groupShortName: 'fluxGroup'
    emailReceivers: [
      {
        name: 'emailReceiver'
        emailAddress: alertReceiverEmailAddress
      }
    ]
  }
}

resource fluxRuleGroup 'Microsoft.AlertsManagement/prometheusRuleGroups@2023-03-01' = {
  name: 'fluxRuleGroup'
  location: location
  properties: {
    description: 'Flux Prometheus Rule Group'
    scopes: [
      azureMonitorWorkspace.id
    ]
    enabled: true
    interval: 'PT1M'
    rules: [
      {
        alert: 'KustomizationNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="Kustomization"}) > 0'
        for: 'PT${kustomizationLookbackPeriodInMinutes}M'
        labels: {
          description: 'Kustomization reconciliation failing for last ${kustomizationLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'Kustomization reconciliation failing for last ${kustomizationLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'HelmReleaseNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="HelmRelease"}) > 0'
        for: 'PT${helmReleaseLookbackPeriodInMinutes}M'
        labels: {
          description: 'HelmRelease reconciliation failing for last ${helmReleaseLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'HelmRelease reconciliation failing for last ${helmReleaseLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'GitRepositoryNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="GitRepository"}) > 0'
        for: 'PT${gitRepositoryLookbackPeriodInMinutes}M'
        labels: {
          description: 'GitRepository reconciliation failing for last ${gitRepositoryLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'GitRepository reconciliation failing for last ${gitRepositoryLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'BucketNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="Bucket"}) > 0'
        for: 'PT${bucketLookbackPeriodInMinutes}M'
        labels: {
          description: 'Bucket reconciliation failing for last ${bucketLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'Bucket reconciliation failing for last ${bucketLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
      {
        alert: 'HelmRepositoryNotReady'
        expression: 'sum by (cluster, namespace, name) (gotk_reconcile_condition{type="Ready", status="False", kind="HelmRepository"}) > 0'
        for: 'PT${helmRepoLookbackPeriodInMinutes}M'
        labels: {
          description: 'HelmRepository reconciliation failing for last ${helmRepoLookbackPeriodInMinutes} minutes.'
        }
        annotations: {
          description: 'HelmRepository reconciliation failing for last ${helmRepoLookbackPeriodInMinutes} minutes.'
        }
        enabled: true
        severity: 3
        resolveConfiguration: {
          autoResolved: true
          timeToResolve: timeToResolveAlerts
        }
        actions: [
          {
            actionGroupId: fluxRuleActionGroup.id
          }
        ]
      }
    ]
  }
}

Sonraki adımlar