إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
خدمة Azure Kubernetes (AKS) هي خدمة Kubernetes مُدارة تتيح لك نشر المجموعات وإدارتها بسرعة. ستتعلم في هذا التشغيل السريع كيفية:
- نشر مجموعة AKS مع الإعدادات الافتراضية باستخدام Azure CLI.
- نشر تطبيق متعدد الحاويات مع مجموعة من الخدمات المصغرة وواجهات الويب الأمامية التي تحاكي سيناريو البيع بالتجزئة.
Note
تتضمن هذه المقالة خطوات لنشر عنقود لأغراض التقييم فقط. قبل نشر نظام مجموعة جاهز للإنتاج، نوصيك بالتعرف على البنية المرجعية الأساسية الخاصة بنا للنظر في كيفية توافقها مع متطلبات عملك.
إذا كنت تريد فقط نشر عنقود خدمة Azure Kubernetes، اختر Deploy to Azure لفتح متصفحك في بوابة Azure واختر تشغيل جميع الخطوات.
قبل البدء
يضمن هذا التشغيل السريع الفهم الأساسي لمفاهيم Kubernetes. لمزيد من المعلومات، راجع مفاهيم Kubernetes الأساسية الخاصة بخدمة Azure Kubernetes Service (AKS).
- إذا لم يكن لديك حساب Azure، فأنشئ حساباً مجانياً قبل أن تبدأ.
استخدم بيئة Bash في Azure Cloud Shell. لمزيد من المعلومات، راجع بدء استخدام Azure Cloud Shell.
إذا كنت تفضل تشغيل أوامر مرجع CLI محلياً قم بتثبيت CLI Azure. إذا كنت تعمل على نظام تشغيل Windows أو macOS، ففكر في تشغيل Azure CLI في حاوية Docker. لمزيد من المعلومات، راجع كيفية تشغيل Azure CLI في حاوية Docker.
إذا كنت تستخدم تثبيت محلي، يُرجى تسجيل الدخول إلى Azure CLI مستخدمًا أمر az login. لإنهاء عملية المصادقة، اتبع الخطوات المعروضة في جهازك. للحصول على خيارات تسجيل الدخول الأخرى، راجع المصادقة على Azure باستخدام Azure CLI.
عندما يُطلب منك، قم بتثبيت ملحق Azure CLI عند الاستخدام لأول مرة. لمزيد من المعلومات حول الملحقات، راجع استخدام الملحقات وإدارتها باستخدام Azure CLI.
يُرجى تشغيل إصدار az للوصول إلى الإصدار والمكتبات التابعة التي تم تثبيتها. للتحديث لآخر إصدار، يُرجى تشغيل تحديث az.
- تأكد من أن الهوية التي تستخدمها لإنشاء نظام المجموعة الخاص بك لديها الحد الأدنى المناسب من الأذونات. لمزيد من المعلومات حول الوصول والهوية ل AKS، راجع خيارات الوصول والهوية لخدمة Azure Kubernetes (AKS).
- إذا كان لديك العديد من اشتراكات Azure، فحدد معرف الاشتراك المناسب الذي يجب فوترة الموارد فيه باستخدام الأمر az account set . لمزيد من المعلومات، راجع كيفية إدارة اشتراكات Azure - Azure CLI.
- اعتمادا على اشتراك Azure الخاص بك، قد تحتاج إلى طلب زيادة حصة vCPU. لمزيد من المعلومات، راجع زيادة الحصص النسبية لوحدة المعالجة المركزية الظاهرية من عائلة الجهاز الظاهري.
تسجيل موفري الموارد
قد تحتاج إلى تسجيل موفري الموارد في اشتراك Azure الخاص بك. على سبيل المثال ، Microsoft.ContainerService مطلوب.
قم بتشغيل الأمر التالي للتحقق من حالة التسجيل.
az provider show --namespace Microsoft.ContainerService --query registrationState
إذا لزم الأمر، قم بتسجيل موفر الموارد.
az provider register --namespace Microsoft.ContainerService
تعريف متغيرات البيئة
حدد متغيرات البيئة التالية للاستخدام خلال هذا التشغيل السريع.
export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM")
export RESOURCE_GROUP="myAKSResourceGroup$RANDOM_STRING"
export CLUSTER_NAME="myAKSCluster$RANDOM_STRING"
export USER_NP='userpool1'
export LOCATION="westus"
يخزن المتغير RANDOM_STRING سلسلة عشوائية مكونة من 10 أرقام. يتم ربط RANDOM_STRING قيم المتغيرين RESOURCE_GROUP مع CLUSTER_NAME القيمة لإنشاء أسماء فريدة. يخزن هذا USER_NP الاسم لمجموعة عقد وضع المستخدم.
LOCATION المتغير له قيمة westus2. يمكنك استخدام هذه القيم المتغيرة أو إنشاء قيمك الخاص. استخدم echo الأمر لعرض قيم متغيرة مثل echo $RANDOM_STRING.
إنشاء مجموعة موارد
مجموعة موارد Azure هي مجموعة منطقية يمكن من خلالها نشر وإدارة موارد Azure. عند إنشاء مجموعة موارد، تتم مطالبتك بتحديد موقع. هذا الموقع هو موقع تخزين بيانات تعريف مجموعة الموارد الخاصة بك ومكان تشغيل مواردك في Azure إذا لم تحدد منطقة أخرى أثناء إنشاء الموارد.
أنشئ مجموعة موارد مستخدماً الأمر az group create.
az group create --name $RESOURCE_GROUP --location $LOCATION
تبدو النتيجة مثل المثال التالي.
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup<randomStringValue>",
"location": "westus",
"managedBy": null,
"name": "myAKSResourceGroup<randomStringValue>",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
إنشاء نظام مجموعة AKS
أنشئ نظام مجموعة AKS باستخدام الأمر az aks create. ينشئ المثال التالي مجموعة مع عقدة واحدة ويمكن هوية مدارة معينة من قبل النظام.
az aks create \
--resource-group $RESOURCE_GROUP \
--name $CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys
عند إنشاء مجموعة جديدة، تقوم AKS تلقائيا بإنشاء مجموعة موارد ثانية لتخزين موارد AKS. لمزيد من المعلومات، يمكنك الاطلاع على إجابة سؤال لماذا يتم إنشاء مجموعتي موارد باستخدام AKS؟
يحدد العنقود في هذا المثال عدد عقد واحدة لتوفير الوقت والموارد. في بيئة الإنتاج، التوصية هي عدد العقد بثلاث أو أكثر. الافتراضي az aks create يصبح ثلاث عقد إذا لم تحدد عدد العقد.
إضافة مجموعة عقد وضع المستخدم
يجب أن تعمل التطبيقات على مجموعات عقد وضع المستخدم بدلا من تجمع عقد وضع النظام الافتراضي. توفر مجموعات عقد المستخدمين عزلا ومرونة أفضل لأعباء عمل التطبيقات. أضف مجموعة عقد مستخدمين إلى مجموعتك باستخدام أمر az aks nodepool add .
az aks nodepool add \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--name $USER_NP \
--node-count 1 \
--mode User
مثل العنقود، حددنا عقدة واحدة، لكن الافتراضي هو ثلاث عقد إذا لم تحدد عدد العقد.
بعد إنشاء تجمع عقد المستخدمين، يمكنك التحقق من أن مجموعتك تحتوي على تجمع عقد نظام ومجموعة عقد مستخدمين باستخدام أمر az aks nodepool list .
az aks nodepool list \
--resource-group $RESOURCE_GROUP \
--cluster-name $CLUSTER_NAME \
--query "[].{Count:count, Mode:mode, NodePool:name, ResourceGroup:resourceGroup}"
[
{
"Count": 1,
"Mode": "System",
"NodePool": "nodepool1",
"ResourceGroup": "myAKSResourceGroup1234554321"
},
{
"Count": 1,
"Mode": "User",
"NodePool": "userpool1",
"ResourceGroup": "myAKSResourceGroup1234554321"
}
]
الاتصال بنظام المجموعة
لإدارة نظام مجموعة Kubernetes، استخدم سطر أوامر العميلkubectl.
kubectl سيكون مثبتاً بالفعل في حال كنت تستخدم Azure Cloud Shell. للتثبيت kubectl محليا، استخدم الأمر az aks install-cli .
قم بتكوين
kubectlللاتصال بكتلة Kubernetes مستخدماً الأمر az aks get-credentials. هذا الأمر يقوم بتحميل بيانات الاعتماد وضبط Kubernetes CLI لاستخدامها.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAMEتحقق من الاتصال بنظام مجموعتك مستخدماً أمرkubectl get. يعمل هذا الأمر على استرجاع قائمة نظام المجموعة العنقودية.
kubectl get nodesNAME STATUS ROLES AGE VERSION aks-nodepool1-123456789-vmss000000 Ready <none> 15m v1.34.4 aks-userpool1-123456789-vmss000000 Ready <none> 5m36s v1.34.4هناك عقدتان،
nodepool1وهي مجموعة عقد النظام التي تم إنشاؤها مع العنقود وهيuserpool1مجموعة عقد المستخدم المضافة إلى العنقود.
قم بنشر التطبيق
لنشر التطبيق، يمكنك استخدام ملف بيان لإنشاء كافة الكائنات المطلوبة لتشغيل تطبيق AKS Store. يحدد ملف بيانات Kubernetesالحالة المطلوبة لنظام المجموعة، مثل صور الحاوية المراد تشغيلها. يتضمن البيان عمليات نشر وخدمات Kubernetes التالية:
- واجهة المتجر: تطبيق ويب للعملاء لعرض المنتجات وتقديم الطلبات.
- خدمة المنتج: يعرض معلومات المنتج.
- خدمة الطلب: يضع الطلبات.
-
RabbitMQقائمة انتظار الرسائل لقائمة انتظار الطلبات.:
Note
لا نوصي بتشغيل حاويات ذات حالة، مثل RabbitMQ، بدون تخزين مستمر للإنتاج. نستخدمه هنا من أجل البساطة، ولكننا نوصي باستخدام الخدمات المدارة، مثل Azure Cosmos DB أو Azure Service Bus.
قم بإنشاء ملف باسم aks-store-quickstart.yaml وانسخه في البيان التالي. استبدل البدلتين المؤقتتين بكلمة
<defaultPassword>مرورك الخاصة. تستخدم هذه كلمة المرور للمستخدم الافتراضي للمثيرةRabbitMQ.apiVersion: apps/v1 kind: StatefulSet metadata: name: rabbitmq spec: serviceName: rabbitmq replicas: 1 selector: matchLabels: app: rabbitmq template: metadata: labels: app: rabbitmq spec: nodeSelector: kubernetes.io/os: linux kubernetes.azure.com/mode: user containers: - name: rabbitmq image: mcr.microsoft.com/mirror/docker/library/rabbitmq:3.10-management-alpine ports: - containerPort: 5672 name: rabbitmq-amqp - containerPort: 15672 name: rabbitmq-http env: - name: RABBITMQ_DEFAULT_USER value: "username" - name: RABBITMQ_DEFAULT_PASS value: "<defaultPassword>" resources: requests: cpu: 10m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: rabbitmq-enabled-plugins mountPath: /etc/rabbitmq/enabled_plugins subPath: enabled_plugins volumes: - name: rabbitmq-enabled-plugins configMap: name: rabbitmq-enabled-plugins items: - key: rabbitmq_enabled_plugins path: enabled_plugins --- apiVersion: v1 data: rabbitmq_enabled_plugins: | [rabbitmq_management,rabbitmq_prometheus,rabbitmq_amqp1_0]. kind: ConfigMap metadata: name: rabbitmq-enabled-plugins --- apiVersion: v1 kind: Service metadata: name: rabbitmq spec: selector: app: rabbitmq ports: - name: rabbitmq-amqp port: 5672 targetPort: 5672 - name: rabbitmq-http port: 15672 targetPort: 15672 type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: kubernetes.io/os: linux kubernetes.azure.com/mode: user containers: - name: order-service image: ghcr.io/azure-samples/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "rabbitmq" - name: ORDER_QUEUE_PORT value: "5672" - name: ORDER_QUEUE_USERNAME value: "username" - name: ORDER_QUEUE_PASSWORD value: "<defaultPassword>" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi startupProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 20 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 3000 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 initContainers: - name: wait-for-rabbitmq image: busybox command: ['sh', '-c', 'until nc -zv rabbitmq 5672; do echo waiting for rabbitmq; sleep 2; done;'] resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi --- apiVersion: v1 kind: Service metadata: name: order-service spec: type: ClusterIP ports: - name: http port: 3000 targetPort: 3000 selector: app: order-service --- apiVersion: apps/v1 kind: Deployment metadata: name: product-service spec: replicas: 1 selector: matchLabels: app: product-service template: metadata: labels: app: product-service spec: nodeSelector: kubernetes.io/os: linux kubernetes.azure.com/mode: user containers: - name: product-service image: ghcr.io/azure-samples/aks-store-demo/product-service:latest ports: - containerPort: 3002 env: - name: AI_SERVICE_URL value: "http://ai-service:5001/" resources: requests: cpu: 1m memory: 1Mi limits: cpu: 2m memory: 20Mi readinessProbe: httpGet: path: /health port: 3002 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3002 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: product-service spec: type: ClusterIP ports: - name: http port: 3002 targetPort: 3002 selector: app: product-service --- apiVersion: apps/v1 kind: Deployment metadata: name: store-front spec: replicas: 1 selector: matchLabels: app: store-front template: metadata: labels: app: store-front spec: nodeSelector: kubernetes.io/os: linux kubernetes.azure.com/mode: user containers: - name: store-front image: ghcr.io/azure-samples/aks-store-demo/store-front:latest ports: - containerPort: 8080 name: store-front env: - name: VUE_APP_ORDER_SERVICE_URL value: "http://order-service:3000/" - name: VUE_APP_PRODUCT_SERVICE_URL value: "http://product-service:3002/" resources: requests: cpu: 1m memory: 200Mi limits: cpu: 1000m memory: 512Mi startupProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 5 periodSeconds: 5 readinessProbe: httpGet: path: /health port: 8080 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 3 livenessProbe: httpGet: path: /health port: 8080 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3 --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerللحصول على تصنيف تفصيلي لملفات بيان YAML، راجع عمليات التوزيع وبيانات YAML.
إذا قمت بإنشاء ملف YAML وحفظه محليا، فيمكنك تحميل ملف البيان إلى الدليل الافتراضي في Cloud Shell عن طريق تحديد الزر تحميل/تنزيل الملفات وتحديد الملف من نظام الملفات المحلي.
انشر التطبيق باستخدام الأمر kubectl apply وحدد اسم بيان YAML الخاص بك.
kubectl apply -f aks-store-quickstart.yamlشغل الأمر التالي للتحقق من نشر التطبيق على مجموعة عقد المستخدمين.
kubectl get pods -o wideسيظهر الناتج أن وحدات rabbitmq، وorder-service، وproduct-service، وstore-front تعمل على عقدة في مجموعة عقد المستخدم.
اختبر التطبيق
يمكنك التحقق من أن التطبيق قيد التشغيل عن طريق زيارة عنوان IP العام أو عنوان URL للتطبيق.
شغل الأوامر التالية لعرض عنوان URL التطبيق:
runtime="5 minutes"
endtime=$(date -ud "$runtime" +%s)
while [[ $(date -u +%s) -le $endtime ]]
do
STATUS=$(kubectl get pods -l app=store-front -o 'jsonpath={..status.conditions[?(@.type=="Ready")].status}')
echo $STATUS
if [ "$STATUS" == 'True' ]
then
export IP_ADDRESS=$(kubectl get service store-front --output 'jsonpath={..status.loadBalancer.ingress[0].ip}')
echo "service IP address: $IP_ADDRESS"
break
else
sleep 10
fi
done
يظهر الناتج عنوان IP العام للتطبيق في العنوان <applicationIPAddress> المؤقت. تستخدم عنوان IP هذا لعرض التطبيق في الخطوات التالية.
service IP Address: <applicationIPAddress>
شغل الأمر التالي لإرسال طلب إلى عنوان URL التطبيق. استبدلها <applicationIPAddress> بعنوان IP الخاص بالخدمة.
curl <applicationIPAddress>
يعيد الأمر مخرجات HTML تظهر أن التطبيق يستجيب للطلب.
<!doctype html>
<html lang="">
<head>
<meta charset="UTF-8" />
<link rel="icon" href="/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Contoso Pet Store</title>
<script type="module" crossorigin src="/assets/index-CLiaTzSi.js"></script>
<link rel="stylesheet" crossorigin href="/assets/index-Cv6jORyk.css">
</head>
<body>
<div id="app"></div>
</body>
</html>
لعرض موقع التطبيق، افتح متصفح وأدخل عنوان IP للخدمة. تبدو الصفحة مثل المثال التالي.
قم بحذف نظام المجموعة
إذا لم تكن تخطط لعمل درس AKS، قم بتنظيف الموارد غير الضرورية لتجنب رسوم الفوترة على Azure. يمكنك إزالة مجموعة الموارد وخدمة الحاوية وجميع الموارد ذات الصلة باستخدام الأمر az group delete .
az group delete --name $RESOURCE_GROUP --no-wait --yes
تم إنشاء نظام مجموعة AKS بهوية مدارة معينة من قبل النظام، وهو خيار الهوية الافتراضي المستخدم في هذا التشغيل السريع. يدير النظام الأساسي هذه الهوية بحيث لا تحتاج إلى إزالتها يدويا.
الخطوات التَالية
في هذا البدء السريع، قمت بنشر عنقود Kubernetes ثم نشر تطبيق بسيط متعدد الحاويات. هذا التطبيق النموذجي هو لأغراض العرض التوضيحي فقط ولا يمثل جميع أفضل الممارسات لتطبيقات Kubernetes. للحصول على إرشادات حول كيفية إنشاء حلول كاملة باستخدام AKS للإنتاج، راجع إرشادات حل AKS.
لمعرفة المزيد حول AKS والقيام بمثال كامل من التعليمات البرمجية إلى النشر، تابع إلى البرنامج التعليمي لنظام مجموعة Kubernetes.