البرنامج التعليمي: نشر التكوينات باستخدام 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.
المتطلبات الأساسية
حساب Azure مع اشتراك نشط. أنشئ حساباً مجاناً.
مجموعة Kubernetes المتصلة الحالية والممكّنة من Azure Arc.
- إذا لم تكن قد قمت بتوصيل مجموعة حتى الآن، فانتقل إلى بدء التشغيل السريع لتوصيل مجموعة Kubernetes التي تدعم Azure Arc.
فهم فوائد وبنية هذه الميزة. اقرأ المزيد في التكوينات وGitOps - مقال Kubernetes الممكّنة في Azure Arc.
k8s-configuration
تثبيت ملحق Azure CLI للإصدار >= 1.0.0:az extension add --name k8s-configuration
تلميح
إذا كان الملحق
k8s-configuration
مثبتا بالفعل، يمكنك تحديثه إلى أحدث إصدار باستخدام الأمر التالي -az extension update --name k8s-configuration
إنشاء تكوين
يتم تنظيم مثال المستودع المستخدم في هذه المقالة حول شخصية عامل تشغيل نظام المجموعة. توفر البيانات الموجودة في هذا المستودع بعض مساحات الأسماء، وتنشر أحمال العمل، وتوفر بعض التكوين الخاص بالفريق. يؤدي استخدام هذا المستودع مع GitOps إلى إنشاء الموارد التالية في مجموعتك:
- مساحات الأسماء:
cluster-config
، ،team-a
team-b
- نشر:
arc-k8s-demo
- ConfigMap:
team-a/endpoints
يستقصي config-agent
Azure للتكوينات الجديدة أو المحدثة. تستغرق هذه المهمة 5 دقائق.
إذا كنت تربط مستودعا خاصا بالتكوين، فأكمل الخطوات أدناه في تطبيق التكوين من مستودع Git خاص.
استخدام Azure CLI
استخدم ملحق Azure CLI ل k8s-configuration
لربط مجموعة متصلة بمستودع Git المثال.
قم بتسمية هذا التكوين
cluster-config
.اطلب من العامل نشر عامل التشغيل في
cluster-config
مساحة الاسم.منح أذونات عامل التشغيل
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"
}
عند إنشاء تكوين أو تحديثه، تحدث بعض الأشياء:
- يراقب Azure Arc
config-agent
Azure Resource Manager للتكوينات الجديدة أو المحدثة (Microsoft.KubernetesConfiguration/sourceControlConfigurations
) ويلاحظ التكوين الجديدPending
. - يقرأ
config-agent
خصائص التكوين وينشئ مساحة الاسم الوجهة. - يقوم Azure Arc
controller-manager
بإنشاء حساب خدمة Kubernetes وتعيينه إلى ClusterRoleBinding أو RoleBinding للأذونات المناسبة (cluster
أوnamespace
النطاق). ثم ينشر مثيلا لflux
. - إذا كنت تستخدم خيار SSH مع المفاتيح التي تم إنشاؤها بواسطة Flux،
flux
ينشئ مفتاح SSH ويسجل المفتاح العام. 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 يقوم بإنشاء المفاتيح.
- في مدخل Microsoft Azure، انتقل إلى مورد نظام المجموعة المتصل.
- في صفحة المورد، حدد "GitOps"، وانظر قائمة التكوينات لهذه المجموعة.
- حدد التكوين الذي يستخدم مستودع Git الخاص.
- في نافذة السياق التي تفتح، في أسفل النافذة، انسخ مفتاح المستودع العام.
أضف المفتاح العام باستخدام GitHub
استخدم أحد الخيارات التالية:
الخيار 1: أضف المفتاح العام إلى حساب المستخدم (ينطبق على جميع المستودعات في حسابك):
- افتح GitHub، وانقر على أيقونة ملفك الشخصي في الزاوية العلوية اليمنى من الصفحة.
- انقر فوق «إعدادات».
- انقر على مفاتيح SSH وGPG.
- انقر فوق مفتاح SSH جديد.
- قم بتوفير عنوان.
- الصق المفتاح العام دون أي علامات اقتباس محيطة.
- انقر فوق إضافة مفتاح SSH.
الخيار 2: إضافة المفتاح العام كمفتاح نشر إلى مستودع Git (ينطبق فقط على هذا المستودع):
- افتح GitHub، وانتقل إلى المستودع.
- انقر فوق «إعدادات».
- انقر فوق Deploy keys.
- انقر فوق Add deploy key.
- قم بتوفير عنوان.
- حدد السماح بالوصول للكتابة.
- الصق المفتاح العام دون أي علامات اقتباس محيطة.
- انقر فوق إضافة مفتاح.
إضافة مفتاح عام باستخدام مستودع Azure DevOps
استخدم الخطوات التالية لإضافة المفتاح إلى مفاتيح SSH:
- ضمن User الإعدادات في أعلى اليمين (بجوار صورة ملف التعريف)، انقر فوق مفاتيح SSH العامة.
- حدد + مفتاح جديد.
- قم بتوفير اسم.
- الصق المفتاح العام دون أي علامات اقتباس محيطة.
- انقر فوق إضافة.
تحقق من صحة تكوين 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-a
team-b
itops
تم إنشاء مساحات الأسماء و و.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.