تمرين - تكوين نهج Azure لـ Kubernetes في نظام مجموعة AKS
يساعد نهج Azure لـ Kubernetes المؤسسات على تلبية متطلبات الحوكمة والمتطلبات القانونية، وتنفيذ أفضل الممارسات، وإنشاء الاتفاقيات التنظيمية للبيئات السحابية.
تتبنى فرق التطوير في شركتك Azure Kubernetes Service (AKS) كمنصة تطوير. تدرك أن أفضل طريقة لإدارة التكاليف هي فرض قواعد العمل التي تحدد حدود موارد حمل العمل. تريد التأكد من أن المطورين لا يمكنهم نشر أحمال العمل إلا ضمن حدود معينة لتخصيص وحدة المعالجة المركزية والذاكرة. يجب أن يمنع النظام أحمال العمل التي تتجاوز تلك الحدود.
في هذا التمرين، ستقوم بتمكين نهج Azure ل AKS على نظام المجموعة الخاص بك وإضافة حاويات مجموعة Kubernetes يجب ألا تتجاوز وحدة المعالجة المركزية وحدود موارد الذاكرة نهج الحدود المحددة. بعد ذلك، ستختبر ما إذا كان النهج يرفض جدولة أحمال العمل التي تتجاوز معلمات موارد النهج.
تمكين موفري موارد ContainerService وPolicyInsights
تسجيل الدخول إلى Azure Cloud Shell باستخدام حسابك في Azure. حدد الإصدار Bash من Cloud Shell.
يتطلب Azure Policy لـ AKS أن يكون إصدار نظام المجموعة 1.14 أو أحدث. قم بتشغيل البرنامج النصي التالي للتحقق من إصدار مجموعة AKS:
az aks list
تأكد من أن إصدار نظام المجموعة الذي تم الإبلاغ عنه هو 1.14 أو أحدث.
قم بتسجيل موفر خدمة Azure Kubernetes عن طريق تشغيل الأمر
az provider register
:az provider register --namespace Microsoft.ContainerService
قم بتسجيل موفر Azure Policy عن طريق تشغيل الأمر
az provider register
:az provider register --namespace Microsoft.PolicyInsights
قم بتمكين تثبيت الوظيفة الإضافية عن طريق تشغيل
az feature register
الأمر :az feature register --namespace Microsoft.ContainerService --name AKS-AzurePolicyAutoApprove
تحقق من نجاح التسجيل عن طريق الاستعلام عن جدول قائمة الميزات. استخدم الأمر
az feature list
لتشغيل الاستعلام. قد يستغرق تسجيل الميزة عدة دقائق للانتهاء، لذلك يجب عليك التحقق من النتيجة بشكل دوري.az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AKS-AzurePolicyAutoApprove')]. {Name:name,State:properties.state}"
إذا انتهت مهلة جلسة Cloud Shell، فإنه يمكنك تتبع عملية التسجيل عبر مدخل Microsoft Azure باستخدام جزء معاينة الإلحاق.
شغل الأمر
az provider register
لنشر التحديث بعد التأكد من أن أمر استعلام قائمة الميزات يظهر "Registered":az provider register -n Microsoft.ContainerService
تمكين نهج Azure على نظام المجموعة
تشغيل الأمر
az aks enable-addons
لتمكين الوظيفة الإضافيةazure-policy
لنظام المجموعة:az aks enable-addons \ --addons azure-policy \ --name $AKS_CLUSTER_NAME \ --resource-group $RESOURCE_GROUP
تحقق من تثبيت قرن 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 ...
أخيرًا، تحقق من تثبيت أحدث وظيفة إضافية عن طريق تشغيل الأمر
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.
قم بتسجيل الدخول إلى بوابة Azure.
ابحث عن خدمة «Policy» في مدخل Microsoft Azure. لتنفيذ ذلك، ابحث في شريط البحث في أعلى المدخل، عن ثم حدد Policy.
حدد خدمة «Policy» من قائمة الخدمات، كما هو موضح هنا:
تفتح لوحة معلومات «Policy» بنظرة عامة تعرض جميع النُهج المعينة، وحالة الموارد، وكيف تؤثر النُهج عليها. إذا لم تقم بتعيين أي نهج، تكون لوحة المعلومات فارغة.
من جزء القائمة الأيسر، ضمن Authoring، حدد Assignments:
تذكر من مناقشتنا السابقة أن لديك خيارين لإنشاء مهمة نهج: أن تقوم بتعيين إما مبادرة أو نهج. من شريط القوائم العلوي، اختر Assign Policy:
يظهر جزء Assign Policy.
في علامة التبويب Basics، أدخل القيم التالية لكل إعداد لإنشاء نهجك.
الإعداد القيمة النطاق النطاق حدد زر القطع الناقص. يظهر جزءScope. ضمن الاشتراك، حدد الاشتراك الذي يحتوي على مجموعة الموارد الخاصة بك. بالنسبة إلى Resource Group، حدد rg-akscostsaving، ثم حدد الزر Select . الاستثناءات اتركه فارغًا. الأساسيات تعريف النهج حدد زر القطع الناقص. يظهر جزء Available Definitions. في مربع Searchقم بتصفية التحديد بإدخال CPU. في علامة التبويب Policy Definitions، حدد حاويات نظام مجموعة Kubernetes CPU وينبغي ألا تتجاوز حدود موارد الذاكرة الحدود المحددة، ثم حدد Add. اسم التعيين اقبل الافتراضي. الوصف اتركه فارغًا. إنفاذ النُهج تأكد من تعيين هذا الاختيار إلى Enabled. التعيين بواسطة اقبل الافتراضي. فيما يلي مثال على علامة التبويب «Basics» المكتملة:
حدد علامة التبويب «Parameters» لتحديد المعلمات الخاصة بالنهج.
عيّن القيم التالية لكل خيار من خيارات المعلمات:
الإعداد القيمة الحد الأقصى المسموح به لوحدات المعالجة المركزية تعيين القيمة إلى 200م. تطابق السياسة هذه القيمة مع كل من قيمة طلب مورد حمل العمل وقيمة حد حمل العمل المحددة في ملف بيان حمل العمل. الحد الأقصى المسموح به لعدد البايت في الذاكرة تعيين القيمة إلى 256م. تطابق السياسة هذه القيمة مع كل من قيمة طلب مورد حمل العمل وقيمة حد حمل العمل المحددة في ملف بيان حمل العمل. فيما يلي مثال على علامة التبويب Parameters:
حدد علامة التبويب المعالجة. في علامة التبويب هذه، ستحدد كيفية تأثير النهج الجديد على الموارد الموجودة بالفعل. بشكل افتراضي، يتحقق النهج الجديد فقط من الموارد التي تم إنشاؤها حديثا. احتفظ بالتكوين الافتراضي القياسي.
فيما يلي مثال على علامة التبويب «Remediation» المكتملة:
حدد علامة التبويب مراجعة + إنشاء. راجع القيم التي اخترتها، ثم حدد إنشاء.
هام
إذا كنت تستخدم مجموعة AKS موجودة، فقد يستغرق تعيين النهج حوالي 15 دقيقة لتطبيقه.
اختبار طلبات الموارد
الخطوة الأخيرة هي اختبار النهج الجديد. نشر حمل عمل الاختبار الخاص بك مع طلبات الموارد والحدود التي تنتهك النهج الجديد. إذا سارت الأمور بشكل صحيح، يقوم الخادم بإرجاع خطأ يفيد بأنه تم رفضه بواسطة النهج.
افتح Azure Cloud Shell وتأكد من تحديد إصدار Bash من Cloud Shell.
قم إنشاء ملف بيان لنشر Kubernetes باستخدام المحرر المتكامل. استدعِ لملف
test-policy.yaml
:code test-policy.yaml
تلميح
يتضمن Cloud Shell محرر ملفات متكامل. يدعم محرر Cloud Shell ميزات مثل تمييز اللغة ولوحة الأوامر ومستكشف الملفات. لإنشاء ملف بسيط وتحريره، ابدأ تشغيل المحرر من خلال تشغيل
code .
في محطة Cloud Shell. يؤدي هذا الإجراء إلى فتح المحرر مع تعيين دليل العمل النشط في الجهاز. لفتح ملف البيان مباشرة للتحرير السريع، قم بتشغيل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: 500m memory: 256Mi limits: cpu: 1000m memory: 500Mi
اضغط على Ctrl+S لحفظ الملف، ثم اضغط على Ctrl+Q لإغلاق المحرر.
شغل الأمر
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
، رفض طلب جدولة القرن.افتح ملف البيان وأصلح طلب المورد:
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
اضغط على Ctrl+S لحفظ الملف، ثم اضغط على Ctrl+Q لإغلاق المحرر.
شغل الأمر
kubectl apply
لتنفيذ التكوين ونشر التطبيق في مساحة اسمcostsavings
:kubectl apply \ --namespace costsavings \ -f test-policy.yaml
ستحصل على الإخراج التالي:
pod/nginx created
احصل على pods من pods التي تم إنشاؤها حديثا في مساحة الاسم الخاصة بك
costsavings
.kubectl get pods --namespace costsavings
في غضون ثوان قليلة، تنتقل الحجيرات إلى
Running
الحالة.NAME READY STATUS RESTARTS AGE nginx 1/1 Running 0 50s
اضغط على Ctrl+C للتوقف عن المشاهدة بمجرد رؤية الكبسولات قيد التشغيل.