التشغيل السريع: نشر نظام مجموعة Azure Kubernetes Service (AKS) باستخدام Terraform
خدمة Azure Kubernetes (AKS) هي خدمة Kubernetes مُدارة تتيح لك نشر المجموعات وإدارتها بسرعة. في هذه البداية السريعة، قمت بـ:
- نشر نظام مجموعة AKS باستخدام Terraform.
- قم بتشغيل نموذج تطبيق متعدد الحاويات مع مجموعة من الخدمات المصغرة والواجهات الأمامية على الويب التي تحاكي سيناريو البيع بالتجزئة.
إشعار
للبدء في توفير نظام مجموعة AKS بسرعة، تتضمن هذه المقالة خطوات لنشر نظام مجموعة بإعدادات افتراضية لأغراض التقييم فقط. قبل نشر نظام مجموعة جاهز للإنتاج، نوصيك بالتعرف على البنية المرجعية الأساسية لدينا للنظر في كيفية توافقها مع متطلبات عملك.
قبل البدء
- يضمن هذا التشغيل السريع الفهم الأساسي لمفاهيم Kubernetes. لمزيد من المعلومات، راجع مفاهيم Kubernetes الأساسية الخاصة بخدمة Azure Kubernetes Service (AKS).
- تحتاج إلى حساب "Azure" مع اشتراك مفعل. إذا لم يكن لديك حساب، فبادر بإنشاء حساب مجانا.
- اتبع الإرشادات استنادا إلى واجهة سطر الأوامر.
- ولمعرفة المزيد حول إنشاء نظام مجموعة عقدة خادم Windows، راجع إنشاء مجموعة AKS التي تدعم حاويات خادم Windows.
إشعار
تجمع عقدة Azure Linux الآن في الاستفادة العامة (GA). للتعرف على المزايا وخطوات النشر، راجع مقدمة إلى مضيف حاوية Azure Linux ل AKS.
- تثبيت وتكوين Terraform.
- قم بتنزيل kubectl.
- إنشاء قيمة عشوائية لاسم مجموعة موارد Azure باستخدام random_pet.
- إنشاء مجموعة موارد Azure باستخدام azurerm_resource_group.
- الوصول إلى تكوين موفر AzureRM للحصول على معرف كائن Azure باستخدام azurerm_client_config.
- إنشاء مجموعة Kubernetes باستخدام azurerm_kubernetes_cluster.
- إنشاء azapi_resource مورد AzAPI.
- إنشاء مورد AzAPI لإنشاء زوج مفاتيح SSH باستخدام azapi_resource_action.
تسجيل الدخول إلى حساب Azure الخاص بك
أولا، سجل الدخول إلى حساب Azure الخاص بك وقم بالمصادقة باستخدام إحدى الطرق الموضحة في القسم التالي.
يدعم Terraform المصادقة على Azure فقط باستخدام Azure CLI. المصادقة باستخدام Azure PowerShell غير مدعومة. لذلك، بينما يمكنك استخدام الوحدة النمطية Azure PowerShell عند القيام بعمل Terraform الخاص بك، تحتاج أولا إلى المصادقة على Azure.
تنفيذ كود Terraform
إشعار
يوجد نموذج التعليمات البرمجية لهذه المقالة في مستودع Azure Terraform GitHub. يمكنك عرض ملف السجل الذي يحتوي على نتائج الاختبار من الإصدارات الحالية والسابقة من Terraform.
راجع المزيد من المقالات ونماذج التعليمات البرمجية التي توضح كيفية استخدام Terraform لإدارة موارد Azure
إنشاء دليل يمكنك استخدامه لاختبار نموذج التعليمات البرمجية Terraform وجعله دليلك الحالي.
قم بإنشاء ملف باسم
providers.tf
وأدخل التعليمة البرمجية التالية:terraform { required_version = ">=1.0" required_providers { azapi = { source = "azure/azapi" version = "~>1.5" } azurerm = { source = "hashicorp/azurerm" version = "~>3.0" } random = { source = "hashicorp/random" version = "~>3.0" } time = { source = "hashicorp/time" version = "0.9.1" } } } provider "azurerm" { features {} }
قم بإنشاء ملف باسم
ssh.tf
وأدخل التعليمة البرمجية التالية:resource "random_pet" "ssh_key_name" { prefix = "ssh" separator = "" } resource "azapi_resource_action" "ssh_public_key_gen" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" resource_id = azapi_resource.ssh_public_key.id action = "generateKeyPair" method = "POST" response_export_values = ["publicKey", "privateKey"] } resource "azapi_resource" "ssh_public_key" { type = "Microsoft.Compute/sshPublicKeys@2022-11-01" name = random_pet.ssh_key_name.id location = azurerm_resource_group.rg.location parent_id = azurerm_resource_group.rg.id } output "key_data" { value = azapi_resource_action.ssh_public_key_gen.output.publicKey }
قم بإنشاء ملف باسم
main.tf
وأدخل التعليمة البرمجية التالية:# Generate random resource group name resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } resource "random_pet" "azurerm_kubernetes_cluster_name" { prefix = "cluster" } resource "random_pet" "azurerm_kubernetes_cluster_dns_prefix" { prefix = "dns" } resource "azurerm_kubernetes_cluster" "k8s" { location = azurerm_resource_group.rg.location name = random_pet.azurerm_kubernetes_cluster_name.id resource_group_name = azurerm_resource_group.rg.name dns_prefix = random_pet.azurerm_kubernetes_cluster_dns_prefix.id identity { type = "SystemAssigned" } default_node_pool { name = "agentpool" vm_size = "Standard_D2_v2" node_count = var.node_count } linux_profile { admin_username = var.username ssh_key { key_data = azapi_resource_action.ssh_public_key_gen.output.publicKey } } network_profile { network_plugin = "kubenet" load_balancer_sku = "standard" } }
قم بإنشاء ملف باسم
variables.tf
وأدخل التعليمة البرمجية التالية:variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "node_count" { type = number description = "The initial quantity of nodes for the node pool." default = 3 } variable "msi_id" { type = string description = "The Managed Service Identity ID. Set this value if you're running this example using Managed Identity as the authentication method." default = null } variable "username" { type = string description = "The admin username for the new cluster." default = "azureadmin" }
قم بإنشاء ملف باسم
outputs.tf
وأدخل التعليمة البرمجية التالية:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "kubernetes_cluster_name" { value = azurerm_kubernetes_cluster.k8s.name } output "client_certificate" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].client_certificate sensitive = true } output "client_key" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].client_key sensitive = true } output "cluster_ca_certificate" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].cluster_ca_certificate sensitive = true } output "cluster_password" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].password sensitive = true } output "cluster_username" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].username sensitive = true } output "host" { value = azurerm_kubernetes_cluster.k8s.kube_config[0].host sensitive = true } output "kube_config" { value = azurerm_kubernetes_cluster.k8s.kube_config_raw sensitive = true }
تهيئة Terraform
قم بتشغيل terraform init لتهيئة توزيع Terraform. يقوم هذا الأمر بتنزيل موفر Azure المطلوب لإدارة موارد Azure.
terraform init -upgrade
النقاط الرئيسية:
- تقوم
-upgrade
المعلمة بترقية مكونات الموفر الإضافية الضرورية إلى أحدث إصدار يتوافق مع قيود إصدار التكوين.
إنشاء خطة تنفيذ Terraform
قم بتشغيل خطة terraform لإنشاء خطة تنفيذ.
terraform plan -out main.tfplan
النقاط الرئيسية:
- ينشئ الأمر
terraform plan
خطة تنفيذ، لكنه لا ينفذها. بدلًا من ذلك، يحدد الإجراءات الضرورية لإنشاء التكوين المحدد في ملفات التكوين الخاصة بك. يسمح لك هذا النمط بالتحقق مما إذا كانت خطة التنفيذ تتطابق مع توقعاتك قبل إجراء أي تغييرات على الموارد الفعلية. - تسمح المعلمة
-out
الاختيارية بتحديد ملف الإخراج للخطة. يضمن استخدام-out
المعلمة أن الخطة التي راجعتها هي بالضبط ما يتم تطبيقها.
تطبيق خطة تنفيذ Terraform
قم بتشغيل تطبيق terraform لتطبيق خطة التنفيذ على البنية الأساسية السحابية الخاصة بك.
terraform apply main.tfplan
النقاط الرئيسية:
- يفترض الأمر المثال
terraform apply
أنك قمت بتشغيلterraform plan -out main.tfplan
مسبقا . - إذا قمت بتحديد اسم ملف مختلف للمعلمة
-out
، فاستخدم نفس اسم الملف في الاستدعاءterraform apply
. - إذا لم تستخدم المعلمة
-out
، استدعterraform apply
دون أي معلمات.
تحقق من النتائج
احصل على اسم مجموعة موارد Azure باستخدام الأمر التالي.
resource_group_name=$(terraform output -raw resource_group_name)
عرض اسم مجموعة Kubernetes الجديدة باستخدام الأمر az aks list .
az aks list \ --resource-group $resource_group_name \ --query "[].{\"K8s cluster name\":name}" \ --output table
احصل على تكوين Kubernetes من حالة Terraform وقم بتخزينه في ملف
kubectl
يمكنه القراءة باستخدام الأمر التالي.echo "$(terraform output kube_config)" > ./azurek8s
تحقق من أن الأمر السابق لم يضيف حرف ASCII EOT باستخدام الأمر التالي.
cat ./azurek8s
النقاط الرئيسية:
- إذا رأيت
<< EOT
في البداية وفيEOT
النهاية، فقم بإزالة هذه الأحرف من الملف. وإلا، فقد تتلقى رسالة الخطأ التالية:error: error loading config file "./azurek8s": yaml: line 2: mapping values are not allowed in this context
- إذا رأيت
قم بتعيين متغير بيئة حتى
kubectl
تتمكن من التقاط التكوين الصحيح باستخدام الأمر التالي.export KUBECONFIG=./azurek8s
تحقق من صحة نظام المجموعة باستخدام
kubectl get nodes
الأمر .kubectl get nodes
النقاط الرئيسية:
- عند إنشاء نظام مجموعة AKS، تم تمكين المراقبة لالتقاط مقاييس السلامة لكل من عقد نظام المجموعة والقرون. تتوفر مقاييس الصحة هذه في مدخل Microsoft Azure. لمزيد من المعلومات حول مراقبة صحة الحاوية، راجع مراقبة صحة خدمة Azure Kubernetes.
- العديد من القيم الرئيسية المصنفة كمخرجات عند تطبيق خطة تنفيذ Terraform. على سبيل المثال، يتم إخراج عنوان المضيف واسم مستخدم نظام مجموعة AKS وكلمة مرور نظام مجموعة AKS.
قم بنشر التطبيق
لنشر التطبيق، يمكنك استخدام ملف بيان لإنشاء كافة الكائنات المطلوبة لتشغيل تطبيق AKS Store. يحدد ملف بيانات Kubernetesالحالة المطلوبة لنظام المجموعة، مثل صور الحاوية المراد تشغيلها. يتضمن البيان عمليات نشر وخدمات Kubernetes التالية:
- واجهة المتجر: تطبيق ويب للعملاء لعرض المنتجات وتقديم الطلبات.
- خدمة المنتج: تعرض معلومات المنتج.
- خدمة الطلب: يضع الطلبات.
- Rabbit MQ: قائمة انتظار الرسائل لقائمة انتظار الطلبات.
إشعار
لا نوصي بتشغيل حاويات ذات حالة، مثل Rabbit MQ، دون تخزين مستمر للإنتاج. يتم استخدام هذه هنا للتبسيط، ولكن نوصي باستخدام الخدمات المدارة، مثل Azure CosmosDB أو ناقل خدمة 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
اختبر التطبيق
عند تشغيل التطبيق، تعرض خدمة Kubernetes واجهة التطبيق الأمامية للإنترنت. قد تستغرق هذه العملية بضع دقائق حتى تكتمل.
تحقق من حالة 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 قيد التنفيذ.
تنظيف الموارد
حذف موارد AKS
عندما لم تعد بحاجة إلى الموارد التي تم إنشاؤها عبر Terraform، قم بالخطوات التالية:
قم بتشغيل خطة terraform وحدد العلامة
destroy
.terraform plan -destroy -out main.destroy.tfplan
النقاط الرئيسية:
- ينشئ الأمر
terraform plan
خطة تنفيذ، لكنه لا ينفذها. بدلًا من ذلك، يحدد الإجراءات الضرورية لإنشاء التكوين المحدد في ملفات التكوين الخاصة بك. يسمح لك هذا النمط بالتحقق مما إذا كانت خطة التنفيذ تتطابق مع توقعاتك قبل إجراء أي تغييرات على الموارد الفعلية. - تسمح المعلمة
-out
الاختيارية بتحديد ملف الإخراج للخطة. يضمن استخدام-out
المعلمة أن الخطة التي راجعتها هي بالضبط ما يتم تطبيقها.
- ينشئ الأمر
قم بتشغيل تطبيق terraform لتطبيق خطة التنفيذ.
terraform apply main.destroy.tfplan
حذف كيان الخدمة
احصل على معرف كيان الخدمة باستخدام الأمر التالي.
sp=$(terraform output -raw sp)
احذف كيان الخدمة باستخدام الأمر az ad sp delete .
az ad sp delete --id $sp
- تثبيت Azure Developer CLI (AZD)
- تثبيت وتكوين Terraform.
- يمكنك مراجعة التعليمات البرمجية للتطبيق المستخدمة في مستودع Azure-Samples/aks-store-demo.
استنساخ قالب Azure Developer CLI
يسمح لك Azure Developer CLI بتنزيل العينات بسرعة من مستودع Azure-Samples . في التشغيل السريع، يمكنك تنزيل aks-store-demo
التطبيق. لمزيد من المعلومات حول حالات الاستخدام العام، راجع azd
نظرة عامة.
استنساخ قالب العرض التوضيحي لتخزين AKS من مستودع Azure-Samples باستخدام
azd init
الأمر مع المعلمة--template
.azd init --template Azure-Samples/aks-store-demo
أدخل اسم بيئة لمشروعك يستخدم الأحرف الأبجدية الرقمية والواصلات فقط، مثل aks-terraform-1.
Enter a new environment name: aks-terraform-1
تسجيل الدخول إلى حساب Azure Cloud الخاص بك
يحتوي القالب azd
على جميع التعليمات البرمجية اللازمة لإنشاء الخدمات، ولكن تحتاج إلى تسجيل الدخول إلى حساب Azure الخاص بك لاستضافة التطبيق على AKS.
سجل الدخول إلى حسابك باستخدام
azd auth login
الأمر .azd auth login
انسخ رمز الجهاز الذي يظهر في الإخراج واضغط على Enter لتسجيل الدخول.
Start by copying the next code: XXXXXXXXX Then press enter and continue to log in from your browser...
هام
إذا كنت تستخدم جهازا ظاهريا خارج الشبكة أو GitHub Codespace، تتسبب بعض نهج أمان Azure في حدوث تعارضات عند استخدامها لتسجيل الدخول باستخدام
azd auth login
. إذا واجهت مشكلة هنا، يمكنك اتباع الحل البديل azd auth المقدم، والذي يتضمن استخدامcurl
طلب إلى عنوان URL المضيف المحلي الذي تمت إعادة توجيهك إليه بعد تشغيلazd auth login
.قم بالمصادقة باستخدام بيانات الاعتماد الخاصة بك على صفحة تسجيل الدخول الخاصة بمؤسستك.
تأكد من أنك تحاول الاتصال من Azure CLI.
تحقق من الرسالة "اكتملت مصادقة رمز الجهاز. تسجيل الدخول إلى Azure." يظهر في المحطة الطرفية الأصلية.
Waiting for you to complete authentication in the browser... Device code authentication completed. Logged in to Azure.
الحل البديل لمصادقة azd
يتطلب هذا الحل البديل تثبيت Azure CLI .
افتح نافذة طرفية وسجل الدخول باستخدام Azure CLI باستخدام
az login
الأمر مع تعيين المعلمة--scope
إلىhttps://graph.microsoft.com/.default
.az login --scope https://graph.microsoft.com/.default
يجب إعادة توجيهك إلى صفحة مصادقة في علامة تبويب جديدة لإنشاء رمز مميز للوصول إلى المستعرض، كما هو موضح في المثال التالي:
https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?clientid=<your_client_id>.
انسخ عنوان URL المضيف المحلي لصفحة الويب التي تلقيتها بعد محاولة تسجيل الدخول باستخدام
azd auth login
.في نافذة طرفية جديدة، استخدم الطلب التالي
curl
لتسجيل الدخول. تأكد من استبدال<localhost>
العنصر النائب بعنوان URL المضيف المحلي الذي نسخته في الخطوة السابقة.curl <localhost>
يقوم تسجيل الدخول الناجح بمخرجات صفحة ويب HTML، كما هو موضح في المثال التالي:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta http-equiv="refresh" content="60;url=https://docs.microsoft.com/cli/azure/"> <title>Login successfully</title> <style> body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } code { font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; display: inline-block; background-color: rgb(242, 242, 242); padding: 12px 16px; margin: 8px 0px; } </style> </head> <body> <h3>You have logged into Microsoft Azure!</h3> <p>You can close this window, or we will redirect you to the <a href="https://docs.microsoft.com/cli/azure/">Azure CLI documentation</a> in 1 minute.</p> <h3>Announcements</h3> <p>[Windows only] Azure CLI is collecting feedback on using the <a href="https://learn.microsoft.com/windows/uwp/security/web-account-manager">Web Account Manager</a> (WAM) broker for the login experience.</p> <p>You may opt-in to use WAM by running the following commands:</p> <code> az config set core.allow_broker=true<br> az account clear<br> az login </code> </body> </html>
أغلق المحطة الطرفية الحالية وافتح المحطة الطرفية الأصلية. يجب أن تشاهد قائمة JSON باشتراكاتك.
انسخ
id
حقل الاشتراك الذي تريد استخدامه.قم بتعيين اشتراكك باستخدام
az account set
الأمر .az account set --subscription <subscription_id>
إنشاء الموارد ونشرها لنظام المجموعة
لنشر التطبيق، يمكنك استخدام azd up
الأمر لإنشاء كافة الكائنات المطلوبة لتشغيل تطبيق AKS Store.
azure.yaml
يحدد الملف الحالة المطلوبة لنظام المجموعة، مثل صور الحاوية التي يجب إحضارها ويتضمن عمليات نشر وخدمات Kubernetes التالية:
- واجهة المتجر: تطبيق ويب للعملاء لعرض المنتجات وتقديم الطلبات.
- خدمة المنتج: تعرض معلومات المنتج.
- خدمة الطلب: يضع الطلبات.
- Rabbit MQ: قائمة انتظار الرسائل لقائمة انتظار الطلبات.
إشعار
لا نوصي بتشغيل حاويات ذات حالة، مثل Rabbit MQ، دون تخزين مستمر للإنتاج. يتم استخدام هذه هنا للتبسيط، ولكن نوصي باستخدام الخدمات المدارة، مثل Azure Cosmos DB أو ناقل خدمة Azure.
توزيع موارد التطبيق
azd
ينشئ قالب هذا التشغيل السريع مجموعة موارد جديدة مع نظام مجموعة AKS وAzure Key Vault. يخزن key vault أسرار العميل ويشغل الخدمات في pets
مساحة الاسم.
إنشاء كافة موارد التطبيق باستخدام
azd up
الأمر .azd up
azd up
يقوم بتشغيل جميع الخطافات داخلazd-hooks
المجلد لتسجيل خدمات التطبيق وتوفيرها ونشرها مسبقا.تخصيص الخطافات لإضافة تعليمات برمجية مخصصة إلى
azd
مراحل سير العمل. لمزيد من المعلومات، راجعazd
مرجع الخطافات .حدد اشتراك Azure لاستخدام الفوترة.
? Select an Azure Subscription to use: [Use arrows to move, type to filter] > 1. My Azure Subscription (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
حدد منطقة لنشر التطبيق الخاص بك إليها.
Select an Azure location to use: [Use arrows to move, type to filter] 1. (South America) Brazil Southeast (brazilsoutheast) 2. (US) Central US (centralus) 3. (US) East US (eastus) > 43. (US) East US 2 (eastus2) 4. (US) East US STG (eastusstg) 5. (US) North Central US (northcentralus) 6. (US) South Central US (southcentralus)
azd
تشغيل خطافات ما قبل التوفير وما بعده تلقائيا لإنشاء الموارد للتطبيق الخاص بك. قد تستغرق هذه العملية بضع دقائق حتى تكتمل. بمجرد الانتهاء، يجب أن تشاهد إخراجا مشابها للمثال التالي:SUCCESS: Your workflow to provision and deploy to Azure completed in 9 minutes 40 seconds.
إنشاء خطط Terraform
داخل قالب Azure Developer، /infra/terraform
يحتوي المجلد على جميع التعليمات البرمجية المستخدمة لإنشاء خطة Terraform.
ينشر Terraform الأوامر ويشغلها باستخدام terraform apply
كجزء من azd
خطوة التزويد. بمجرد الانتهاء، يجب أن تشاهد إخراجا مشابها للمثال التالي:
Plan: 5 to add, 0 to change, 0 to destroy.
...
Saved the plan to: /workspaces/aks-store-demo/.azure/aks-terraform-azd/infra/terraform/main.tfplan
اختبر التطبيق
عند تشغيل التطبيق، تعرض خدمة Kubernetes واجهة التطبيق الأمامية للإنترنت. قد تستغرق هذه العملية بضع دقائق حتى تكتمل.
قم بتعيين مساحة الاسم كمساحة
pets
اسم تجريبيةkubectl set-context
باستخدام الأمر .kubectl config set-context --current --namespace=pets
تحقق من حالة 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 قيد التنفيذ.
قم بحذف نظام المجموعة
بمجرد الانتهاء من التشغيل السريع، قم بتنظيف الموارد غير الضرورية لتجنب رسوم Azure.
احذف جميع الموارد التي تم إنشاؤها في التشغيل السريع باستخدام
azd down
الأمر .azd down
تأكد من قرارك بإزالة جميع الموارد المستخدمة من اشتراكك عن طريق الكتابة
y
والضغط علىEnter
.? Total resources to delete: 14, are you sure you want to continue? (y/N)
السماح بالتطهير لإعادة استخدام متغيرات التشغيل السريع إذا كان ذلك ممكنا عن طريق الكتابة
y
والضغط علىEnter
.[Warning]: These resources have soft delete enabled allowing them to be recovered for a period or time after deletion. During this period, their names can't be reused. In the future, you can use the argument --purge to skip this confirmation.
استكشاف أخطاء Terraform على Azure وإصلاحها
استكشاف المشكلات الشائعة وإصلاحها عند استخدام Terraform على Azure.
الخطوات التالية
في هذا التشغيل السريع، لقد قمت بتوزيع كتلة Kubernetes ثم وزعت تطبيقًا بسيطًا متعدد الحاويات عليها. هذا التطبيق النموذجي هو لأغراض العرض التوضيحي فقط ولا يمثل جميع أفضل الممارسات لتطبيقات Kubernetes. للحصول على إرشادات حول إنشاء حلول كاملة باستخدام AKS للإنتاج، راجع إرشادات حل AKS.
لمعرفة المزيد حول AKS والمرور عبر مثال كامل على التعليمات البرمجية للتوزيع، تابع البرنامج التعليمي لنظام مجموعة Kubernetes.
Azure Kubernetes Service