إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
خدمة Azure Kubernetes (AKS) هي خدمة Kubernetes مُدارة تتيح لك نشر المجموعات وإدارتها بسرعة. ستتعلم في هذا التشغيل السريع كيفية:
- نشر نظام مجموعة AKS مستخدماً واجهة Azure CLI.
- قم بتشغيل نموذج تطبيق متعدد الحاويات مع مجموعة من الخدمات المصغرة والواجهات الأمامية على الويب التي تحاكي سيناريو البيع بالتجزئة.
Note
تتضمن هذه المقالة خطوات لنشر نظام مجموعة بإعدادات افتراضية لأغراض التقييم فقط. قبل نشر نظام مجموعة جاهز للإنتاج، نوصيك بالتعرف على البنية المرجعية الأساسية الخاصة بنا للنظر في كيفية توافقها مع متطلبات عملك.
قبل البدء
يضمن هذا التشغيل السريع الفهم الأساسي لمفاهيم 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_ID="$(openssl rand -hex 3)"
export MY_RESOURCE_GROUP_NAME="myAKSResourceGroup$RANDOM_ID"
export REGION="westus"
export MY_AKS_CLUSTER_NAME="myAKSCluster$RANDOM_ID"
export MY_DNS_LABEL="mydnslabel$RANDOM_ID"
RANDOM_ID قيمة المتغير هي قيمة أبجدية رقمية مكونة من ستة أحرف ملحقة بمجموعة الموارد واسم نظام المجموعة بحيث تكون الأسماء فريدة. استخدم echo الأمر لعرض قيم متغيرة مثل echo $RANDOM_ID.
إنشاء مجموعة موارد
مجموعة موارد Azure هي مجموعة منطقية يمكن من خلالها نشر وإدارة موارد Azure. عند إنشاء مجموعة موارد، تتم مطالبتك بتحديد موقع. هذا الموقع هو موقع تخزين بيانات تعريف مجموعة الموارد الخاصة بك ومكان تشغيل مواردك في Azure إذا لم تحدد منطقة أخرى أثناء إنشاء الموارد.
أنشئ مجموعة موارد مستخدماً الأمر az group create.
az group create --name $MY_RESOURCE_GROUP_NAME --location $REGION
تبدو النتيجة مثل المثال التالي.
{
"id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myAKSResourceGroup<randomIDValue>",
"location": "westus",
"managedBy": null,
"name": "myAKSResourceGroup<randomIDValue>",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null,
"type": "Microsoft.Resources/resourceGroups"
}
إنشاء نظام مجموعة AKS
أنشئ نظام مجموعة AKS باستخدام الأمر az aks create. ينشئ المثال التالي مجموعة مع عقدة واحدة ويمكن هوية مدارة معينة من قبل النظام.
az aks create \
--resource-group $MY_RESOURCE_GROUP_NAME \
--name $MY_AKS_CLUSTER_NAME \
--node-count 1 \
--generate-ssh-keys
Note
عند إنشاء مجموعة جديدة، تقوم AKS تلقائيا بإنشاء مجموعة موارد ثانية لتخزين موارد AKS. لمزيد من المعلومات، يمكنك الاطلاع على إجابة سؤال لماذا يتم إنشاء مجموعتي موارد باستخدام AKS؟
الاتصال بنظام المجموعة
لإدارة نظام مجموعة 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 $MY_RESOURCE_GROUP_NAME --name $MY_AKS_CLUSTER_NAMEتحقق من الاتصال بنظام مجموعتك مستخدماً أمرkubectl get. يعمل هذا الأمر على استرجاع قائمة نظام المجموعة العنقودية.
kubectl get nodes
قم بنشر التطبيق
لنشر التطبيق، يمكنك استخدام ملف بيان لإنشاء كافة الكائنات المطلوبة لتشغيل تطبيق AKS Store. يحدد ملف بيانات Kubernetesالحالة المطلوبة لنظام المجموعة، مثل صور الحاوية المراد تشغيلها. يتضمن البيان عمليات نشر وخدمات Kubernetes التالية:
- واجهة المتجر: تطبيق ويب للعملاء لعرض المنتجات وتقديم الطلبات.
- خدمة المنتج: يعرض معلومات المنتج.
- خدمة الطلب: يضع الطلبات.
-
RabbitMQقائمة انتظار الرسائل لقائمة انتظار الطلبات.:
Note
لا نوصي بتشغيل حاويات ذات حالة، مثل RabbitMQ، بدون تخزين مستمر للإنتاج. نستخدمه هنا من أجل البساطة، لكننا نوصي باستخدام الخدمات المدارة، مثل Azure CosmosDB أو ناقل خدمة Azure.
قم بإنشاء ملف باسم aks-store-quickstart.yaml وانسخه في البيان التالي.
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 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: "password" 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 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: "password" - 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 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 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
اختبر التطبيق
يمكنك التحقق من أن التطبيق قيد التشغيل عن طريق زيارة عنوان 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
curl $IP_ADDRESS
Results:
<!doctype html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="icon" href="/favicon.ico">
<title>store-front</title>
<script defer="defer" src="/js/chunk-vendors.df69ae47.js"></script>
<script defer="defer" src="/js/app.7e8cfbb2.js"></script>
<link href="/css/app.a5dc49f6.css" rel="stylesheet">
</head>
<body>
<div id="app"></div>
</body>
</html>
echo "You can now visit your web server at $IP_ADDRESS"
لعرض موقع التطبيق على الويب ، افتح متصفحا وأدخل عنوان IP. تبدو الصفحة مثل المثال التالي.
قم بحذف نظام المجموعة
إذا كنت لا تخطط للاطلاع على البرنامج التعليمي AKS، فقم بتنظيف الموارد غير الضرورية لتجنب رسوم فوترة Azure. يمكنك إزالة مجموعة الموارد وخدمة الحاوية وجميع الموارد ذات الصلة باستخدام الأمر az group delete .
az group delete --name $MY_RESOURCE_GROUP_NAME
تم إنشاء نظام مجموعة AKS بهوية مدارة معينة من قبل النظام، وهو خيار الهوية الافتراضي المستخدم في هذا التشغيل السريع. يدير النظام الأساسي هذه الهوية بحيث لا تحتاج إلى إزالتها يدويا.
الخطوات التَالية
في هذا التشغيل السريع، لقد قمت بتوزيع كتلة Kubernetes ثم وزعت تطبيقًا بسيطًا متعدد الحاويات عليها. هذا التطبيق النموذجي هو لأغراض العرض التوضيحي فقط ولا يمثل جميع أفضل الممارسات لتطبيقات Kubernetes. للحصول على إرشادات حول كيفية إنشاء حلول كاملة باستخدام AKS للإنتاج، راجع إرشادات حل AKS.
لمعرفة المزيد حول AKS والقيام بمثال كامل من التعليمات البرمجية إلى النشر، تابع إلى البرنامج التعليمي لنظام مجموعة Kubernetes.
Azure Kubernetes Service