إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ابدأ ب Azure Container Linux (ACL) ل AKS عن طريق نشر عنقود AKS باستخدام قالب Azure Resource Manager (ARM).
في هذا البداية السريعة، تتعلم كيف:
- أنشئ عنقود AKS باستخدام ACL ل AKS.
- قم بنشر العنقود باستخدام قالب ARM.
- قم بتشغيل نموذج تطبيق متعدد الحاويات مع مجموعة من الخدمات المصغرة والواجهات الأمامية على الويب التي تحاكي سيناريو البيع بالتجزئة.
ملاحظة
للبدء في توفير نظام مجموعة AKS بسرعة، تتضمن هذه المقالة خطوات لنشر نظام مجموعة بإعدادات افتراضية لأغراض التقييم فقط. قبل نشر نظام مجموعة جاهز للإنتاج، نوصيك بالتعرف على البنية المرجعية الأساسية لدينا للنظر في كيفية توافقها مع متطلبات عملك.
مهم
إذا كنت تستخدم Azure Container Linux (ACL) على AKS، تأكد من مراجعة الاعتبارات والقيود التالية:
- يتوفر ACL بشكل عام بدءا من AKS v1.34.
- يتطلب ACL التشغيل الموثوق مع Secure Boot وvTPM. نسخ الإطلاق غير الموثوقة غير متوفرة.
- يتطلب ACL على Arm64 وحدات SKU مبنية على كوبالت (v6) لتمكين التوافق مع Trusted Launch.
-
NodeImageوهيNoneقنوات ترقية نظام التشغيل (OS) المدعومة الوحيدة.UnmanagedوغيرSecurityPatchمتوافقة مع ACL بسبب المجلد غير القابل/usrللتغيير. - دفق القطع الأثرية غير مدعوم.
- Pod Sandboxing غير مدعوم.
- الأجهزة الظاهرية السرية (CVMs) غير مدعومة.
- الجيل الأول من الأجهزة الافتراضية غير مدعومة.
- العقد التي تدعم FIPS غير مدعومة.
المتطلبات المسبقه
- تفترض هذه المقالة مفاهيم أساسية من مفاهيم Kubernetes. لمزيد من المعلومات، راجع مفاهيم Kubernetes الأساسية الخاصة بخدمة خدمة Azure Kubernetes (AKS).
- إذا لم يكن لديك حساب Azure، فأنشئ حساباً مجانياً قبل أن تبدأ.
- تأكد من أن الهوية التي تستخدمها لإنشاء نظام المجموعة الخاص بك لديها الحد الأدنى المناسب من الأذونات. لمزيد من التفاصيل حول الهوية وطريقة الوصول إلى AKS، راجع خيارات الوصول والهوية الخاصة بخدمة Azure Kubernetes (AKS).
- لنشر قالب ARM، تحتاج إلى صلاحية كتابة على الموارد التي تقوم بنشرها والوصول إلى جميع العمليات على نوع المورد
Microsoft.Resources/deployments. على سبيل المثال، لنشر آلة افتراضية، تحتاج إلى صلاحياتMicrosoft.Compute/virtualMachines/writeوMicrosoft.Resources/deployments/*. للحصول على قائمة الأدوار والأصوات، راجع Azure الأدوار المدمجة.
بعد نشر نظام المجموعة من القالب، يمكنك استخدام إما Azure CLI أو Azure PowerShell للاتصال بالمجموعة ونشر نموذج التطبيق.
تسجيل مزودي الموارد المطلوبة
قد تحتاج إلى تسجيل مزودي الموارد المطلوبة، مثل Microsoft.ContainerService في اشتراك Azure الخاص بك.
التحقق من حالة التسجيل
تحقق من حالة التسجيل باستخدام الأمر az provider show .
az provider show --namespace Microsoft.ContainerService --query registrationState
تسجيل موفر الموارد
إذا لزم الأمر، قم بتسجيل مزود الموارد Microsoft.ContainerService باستخدام أمر az provider register.
az provider register --namespace Microsoft.ContainerService
أنشئ مفتاح مزدوج SSH
لإنشاء نظام مجموعة AKS باستخدام قالب ARM، يمكنك توفير مفتاح عام SSH. إذا كنت بحاجة إلى هذا المورد، فاتبع الخطوات الواردة في هذا القسم. وإلا، فانتقل إلى قسم مراجعة القالب .
للدخول إلى عقد AKS، اتصل مستخدماً مفتاح إقران SSH (عام وخاص) الذي أنشأته مستخدماً ssh-keygenالأمر. سيتم إنشاء هذه الملفات افتراضياً في ~/.ssh directory. يؤدي تشغيل الأمر إلى ssh-keygen الكتابة فوق أي زوج مفاتيح SSH بنفس الاسم الموجود بالفعل في الموقع المحدد. للاطلاع على معلومات أكثر حول إنشاء مفتاح SSH، راجع إنشاء وإدارة مفاتيح SSH للمصادقة في Azure.
انتقل إلى https://shell.azure.com لفتح Cloud Shell في متصفحك.
إنشاء مجموعة موارد باستخدام
az group createالأمر . المثال التالي ينشئ مجموعة موارد باسم myResourceGroup في منطقة شرق الولايات المتحدة :az group create \ --name myResourceGroup \ --location eastusأنشئ زوج مفاتيح SSH باستخدام
az sshkey createالأمر أو الأمرssh-keygen.az sshkey create --name mySSHKey --resource-group myResourceGroupأو إنشاء زوج مفاتيح SSH باستخدام
ssh-keygen:ssh-keygen -t rsa -b 4096لنشر القالب، يجب توفير المفتاح العام من زوج SSH. استرجع المفتاح العام باستخدام الأمر
az sshkey show.az sshkey show --name mySSHKey --resource-group myResourceGroup --query publicKey
مراجعة القالب
يستخدم النشر التالي قالب ARM من Azure قوالب البدء السريع:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.26.170.59819",
"templateHash": "14823542069333410776"
}
},
"parameters": {
"clusterName": {
"type": "string",
"defaultValue": "aks101cluster",
"metadata": {
"description": "The name of the Managed Cluster resource."
}
},
"location": {
"type": "string",
"defaultValue": "[resourceGroup().location]",
"metadata": {
"description": "The location of the Managed Cluster resource."
}
},
"dnsPrefix": {
"type": "string",
"metadata": {
"description": "Optional DNS prefix to use with hosted Kubernetes API server FQDN."
}
},
"osDiskSizeGB": {
"type": "int",
"defaultValue": 0,
"minValue": 0,
"maxValue": 1023,
"metadata": {
"description": "Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize."
}
},
"agentCount": {
"type": "int",
"defaultValue": 3,
"minValue": 1,
"maxValue": 50,
"metadata": {
"description": "The number of nodes for the cluster."
}
},
"agentVMSize": {
"type": "string",
"defaultValue": "standard_d2s_v3",
"metadata": {
"description": "The size of the Virtual Machine."
}
},
"linuxAdminUsername": {
"type": "string",
"metadata": {
"description": "User name for the Linux Virtual Machines."
}
},
"sshRSAPublicKey": {
"type": "string",
"metadata": {
"description": "Configure all linux machines with the SSH RSA public key string. Your key should include three parts, for example 'ssh-rsa AAAAB...snip...UcyupgH azureuser@linuxvm'"
}
}
},
"resources": [
{
"type": "Microsoft.ContainerService/managedClusters",
"apiVersion": "2026-03-01",
"name": "[parameters('clusterName')]",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"properties": {
"dnsPrefix": "[parameters('dnsPrefix')]",
"agentPoolProfiles": [
{
"name": "agentpool",
"osDiskSizeGB": "[parameters('osDiskSizeGB')]",
"count": "[parameters('agentCount')]",
"vmSize": "[parameters('agentVMSize')]",
"osType": "Linux",
"osSKU": "AzureContainerLinux",
"mode": "System"
}
],
"linuxProfile": {
"adminUsername": "[parameters('linuxAdminUsername')]",
"ssh": {
"publicKeys": [
{
"keyData": "[parameters('sshRSAPublicKey')]"
}
]
}
}
}
}
],
"outputs": {
"controlPlaneFQDN": {
"type": "string",
"value": "[reference(resourceId('Microsoft.ContainerService/managedClusters', parameters('clusterName')), '2026-03-01').fqdn]"
}
}
}
نوع المورد المحدد في قالب ARM هو Microsoft.ContainerService/managedClusters.
للاطلاع على نماذج AKS أكثر، راجع موقع قوالب التشغيل السريع لAKS.
نشر القالب
حدد Deploy to Azure لتسجيل الدخول وفتح قالب.
قم بتكوين معلمات القالب في صفحة النشر المخصص . لهذه البداية السريعة، اترك القيم الافتراضية لحجم قرص نظام التشغيل GB، وعدد الوكيل، وحجم جهاز الوكيل، ونوع نظام التشغيل. قدم قيمك الخاص للمعايير التالية:
- Subscription: اختر اشتراكا Azure.
- مجموعة الموارد: حدد Create new. أدخل اسما فريدا لمجموعة الموارد، مثل myResourceGroup، ثم حدد موافق.
-
OS SKU: Specify AzureContainerLinux. إذا لم تحدث ملف SKU الخاص بالنظام، فالوضع الافتراضي هو
Ubuntu. - الموقع: حدد موقعاً مثل شرق الولايات المتحدة.
- اسم نظام المجموعة: أدخل اسماً فريداً لنظام مجموعة AKS مثل mysfcluster.
- بادئة DNS: أدخل بادئة DNS مميزة لنظام مجموعتك مثل myakscluster.
- اسم مستخدم Linux Admin : أدخل اسم مستخدم ليتم الاتصال مستخدماً SSH، مثل azureuser.
- مصدر المفتاح العام SSH: حدد استخدام المفتاح العام الموجود.
- اسم زوج المفاتيح: انسخ والصق الجزء العام من زوج مفاتيح SSH (بشكل افتراضي، محتويات ~/.ssh/id_rsa.pub).
حدد Review + Create>Create.
يستغرق إنشاء نظام مجموعة AKS بضع دقائق. انتظر حتى نجاح نشر نظام المجموعة قبل انتقالك إلى الخطوة التالية.
الاتصال بنظام المجموعة
لإدارة نظام مجموعة Kubernetes، استخدم سطر أوامر العميلkubectl. إذا كنت تستخدم Azure Cloud Shell، فkubectl مثبت بالفعل.
للتثبيت والتشغيل kubectl محليا، استخدم الأمر az aks install-cli .
قم بتكوين
kubectlللاتصال بنظام مجموعة Kubernetes باستخدام أمرaz aks get-credentials. هذا الأمر يقوم بتحميل بيانات الاعتماد وضبط Kubernetes CLI لاستخدامها.az aks get-credentials \ --resource-group myResourceGroup \ --name myAKSClusterتحقق من الاتصال بالمجموعة باستخدام
kubectl getالأمر . يعمل هذا الأمر على استرجاع قائمة نظام المجموعة العنقودية.kubectl get nodesيظهر إخراج المثال التالي العقد الثلاث التي تم إنشاؤها في الخطوات السابقة. تأكد من أن حالة العقدة Ready:
NAME STATUS ROLES AGE VERSION aks-agentpool-12345678-vmss000000 Ready <none> 5m53s v1.32.7 aks-agentpool-12345678-vmss000001 Ready <none> 6m31s v1.32.7 aks-agentpool-12345678-vmss000002 Ready <none> 6m35s v1.32.7
نشر التطبيق
لنشر التطبيق، يمكنك استخدام ملف بيان لإنشاء كافة الكائنات المطلوبة لتشغيل تطبيق AKS Store. يحدد ملف بيانات Kubernetesالحالة المطلوبة لنظام المجموعة، مثل صور الحاوية المراد تشغيلها. يتضمن البيان عمليات نشر وخدمات Kubernetes التالية:
- واجهة المتجر: تطبيق ويب للعملاء لعرض المنتجات وتقديم الطلبات.
- خدمة المنتج: تعرض معلومات المنتج.
- خدمة الطلب: يضع الطلبات.
- Rabbit MQ: قائمة انتظار الرسائل لقائمة انتظار الطلبات.
ملاحظة
لا نوصي بتشغيل حاويات ذات حالة، مثل Rabbit MQ، دون تخزين مستمر للإنتاج. تستخدم هذه الخدمات هنا للبساطة، لكننا نوصي باستخدام الخدمات المدارة، مثل Azure Cosmos DB أو ناقل خدمة Azure.
أنشئ ملفا باسم
aks-store-quickstart.yamlوانسخه في البيان التالي:apiVersion: apps/v1 kind: Deployment metadata: name: rabbitmq spec: 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 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 resources: requests: cpu: 1m memory: 1Mi limits: cpu: 1m memory: 7Mi --- 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 --- apiVersion: v1 kind: Service metadata: name: store-front spec: ports: - port: 80 targetPort: 8080 selector: app: store-front type: LoadBalancerللحصول على تصنيف تفصيلي لملفات بيان YAML، راجع عمليات التوزيع وبيانات YAML.
إذا قمت بإنشاء ملف YAML وحفظه محليا، فيمكنك تحميل ملف البيان إلى الدليل الافتراضي في CloudShell عن طريق تحديد الزر تحميل/تنزيل الملفات وتحديد الملف من نظام الملفات المحلي.
انشر التطبيق باستخدام
kubectl applyالأمر وحدد اسم بيان YAML.kubectl apply -f aks-store-quickstart.yamlيوضح إخراج المثال التالي عمليات التوزيع والخدمات:
deployment.apps/rabbitmq created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created
اختبر التطبيق
تحقق من حالة pods المنشورة
kubectl get podsباستخدام الأمر . جعل جميع الحجيرات قبلRunningالمتابعة.kubectl get podsتحقق من وجود عنوان IP عام لتطبيق المتجر الأمامي. راقب التقدم باستخدام الأمر
kubectl get service مع الوسيطة--watch.kubectl get service store-front --watchيظهر إخراج EXTERNAL-IP للخدمة
store-frontفي البداية على أنه معلق:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 <pending> 80:30025/TCP 4h4mبمجرد تغيير عنوان EXTERNAL-IP من معلق إلى عنوان IP عام فعلي، استخدم
CTRL-Cلتعطيل عمليةkubectlالمراقبة.يوضح المثال التالي إخراج لعنوان IP عام صالحاً تم تعيينه للخدمة:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE store-front LoadBalancer 10.0.100.10 20.62.159.19 80:30025/TCP 4h5mافتح مستعرض ويب إلى عنوان IP الخارجي لخدمتك لرؤية تطبيق Azure Store أثناء العمل:
قم بحذف نظام المجموعة
إذا لم تكن تخطط لمراجعة <درس c0>AKS، قم بتنظيف الموارد غير الضرورية لتجنب Azure التهم.
قم بإزالة مجموعة الموارد وخدمة الحاوية وجميع الموارد ذات الصلة باستخدام az group delete الأمر .
az group delete --name myResourceGroup --yes --no-wait
ملاحظة
تم إنشاء نظام مجموعة AKS بهوية مدارة معينة من قبل النظام، وهو خيار الهوية الافتراضي المستخدم في هذا التشغيل السريع. يدير النظام الأساسي هذه الهوية، لذلك لا تحتاج إلى إزالتها يدويا.
المحتوى ذو الصلة
في هذا البدء السريع، قمت بنشر عنقود AKS مع ACL ل AKS باستخدام قالب ARM. لمعرفة المزيد عن ACL ل AKS، راجع Azure لينكس الحاويات (ACL) ل خدمة Azure Kubernetes (AKS).