KubernetesManifest@1 - النشر إلى مهمة Kubernetes v1

استخدم ملفات بيان Kubernetes للتوزيع على أنظمة المجموعات أو حتى خبز ملفات البيان لاستخدامها في عمليات التوزيع باستخدام مخططات Helm.

بناء الجملة

# Deploy to Kubernetes v1
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@1
  inputs:
    #action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
    #connectionType: 'kubernetesServiceConnection' # 'azureResourceManager' | 'kubernetesServiceConnection'. Required when action != bake. Service connection type. Default: kubernetesServiceConnection.
    #kubernetesServiceConnection: # string. Alias: kubernetesServiceEndpoint. Required when action != bake && connectionType = kubernetesServiceConnection. Kubernetes service connection. 
    #azureSubscriptionConnection: # string. Alias: azureSubscriptionEndpoint. Required when action != bake && connectionType = azureResourceManager. Azure subscription. 
    #azureResourceGroup: # string. Required when action != bake && connectionType = azureResourceManager. Resource group. 
    #kubernetesCluster: # string. Required when action != bake && connectionType = azureResourceManager. Kubernetes cluster. 
    #useClusterAdmin: false # boolean. Optional. Use when connectionType = azureResourceManager. Use cluster admin credentials. Default: false.
    #namespace: # string. Namespace. 
    #strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
    #trafficSplitMethod: 'pod' # 'pod' | 'smi'. Optional. Use when strategy = canary. Traffic split method. Default: pod.
    #percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
    #baselineAndCanaryReplicas: '1' # string. Required when strategy = Canary && action = deploy && trafficSplitMethod = SMI. Baseline and canary replicas. Default: 1.
    #manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests. 
    #containers: # string. Optional. Use when action = deploy || action = promote || action = bake. Containers. 
    #imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets. 
    #renderType: 'helm' # 'helm' | 'kompose' | 'kustomize'. Optional. Use when action = bake. Render Engine. Default: helm.
    #dockerComposeFile: # string. Required when action = bake && renderType = kompose. Path to docker compose file. 
    #helmChart: # string. Required when action = bake && renderType = helm. Helm Chart. 
    #releaseName: # string. Optional. Use when action = bake && renderType = helm. Helm Release Name. 
    #overrideFiles: # string. Optional. Use when action = bake && renderType = helm. Override Files. 
    #overrides: # string. Optional. Use when action = bake && renderType = helm. Overrides. 
    #kustomizationPath: # string. Optional. Use when action = bake && renderType = kustomize. Kustomization Path. 
    #resourceToPatch: 'file' # 'file' | 'name'. Required when action = patch. Resource to patch. Default: file.
    #resourceFileToPatch: # string. Required when action = patch && resourceToPatch = file. File path. 
    #kind: # 'deployment' | 'replicaset' | 'statefulset'. Required when action = scale || resourceToPatch = name. Kind. 
    #name: # string. Required when action = scale || resourceToPatch = name. Name. 
    #replicas: # string. Required when action = scale. Replica count. 
    #mergeStrategy: 'strategic' # 'json' | 'merge' | 'strategic'. Required when action = patch. Merge Strategy. Default: strategic.
    #arguments: # string. Optional. Use when action = delete. Arguments. 
    #patch: # string. Required when action = patch. Patch. 
    #secretType: 'dockerRegistry' # 'dockerRegistry' | 'generic'. Required when action = createSecret. Type of secret. Default: dockerRegistry.
    #secretName: # string. Optional. Use when action = createSecret. Secret name. 
    #secretArguments: # string. Optional. Use when action = createSecret && secretType = generic. Arguments. 
    #dockerRegistryEndpoint: # string. Optional. Use when action = createSecret && secretType = dockerRegistry. Docker registry service connection. 
    #rolloutStatusTimeout: '0' # string. Optional. Use when action = deploy || action = patch || action = scale || action = promote. Timeout for rollout status. Default: 0.

الإدخالات

action - العمل
string. القيم المسموح بها: bake، (إنشاء بيانات سرية)، delete، deploy، promotepatch، ، . rejectscalecreateSecret القيمة الافتراضية: deploy.

يحدد الإجراء الذي سيتم تنفيذه.


connectionType - نوع اتصال الخدمة
string. مطلوب عند action != bake. القيم المسموح بها: azureResourceManager (Azure Resource Manager)، kubernetesServiceConnection (اتصال خدمة Kubernetes). القيمة الافتراضية: kubernetesServiceConnection.

حدد نوع اتصال خدمة Kubernetes.

  • kubernetesServiceConnection (اتصال خدمة Kubernetes) - يسمح لك بتوفير ملف KubeConfig أو تحديد حساب خدمة أو استيراد مثيل AKS باستخدام خيار اشتراك Azure . يتطلب استيراد مثيل AKS باستخدام خيار اشتراك Azure الوصول إلى مجموعة Kubernetes في وقت تكوين اتصال الخدمة.
  • azureResourceManager(Azure Resource Manager) - يتيح لك تحديد مثيل AKS. لا يصل إلى مجموعة Kubernetes في وقت تكوين اتصال الخدمة.

لمزيد من المعلومات، راجع الملاحظات.


kubernetesServiceConnection - اتصال خدمة Kubernetes
الاسم المستعار للإدخل: kubernetesServiceEndpoint. string. مطلوب عند action != bake && connectionType = kubernetesServiceConnection.

يحدد اتصال خدمة Kubernetes.


azureSubscriptionConnection - اشتراك Azure
الاسم المستعار للإدخل: azureSubscriptionEndpoint. string. مطلوب عند action != bake && connectionType = azureResourceManager.

حدد اشتراك Azure Resource Manager، الذي يحتوي على Azure Container Registry.Note: لتكوين اتصال خدمة جديد، حدد اشتراك Azure من القائمة وانقر فوق "Authorize". إذا لم يكن اشتراكك مدرجا أو إذا كنت تريد استخدام كيان خدمة موجود، يمكنك إعداد اتصال خدمة Azure باستخدام الزر "إضافة" أو "إدارة".


azureResourceGroup - مجموعة الموارد
string. مطلوب عند action != bake && connectionType = azureResourceManager.

حدد مجموعة موارد Azure.


kubernetesCluster - مجموعة Kubernetes
string. مطلوب عند action != bake && connectionType = azureResourceManager.

حدد مجموعة مدارة من Azure.


useClusterAdmin - استخدام بيانات اعتماد مسؤول نظام المجموعة
boolean. ‏‏اختياري. استخدم عندما connectionType = azureResourceManager. القيمة الافتراضية: false.

استخدم بيانات اعتماد مسؤول نظام المجموعة بدلا من بيانات اعتماد مستخدم نظام المجموعة الافتراضية.


namespace - مساحه الاسم
string.

يحدد مساحة الاسم للأوامر باستخدام العلامة –namespace . إذا لم يتم توفير مساحة الاسم، فسيتم تشغيل الأوامر في مساحة الاسم الافتراضية.


strategy - استراتيجيه
string. ‏‏اختياري. استخدم عندما action = deploy || action = promote || action = reject. القيم المسموح بها: canary، . none القيمة الافتراضية: none.

تحديد استراتيجية التوزيع المستخدمة في deploy الإجراء قبل promote إجراء أو reject إجراء. حاليا، canary هي استراتيجية التوزيع المقبولة الوحيدة.


trafficSplitMethod - أسلوب تقسيم نسبة استخدام الشبكة
string. ‏‏اختياري. استخدم عندما strategy = canary. القيم المسموح بها: pod، . smi القيمة الافتراضية: pod.

بالنسبة للقيمة smi، يتم تقسيم نسبة استخدام الشبكة على مستوى الطلب باستخدام شبكة خدمة. يجب إعداد شبكة خدمة بواسطة مسؤول نظام المجموعة. تعالج هذه المهمة تنسيق عناصر SMI TrafficSplit .

بالنسبة للقيمة pod، لا يمكن تقسيم النسبة المئوية على مستوى الطلب في حالة عدم وجود شبكة خدمة. بدلا من ذلك، يتم استخدام إدخال النسبة المئوية لحساب النسخ المتماثلة للأساس والكناري. الحساب هو نسبة مئوية من النسخ المتماثلة المحددة في بيانات الإدخال للمتغير الثابت.


percentage - النسبه المئويه
string. مطلوب عند strategy = Canary && action = deploy. القيمة الافتراضية: 0.

النسبة المئوية المستخدمة لحساب عدد النسخ المتماثلة للمتغير الأساسي والمتغير الكناري لأحمال العمل المضمنة في ملفات البيان.

بالنسبة لإدخال النسبة المئوية المحددة، احسب:

(النسبة المئوية × عدد النسخ المتماثلة) / 100

إذا لم تكن النتيجة عددا صحيحا، يتم استخدام الأرضية الرياضية للنتيجة عند إنشاء متغيرات الأساس والكناري.

على سبيل المثال، افترض أن التوزيع hello-world موجود في ملف بيان الإدخال وأن الأسطر التالية موجودة في إدخال المهمة:

replicas: 4
strategy: canary
percentage: 25

في هذه الحالة، يتم إنشاء عمليات hello-world-baseline التوزيع و hello-world-canary بنسخة متماثلة واحدة لكل منها. يتم إنشاء متغير الأساس بنفس الصورة والعلامة مثل الإصدار الثابت، وهو المتغير المكون من أربع نسخ متماثلة قبل التوزيع. يتم إنشاء متغير الكناري مع الصورة والعلامة المقابلة للتغييرات المنشورة حديثا.


baselineAndCanaryReplicas - النسخ المتماثلة الأساسية والكنارية
string. مطلوب عند strategy = Canary && action = deploy && trafficSplitMethod = SMI. القيمة الافتراضية: 1.

عند التعيين trafficSplitMethod إلى smi، يتم التحكم في تقسيم نسبة استخدام الشبكة في مستوى شبكة الخدمة. يمكنك التحكم في العدد الفعلي للنسخ المتماثلة للمتغيرات الكنارية والأساسية بشكل مستقل عن تقسيم نسبة استخدام الشبكة.

على سبيل المثال، افترض أن بيان توزيع الإدخال يحدد 30 نسخة متماثلة للمتغير الثابت. افترض أيضا أنك تحدد الإدخال التالي للمهمة:

strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1

في هذه الحالة، يتلقى المتغير الثابت 80٪ من نسبة استخدام الشبكة، بينما يتلقى كل من المتغيرات الأساسية والكنارية نصف 20٪. لا تتلقى المتغيرات الأساسية والكنارية ثلاث نسخ متماثلة لكل منهما. بدلا من ذلك، يتلقون العدد المحدد من النسخ المتماثلة، ما يعني أن كل منها يتلقى نسخة متماثلة واحدة.


manifests - بيانات
string. مطلوب عند action = deploy || action = promote || action = reject.

يحدد المسار إلى ملفات البيان التي سيتم استخدامها للتوزيع. يمثل كل سطر مسارا واحدا. نمط مطابقة الملفات هو قيمة مقبولة لكل سطر.


containers - الحاويات
string. ‏‏اختياري. استخدم عندما action = deploy || action = promote || action = bake.

يحدد عنوان URL للمورد المؤهل بالكامل للصورة لاستخدامها في الاستبدالات على ملفات البيان. عنوان URL contosodemo.azurecr.io/helloworld:test مثال على ذلك.


imagePullSecrets - ImagePullSecrets
string. ‏‏اختياري. استخدم عندما action = deploy || action = promote.

يحدد إدخالا متعدد الأسطر حيث يحتوي كل سطر على اسم سر سجل Docker الذي تم إعداده بالفعل داخل نظام المجموعة. تتم إضافة كل اسم سري ضمن imagePullSecrets لأحمال العمل الموجودة في ملفات بيان الإدخال.


renderType - محرك العرض
string. ‏‏اختياري. استخدم عندما action = bake. القيم المسموح بها: helm، ، kompose. kustomize القيمة الافتراضية: helm.

يحدد نوع العرض المستخدم لإنتاج ملفات البيان.


dockerComposeFile - المسار إلى ملف docker compose
string. مطلوب عند action = bake && renderType = kompose.

يحدد مسار ملف docker-compose.


helmChart - مخطط Helm
string. مطلوب عند action = bake && renderType = helm.

يحدد مسار مخطط Helm للخبز.


releaseName - اسم إصدار Helm
string. ‏‏اختياري. استخدم عندما action = bake && renderType = helm.

يحدد اسم إصدار Helm لاستخدامه.


overrideFiles - تجاوز الملفات
string. ‏‏اختياري. استخدم عندما action = bake && renderType = helm.

تحديد إدخال متعدد الأسطر يقبل المسار إلى ملفات التجاوز. يتم استخدام الملفات عند خبز ملفات البيان من مخططات Helm.


overrides - يتجاوز
string. ‏‏اختياري. استخدم عندما action = bake && renderType = helm.

يحدد قيم التجاوز المراد تعيينها.


kustomizationPath - مسار Kustomization
string. ‏‏اختياري. استخدم عندما action = bake && renderType = kustomize.

يحدد الوسيطة التي يجب أن تكون المسار إلى الدليل الذي يحتوي على الملف، أو عنوان URL لمستودع git مع لاحقة مسار تحدد same فيما يتعلق بجذر المستودع.


resourceToPatch - المورد المراد تصحيحه
string. مطلوب عند action = patch. القيم المسموح بها: file، . name القيمة الافتراضية: file.

يشير إلى إحدى طرق التصحيح التالية:

  • يحدد ملف البيان الكائنات المراد تصحيحها.
  • يتم تحديد كائن فردي حسب النوع والاسم كهدف التصحيح.

القيم المقبولة هي ملفواسم.


resourceFileToPatch - مسار الملف
string. مطلوب عند action = patch && resourceToPatch = file.

يحدد المسار إلى الملف المستخدم للتصحيح.


kind - نوع
string. مطلوب عند action = scale || resourceToPatch = name. القيم المسموح بها: deployment، ، replicaset. statefulset

يحدد نوع كائن K8s، مثل deploymentوالمزيد replicaSet .


name - اسم
string. مطلوب عند action = scale || resourceToPatch = name.

يحدد اسم كائن K8s.


replicas - العدد الخاص بالنسخ المتماثلة
string. مطلوب عند action = scale.

يحدد عدد النسخ المتماثلة التي يجب التحجيم إليها.


replicas - العدد الخاص بالنسخ المتماثلة
string. مطلوب عند action = scale.

يحدد اسم كائن K8s.


mergeStrategy - استراتيجية الدمج
string. مطلوب عند action = patch. القيم المسموح بها: json، ، merge. strategic القيمة الافتراضية: strategic.

يحدد نوع التصحيح الذي يتم توفيره.


arguments - الحجج
string. ‏‏اختياري. استخدم عندما action = delete.

يحدد وسيطات kubectl delete الأمر . مثال على ذلك: arguments: deployment hello-world foo-bar


patch - التصحيح
string. مطلوب عند action = patch.

يحدد محتويات التصحيح.


secretType - نوع البيانات السرية
string. مطلوب عند action = createSecret. القيم المسموح بها: dockerRegistry، . generic القيمة الافتراضية: dockerRegistry.

إنشاء أو تحديث عام أو docker imagepullsecret. حدد dockerRegistry لإنشاء السجل المحدد أو تحديثه imagepullsecret . imagePullSecret هي طريقة لتمرير سر يحتوي على كلمة مرور سجل حاوية إلى Kubelet، حتى تتمكن من سحب صورة خاصة نيابة عن Pod الخاص بك.


secretName - اسم البيانات السرية
string. ‏‏اختياري. استخدم عندما action = createSecret.

يحدد اسم السر. يمكنك استخدام هذا الاسم السري في ملف تكوين Kubernetes YAML.


secretArguments - الحجج
string. ‏‏اختياري. استخدم عندما action = createSecret && secretType = generic.

يحدد المفاتيح والقيم الحرفية لإدراجها في البيانات السرية. على سبيل المثال، --from-literal=key1=value1--from-literal=key2="top secret".


dockerRegistryEndpoint - اتصال خدمة تسجيل Docker
string. ‏‏اختياري. استخدم عندما action = createSecret && secretType = dockerRegistry.

يحدد بيانات اعتماد اتصال الخدمة المحددة المستخدمة لإنشاء سر سجل Docker داخل نظام المجموعة. يمكن أن تشير ملفات البيان ضمن imagePullSecrets الحقل بعد ذلك إلى اسم هذا السر.


rolloutStatusTimeout - مهلة حالة الإطلاق
string. ‏‏اختياري. استخدم عندما action = deploy || action = patch || action = scale || action = promote. القيمة الافتراضية: 0.

يحدد طول الوقت (بالثوان) للانتظار قبل حالة الانتهاء watch on rollout .


خيارات التحكم بالمهمة

تحتوي جميع المهام على خيارات التحكم بالإضافة إلى مدخلات المهام الخاصة بها. لمزيد من المعلومات، راجع خيارات التحكم وخصائص المهمة الشائعة.

متغيرات الإخراج

تحدد هذه المهمة متغيرات الإخراج التالية، والتي يمكنك استهلاكها في خطوات انتقال البيانات من الخادم والوظائف والمراحل.

manifestsBundle
موقع حزم البيان التي تم إنشاؤها بواسطة إجراء الخبز

الملاحظات

اعتبارات اتصال خدمة Kubernetes عند الوصول إلى AKS

يمكنك إنشاء اتصال خدمة Kubernetes مع أي من الخيارات التالية.

  • KubeConfig
  • حساب الخدمة
  • اشتراك Azure

لقطة شاشة لاختيار طريقة مصادقة اتصال خدمة Kubernetes.

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

لقطة شاشة لاختيار مربع حوار مصادقة اتصال خدمة Kubernetes عالق عند تحميل مساحات الأسماء.

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

استخدام Azure Resource Manager Service Connection للوصول إلى AKS

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

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

الأسئلة المتداولة حول اتصال الخدمة

أتلقى رسالة الخطأ التالية: تعذر العثور على أي سر مقترن بحساب الخدمة. ماذا يحدث؟

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

أنا أستخدم AKS ولا أريد تغيير أي شيء، هل يمكنني الاستمرار في استخدام المهام مع اتصال خدمة Kubernetes؟

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

أنا أستخدم مهام Kubernetes واتصال خدمة Kubernetes ولكن ليس AKS. هل يجب أن أكون قلقا؟

ستستمر المهام في العمل كما كان من قبل.

هل ستتم إزالة نوع اتصال خدمة Kubernetes؟

تعمل مهام Kubernetes الخاصة بنا مع أي مجموعة Kubernetes، بغض النظر عن مكان تشغيلها. سيستمر اتصال خدمة Kubernetes في الوجود.

أنا عميل AKS وكل شيء يعمل بشكل جيد، هل يجب أن أتصرف؟

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

أقوم بإنشاء بيئة Kubernetes، وليس لدي خيار لاستخدام اتصالات الخدمة

في حالة عدم إمكانية الوصول إلى AKS أثناء وقت إنشاء البيئة، يمكنك استخدام بيئة فارغة وتعيين connectionType الإدخال إلى اتصال خدمة Azure Resource Manager.

لقد تم تكوين AKS باستخدام Azure Active Directory RBAC، ولا تعمل البنية الأساسية لبرنامج ربط العمليات التجارية الخاصة بي. هل ستحل هذه التحديثات ذلك؟

الوصول إلى Kubernetes عند تمكين AAD RBAC لا علاقة له بإنشاء الرمز المميز. لمنع مطالبة تفاعلية، سندعم kubelogin في تحديث مستقبلي.

استخدم مهمة بيان Kubernetes في البنية الأساسية لبرنامج ربط العمليات التجارية للبناء أو الإصدار لخبز البيانات ونشرها في مجموعات Kubernetes.

تدعم هذه المهمة ما يلي:

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

  • استقرار البيان: يتم التحقق من حالة الإطلاق لعناصر Kubernetes المنشورة. يتم دمج عمليات التحقق من الاستقرار لتحديد ما إذا كانت حالة المهمة ناجحة أو فاشلة.

  • التعليقات التوضيحية لقابلية التتبع: تتم إضافة التعليقات التوضيحية إلى كائنات Kubernetes المنشورة لتراكب معلومات التتبع. يتم دعم التعليقات التوضيحية التالية:

    • azure-pipelines/org
    • azure-pipelines/project
    • azure-pipelines/pipeline
    • azure-pipelines/pipelineId
    • azure-pipelines/execution
    • azure-pipelines/executionuri
    • azure-pipelines/jobName
  • معالجة البيانات السرية: createSecret يتيح الإجراء إنشاء أسرار سجل Docker باستخدام اتصالات خدمة سجل Docker. كما يتيح إنشاء أسرار عامة باستخدام متغيرات النص العادي أو المتغيرات السرية. قبل التوزيع إلى نظام المجموعة، يمكنك استخدام secrets الإدخال جنبا إلى جنب مع deploy الإجراء لزيادة ملفات بيان الإدخال بالقيمة المناسبة imagePullSecrets .

  • بيان الخبز: bake يسمح إجراء المهمة بخبز القوالب في ملفات بيان Kubernetes. يستخدم الإجراء أدوات مثل Helm و Compose و Kustomize. مع الخبز، تكون ملفات بيان Kubernetes هذه قابلة للاستخدام لعمليات التوزيع إلى نظام المجموعة.

  • استراتيجية التوزيع: يؤدي اختيار الاستراتيجية canarydeploy مع الإجراء إلى إنشاء أسماء أحمال العمل اللاحقة ب -baseline و -canary. تدعم المهمة طريقتين لتقسيم نسبة استخدام الشبكة:

    • واجهة شبكة الخدمة: يسمح تجريد واجهة شبكة الخدمة (SMI) بالتكوين مع موفري شبكة الخدمة مثل Linkerd و Istio. تعين مهمة بيان Kubernetes عناصر SMI TrafficSplit إلى الخدمات الثابتة والأساسية والكنارية أثناء دورة حياة استراتيجية التوزيع.

      عمليات توزيع الكناري التي تستند إلى شبكة خدمة وتستخدم هذه المهمة أكثر دقة. ترجع هذه الدقة إلى كيفية تمكين موفري شبكة الخدمة للتقسيم الدقيق المستند إلى النسبة المئوية لنسبة استخدام الشبكة. تستخدم شبكة الخدمة سجل الخدمة وحاويات sidecar التي يتم حقنها في pods. يحدث هذا الحقن جنبا إلى جنب مع حاويات التطبيق لتحقيق تقسيم نسبة استخدام الشبكة الدقيقة.

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

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

    قارن أحمال العمل الأساسية والكنارية باستخدام إما مهمة التدخل اليدوي في مسارات الإصدار أو مهمة تأخير في مسارات YAML. قم بإجراء المقارنة قبل استخدام إجراء ترقية المهمة أو رفضها.

نشر الإجراء

التعليمات البرمجية YAML التالية هي مثال على التوزيع إلى مساحة اسم Kubernetes باستخدام ملفات البيان:

steps:
- task: KubernetesManifest@0
  displayName: Deploy
  inputs:
    kubernetesServiceConnection: someK8sSC1
    namespace: default
    manifests: |
      manifests/deployment.yml
      manifests/service.yml
    containers: |
      foo/demo:$(tagVariable1)
      bar/demo:$(tagVariable2)
    imagePullSecrets: |
      some-secret
      some-other-secret

في المثال أعلاه، تحاول المهمة العثور على تطابقات للصور foo/demo وفي bar/demo حقول الصور لملفات البيان. لكل تطابق تم العثور عليه، يتم إلحاق قيمة إما tagVariable1 أو tagVariable2 كعلامة باسم الصورة. يمكنك أيضا تحديد الملخصات في إدخال الحاويات لاستبدال البيانات الاصطناعية.

ملاحظة

بينما يمكنك تأليف deployإجراءات و promoteو reject باستخدام إدخال YAML المتعلق باستراتيجية التوزيع، فإن دعم مهمة التدخل اليدوي غير متوفر حاليا لبناء البنية الأساسية لبرنامج ربط العمليات التجارية.

بالنسبة للبنية الأساسية لبرنامج ربط العمليات التجارية للإصدار، ننصحك باستخدام الإجراءات والمدخلات المتعلقة باستراتيجية التوزيع بالتسلسل التالي:

  1. إجراء توزيع محدد مع strategy: canary و percentage: $(someValue).
  2. مهمة التدخل اليدوي بحيث يمكنك إيقاف البنية الأساسية لبرنامج ربط العمليات التجارية مؤقتا ومقارنة متغير الأساس بالمتغير الكناري.
  3. إجراء ترقية يتم تشغيله إذا تم استئناف مهمة التدخل اليدوي وإجراء رفض يتم تشغيله إذا تم رفض مهمة التدخل اليدوي.

إنشاء إجراء سري

تظهر التعليمات البرمجية YAML التالية إنشاء عينة من أسرار سجل Docker باستخدام اتصال خدمة Docker Registry:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: dockerRegistry
    secretName: foobar
    dockerRegistryEndpoint: demoACR
    kubernetesServiceConnection: someK8sSC
    namespace: default

تعرض التعليمات البرمجية YAML هذه عينة إنشاء أسرار عامة:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: generic
    secretName: some-secret
    secretArguments: --from-literal=key1=value1
    kubernetesServiceConnection: someK8sSC
    namespace: default

خبز العمل

التعليمات البرمجية YAML التالية هي مثال على ملفات بيان الخبز من مخططات Helm. لاحظ استخدام إدخال اسم في المهمة الأولى. تتم الإشارة إلى هذا الاسم لاحقا من خطوة التوزيع لتحديد المسار إلى البيانات التي تم إنتاجها بواسطة خطوة الخبز.

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from Helm chart
  inputs:
    action: bake
    helmChart: charts/sample
    overrides: 'image.repository:nginx'

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: someK8sSC
    namespace: default
    manifests: $(bake.manifestsBundle)
    containers: |
      nginx: 1.7.9

ملاحظة

لاستخدام Helm مباشرة لإدارة الإصدارات والتراجع، راجع مهمة حزمة مخططات Helm وتوزيعها.

مثال Kustomize

التعليمات البرمجية YAML التالية هي مثال على ملفات بيان الخبز التي تم إنشاؤها باستخدام Kustomize التي تحتوي على kustomization.yaml ملف.

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from kustomization path
  inputs:
    action: bake
    renderType: kustomize
    kustomizationPath: folderContainingKustomizationFile

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: k8sSC1
    manifests: $(bake.manifestsBundle)

مثال على Kompose

التعليمات البرمجية YAML التالية هي مثال على ملفات بيان الخبز التي تم إنشاؤها باستخدام Kompose، وهي أداة تحويل ل Docker Compose.

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from Docker Compose
  inputs:
    action: bake
    renderType: kompose
    dockerComposeFile: docker-compose.yaml

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: k8sSC1
    manifests: $(bake.manifestsBundle)

إجراء تغيير الحجم

توضح التعليمات البرمجية YAML التالية مثالا على تحجيم الكائنات:

steps:
- task: KubernetesManifest@0
  displayName: Scale
  inputs: 
    action: scale
    kind: deployment
    name: bootcamp-demo
    replicas: 5
    kubernetesServiceConnection: someK8sSC
    namespace: default

إجراء التصحيح

تعرض التعليمات البرمجية YAML التالية مثالا على تصحيح الكائنات:

steps:
- task: KubernetesManifest@0
  displayName: Patch
  inputs: 
    action: patch
    kind: pod
    name: demo-5fbc4d6cd9-pgxn4
    mergeStrategy: strategic
    patch: '{"spec":{"containers":[{"name":"demo","image":"foobar/demo:2239"}]}}'
    kubernetesServiceConnection: someK8sSC
    namespace: default

إجراء الحذف

تعرض التعليمات البرمجية YAML هذه عينة حذف كائن:

steps:
- task: KubernetesManifest@0
  displayName: Delete
  inputs:
    action: delete
    arguments: deployment expressapp
    kubernetesServiceConnection: someK8sSC
    namespace: default

استكشاف الأخطاء وإصلاحها

يوجد نظام مجموعة Kubernetes الخاص بي خلف جدار حماية وأنا أستخدم وكلاء مستضافين. كيف يمكنني التوزيع إلى هذه المجموعة؟

يمكنك منح الوكلاء المستضافين حق الوصول من خلال جدار الحماية الخاص بك عن طريق السماح بعناوين IP للوكلاء المستضافين. لمزيد من التفاصيل، راجع نطاقات IP للعامل.

كيف تعمل الطلبات على مسارات خدمة مستقرة ومتغيرة مع عمليات توزيع الكناري؟

تسمح علاقة محدد التسمية بين القرون والخدمات في Kubernetes بإعداد عمليات التوزيع بحيث توجه خدمة واحدة الطلبات إلى كل من المتغيرات الثابتة والمتغيرات الكنارية. تستخدم مهمة بيان Kubernetes هذا لعمليات توزيع الكناري.

إذا كانت المهمة تتضمن مدخلات action: deploy و strategy: canary، لكل حمل عمل (النشر، ReplicaSet، Pod، ...) المعرفة في ملفات بيان الإدخال، -baseline يتم إنشاء متغير و -canary للتوزيع. في هذا المثال، هناك توزيع sampleapp في ملف بيان الإدخال وأنه بعد إكمال رقم التشغيل 22 من البنية الأساسية لبرنامج ربط العمليات التجارية، يتم نشر المتغير المستقر لهذا التوزيع المسمى sampleapp في نظام المجموعة. في التشغيل اللاحق (في هذه الحالة رقم التشغيل 23)، مهمة بيان Kubernetes مع action: deploy و strategy: canary ستؤدي إلى إنشاء عمليات توزيع sampleapp-baseline و sampleapp-canary التي يتم تحديد عدد النسخ المتماثلة الخاصة بها بواسطة percentage منتج إدخال المهمة بقيمة العدد المطلوب من النسخ المتماثلة للمتغير sampleapp الثابت النهائي وفقا لملفات بيان الإدخال.

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

action: promote يمكن استخدام إدخالات و strategy: canary و action: rejectstrategy: canary لمهام بيان Kubernetes للترويج للتغييرات الكنارية أو رفضها على التوالي. لاحظ أنه في كلتا الحالتين، في نهاية هذه الخطوة، سيتم نشر المتغير المستقر فقط لأحمال العمل المعلن عنها في ملفات بيان الإدخال في نظام المجموعة، بينما يتم تنظيف الأساس المؤقت وإصدارات الكناري.

المتطلبات

المتطلبات الوصف
أنواع البنية الأساسية لبرنامج ربط العمليات التجارية YAML، الإصدار الكلاسيكي، الإصدار الكلاسيكي
يعمل على Agent, DeploymentGroup
المطالب بلا
القدرات لا تفي هذه المهمة بأي طلبات للمهام اللاحقة في الوظيفة.
قيود الأوامر أي
متغيرات Settable أي
إصدار الوكيل جميع إصدارات العامل المدعومة.
فئة المهمة نشر