إنشاء تجمع Azure Batch مع ترقية نظام التشغيل التلقائي (OS)

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

لماذا تستخدم ترقية نظام التشغيل التلقائي؟

يتم استخدام ترقية نظام التشغيل التلقائي لتنفيذ استراتيجية ترقية نظام التشغيل التلقائي والتحكم داخل تجمعات Azure Batch. فيما يلي بعض الأسباب لاستخدام ترقية نظام التشغيل التلقائي:

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

باختصار، يساعد استخدام ترقية نظام التشغيل التلقائي على تحسين الأمان وتقليل اضطرابات التوفر وتوفير قدر أكبر من التحكم والمرونة لأحمال العمل الخاصة بك.

كيف تعمل ترقية نظام التشغيل التلقائي؟

عند ترقية الصور، ستتبع الأجهزة الظاهرية في Azure Batch Pool تقريبا نفس تدفق العمل مثل VirtualMachineScaleSets. لمعرفة المزيد حول الخطوات التفصيلية المتضمنة في عملية ترقية نظام التشغيل التلقائي ل VirtualMachineScaleSets، يمكنك الرجوع إلى صفحة VirtualMachineScaleSet.

ومع ذلك، إذا تم تعيين automaticOSUpgradePolicy.osRollingUpgradeDeferral إلى "صحيح" وتصبح الترقية متوفرة عند تشغيل عقدة دفعية للمهام بشكل نشط، تأخير الترقية حتى تكتمل جميع المهام على العقدة.

إشعار

إذا قام تجمع بتمكين osRollingUpgradeDeferral، عرض العقد الخاصة به على أنها حالة upgradeingos أثناء عملية الترقية. يرجى ملاحظة أن حالة الترقية لن تظهر إلا عند استخدام إصدار واجهة برمجة التطبيقات من 2024-02-01 أو أحدث. إذا كنت تستخدم إصدار API قديما للاتصال ب GetTVM/ListTVM، ستكون العقدة في حالة إعادة التشغيل عند الترقية.

صور نظام التشغيل المدعومة

يتم حاليا دعم بعض صور النظام الأساسي لنظام التشغيل فقط للترقية التلقائية. للحصول على قائمة صور مفصلة، يمكنك الحصول على من صفحة VirtualMachineScaleSet.

المتطلبات

  • يجب تعيين خاصية الإصدار للصورة إلى الأحدث.
  • بالنسبة لواجهة برمجة تطبيقات إدارة الدفعات، استخدم إصدار واجهة برمجة التطبيقات 2024-02-01 أو أعلى. بالنسبة لواجهة برمجة تطبيقات خدمة الدفعات، استخدم إصدار واجهة برمجة التطبيقات 2024-02-01.19.0 أو أحدث.
  • تأكد من توفر الموارد الخارجية المحددة في التجمع وتحديثها. تتضمن الأمثلة SAS URI لتمهيد الحمولة في خصائص ملحق الجهاز الظاهري، والحمولة في حساب التخزين، والإشارة إلى الأسرار في النموذج، وغير ذلك.
  • إذا كنت تستخدم الخاصية virtualMachineConfiguration.windowsConfiguration.enableAutomaticUpdates، يجب تعيين هذه الخاصية إلى "خطأ" في تعريف التجمع. تعمل الخاصية enableAutomaticUpdates على تمكين التصحيح في الجهاز الظاهري حيث يطبق "Windows Update" تصحيحات نظام التشغيل دون استبدال قرص نظام التشغيل. مع تمكين الترقيات التلقائية لصورة نظام التشغيل، لا يلزم إجراء عملية تصحيح إضافية من خلال Windows Update.

متطلبات إضافية للصور المخصصة

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

تكوين ترقية نظام التشغيل التلقائي

إذا كنت تنوي تنفيذ ترقيات نظام التشغيل التلقائي داخل تجمع، فمن الضروري تكوين حقل UpgradePolicy أثناء عملية إنشاء التجمع. لتكوين ترقيات صورة نظام التشغيل التلقائية، تأكد من تعيين الخاصية automaticOSUpgradePolicy.enableAutomaticOSUpgrade إلى "true" في تعريف التجمع.

إشعار

وضع نهج الترقية ونهج ترقية نظام التشغيل التلقائي هما إعدادان منفصلان ويتحكمان في جوانب مختلفة من المقياس المقدم الذي تم تعيينه بواسطة Azure Batch. سيحدد وضع نهج الترقية ما يحدث للمثيلات الموجودة في مجموعة التحجيم. ومع ذلك، فإن نهج ترقية نظام التشغيل التلقائي enableAutomaticOSUpgrade خاص بصورة نظام التشغيل ويتعقب التغييرات التي أجراها ناشر الصور ويحدد ما يحدث عند وجود تحديث للصورة.

هام

إذا كنت تستخدم اشتراك المستخدم، فمن الضروري ملاحظة أن ميزة الاشتراك Microsoft.Compute/RollingUpgradeDeferral مطلوبة لتسجيل اشتراكك. لا يمكنك استخدام osRollingUpgradeDeferral ما لم يتم تسجيل هذه الميزة. لتمكين هذه الميزة، يرجى تسجيلها يدويا على اشتراكك.

واجهة برمجة تطبيقات REST

يصف المثال التالي كيفية إنشاء تجمع مع ترقية نظام التشغيل التلقائي عبر واجهة برمجة تطبيقات REST:

PUT https://management.azure.com/subscriptions/<subscriptionid>/resourceGroups/<resourcegroupName>/providers/Microsoft.Batch/batchAccounts/<batchaccountname>/pools/<poolname>?api-version=2024-02-01

نص الطلب

{
    "name": "test1",
    "type": "Microsoft.Batch/batchAccounts/pools",
    "parameters": {
        "properties": {
            "vmSize": "Standard_d4s_v3",
            "deploymentConfiguration": {
                "virtualMachineConfiguration": {
                    "imageReference": {
                        "publisher": "MicrosoftWindowsServer",
                        "offer": "WindowsServer",
                        "sku": "2019-datacenter-smalldisk",
                        "version": "latest"
                    },
                    "nodePlacementConfiguration": {
                        "policy": "Zonal"
                    },
                    "nodeAgentSKUId": "batch.node.windows amd64",
                    "windowsConfiguration": {
                        "enableAutomaticUpdates": false
                    }
                }
            },
            "scaleSettings": {
                "fixedScale": {
                    "targetDedicatedNodes": 2,
                    "targetLowPriorityNodes": 0
                }
            },
            "upgradePolicy": {
                "mode": "Automatic",
                "automaticOSUpgradePolicy": {
                    "disableAutomaticRollback": true,
                    "enableAutomaticOSUpgrade": true,
                    "useRollingUpgradePolicy": true,
                    "osRollingUpgradeDeferral": true
                },
                "rollingUpgradePolicy": {
                    "enableCrossZoneUpgrade": true,
                    "maxBatchInstancePercent": 20,
                    "maxUnhealthyInstancePercent": 20,
                    "maxUnhealthyUpgradedInstancePercent": 20,
                    "pauseTimeBetweenBatches": "PT0S",
                    "prioritizeUnhealthyInstances": false,
                    "rollbackFailedInstancesOnPolicyBreach": false
                }
            }
        }
    }
}

SDK (C#)

يوضح مقتطف التعليمات البرمجية التالي مثالا على كيفية استخدام مكتبة عميل Batch .NET لإنشاء مجموعة من ترقية نظام التشغيل التلقائي عبر رموز C#. لمزيد من التفاصيل حول Batch.NET، راجع الوثائق المرجعية.

public async Task CreateUpgradePolicyPool()
{
     // Authenticate
     var clientId = Environment.GetEnvironmentVariable("CLIENT_ID");
     var clientSecret = Environment.GetEnvironmentVariable("CLIENT_SECRET");
     var tenantId = Environment.GetEnvironmentVariable("TENANT_ID");
     var subscriptionId = Environment.GetEnvironmentVariable("SUBSCRIPTION_ID");
     ClientSecretCredential credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
     ArmClient client = new ArmClient(credential, subscriptionId);
 
     // Get an existing Batch account
     string resourceGroupName = "testrg";
     string accountName = "testaccount";
     ResourceIdentifier batchAccountResourceId = BatchAccountResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, accountName);
     BatchAccountResource batchAccount = client.GetBatchAccountResource(batchAccountResourceId);
 
     // get the collection of this BatchAccountPoolResource
     BatchAccountPoolCollection collection = batchAccount.GetBatchAccountPools();
 
     // Define the pool
     string poolName = "testpool";
     BatchAccountPoolData data = new BatchAccountPoolData()
     {
         VmSize = "Standard_d4s_v3",
         DeploymentConfiguration = new BatchDeploymentConfiguration()
         {
             VmConfiguration = new BatchVmConfiguration(new BatchImageReference()
             {
                 Publisher = "MicrosoftWindowsServer",
                 Offer = "WindowsServer",
                 Sku = "2019-datacenter-smalldisk",
                 Version = "latest",
             },
             nodeAgentSkuId: "batch.node.windows amd64")
             {
                 NodePlacementPolicy = BatchNodePlacementPolicyType.Zonal,
                 IsAutomaticUpdateEnabled = false
             },
         },
         ScaleSettings = new BatchAccountPoolScaleSettings()
         {
             FixedScale = new BatchAccountFixedScaleSettings()
             {
                 TargetDedicatedNodes = 2,
                 TargetLowPriorityNodes = 0,
             },
         },
         UpgradePolicy = new UpgradePolicy()
         {
             Mode = UpgradeMode.Automatic,
             AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy()
             {
                 DisableAutomaticRollback = true,
                 EnableAutomaticOSUpgrade = true,
                 UseRollingUpgradePolicy = true,
                 OSRollingUpgradeDeferral = true
             },
             RollingUpgradePolicy = new RollingUpgradePolicy()
             {
                 EnableCrossZoneUpgrade = true,
                 MaxBatchInstancePercent = 20,
                 MaxUnhealthyInstancePercent = 20,
                 MaxUnhealthyUpgradedInstancePercent = 20,
                 PauseTimeBetweenBatches = "PT0S",
                 PrioritizeUnhealthyInstances = false,
                 RollbackFailedInstancesOnPolicyBreach = false,
             }
         }
     };
 
     ArmOperation<BatchAccountPoolResource> lro = await collection.CreateOrUpdateAsync(WaitUntil.Completed, poolName, data);
     BatchAccountPoolResource result = lro.Value;
 
     // the variable result is a resource, you could call other operations on this instance as well
     // but just for demo, we get its data from this resource instance
     BatchAccountPoolData resourceData = result.Data;
     // for demo we just print out the id
     Console.WriteLine($"Succeeded on id: {resourceData.Id}");
}

الأسئلة المتداولة

  • هل سيتم تعطيل مهامي إذا قمت بتمكين ترقية نظام التشغيل التلقائي؟

    لن يتم تعطيل المهام عند تعيين automaticOSUpgradePolicy.osRollingUpgradeDeferral إلى "true". في هذه الحالة، سيتم تأجيل الترقية حتى تصبح العقدة الخامة. وإلا، سيتم ترقية العقدة عندما تتلقى إصدار نظام تشغيل جديد، بغض النظر عما إذا كانت تقوم حاليا بتشغيل مهمة أم لا. لذلك ننصح بشدة بتمكين automaticOSUpgradePolicy.osRollingUpgradeDeferral.

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

  • تعرف على كيفية استخدام صورة مدارة لإنشاء تجمع.
  • تعرف على كيفية استخدام معرض حوسبة Azure لإنشاء تجمع.