البرنامج التعليمي: نشر التكوينات باستخدام GitOps على مجموعة Kubernetes الممكّنة في Azure Arc

هام

هذا البرنامج التعليمي مخصص ل GitOps مع Flux v1. يتوفر GitOps مع Flux v2 الآن لمجموعات Kubernetes وAzure Kubernetes Service (AKS) الممكنة في Azure Arc؛ انتقل إلى البرنامج التعليمي ل GitOps مع Flux v2. نوصي بالترحيل إلى Flux v2 في أقرب وقت ممكن.

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

في هذا البرنامج التعليمي، ستقوم بتطبيق التكوينات باستخدام GitOps على مجموعة Kubernetes التي تدعم في Azure Arc. ستتعلم كيفية:

  • إنشاء تكوين على مجموعة Kubernetes الممكّنة في Azure Arc باستخدام مثال مستودع Git.
  • تحقق من أن التكوين تم إنشاؤه بنجاح.
  • تطبيق التكوين من مستودع Git خاص.
  • تحقق من صحة تكوين Kubernetes.

المتطلبات الأساسية

إنشاء تكوين

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

  • مساحات الأسماء: cluster-config، ، team-ateam-b
  • نشر: arc-k8s-demo
  • ConfigMap: team-a/endpoints

يستقصي config-agent Azure للتكوينات الجديدة أو المحدثة. تستغرق هذه المهمة 5 دقائق.

إذا كنت تربط مستودعا خاصا بالتكوين، فأكمل الخطوات أدناه في تطبيق التكوين من مستودع Git خاص.

استخدام Azure CLI

استخدم ملحق Azure CLI ل k8s-configuration لربط مجموعة متصلة بمستودع Git المثال.

  1. قم بتسمية هذا التكوين cluster-config.

  2. اطلب من العامل نشر عامل التشغيل في cluster-config مساحة الاسم.

  3. منح أذونات عامل التشغيل cluster-admin .

    az k8s-configuration create --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --operator-instance-name cluster-config --operator-namespace cluster-config --repository-url https://github.com/Azure/arc-k8s-demo --scope cluster --cluster-type connectedClusters
    
    {
      "complianceStatus": {
      "complianceState": "Pending",
      "lastConfigApplied": "0001-01-01T00:00:00",
      "message": "{\"OperatorMessage\":null,\"ClusterState\":null}",
      "messageLevel": "3"
      },
      "configurationProtectedSettings": {},
      "enableHelmOperator": false,
      "helmOperatorProperties": null,
      "id": "/subscriptions/<sub id>/resourceGroups/<group name>/providers/Microsoft.Kubernetes/connectedClusters/<cluster name>/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config",
      "name": "cluster-config",
      "operatorInstanceName": "cluster-config",
      "operatorNamespace": "cluster-config",
      "operatorParams": "--git-readonly",
      "operatorScope": "cluster",
      "operatorType": "Flux",
      "provisioningState": "Succeeded",
      "repositoryPublicKey": "",
      "repositoryUrl": "https://github.com/Azure/arc-k8s-demo",
      "resourceGroup": "MyRG",
      "sshKnownHostsContents": "",
      "systemData": {
        "createdAt": "2020-11-24T21:22:01.542801+00:00",
        "createdBy": null,
        "createdByType": null,
        "lastModifiedAt": "2020-11-24T21:22:01.542801+00:00",
        "lastModifiedBy": null,
        "lastModifiedByType": null
      },
      "type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations"
    }
    

استخدم مستودع Git العام

المحددة التنسيق
--repository-url http[s]://server/repo[.git]

استخدم مستودع Git خاصًا مع مفاتيح SSH وFlux التي تم إنشاؤها

أضف المفتاح العام الذي تم إنشاؤه بواسطة Flux إلى حساب المستخدم في مزود خدمة Git الخاص بك. إذا تمت إضافة المفتاح إلى المستودع بدلا من حساب المستخدم، فاستخدم git@ بدلا من user@ في عنوان URL.

انتقل إلى قسم تطبيق التكوين من مستودع Git خاص لمزيد من التفاصيل.

المحددة تنسيق الملاحظات
--repository-url ssh://user@server/repo[.git] أو user@server:repo[.git] git@ قد يحل محل user@

استخدم مستودع Git خاصًا مع SSH والمفاتيح التي يوفرها المستخدم

قدم مفتاحك الخاص مباشرةً أو في ملف. يجب أن يكون المفتاح بتنسيق PEM وينتهي بخط جديد (\n).

أضف المفتاح العام المرتبط إلى حساب المستخدم في مزود خدمة Git الخاص بك. إذا تمت إضافة المفتاح إلى المستودع بدلا من حساب المستخدم، فاستخدم git@ بدلا من user@.

انتقل إلى قسم تطبيق التكوين من مستودع Git خاص لمزيد من التفاصيل.

المحددة تنسيق الملاحظات
--repository-url ssh://user@server/repo[.git] أو user@server:repo[.git] git@ قد يحل محل user@
--ssh-private-key مفتاح ترميز base64 بتنسيق PEM توفير المفتاح مباشرة
--ssh-private-key-file المسار الكامل إلى الملف المحلي قم بتوفير المسار الكامل للملف المحلي الذي يحتوي على مفتاح تنسيق PEM

استخدم مضيف Git خاصًا مع SSH والمضيفات المعروفة التي يوفرها المستخدم

يحتفظ مشغل Flux بقائمة بمضيفات Git الشائعة في ملف المضيفين المعروفين لمصادقة مستودع Git قبل إنشاء اتصال SSH. إذا كنت تستخدم مستودع Git غير شائع أو مضيف Git الخاص بك، يمكنك توفير مفتاح المضيف بحيث يمكن ل Flux تحديد المستودع الخاص بك.

تماما مثل المفاتيح الخاصة، يمكنك توفير محتوى known_hosts مباشرة أو في ملف. عند توفير المحتوى الخاص بك، استخدم مواصفات تنسيق المحتوى known_hosts، جنبا إلى جنب مع أي من سيناريوهات مفتاح SSH أعلاه.

المحددة تنسيق الملاحظات
--repository-url ssh://user@server/repo[.git] أو user@server:repo[.git] git@ قد يحل محل user@
--ssh-known-hosts ترميز base64 توفير محتوى المضيفين المعروف مباشرة
--ssh-known-hosts-file المسار الكامل إلى الملف المحلي توفير محتوى المضيفين المعروف في ملف محلي

استخدام مستودع Git خاص مع HTTPS

المحددة تنسيق الملاحظات
--repository-url https://server/repo[.git] HTTPS مع المصادقة الأساسية
--https-user خام أو بترميز base64 اسم مستخدم HTTPS
--https-key خام أو بترميز base64 رمز الوصول الشخصي أو كلمة المرور لـ HTTPS

إشعار

  • يدعم إصدار مخطط عامل Helm رقم 1.2.0+ المصادقة الخاصة لإصدار HTTPS Helm.
  • إصدار HTTPS Helm غير مدعوم لمجموعات AKS المُدارة.
  • إذا كنت بحاجة إلى Flux للوصول إلى مستودع Git من خلال وكيلك، فستحتاج إلى تحديث وكلاء Azure Arc باستخدام إعدادات الوكيل. لمزيد من المعلومات، راجع الاتصال باستخدام خادم وكيل صادر.

معلمات إضافية

تخصيص التكوين مع المعلمات الاختيارية التالية:

المعلمة ‏‏الوصف‬
--enable-helm-operator التبديل لتمكين الدعم لعمليات نشر مخطط Helm.
--helm-operator-params قيم المخطط لعامل تشغيل Helm (إذا تم تمكينه). على سبيل المثال، --set helm.versions=v3
--helm-operator-chart-version إصدار المخطط لعامل تشغيل Helm (إذا تم تمكينه). استخدم الإصدار 1.2.0+. افتراضي: '1.2.0'
--operator-namespace اسم مساحة اسم عامل التشغيل. الإعداد الافتراضي: 'default'. الحد الأقصى 23 حرفًا.
--operator-params معلمات عامل التشغيل. يجب أن تعطى ضمن اقتباسات فردية. على سبيل المثال، --operator-params='--git-readonly --sync-garbage-collection --git-branch=main'

الخيارات المدعومة في --operator-params:

خيار ‏‏الوصف
--git-branch فرع من مستودع Git لاستخدامه في بيانات Kubernetes. الإعداد الافتراضي هو 'master'. تحتوي المستودعات الأحدث على فرع جذر يسمى main، وفي هذه الحالة تحتاج إلى تعيين --git-branch=main.
--git-path مسار نسبي داخل مستودع Git لـ Flux لتحديد موقع بيانات Kubernetes.
--git-readonly سيتم اعتبار مستودع Git للقراءة فقط. لن يحاول Flux الكتابة إليه.
--manifest-generation في حالة التمكين، سيبحث Flux عن .flux.yaml، ويقوم بتشغيل Kustomize أو مولدات البيان الأخرى.
--git-poll-interval الفترة التي يتم فيها اقتراع مستودع Git للالتزامات الجديدة. الافتراضي هو 5m (5 دقائق).
--sync-garbage-collection في حالة التمكين، سيحذف Flux الموارد التي أنشأها؛ ولكنها لم تعد موجودة في Git.
--git-label تسمية لتتبع تقدم المزامنة. يستخدم لتمييز فرع Git. القيمة الافتراضية هي flux-sync.
--git-user اسم المستخدم لتثبيت Git.
--git-email بريد إلكتروني لاستخدامه في تثبيت Git.

إذا كنت لا تريد أن يكتب Flux إلى المستودع أو --git-user--git-email لم يتم تعيينه، --git-readonly فسيتم تعيينه تلقائيا.

لمزيد من المعلومات، راجع وثائق Flux.

إشعار

Flux الافتراضيات للمزامنة من master فرع git repo. ومع ذلك، تحتوي مستودعات git الأحدث على الفرع الجذر المسمى main، وفي هذه الحالة تحتاج إلى تعيين --git-branch=main في --operator-params.

تلميح

يمكنك إنشاء تكوين في مدخل Microsoft Azure في علامة التبويب GitOps لمورد Kubernetes الممكّن لـ Azure Arc.

تحقق من صحة التكوين

استخدم Azure CLI للتحقق من أن التكوين قد تم إنشاؤه بنجاح.

az k8s-configuration show --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters

سيتم تحديث مورد التكوين بحالة التوافق والرسائل ومعلومات تصحيح الأخطاء.

{
  "complianceStatus": {
    "complianceState": "Installed",
    "lastConfigApplied": "2020-12-10T18:26:52.801000+00:00",
    "message": "...",
    "messageLevel": "Information"
  },
  "configurationProtectedSettings": {},
  "enableHelmOperator": false,
  "helmOperatorProperties": {
    "chartValues": "",
    "chartVersion": ""
  },
  "id": "/subscriptions/<sub id>/resourceGroups/AzureArcTest/providers/Microsoft.Kubernetes/connectedClusters/AzureArcTest1/providers/Microsoft.KubernetesConfiguration/sourceControlConfigurations/cluster-config",
  "name": "cluster-config",
  "operatorInstanceName": "cluster-config",
  "operatorNamespace": "cluster-config",
  "operatorParams": "--git-readonly",
  "operatorScope": "cluster",
  "operatorType": "Flux",
  "provisioningState": "Succeeded",
  "repositoryPublicKey": "...",
  "repositoryUrl": "git://github.com/Azure/arc-k8s-demo.git",
  "resourceGroup": "AzureArcTest",
  "sshKnownHostsContents": null,
  "systemData": {
    "createdAt": "2020-12-01T03:58:56.175674+00:00",
    "createdBy": null,
    "createdByType": null,
    "lastModifiedAt": "2020-12-10T18:30:56.881219+00:00",
    "lastModifiedBy": null,
    "lastModifiedByType": null
},
  "type": "Microsoft.KubernetesConfiguration/sourceControlConfigurations"
}

عند إنشاء تكوين أو تحديثه، تحدث بعض الأشياء:

  1. يراقب Azure Arc config-agent Azure Resource Manager للتكوينات الجديدة أو المحدثة (Microsoft.KubernetesConfiguration/sourceControlConfigurations) ويلاحظ التكوين الجديد Pending .
  2. يقرأ config-agent خصائص التكوين وينشئ مساحة الاسم الوجهة.
  3. يقوم Azure Arc controller-manager بإنشاء حساب خدمة Kubernetes وتعيينه إلى ClusterRoleBinding أو RoleBinding للأذونات المناسبة (cluster أو namespace النطاق). ثم ينشر مثيلا ل flux.
  4. إذا كنت تستخدم خيار SSH مع المفاتيح التي تم إنشاؤها بواسطة Flux، flux ينشئ مفتاح SSH ويسجل المفتاح العام.
  5. config-agent حالة التقارير مرة أخرى إلى مورد التكوين في Azure.

في أثناء حدوث عملية التوفير، سينتقل مورد التكوين خلال بعض التغييرات في الحالة. مراقبة التقدم باستخدام az k8s-configuration show ... الأمر أعلاه:

تغيير المرحلة ‏‏الوصف
complianceStatus->Pending يمثل الحالات الأولية وقيد التقدم.
complianceStatus ->Installed config-agent تم تكوين نظام المجموعة بنجاح ونشره flux دون خطأ.
complianceStatus ->Failed config-agent حدث خطأ أثناء fluxنشر . يتم توفير التفاصيل في complianceStatus.message نص الاستجابة.

تطبيق التكوين من مستودع Git خاص

إذا كنت تستخدم مستودع Git خاصًا، فأنت بحاجة إلى تكوين مفتاح SSH العمومي في المستودع الخاص بك. إما أن تقدم مفتاح SSH العمومي أو ينشئ Flux واحدًا. يمكنك تكوين المفتاح العام إما في مستودع Git المحدد أو على مستخدم Git الذي لديه حق الوصول إلى المستودع.

احصل على مفتاحك العام

إذا قمت بإنشاء مفاتيح SSH، فأنت تمتلك بالفعل المفاتيح الخاصة والعامة.

احصل على المفتاح العام باستخدام Azure CLI

استخدم ما يلي في Azure CLI إذا كان Flux ينشئ المفاتيح.

az k8s-configuration show --resource-group <resource group name> --cluster-name <connected cluster name> --name <configuration name> --cluster-type connectedClusters --query 'repositoryPublicKey' 
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAREDACTED"

احصل على المفتاح العام من مدخل Microsoft Azure

اتبع ما يلي في مدخل Microsoft Azure إذا كان Flux يقوم بإنشاء المفاتيح.

  1. في مدخل Microsoft Azure، انتقل إلى مورد نظام المجموعة المتصل.
  2. في صفحة المورد، حدد "GitOps"، وانظر قائمة التكوينات لهذه المجموعة.
  3. حدد التكوين الذي يستخدم مستودع Git الخاص.
  4. في نافذة السياق التي تفتح، في أسفل النافذة، انسخ مفتاح المستودع العام.

أضف المفتاح العام باستخدام GitHub

استخدم أحد الخيارات التالية:

  • الخيار 1: أضف المفتاح العام إلى حساب المستخدم (ينطبق على جميع المستودعات في حسابك):

    1. افتح GitHub، وانقر على أيقونة ملفك الشخصي في الزاوية العلوية اليمنى من الصفحة.
    2. انقر فوق «إعدادات».
    3. انقر على مفاتيح SSH وGPG.
    4. انقر فوق مفتاح SSH جديد.
    5. قم بتوفير عنوان.
    6. الصق المفتاح العام دون أي علامات اقتباس محيطة.
    7. انقر فوق إضافة مفتاح SSH.
  • الخيار 2: إضافة المفتاح العام كمفتاح نشر إلى مستودع Git (ينطبق فقط على هذا المستودع):

    1. افتح GitHub، وانتقل إلى المستودع.
    2. انقر فوق «إعدادات».
    3. انقر فوق Deploy keys.
    4. انقر فوق Add deploy key.
    5. قم بتوفير عنوان.
    6. حدد السماح بالوصول للكتابة.
    7. الصق المفتاح العام دون أي علامات اقتباس محيطة.
    8. انقر فوق إضافة مفتاح.

إضافة مفتاح عام باستخدام مستودع Azure DevOps

استخدم الخطوات التالية لإضافة المفتاح إلى مفاتيح SSH:

  1. ضمن User الإعدادات في أعلى اليمين (بجوار صورة ملف التعريف)، انقر فوق مفاتيح SSH العامة.
  2. حدد + مفتاح جديد.
  3. قم بتوفير اسم.
  4. الصق المفتاح العام دون أي علامات اقتباس محيطة.
  5. انقر فوق إضافة.

تحقق من صحة تكوين Kubernetes

بعد config-agent تثبيت المثيل flux ، يجب أن تبدأ الموارد الموجودة في مستودع Git في التدفق إلى نظام المجموعة. تحقق لمعرفة أن مساحات الأسماء وعمليات النشر والموارد قد تم إنشاؤها باستخدام الأمر التالي:

kubectl get ns --show-labels
NAME              STATUS   AGE    LABELS
azure-arc         Active   24h    <none>
cluster-config    Active   177m   <none>
default           Active   29h    <none>
itops             Active   177m   fluxcd.io/sync-gc-mark=sha256.9oYk8yEsRwWkR09n8eJCRNafckASgghAsUWgXWEQ9es,name=itops
kube-node-lease   Active   29h    <none>
kube-public       Active   29h    <none>
kube-system       Active   29h    <none>
team-a            Active   177m   fluxcd.io/sync-gc-mark=sha256.CS5boSi8kg_vyxfAeu7Das5harSy1i0gc2fodD7YDqA,name=team-a
team-b            Active   177m   fluxcd.io/sync-gc-mark=sha256.vF36thDIFnDDI2VEttBp5jgdxvEuaLmm7yT_cuA2UEw,name=team-b

يمكننا أن نرى أنه team-ateam-bitopsتم إنشاء مساحات الأسماء و و.cluster-config

flux تم نشر عامل التشغيل إلى cluster-config مساحة الاسم، كما تم توجيهه بواسطة مورد التكوين:

kubectl -n cluster-config get deploy  -o wide
NAME             READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES                         SELECTOR
cluster-config   1/1     1            1           3h    flux         docker.io/fluxcd/flux:1.16.0   instanceName=cluster-config,name=flux
memcached        1/1     1            1           3h    memcached    memcached:1.5.15               name=memcached

المزيد من الاستكشاف

يمكنك استكشاف الموارد الأخرى التي تم نشرها كجزء من مستودع التكوين باستخدام:

kubectl -n team-a get cm -o yaml
kubectl -n itops get all

تنظيف الموارد

احذف تكوينًا باستخدام Azure CLI أو مدخل Microsoft Azure. بعد إجراء أمر الحذف، سيتم حذف مورد التكوين على الفور في Azure. يجب أن يتم الحذف الكامل للكائنات المرتبطة من المجموعة في غضون 10 دقائق. إذا كانت التهيئة في حالة فاشلة عند إزالتها، فقد يستغرق الحذف الكامل للكائنات المرتبطة ما يصل إلى ساعة.

عند حذف تكوين مع namespace نطاق، لا يتم حذف مساحة الاسم بواسطة Azure Arc لتجنب كسر أحمال العمل الموجودة. إذا لزم الأمر، يمكنك حذف مساحة الاسم هذه يدويا باستخدام kubectl.

az k8s-configuration delete --name cluster-config --cluster-name AzureArcTest1 --resource-group AzureArcTest --cluster-type connectedClusters

إشعار

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

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

تقدم إلى البرنامج التعليمي التالي لمعرفة كيفية تنفيذ CI/CD باستخدام GitOps.