تمرين - تكوين نهج Azure لـ Kubernetes في نظام مجموعة AKS

مكتمل

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

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

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

تمكين موفري موارد ContainerService وPolicyInsights

  1. تسجيل الدخول إلى Azure Cloud Shell باستخدام حسابك في Azure. حدد الإصدار Bash من Cloud Shell.

  2. يتطلب Azure Policy لـ AKS أن يكون إصدار نظام المجموعة 1.14 أو أحدث. قم بتشغيل البرنامج النصي التالي للتحقق من إصدار مجموعة AKS:

    az aks list
    

    تأكد من أن إصدار نظام المجموعة الذي تم الإبلاغ عنه هو 1.14 أو أحدث.

  3. قم بتسجيل موفر خدمة Azure Kubernetes عن طريق تشغيل الأمر az provider register:

    az provider register --namespace Microsoft.ContainerService
    
  4. قم بتسجيل موفر Azure Policy عن طريق تشغيل الأمر az provider register:

    az provider register --namespace Microsoft.PolicyInsights
    
  5. قم بتمكين تثبيت الوظيفة الإضافية عن طريق تشغيل az feature register الأمر :

    az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
    
  6. تحقق من نجاح التسجيل عن طريق الاستعلام عن جدول قائمة الميزات. استخدم الأمر az feature list لتشغيل الاستعلام. قد يستغرق تسجيل الميزة عدة دقائق للانتهاء، لذلك يجب عليك التحقق من النتيجة بشكل دوري.

    az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')].   {Name:name,State:properties.state}"
    

    إذا انتهت مهلة جلسة Cloud Shell، فإنه يمكنك تتبع عملية التسجيل عبر مدخل Microsoft Azure باستخدام جزء معاينة الإلحاق.

  7. شغل الأمر az provider register لنشر التحديث بعد التأكد من أن أمر استعلام قائمة الميزات يظهر "Registered":

    az provider register -n Microsoft.ContainerService
    

تمكين نهج Azure على نظام المجموعة

  1. تشغيل الأمر az aks enable-addons لتمكين الوظيفة الإضافية azure-policyلنظام المجموعة:

    az aks enable-addons \
        --addons azure-policy \
        --name $AKS_CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP
    
  2. تحقق من تثبيت قرن azure-policy في مساحة اسم kube-system ومن تثبيت قرن برنامج حماية البوابة في مساحة اسم gatekeeper-system. للقيام بذلك، قم بتشغيل أوامر kubectl get pods التالية:

    kubectl get pods -n kube-system
    

    يجب أن يبدو المخرج مشابهاً لما يلي:

    NAME                                    READY   STATUS    RESTARTS   AGE
    azure-policy-78c8d74cd4-7fqn2           1/1     Running   0          12m
    azure-policy-webhook-545c898766-gsjrc   1/1     Running   0          12m
    ...
    
    kubectl get pods -n gatekeeper-system
    

    يجب أن يبدو المخرج مشابهاً لما يلي:

    NAME                                            READY   STATUS    RESTARTS   AGE
    gatekeeper-controller-manager-d5cd87796-5tmhq   1/1     Running   0          15m
    ...
    
  3. أخيرًا، تحقق من تثبيت أحدث وظيفة إضافية عن طريق تشغيل الأمر az aks show. يقوم هذا الأمر باسترداد معلومات التكوين الخاصة بنظام مجموعتك.

    az aks show \
     --resource-group $RESOURCE_GROUP\
     --name $AKS_CLUSTER_NAME \
     -o table --query "addonProfiles.azurepolicy"
    

    يجب أن يبدو المخرج مشابهاً لما يلي:

    {
        "config": null,
        "enabled": true,
        "identity": null
    }
    

    أنت الآن جاهز للتبديل إلى مدخل Microsoft Azure لتكوين النهج المسمى يجب ألا تتجاوز حدود موارد الذاكرة ومعالج حاويات مجموعة Kubernetes نهج الحدود المحددة.

تعيين تعريف نهج مضمن

لتكوين نهج Azure الجديد، استخدم خدمة النهج في مدخل Microsoft Azure.

  1. قم بتسجيل الدخول إلى بوابة Azure.

  2. ابحث عن خدمة «Policy» في مدخل Microsoft Azure. لتنفيذ ذلك، ابحث في شريط البحث في أعلى المدخل، عن ثم حدد Policy.

  3. حدد خدمة «Policy» من قائمة الخدمات، كما هو موضح هنا:

    Screenshot of the general Azure portal search box with a result that shows the Azure Policy service.

    تفتح لوحة معلومات «Policy» بنظرة عامة تعرض جميع النُهج المعينة، وحالة الموارد، وكيف تؤثر النُهج عليها. إذا لم تقم بتعيين أي نهج، تكون لوحة المعلومات فارغة.

  4. من جزء القائمة الأيسر، ضمن Authoring، حدد Assignments:

    Screenshot of the Policy service navigation panel that shows the location of the Assignments option.

  5. تذكر من مناقشتنا السابقة أن لديك خيارين لإنشاء مهمة نهج: أن تقوم بتعيين إما مبادرة أو نهج. من شريط القوائم العلوي، اختر Assign Policy:

    Screenshot that shows the new policy assignment option.

    يظهر جزء Assign Policy.

  6. في علامة التبويب Basics، أدخل القيم التالية لكل إعداد لإنشاء نهجك.

    الإعداد القيمة‬
    النطاق
    النطاق حدد زر القطع الناقص. يظهر جزءScope. ضمن الاشتراك، حدد الاشتراك الذي يحتوي على مجموعة الموارد الخاصة بك. بالنسبة إلى Resource Group، حدد rg-akscostsaving، ثم حدد الزر Select .
    الاستثناءات اتركه فارغًا.
    الأساسيات
    تعريف النهج حدد زر القطع الناقص. يظهر جزء Available Definitions. في مربع Searchقم بتصفية التحديد بإدخال CPU. في علامة التبويب Policy Definitions، حدد حاويات نظام مجموعة Kubernetes CPU وينبغي ألا تتجاوز حدود موارد الذاكرة الحدود المحددة، ثم حدد Add.
    اسم التعيين اقبل الافتراضي.
    ‏‏الوصف اتركه فارغًا.
    إنفاذ النُهج تأكد من تعيين هذا الاختيار إلى Enabled.
    التعيين بواسطة اقبل الافتراضي.

    فيما يلي مثال على علامة التبويب «Basics» المكتملة:

    Screenshot that shows the information captured in the Basics tab.

  7. حدد علامة التبويب «Parameters» لتحديد المعلمات الخاصة بالنهج.

  8. عيّن القيم التالية لكل خيار من خيارات المعلمات:

    الإعداد القيمة‬
    الحد الأقصى المسموح به لوحدات المعالجة المركزية تعيين القيمة إلى 200م. تطابق السياسة هذه القيمة مع كل من قيمة طلب مورد حمل العمل وقيمة حد حمل العمل المحددة في ملف بيان حمل العمل.
    الحد الأقصى المسموح به لعدد البايت في الذاكرة تعيين القيمة إلى 256م. تطابق السياسة هذه القيمة مع كل من قيمة طلب مورد حمل العمل وقيمة حد حمل العمل المحددة في ملف بيان حمل العمل.

    فيما يلي مثال على علامة التبويب Parameters:

    Screenshot that shows the information captured in the Parameters tab.

  9. حدد علامة التبويب المعالجة. في علامة التبويب هذه، ستحدد كيفية تأثير النهج الجديد على الموارد الموجودة بالفعل. بشكل افتراضي، يتحقق النهج الجديد فقط من الموارد التي تم إنشاؤها حديثا. احتفظ بالتكوين الافتراضي القياسي.

    فيما يلي مثال على علامة التبويب «Remediation» المكتملة:

    Screenshot that shows the information captured in the Remediation tab.

  10. حدد علامة التبويب مراجعة + إنشاء. راجع القيم التي اخترتها، ثم حدد إنشاء.

هام

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

اختبار طلبات الموارد

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

  1. افتح Azure Cloud Shell وتأكد من تحديد إصدار Bash من Cloud Shell.

  2. قم إنشاء ملف بيان لنشر Kubernetes باستخدام المحرر المتكامل. استدعِ لملف test-policy.yaml:

    code test-policy.yaml
    

    تلميح

    يتضمن Cloud Shell محرر ملفات متكامل. يدعم محرر Cloud Shell ميزات مثل تمييز اللغة ولوحة الأوامر ومستكشف الملفات. لإنشاء ملف بسيط وتحريره، ابدأ تشغيل المحرر من خلال تشغيل code . في محطة Cloud Shell. يؤدي هذا الإجراء إلى فتح المحرر مع تعيين دليل العمل النشط في الجهاز. لفتح ملف البيان مباشرة للتحرير السريع، قم بتشغيل code test-policy.yaml. يفتح الأمر المحرر دون مستكشف الملفات.

  3. لصق النص التالي في الملف:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 500m
            memory: 256Mi
          limits:
            cpu: 1000m
            memory: 500Mi
    
  4. اضغط على Ctrl+S لحفظ الملف، ثم اضغط على Ctrl+Q لإغلاق المحرر.

  5. شغل الأمر kubectl apply لتنفيذ التكوين ونشر التطبيق في مساحة اسم costsavings:

    kubectl apply \
    --namespace costsavings \
    -f test-policy.yaml
    

    يجب أن يشبه الإخراج ما يلي:

    Error from server (
    [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi>
    [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>)
     : error when creating "test-deploy.yml"
     : admission webhook "validation.gatekeeper.sh" denied the request: 
    [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> memory limit <500Mi> is higher than the maximum allowed of <256Mi>
    [denied by azurepolicy-container-limits-52f2942767eda208f8ac3980dc04b548c4a18a2d1f7b0fd2cd1a7c9e50a92674] container <nginx> cpu limit <1> is higher than the maximum allowed of <200m>
    

    لاحظ كيف أن خطاف الويب للدخول، validation.gatekeeper.sh، رفض طلب جدولة القرن.

  6. افتح ملف البيان وأصلح طلب المورد:

    code test-policy.yaml
    

    استبدل النص بالنص التالي:

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
      labels:
        env: test
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        resources:
          requests:
            cpu: 200m
            memory: 256Mi
          limits:
            cpu: 200m
            memory: 256Mi
    
  7. اضغط على Ctrl+S لحفظ الملف، ثم اضغط على Ctrl+Q لإغلاق المحرر.

  8. شغل الأمر kubectl apply لتنفيذ التكوين ونشر التطبيق في مساحة اسم costsavings:

    kubectl apply \
    --namespace costsavings \
    -f test-policy.yaml
    

    ستحصل على الإخراج التالي:

    pod/nginx created
    
  9. احصل على pods من pods التي تم إنشاؤها حديثا في مساحة الاسم الخاصة بك costsavings .

    kubectl get pods --namespace costsavings
    

    في غضون ثوان قليلة، تنتقل الحجيرات إلى Running الحالة.

    NAME    READY   STATUS    RESTARTS   AGE
    nginx   1/1     Running   0          50s
    
  10. اضغط على Ctrl+C للتوقف عن المشاهدة بمجرد رؤية الكبسولات قيد التشغيل.