عمليات نشر التطبيقات باستخدام GitOps (Flux v2) ل AKS وKubernetes التي تدعم Azure Arc

يوفر Azure إمكانية نشر التطبيقات التلقائية باستخدام GitOps التي تعمل مع Azure Kubernetes Service (AKS) ومجموعات Kubernetes الممكنة في Azure Arc. تشمل الفوائد الرئيسية التي يوفرها اعتماد GitOps لنشر التطبيقات في مجموعات Kubernetes ما يلي:

  • الرؤية المستمرة لحالة التطبيقات التي تعمل على أنظمة المجموعات.
  • الفصل بين المخاوف بين فرق تطوير التطبيقات وفرق البنية الأساسية. لا تحتاج فرق التطبيقات إلى خبرة في عمليات نشر Kubernetes. تقوم فرق هندسة النظام الأساسي عادة بإنشاء نموذج خدمة ذاتية لفرق التطبيقات، ما يمكنهم من تشغيل عمليات النشر بثقة أعلى.
  • القدرة على إعادة إنشاء مجموعات بنفس الحالة المطلوبة في حالة حدوث عطل أو توسيع النطاق.

مع GitOps، يمكنك الإعلان عن الحالة المطلوبة لمجموعات Kubernetes في الملفات في مستودعات Git. قد تحتوي مستودعات Git على الملفات التالية:

  • بيانات بتنسيق YAML تصف موارد Kubernetes (مثل مساحات الأسماء والأسرار والنشرات وغيرها)
  • مخططات Helm لنشر التطبيقات
  • Kustomize files لوصف التغييرات الخاصة بالبيئة

نظرا لأنه يتم تخزين هذه الملفات في مستودع Git، يتم إصدارها، ويتم تعقب التغييرات بين الإصدارات بسهولة. تعمل وحدات تحكم Kubernetes في المجموعات وتسوية حالة نظام المجموعة باستمرار مع الحالة المطلوبة المعلن عنها في مستودع Git. تسحب عوامل التشغيل هذه الملفات من مستودعات Git وتطبق الحالة المطلوبة على المجموعات. كما تؤكد عوامل التشغيل باستمرار أن نظام المجموعة يظل في الحالة المطلوبة.

تستخدم GitOps على Kubernetes الممكنة في Azure Arc أو خدمة Azure Kubernetes Flux، وهي مجموعة أدوات مفتوحة المصدر شائعة. يوفر Flux الدعم لمصادر الملفات الشائعة (مستودعات Git وHelm والدلاء وتخزين Azure Blob) وأنواع القوالب (YAML وHelm وKustomize). يدعم Flux أيضا إدارة تبعية الإيجار والتوزيع المتعددة، من بين ميزات أخرى.

يتم نشر Flux مباشرة على نظام المجموعة، ويتم فصل مستوى التحكم لكل مجموعة منطقيا. وهذا يجعله يتوسع بشكل جيد إلى مئات وآلاف المجموعات. يتيح Flux عمليات نشر تطبيق GitOps فقط المستندة إلى السحب. لا يلزم الوصول إلى المجموعات بواسطة مستودع المصدر أو أي نظام مجموعة آخر.

ملحق نظام مجموعة Flux

يتم تمكين GitOps في Kubernetes الممكنة في Azure Arc أو نظام مجموعة AKS كمورد Microsoft.KubernetesConfiguration/extensions/microsoft.fluxملحق نظام المجموعة. microsoft.flux يجب تثبيت الملحق في نظام المجموعة قبل إنشاء واحد أو أكثرfluxConfigurations. يتم تثبيت الملحق تلقائيا عند إنشاء الأول Microsoft.KubernetesConfiguration/fluxConfigurations في نظام مجموعة، أو يمكنك تثبيته يدويا باستخدام المدخل أو Azure CLI (az k8s-extension create --extensionType=microsoft.fluxأو قالب ARM أو REST API.

وحدات التحكم

بشكل افتراضي، microsoft.flux يقوم الملحق بتثبيت وحدات تحكم Flux (المصدر وKustomize و Helm و Notification) و FluxConfig Custom Resource Definition (CRD) fluxconfig-agentو و.fluxconfig-controller اختياريا، يمكنك أيضا تثبيت Flux image-automation ووحدات image-reflector التحكم، والتي توفر وظائف لتحديث صور Docker واستردادها.

  • وحدة تحكم مصدر Flux: تراقب source.toolkit.fluxcd.io الموارد المخصصة. يعالج المزامنة بين مستودعات Git ومستودعات Helm والدلاء وتخزين Azure Blob. يعالج التخويل مع المصدر لحسابات Git الخاصة و Helm repos وAzure blob storage. تظهر أحدث التغييرات على المصدر من خلال ملف أرشيف القطران.

  • وحدة تحكم Flux Kustomize: تراقب kustomization.toolkit.fluxcd.io الموارد المخصصة. يطبق Kustomize أو ملفات YAML الأولية من المصدر على نظام المجموعة.

  • وحدة تحكم Flux Helm: تراقب helm.toolkit.fluxcd.io الموارد المخصصة. استرداد المخطط المقترن من مصدر Helm Repository الذي ظهرته وحدة تحكم المصدر. HelmChart إنشاء المورد المخصص وتطبيق HelmRelease مع إصدار معين والاسم والقيم المعرفة من قبل العميل على نظام المجموعة.

  • وحدة تحكم Flux Notification: تراقب notification.toolkit.fluxcd.io الموارد المخصصة. يتلقى إعلامات من جميع وحدات تحكم Flux. يدفع الإعلامات إلى نقاط نهاية الإخطارات على الويب المعرفة من قبل المستخدم.

  • Flux Custom Resource Definitions:

    • 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: تعريف المورد المخصص للموارد fluxconfigs.clusterconfig.azure.com المخصصة التي تحدد FluxConfig كائنات Kubernetes.

  • fluxconfig-agent: مسؤول عن مراقبة Azure للموارد الجديدة أو المحدثة fluxConfigurations ، وبدء تكوين Flux المقترن في نظام المجموعة. مسؤول أيضا عن دفع تغييرات حالة Flux في نظام المجموعة مرة أخرى إلى Azure لكل fluxConfigurations مورد.

  • fluxconfig-controller: يراقب fluxconfigs.clusterconfig.azure.com الموارد المخصصة ويستجيب للتغييرات بتكوين جديد أو محدث لآلات GitOps في نظام المجموعة.

إشعار

microsoft.flux يتم تثبيت الملحق في مساحة الاسم ويحتوي على flux-system نطاق على مستوى المجموعة. لا يمكنك تثبيت هذا الملحق في نطاق مساحة الاسم.

تكوينات Flux

رسم تخطيطي يوضح تثبيت تكوين Flux في مجموعة Kubernetes أو AKS الممكنة في Azure Arc.

يمكنك إنشاء موارد تكوين Flux (Microsoft.KubernetesConfiguration/fluxConfigurations) لتمكين إدارة GitOps للمجموعة من مستودع Git أو مصادر المستودع أو تخزين Azure Blob. عند إنشاء fluxConfigurations مورد، يتم استخدام القيم التي توفرها للمعلمات، مثل مستودع Git الهدف، لإنشاء وتكوين كائنات Kubernetes التي تمكن عملية GitOps في تلك المجموعة. لضمان أمان البيانات، fluxConfigurations يتم تخزين بيانات الموارد مشفرة في حالة الثبات في قاعدة بيانات Azure Cosmos DB بواسطة خدمة تكوين نظام المجموعة.

العاملان fluxconfig-agent و fluxconfig-controller ، المثبتان مع الملحق microsoft.flux ، يديران عملية تكوين GitOps.

fluxconfig-agent مسؤول عن المهام التالية:

  • يستقصي خدمة مستوى بيانات تكوين Kubernetes للموارد الجديدة أو المحدثة fluxConfigurations .
  • إنشاء موارد مخصصة أو تحديثها FluxConfig في نظام المجموعة بمعلومات التكوين.
  • FluxConfig يراقب الموارد المخصصة ويدفع تغييرات الحالة مرة أخرى إلى موارد Azure fluxConfiguration المقترنة.

fluxconfig-controller مسؤول عن المهام التالية:

  • يراقب تحديثات الحالة إلى الموارد المخصصة Flux التي تم إنشاؤها بواسطة المدارة fluxConfigurations.
  • إنشاء زوج مفاتيح خاص/عام موجود طوال مدة بقاء fluxConfigurations. يتم استخدام هذا المفتاح للمصادقة إذا كان عنوان URL يستند إلى SSH وإذا لم يوفر المستخدم مفتاحه الخاص أثناء إنشاء التكوين.
  • إنشاء بيانات سرية مخصصة للمصادقة استنادا إلى بيانات private-key/http basic-auth/known-hosts/no-auth التي يوفرها المستخدم.
  • إعداد التحكم في الوصول المستند إلى الدور (حساب الخدمة المقدم، ربط الدور الذي تم إنشاؤه/تعيينه، الدور الذي تم إنشاؤه/تعيينه).
  • GitRepository إنشاء أو Bucket مورد مخصص وموارد Kustomization مخصصة من المعلومات الموجودة في FluxConfig المورد المخصص.

يرتبط كل fluxConfigurations مورد في Azure بمورد Flux GitRepository واحد أو Bucket مورد مخصص واحد أو أكثر من Kustomization الموارد المخصصة في مجموعة Kubernetes. عند إنشاء fluxConfigurations مورد، يمكنك تحديد عنوان URL للمصدر (مستودع Git أو مستودع أو تخزين Azure Blob) وهدف المزامنة في المصدر لكل Kustomization. يمكنك تكوين التبعيات بين Kustomization الموارد المخصصة للتحكم في تسلسل التوزيع. يمكنك أيضا إنشاء موارد متعددة ذات نطاق fluxConfigurations مساحة اسم على نفس المجموعة لتطبيقات وفرق تطبيقات مختلفة.

إشعار

أجهزة fluxconfig-agent العرض للموارد الجديدة أو المحدثة fluxConfiguration في Azure. يتطلب العامل الاتصال ب Azure للحالة المطلوبة fluxConfiguration لتطبيقها على نظام المجموعة. إذا لم يتمكن العامل من الاتصال ب Azure، تنتظر التغييرات في نظام المجموعة حتى يتمكن العامل من الاتصال. إذا تم قطع اتصال نظام المجموعة من Azure لأكثر من 48 ساعة، فسوف تنتهي مهلة الطلب إلى نظام المجموعة، وستحتاج التغييرات إلى إعادة تطبيقها في Azure.

يتم تخزين مدخلات العملاء الحساسة مثل المفتاح الخاص والرمز المميز/كلمة المرور لمدة أقل من 48 ساعة في خدمة تكوين Kubernetes. إذا قمت بتحديث أي من هذه القيم في Azure، فتأكد من أن مجموعاتك تتصل ب Azure في غضون 48 ساعة.

يمكنك مراقبة حالة تكوين Flux والامتثال في مدخل Microsoft Azure، أو استخدام لوحات المعلومات لمراقبة الحالة والامتثال واستهلاك الموارد ونشاط التسوية. لمزيد من المعلومات، راجع مراقبة حالة GitOps (Flux v2) ونشاطه.

دعم الإصدار

يتم دعم أحدث إصدار من ملحق Flux v2 (microsoft.flux) والإصدارين السابقين (N-2). نوصي بشكل عام باستخدام أحدث إصدار من الملحق. microsoft.flux بدءا من الإصدار 1.7.0، يتم دعم المجموعات المستندة إلى ARM64.

إشعار

إذا كنت تستخدم Flux v1، نوصي بالترحيل إلى Flux v2 في أقرب وقت ممكن.

سينتهي دعم موارد تكوين نظام المجموعة المستندة إلى Flux v1 التي تم إنشاؤها قبل 1 يناير 2024 في 24 مايو 2025. بدءا من 1 يناير 2024، لن تتمكن من إنشاء موارد تكوين نظام المجموعة الجديدة المستندة إلى Flux v1.

إذا أضفت دعما للارتباط الخاص إلى مجموعة Kubernetes التي تدعم Azure Arc، فإن microsoft.flux الملحق يعمل خارج الصندوق مع الاتصال مرة أخرى إلى Azure. بالنسبة للاتصالات بمستودع Git أو مستودع Helm أو أي نقاط نهاية أخرى مطلوبة لنشر بيانات Kubernetes الخاصة بك، يجب توفير نقاط النهاية هذه خلف جدار الحماية الخاص بك، أو سردها على جدار الحماية الخاص بك، بحيث يمكن لوحدة تحكم مصدر Flux الوصول إليها بنجاح.

موقع البيانات

تقوم خدمة Azure GitOps (Azure Kubernetes Configuration Management) بتخزين/معالجة بيانات العميل. بشكل افتراضي، يتم نسخ بيانات العميل إلى المنطقة المقترنة. بالنسبة للمناطق سنغافورة وشرق آسيا وجنوب البرازيل، يتم تخزين جميع بيانات العملاء ومعالجتها في المنطقة.

تطبيق تكوينات Flux على نطاق واسع

نظرا لأن Azure Resource Manager يدير التكوينات الخاصة بك، يمكنك أتمتة إنشاء نفس التكوين عبر جميع Azure Kubernetes Service وموارد Kubernetes الممكنة في Azure Arc باستخدام نهج Azure، ضمن نطاق اشتراك أو مجموعة موارد. يضمن هذا الإنفاذ على نطاق واسع تطبيق تكوينات محددة باستمرار عبر مجموعات كاملة من المجموعات.

لمزيد من المعلومات، راجع نشر التطبيقات باستمرار على نطاق واسع باستخدام تكوينات Flux v2 ونهج Azure.

المعلمات

لمشاهدة جميع المعلمات التي يدعمها Flux v2 في Azure، راجع az k8s-configuration الوثائق. لا يدعم تنفيذ Azure حاليا كل معلمة يدعمها Flux.

للحصول على معلومات حول المعلمات المتوفرة وكيفية استخدامها، راجع المعلمات المدعومة GitOps (Flux v2).

متعدد المستأجرين

يدعم Flux v2 تعدد الإيجارات بدءا من الإصدار 0.26. يتم دمج هذه الإمكانية في Flux v2 في Azure.

إشعار

بالنسبة إلى ميزة الإيجار المتعدد، تحتاج إلى معرفة ما إذا كانت بياناتك تحتوي على أي مصدر عبر مساحة الاسمRef ل HelmRelease أو Kustomization أو ImagePolicy أو كائنات أخرى، أو إذا كنت تستخدم إصدار Kubernetes أقل من 1.20.6. للتحضير:

  • الترقية إلى إصدار Kubernetes 1.20.6 أو أحدث.
  • في بيانات Kubernetes الخاصة بك، تأكد من أن جميع sourceRef العناصر داخل نفس مساحة الاسم مثل تكوين GitOps.

تحديث بيانات الإيجار المتعدد

لنفترض أنك تنشر fluxConfiguration إلى إحدى مجموعات Kubernetes الخاصة بنا في cluster-config مساحة الاسم مع نطاق نظام المجموعة. يمكنك تكوين المصدر لمزامنة المستودع https://github.com/fluxcd/flux2-kustomize-helm-example . هذا هو نفس نموذج مستودع Git المستخدم في نشر التطبيقات باستخدام GitOps مع البرنامج التعليمي Flux v2.

بعد أن يقوم Flux بمزامنة المستودع، فإنه ينشر الموارد الموضحة في البيانات (ملفات YAML). يصف HelmRelease اثنان من البيانات والكائنات HelmRepository .

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

بشكل افتراضي، ينشر fluxConfigurations ملحق Flux عن طريق انتحال صفة flux-applier حساب الخدمة الذي يتم نشره فقط في cluster-config مساحة الاسم. باستخدام البيانات أعلاه، عند تمكين الإيجار المتعدد، HelmRelease سيتم حظر. وذلك لأن HelmRelease في nginx مساحة الاسم، ولكنه يشير إلى HelmRepository في flux-system مساحة الاسم. أيضا، لا يمكن ل Flux helm-controller تطبيق HelmRelease، لأنه لا يوجد flux-applier حساب خدمة في nginx مساحة الاسم.

للعمل مع الإيجارات المتعددة، النهج الصحيح هو نشر جميع كائنات Flux في نفس مساحة الاسم مثل fluxConfigurations. يتجنب هذا الأسلوب مشكلة مرجع مساحة الاسم المشتركة، ويسمح لوحدات تحكم Flux بالحصول على الأذونات لتطبيق الكائنات. وبالتالي، بالنسبة لتكوين GitOps الذي تم إنشاؤه في cluster-config مساحة الاسم، ستتغير بيانات المثال هذه كما يلي:

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

إلغاء الاشتراك في الإيجار المتعدد

عند تثبيت الملحق microsoft.flux ، يتم تمكين الإيجار المتعدد بشكل افتراضي. إذا كنت بحاجة إلى تعطيل الإيجارات المتعددة، يمكنك إلغاء الاشتراك عن طريق إنشاء الملحق أو تحديثه microsoft.flux في مجموعاتك باستخدام --configuration-settings multiTenancy.enforce=false، كما هو موضح في أمثلة الأوامر التالية:

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

إذا كنت لا تزال تستخدم Flux v1، نوصي بالترحيل إلى Flux v2 في أقرب وقت ممكن.

للترحيل إلى استخدام Flux v2 في نفس المجموعات التي كنت تستخدم فيها Flux v1، يجب أولا حذف جميع Flux v1 sourceControlConfigurations من المجموعات. نظرا لأن Flux v2 له بنية مختلفة بشكل أساسي، microsoft.flux فلن يتم تثبيت ملحق نظام المجموعة إذا كانت هناك موارد Flux v1 sourceControlConfigurations في نظام مجموعة. يجب ألا تستغرق عملية إزالة تكوينات Flux v1 ونشر تكوينات Flux v2 أكثر من 30 دقيقة.

لا تؤدي إزالة Flux v1 sourceControlConfigurations إلى إيقاف أي تطبيقات تعمل على المجموعات. ومع ذلك، خلال الفترة التي تتم فيها إزالة تكوين Flux v1 ولم يتم نشر ملحق Flux v2 بالكامل بعد:

  • إذا كانت هناك تغييرات جديدة في بيانات التطبيق المخزنة في مستودع Git، فلن يتم سحب هذه التغييرات أثناء الترحيل، وسيكون إصدار التطبيق المنشور على نظام المجموعة قديما.
  • إذا كانت هناك تغييرات غير مقصودة في حالة نظام المجموعة وانحرفت عن الحالة المطلوبة المحددة في مستودع Git المصدر، فلن تتمكن المجموعة من المعالجة الذاتية.

نوصي باختبار سيناريو الترحيل الخاص بك في بيئة تطوير قبل ترحيل بيئة الإنتاج الخاصة بك.

عرض تكوينات Flux v1 وحذفها

استخدم أوامر Azure CLI هذه للبحث عن موجود sourceControlConfigurations في نظام مجموعة ثم حذفه:

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>

يمكنك أيضا العثور على تكوينات GitOps الموجودة وحذفها لمجموعة في مدخل Microsoft Azure. للقيام بذلك، انتقل إلى نظام المجموعة حيث تم إنشاء التكوين وحدد GitOps في الجزء الأيمن. حدد التكوين، ثم حدد حذف.

توزيع تكوينات Flux v2

استخدم مدخل Azure أو Azure CLI لتطبيق تكوينات Flux v2 على مجموعاتك.

معلومات إيقاف Flux v1

تم أرشفة مشروع Flux v1 مفتوح المصدر، وتوقف تطوير الميزات إلى أجل غير مسمى.

تم إطلاق Flux v2 كمشروع مفتوح المصدر تمت ترقيته من Flux. لديها بنية جديدة وتدعم المزيد من حالات استخدام GitOps. أطلقت Microsoft إصدارا من ملحق باستخدام Flux v2 في مايو 2022. ومنذ ذلك الحين، تم نصح العملاء بالانتقال إلى Flux v2 في غضون ثلاث سنوات، حيث من المقرر أن ينتهي دعم استخدام Flux v1 في مايو 2025.

الميزات الجديدة الرئيسية المقدمة في ملحق GitOps ل Flux v2:

  • Flux v1 هو عامل تشغيل متجانس للقيام بكل شيء. يفصل Flux v2 الوظائف إلى وحدات تحكم متخصصة (وحدة تحكم المصدر ووحدة تحكم Kustomize ووحدة تحكم Helm ووحدة تحكم الإعلام).
  • يدعم المزامنة مع مستودعات مصدر متعددة.
  • يدعم الإيجار المتعدد، مثل تطبيق كل مستودع مصدر مع مجموعة الأذونات الخاصة به.
  • يوفر رؤى تشغيلية من خلال الفحوصات الصحية والأحداث والتنبيهات.
  • يدعم فروع Git، التي تعتمد على التثبيتات والعلامات، ومتابعة نطاقات علامات SemVer.
  • تكوين بيانات الاعتماد لكل مورد GitRepository: مفتاح SSH الخاص، واسم مستخدم HTTP/S/كلمة المرور/الرمز المميز، والمفاتيح العامة OpenPGP.

الخطوات التالية