عمليات نشر التطبيقات باستخدام 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 (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.
GitOps مع ارتباط خاص
إذا أضفت دعما للارتباط الخاص إلى مجموعة 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.- إذا كنت بحاجة إلى وقت لتحديث بياناتك، يمكنك إلغاء الاشتراك في الإيجارات المتعددة. ومع ذلك، لا تزال بحاجة إلى ترقية إصدار Kubernetes الخاص بك.
تحديث بيانات الإيجار المتعدد
لنفترض أنك تنشر 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.
الخطوات التالية
- استخدم البرنامج التعليمي لمعرفة كيفية تمكين GitOps على مجموعات Kubernetes التي تدعم AKS أو Azure Arc.
- تعرف على سير عمل CI/CD باستخدام GitOps.