إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
ينطبق على: ✔️ AKS Automatic
خدمة Azure Kubernetes (AKS) Automatic يوفر أسهل تجربة إدارة في Kubernetes للمطورين ومهندسي DevOps ومهندسي المنصات. مثالي للتطبيقات الحديثة الذكاء الاصطناعي، يقوم AKS Automatic بأتمتة إعداد نظام مجموعة AKS وعملياته وتضمين تكوينات أفضل الممارسات. يمكن للمستخدمين من أي مستوى مهارة الاستفادة من الأمان والأداء والاعتمادية من AKS التلقائي لتطبيقاتهم. كما يتضمن AKS Automatic نظام جاهزية الكبسولات الذي يضمن 99.9% من عمليات جاهزية الكبسولات المؤهلة خلال 5 دقائق، مما يضمن بنية تحتية موثوقة وذاتية الإصلاح لتطبيقاتك. يضمن هذا التشغيل السريع الفهم الأساسي لمفاهيم Kubernetes. لمزيد من المعلومات، راجع Kubernetes الأساسية للمفاهيم الأساسية ل خدمة Azure Kubernetes (AKS).
في هذا التشغيل السريع، تتعلم ما يلي:
- أنشئ شبكة ظاهرية.
- إنشاء هوية مدارة مع أذونات عبر الشبكة الظاهرية.
- نشر مجموعة AKS التلقائية في الشبكة الظاهرية.
- قم بتشغيل نموذج تطبيق متعدد الحاويات مع مجموعة من الخدمات المصغرة والواجهات الأمامية على الويب التي تحاكي سيناريو البيع بالتجزئة.
إذا لم يكن لديك حساب Azure، أنشئ حسابا مجاني.
المتطلبات الأساسية
- Azure CLI الإصدار 2.86.0 أو أحدث. للعثور على النسخة، شغل
az --versionأمر الأمر. إذا كنت بحاجة إلى تثبيت أو ترقية، راجع تثبيت Azure CLI.
إشعار
ينشئ هذا النموذج نظام مجموعة AKS التلقائي مع مورد موفر azurerm_kubernetes_automatic_cluster AzureRM، والذي يتطلب إصدار موفر AzureRM أو أحدث v4.81 . للحصول على عينة مكافئة تستخدم موفر AzAPI، راجع عينة 101-aks-automatic-custom-network-azapi .
- هوية نظام المجموعة مع
Network Contributorتعيين دور مضمن على الشبكة الفرعية لخادم API. - هوية نظام المجموعة مع
Network Contributorتعيين دور مضمن على الشبكة الظاهرية لدعم التوفير التلقائي للعقدة. - هوية المستخدم التي تصل إلى العنقود باستخدام
Azure Kubernetes Service Cluster User RoleوAzure Kubernetes Service RBAC Writer. - شبكة افتراضية تحتوي على شبكة فرعية مخصصة لخادم API بحجم لا يقل عن
*/28يتم تفويضها إلىMicrosoft.ContainerService/managedClusters.- إذا كانت هناك مجموعة أمان الشبكة (NSG) مرفقة بالشبكات الفرعية، فتأكد من أن قواعد أمان NSG تسمح بأنواع الاتصال المطلوبة بين مكونات نظام المجموعة. للحصول على المتطلبات التفصيلية، راجع متطلبات الشبكة الظاهرية المخصصة.
- إذا كان هناك طريقة أو جهاز تقييد Azure Firewall أو أي جهاز تقييد خارجي، تأكد من السماح بقواعد الشبكة الصادرة المطلوبة وFQDNs المسموح بها.
- سيقوم AKS Automatic بتمكين نهج Azure على مجموعة AKS الخاصة بك، لكن يجب عليك تسجيل مزود الموارد
Microsoft.PolicyInsightsمسبقا في اشتراكك لتجربة أكثر سلاسة. لمزيد من المعلومات، راجع Azure مقدمي الموارد والأنواع لمزيد من المعلومات. - قم بإلغاء تثبيت إضافة AKS-preview باستخدام
az extension remove -n aks-preview.
هام
بدءا من AKS 1.36، ستفعل مجموعات AKS التلقائية الجديدة افتراضيا واجهة برمجة تطبيقات بوابة كوبيرنتيز عبر إضافة توجيه التطبيقات بدلا من إدخال NGINX المدار مع إضافة توجيه التطبيقات بسبب تقاعد NGINX في البداية من Ingress.
لا تتأثر المجموعات التلقائية الحالية ولكن يجب أن تبدأ في الانتقال إلى واجهة برمجة تطبيقات Kubernetes Gateway عبر إضافة توجيه التطبيقات.
القيود
تنطبق القيود التالية على عناقيد AKS التلقائية:
- يتوفر AKS Automatic بشكل عام في المناطق التالية:
australiaeast،austriaeast،belgiumcentral،brazilsouth،canadacentralcentralindiacentraluschilecentraldenmarkeasteastasiaeastuseastus2francecentralgermanywestcentralindonesiacentralisraelcentralitalynorthjapaneastjapanwestkoreacentralmalaysiawestmexicocentralnewzealandnorthnortheuropenorwayeastpolandcentralsouthafricanorthsouthcentralussoutheastasiaspaincentralswedencentralswitzerlandnorthuaenorthuksouthwesteuropewestus2westus3.- تدعم مجموعات AKS التلقائية الجديدة افتراضيا تجمع عقد النظام المدارة وLocalDNS. لا يمكنك إنشاء مجموعات AKS التلقائية بدون تجمعات عقد النظام المدارة في أي منطقة.
- مجموعة AKS التلقائية تحتوي على node group resource lockdown معدة مسبقا، مما لا يسمح بتغييرات في مجموعة موارد
MC_، مما يمنع روابط الشبكة الافتراضية في منطقة Private DNS الافتراضية. لسيناريوهات DNS عبر VNet أو مخصصة، استخدم شبكة مخصصة وDNS خاصة باتباع إنشاء مجموعة خاصة خدمة Azure Kubernetes (AKS) تلقائية في شبكة افتراضية مخصصة. - يتطلب إصدار Azure CLI 2.86.0 أو أحدث. للعثور على النسخة، شغل
az --versionأمر الأمر. إذا كنت بحاجة إلى تثبيت أو ترقية، راجع تثبيت Azure CLI. - الامتدادات التالية غير مدعومة:
- عقد ويندوز غير مدعومة.
- الترحيل من AKS base SKU إلى SKU التلقائي غير مدعوم.
- لا يتم دعم الترحيلات بين مجموعات AKS التلقائية التي لا تحتوي على تجمعات عقد النظام المدارة ومجموعات AKS التلقائية التي تحتوي على تجمعات عقد النظام المدارة.
تحديد المتغيرات
حدد المتغيرات التالية التي تستخدم في الخطوات التالية.
RG_NAME=automatic-rg
VNET_NAME=automatic-vnet
CLUSTER_NAME=automatic
IDENTITY_NAME=automatic-uami
LOCATION=eastus
SUBSCRIPTION_ID=$(az account show --query id -o tsv)
إنشاء مجموعة موارد
مجموعة الموارد Azure هي مجموعة منطقية يتم فيها نشر وإدارة Azure الموارد.
أنشئ مجموعة موارد مستخدماً الأمر az group create.
az group create -n ${RG_NAME} -l ${LOCATION}
يشبه إخراج العينة التالي الإنشاء الناجح لمجموعة الموارد:
{
"id": "/subscriptions/<guid>/resourceGroups/automatic-rg",
"location": "canadacentral",
"managedBy": null,
"name": "automatic-rg",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
إنشاء شبكة ظاهرية
إنشاء شبكة ظاهرية az network vnet create باستخدام الأمر . إنشاء شبكة فرعية لخادم API، وشبكة عقدة مستخدم، وشبكة عقدة النظام باستخدام az network vnet subnet create الأمر.
عند استخدام شبكة افتراضية مخصصة مع AKS Automatic، يجب عليك إنشاء شبكة فرعية لخادم واجهة برمجة التطبيقات (API). AKS سيفوض الشبكة الفرعية إلى Microsoft.ContainerService/managedClusters نيابة عنك، مما يمنح خدمة AKS صلاحيات لحقن وحدات خادم API وموزع التحميل الداخلي في تلك الشبكة. لا يمكنك استخدام الشبكة الفرعية لأي أحمال عمل أخرى، ولكن يمكنك استخدامها لمجموعات AKS متعددة موجودة في نفس الشبكة الظاهرية. الحد الأدنى لحجم الشبكة الفرعية لخادم API المدعوم هو /28.
تحذير
يحتفظ عنقود AKS بما لا يقل عن تسعة (9) عناوين IP في مساحة عناوين الشبكة الفرعية. نفاد عناوين IP قد يمنع توسيع خوادم API ويسبب انقطاعا في خادم API.
az network vnet create --name ${VNET_NAME} \
--resource-group ${RG_NAME} \
--location ${LOCATION} \
--address-prefixes 172.19.0.0/16
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name apiServerSubnet \
--delegations Microsoft.ContainerService/managedClusters \
--address-prefixes 172.19.0.0/28
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name userNodeSubnet \
--address-prefixes 172.19.1.0/24
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name managedSystemNodeSubnet \
--address-prefixes 172.19.0.64/26
متطلبات مجموعة أمان الشبكة
إذا أضفت قواعد مجموعة أمن الشبكات (NSG) لتقييد حركة المرور بين الشبكات الفرعية المختلفة في شبكتك الافتراضية المخصصة، تأكد من أن قواعد أمان NSG تسمح بأنواع الاتصال المطلوبة بين مكونات العنقود.
للحصول على متطلبات NSG التفصيلية عند استخدام الشبكات الظاهرية المخصصة مع مجموعات AKS، راجع متطلبات الشبكة الظاهرية المخصصة.
إنشاء هوية مدارة ومنحها أذونات على الشبكة الظاهرية
إنشاء هوية مدارة az identity create باستخدام الأمر واسترداد المعرف الأساسي. تعيين دور مساهم الشبكة على الشبكة الظاهرية إلى الهوية المدارة az role assignment create باستخدام الأمر .
az identity create \
--resource-group ${RG_NAME} \
--name ${IDENTITY_NAME} \
--location ${LOCATION}
IDENTITY_PRINCIPAL_ID=$(az identity show --resource-group ${RG_NAME} --name ${IDENTITY_NAME} --query principalId -o tsv)
az role assignment create \
--scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}" \
--role "Network Contributor" \
--assignee-object-id "${IDENTITY_PRINCIPAL_ID}" \
--assignee-principal-type ServicePrincipal
إنشاء مجموعة AKS تلقائية في شبكة ظاهرية مخصصة
لإنشاء مجموعة AKS تلقائية، استخدم الأمر az aks create.
az aks create \
--resource-group ${RG_NAME} \
--name ${CLUSTER_NAME} \
--location ${LOCATION} \
--apiserver-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/apiServerSubnet" \
--node-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/userNodeSubnet" \
--system-node-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/managedSystemNodeSubnet"
--assign-identity "/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RG_NAME}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/${IDENTITY_NAME}" \
--sku automatic \
--no-ssh-key
بعد بضع دقائق، الأمر إكمال وإرجاع معلومات منسقة JSON حول الكتلة.
الاتصال بنظام المجموعة
لإدارة نظام مجموعة Kubernetes، استخدم سطر أوامر العميلkubectl.
kubectl مثبت بالفعل إذا كنت تستخدم Azure Cloud Shell. لتثبيت kubectl محليا، قم بتشغيل الأمر az aks install-cli. يتم تكوين مجموعات AKS التلقائية باستخدام Microsoft Entra ID لتحكم الوصول القائم على الأدوار (RBAC) في Kubernetes.
عندما تنشئ عنقودا باستخدام Azure CLI، يتم تعيين المستخدم roles المدمجة ل Azure Kubernetes Service RBAC Cluster Admin.
قم بتكوين kubectl للاتصال بكتلة Kubernetes مستخدماً الأمر az aks get-credentials. هذا الأمر يقوم بتحميل بيانات الاعتماد وضبط Kubernetes CLI لاستخدامها.
az aks get-credentials --resource-group ${RG_NAME} --name ${CLUSTER_NAME}
تحقق من الاتصال بنظام مجموعتك مستخدماً أمرkubectl get. يعمل هذا الأمر على استرجاع قائمة نظام المجموعة العنقودية.
kubectl get nodes
العينة التالية توضح كيف يطلب منك تسجيل الدخول.
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
بعد تسجيل الدخول، تظهر عينة المخرج التالية تجمعات عقد النظام المدارة. تأكد من أن حالة العقدة جاهزة.
NAME STATUS ROLES AGE VERSION
aks-hostedpool-16652789-vms1 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms2 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms3 Ready <none> 19m v1.34.7
aks-system-surge-zq4d2 Ready <none> 19m v1.34.7
إنشاء شبكة ظاهرية
يعرف ملف Bicep هذا الشبكة الافتراضية.
@description('The location of the managed cluster resource.')
param location string = resourceGroup().location
@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'
@description('The address prefix of the virtual network.')
param addressPrefix string = '172.19.0.0/16'
@description('The name of the API server subnet.')
param apiServerSubnetName string = 'apiServerSubnet'
@description('The subnet prefix of the API server subnet.')
param apiServerSubnetPrefix string = '172.19.0.0/28'
@description('The name of the user node subnet.')
param userNodeSubnetName string = 'userNodeSubnet'
@description('The subnet prefix of the user node subnet.')
param userNodeSubnetPrefix string = '172.19.1.0/24'
@description('The name of the system node subnet.')
param systemNodeSubnetName string = 'systemNodeSubnet'
@description('The subnet prefix of the system node subnet.')
param systemNodeSubnetPrefix string = '172.19.0.64/26'
// Virtual network with an API server subnet, a user node subnet, and a system node subnet
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' = {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: [ addressPrefix ]
}
subnets: [
{
name: apiServerSubnetName
properties: {
addressPrefix: apiServerSubnetPrefix
}
}
{
name: userNodeSubnetName
properties: {
addressPrefix: userNodeSubnetPrefix
}
}
{
name: systemNodeSubnetName
properties: {
addressPrefix: systemNodeSubnetPrefix
}
}
]
}
}
output apiServerSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, apiServerSubnetName)
output userNodeSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, userNodeSubnetName)
output systemNodeSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, systemNodeSubnetName)
حفظ ملف Bicep virtualNetwork.bicep إلى جهاز الكمبيوتر المحلي الخاص بك.
هام
يحدد ملف Bicep البارام vnetName إلى aksAutomaticVnet، والملف addressPrefix إلى 172.19.0.0/16، والبارام apiServerSubnetPrefix إلى 172.19.0.0/28، والبارام apiServerSubnetPrefix إلى 172.19.1.0/24. إذا كنت تريد استخدام قيم مختلفة، فتأكد من تحديث السلاسل إلى القيم المفضلة لديك.
نشر ملف Bicep باستخدام Azure CLI.
az deployment group create --resource-group <resource-group> --template-file virtualNetwork.bicep
يسمح بكافة نسبة استخدام الشبكة داخل الشبكة الظاهرية بشكل افتراضي. إذا أضفت قواعد مجموعة أمن الشبكات (NSG) لتقييد حركة المرور بين الشبكات الفرعية المختلفة في شبكتك الافتراضية المخصصة، تأكد من أن قواعد أمان NSG تسمح بأنواع الاتصال المطلوبة بين مكونات العنقود.
للحصول على متطلبات NSG التفصيلية عند استخدام الشبكات الظاهرية المخصصة مع مجموعات AKS، راجع متطلبات الشبكة الظاهرية المخصصة.
إنشاء هوية مدارة
يحدد ملف Bicep هذا الهوية المدارة التي تم تعيينها للمستخدم.
param location string = resourceGroup().location
param uamiName string = 'aksAutomaticUAMI'
resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: uamiName
location: location
}
output uamiId string = userAssignedManagedIdentity.id
output uamiPrincipalId string = userAssignedManagedIdentity.properties.principalId
output uamiClientId string = userAssignedManagedIdentity.properties.clientId
احفظ ملف Bicep uami.bicep إلى جهاز الكمبيوتر المحلي الخاص بك.
هام
يضبط ملف Bicep البارام uamiName على aksAutomaticUAMI. إذا كنت تريد استخدام اسم هوية مختلف، فتأكد من تحديث السلسلة إلى اسمك المفضل.
نشر ملف Bicep باستخدام Azure CLI.
az deployment group create --resource-group <resource-group> --template-file uami.bicep
تعيين دور مساهم الشبكة عبر الشبكة الظاهرية
يحدد ملف Bicep هذا التعيين للأدوار عبر الشبكة الافتراضية.
@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'
@description('The principal ID of the user assigned managed identity.')
param uamiPrincipalId string
// Get a reference to the virtual network
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' existing ={
name: vnetName
}
// Assign the Network Contributor role to the user assigned managed identity on the virtual network
// '4d97b98b-1d4f-4787-a291-c67834d212e7' is the built-in Network Contributor role definition
// See: https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/networking#network-contributor
resource networkContributorRoleAssignmentToVirtualNetwork 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(uamiPrincipalId, '4d97b98b-1d4f-4787-a291-c67834d212e7', resourceGroup().id, virtualNetwork.name)
scope: virtualNetwork
properties: {
roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '4d97b98b-1d4f-4787-a291-c67834d212e7')
principalId: uamiPrincipalId
}
}
احفظ ملف Bicep roleAssignments.bicep إلى جهاز الكمبيوتر المحلي الخاص بك.
هام
يضبط ملف Bicep المباراة vnetName إلى aksAutomaticVnet. إذا استخدمت اسم شبكة ظاهرية مختلفا، فتأكد من تحديث السلسلة إلى اسم الشبكة الظاهرية المفضل لديك.
نشر ملف Bicep باستخدام Azure CLI. تحتاج إلى توفير معرف الهوية الأساسي المعين من قبل المستخدم.
az deployment group create --resource-group <resource-group> --template-file roleAssignments.bicep \
--parameters uamiPrincipalId=<user assigned identity prinicipal id>
إنشاء مجموعة AKS تلقائية في شبكة ظاهرية مخصصة
يحدد ملف Bicep هذا العنقود التلقائي AKS.
@description('The name of the managed cluster resource.')
param clusterName string = 'aksAutomaticCluster'
@description('The location of the managed cluster resource.')
param location string = resourceGroup().location
@description('The resource ID of the API server subnet.')
param apiServerSubnetId string
@description('The resource ID of the user node subnet.')
param userNodeSubnetId string
@description('The resource ID of the system node subnet.')
param systemNodeSubnetId string
@description('The resource ID of the user assigned managed identity.')
param uamiId string
/// Create the AKS Automatic cluster using the custom virtual network and user assigned managed identity
resource aks 'Microsoft.ContainerService/managedClusters@2024-03-02-preview' = {
name: clusterName
location: location
sku: {
name: 'Automatic'
}
properties: {
apiServerAccessProfile: {
subnetId: apiServerSubnetId
}
networkProfile: {
outboundType: 'loadBalancer'
}
hostedSystemProfile: {
systemNodeSubnetID: systemNodeSubnetId
nodeSubnetID: userNodeSubnetId
}
}
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${uamiId}': {}
}
}
}
حفظ ملف Bicep aks.bicep إلى جهاز الكمبيوتر المحلي الخاص بك.
هام
يضبط ملف Bicep المباراة clusterName إلى aksAutomaticCluster. إذا كنت تريد اسم نظام مجموعة مختلف، فتأكد من تحديث السلسلة إلى اسم نظام المجموعة المفضل لديك.
نشر ملف Bicep باستخدام Azure CLI. تحتاج إلى توفير معرف مورد الشبكة الفرعية لخادم API، معرف مورد شبكة المستخدم الفرعية، معرف مورد شبكة الشبكة الفرعية للنظام، ومعرف مورد الهوية المدارة المعين للمستخدم.
az deployment group create --resource-group <resource-group> --template-file aks.bicep \
--parameters apiServerSubnetId=<API server subnet resource id> \
--parameters nodeSubnetId=<user node subnet resource id> \
--parameters systemNodeSubnetId=<system node subnet resource id> \
--parameters uamiId=<user assigned identity id>
الاتصال بنظام المجموعة
لإدارة نظام مجموعة Kubernetes، استخدم سطر أوامر العميلkubectl.
kubectl مثبت بالفعل إذا كنت تستخدم Azure Cloud Shell. لتثبيت kubectl محليا، قم بتشغيل الأمر az aks install-cli. يتم تكوين مجموعات AKS التلقائية باستخدام Microsoft Entra ID لتحكم الوصول القائم على الأدوار (RBAC) في Kubernetes.
هام
عندما تنشئ عنقودا باستخدام Bicep، تحتاج إلى تعيين أحد الأدوار المدمجة مثل Azure Kubernetes Service RBAC Reader، Azure Kubernetes Service RBAC Writer، Azure Kubernetes Service RBAC Admin، أو Azure Kubernetes Service RBAC Cluster Admin للمستخدمين لديك، مع تحديد النطاق إلى العنقود أو مساحة أسماء محددة، مثل استخدام az role assignment create --role "Azure Kubernetes Service RBAC Cluster Admin" --scope <AKS cluster resource id> --assignee user@contoso.com. تأكد أيضا من أن المستخدمين لديهم دور Azure Kubernetes Service Cluster User المدمج لتشغيل az aks get-credentials، ثم الحصول على kubeconfig لمجموعة AKS باستخدام أمر az aks get-credentials.
قم بتكوين kubectl للاتصال بكتلة Kubernetes مستخدماً الأمر az aks get-credentials. هذا الأمر يقوم بتحميل بيانات الاعتماد وضبط Kubernetes CLI لاستخدامها.
az aks get-credentials --resource-group <resource-group> --name <cluster-name>
تحقق من الاتصال بنظام مجموعتك مستخدماً أمرkubectl get. يعمل هذا الأمر على استرجاع قائمة نظام المجموعة العنقودية.
kubectl get nodes
العينة التالية توضح كيف يطلب منك تسجيل الدخول.
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
بعد تسجيل الدخول، تظهر عينة المخرج التالية تجمعات عقد النظام المدارة. تأكد من أن حالة العقدة جاهزة.
NAME STATUS ROLES AGE VERSION
aks-hostedpool-16652789-vms1 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms2 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms3 Ready <none> 19m v1.34.7
aks-system-surge-zq4d2 Ready <none> 19m v1.34.7
مراجعة التعليمات البرمجية ل Terraform
إشعار
كود نموذجي لهذا المقال موجود في Azure Terraform GitHub repo. يمكنك عرض ملف السجل الذي يحتوي على نتائج اختبار test من الإصدارات الحالية والسابقة من Terraform.
راجع المزيد من المقالات ونماذج التعليمات البرمجية التي توضح كيفية استخدام Terraform لإدارة موارد Azure.
قم بإنشاء دليل لاختبار نموذج التعليمة البرمجية لـ Terraform وجعله الدليل الحالي.
قم بإنشاء ملف باسم
providers.tfوأدخل التعليمة البرمجية التالية:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>5.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }قم بإنشاء ملف باسم
main.tfوأدخل التعليمة البرمجية التالية:# Create a random name for the resource group using random_pet resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } # Create a resource group using the generated random name resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } # Create the custom virtual network that hosts the cluster resource "azurerm_virtual_network" "vnet" { name = var.virtual_network_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name address_space = var.virtual_network_address_space } # Create the subnet delegated to AKS for API Server VNet Integration resource "azurerm_subnet" "api_server" { name = "apiServerSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = var.api_server_subnet_address_prefixes delegation { name = "aks-delegation" service_delegation { name = "Microsoft.ContainerService/managedClusters" actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"] } } } # Create the subnet that hosts the user node pools resource "azurerm_subnet" "user_nodes" { name = "userNodeSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = var.user_node_subnet_address_prefixes } # Create the subnet that hosts the managed system node pool resource "azurerm_subnet" "system_nodes" { name = "managedSystemNodeSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = var.system_node_subnet_address_prefixes lifecycle { # AKS adds its own managed cluster delegation to this subnet after the # cluster is created. ignore_changes = [delegation] } } # Create the user-assigned managed identity used by the cluster resource "azurerm_user_assigned_identity" "aks" { name = var.identity_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name } # Grant the cluster identity Network Contributor on the virtual network resource "azurerm_role_assignment" "network_contributor" { scope = azurerm_virtual_network.vnet.id role_definition_name = "Network Contributor" principal_id = azurerm_user_assigned_identity.aks.principal_id principal_type = "ServicePrincipal" } # Create a random name for the AKS Automatic cluster resource "random_pet" "cluster_name" { prefix = var.cluster_name_prefix } # Create the AKS Automatic cluster in the custom virtual network resource "azurerm_kubernetes_automatic_cluster" "aks_automatic" { name = random_pet.cluster_name.id location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } api_server_access { subnet_id = azurerm_subnet.api_server.id } hosted_system { node_subnet_id = azurerm_subnet.user_nodes.id system_node_subnet_id = azurerm_subnet.system_nodes.id } depends_on = [azurerm_role_assignment.network_contributor] }قم بإنشاء ملف باسم
variables.tfوأدخل التعليمة البرمجية التالية:variable "resource_group_location" { type = string default = "westus2" 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 "cluster_name_prefix" { type = string default = "aks-automatic" description = "Prefix of the AKS Automatic cluster name that's combined with a random ID so the name is unique in your Azure subscription." } variable "virtual_network_name" { type = string default = "aks-automatic-vnet" description = "Name of the custom virtual network that hosts the cluster." } variable "identity_name" { type = string default = "aks-automatic-identity" description = "Name of the user-assigned managed identity that the cluster uses." } variable "virtual_network_address_space" { type = list(string) default = ["172.19.0.0/16"] description = "Address space of the custom virtual network." } variable "api_server_subnet_address_prefixes" { type = list(string) default = ["172.19.0.0/28"] description = "Address prefixes of the subnet delegated to the cluster API server." } variable "user_node_subnet_address_prefixes" { type = list(string) default = ["172.19.1.0/24"] description = "Address prefixes of the subnet that hosts the user node pools." } variable "system_node_subnet_address_prefixes" { type = list(string) default = ["172.19.0.64/26"] description = "Address prefixes of the subnet that hosts the managed system node pool." }قم بإنشاء ملف باسم
outputs.tfوأدخل التعليمة البرمجية التالية:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "cluster_name" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.name } output "cluster_id" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.id } output "node_resource_group_id" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.node_resource_group_id } output "virtual_network_name" { value = azurerm_virtual_network.vnet.name } output "fully_qualified_domain_name" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.fully_qualified_domain_name }
تهيئة التيرافورم
شغل terraform init لتهيئة نشر Terraform. يقوم هذا الأمر بتنزيل موفري Azure المطلوبين لإدارة موارد Azure.
terraform init -upgrade
إنشاء خطة تنفيذ Terraform
شغل خطة التيرافورم لإنشاء خطة تنفيذ.
terraform plan -out main.tfplan
تطبيق خطة تنفيذ تيرافورم
قم بتشغيل تطبيق terraform لتطبيق خطة التنفيذ على بنية السحابة التحتية الخاصة بك.
terraform apply main.tfplan
يستغرق إنشاء نظام مجموعة تلقائي ل AKS عدة دقائق لإكماله.
تحقق من نظام المجموعة
احصل على اسم مجموعة موارد Azure واسم نظام المجموعة.
resource_group_name=$(terraform output -raw resource_group_name) cluster_name=$(terraform output -raw cluster_name)قم بتشغيل az aks show لعرض نظام المجموعة والتأكد من أنه يستخدم
AutomaticSKU والشبكات الفرعية المخصصة.az aks show --resource-group $resource_group_name --name $cluster_name --query "{name:name, sku:sku, provisioningState:provisioningState, apiServerSubnet:apiServerAccessProfile.subnetId}"
الاتصال بنظام المجموعة
لإدارة نظام مجموعة Kubernetes، استخدم سطر أوامر العميلkubectl. يمكنك التثبيت kubectl محليا باستخدام الأمر az aks install-cli . يتم تكوين مجموعات AKS التلقائية باستخدام Microsoft Entra ID لتحكم الوصول القائم على الأدوار (RBAC) في Kubernetes.
قم بتكوين kubectl للاتصال بكتلة Kubernetes مستخدماً الأمر az aks get-credentials.
az aks get-credentials --resource-group $resource_group_name --name $cluster_name
تحقق من الاتصال بنظام مجموعتك مستخدماً أمرkubectl get.
kubectl get nodes
نشر التطبيق
لنشر التطبيق، تستخدم ملف البيان لإنشاء جميع الكائنات المطلوبة لتشغيل تطبيق AKS Store. يحدد ملف بيانات Kubernetesالحالة المطلوبة لنظام المجموعة، مثل صور الحاوية المراد تشغيلها. يتضمن البيان عمليات نشر وخدمات Kubernetes التالية:
- واجهة المتجر: تطبيق ويب للعملاء لعرض المنتجات وتقديم الطلبات.
- خدمة المنتج: تعرض معلومات المنتج.
- خدمة الطلب: يضع الطلبات.
- Rabbit MQ: قائمة انتظار الرسائل لقائمة انتظار الطلبات.
إشعار
لا نوصي بتشغيل حاويات ذات حالة، مثل Rabbit MQ، دون تخزين مستمر للإنتاج. تستخدم هذه الحاويات هنا للبساطة، لكننا نوصي باستخدام خدمات مدارة، مثل Azure Cosmos DB أو ناقل خدمة Azure.
إنشاء مساحة اسم
aks-store-demoلنشر موارد Kubernetes فيها.kubectl create ns aks-store-demoانشر التطبيق باستخدام الأمر kubectl apply في مساحة الاسم
aks-store-demo. ملف YAML الذي يحدد النشر موجود على GitHub.kubectl apply -n aks-store-demo -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-ingress-quickstart.yamlيظهر إخراج العينة التالي عمليات التوزيع والخدمات:
statefulset.apps/rabbitmq created configmap/rabbitmq-enabled-plugins 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 ingress/store-front created
اختبر التطبيق
عند تشغيل التطبيق، تعرض خدمة Kubernetes واجهة التطبيق الأمامية للإنترنت. قد تستغرق هذه العملية بضع دقائق حتى تكتمل.
تحقق من حالة pods المنشورة باستخدام الأمر kubectl get pods . تأكد من أن جميع القرون
Runningقبل المتابعة. إذا كان هذا هو أول عبء عمل تقوم بنشره، فقد يستغرق الأمر بضع دقائق حتى يقوم العقد التلقائي بإنشاء مجموعة عقد لتشغيل البودات.kubectl get pods -n aks-store-demoتحقق من وجود عنوان IP عام لتطبيق المتجر الأمامي. راقب سير العملية باستخدام أمر kubectl get serviceمع
--watchوسيطة.kubectl get ingress store-front -n aks-store-demo --watchيظهر إخراج ADDRESS لخدمة
store-frontفارغا في البداية:NAME CLASS HOSTS ADDRESS PORTS AGE store-front webapprouting.kubernetes.azure.com * 80 12mبمجرد تغيير عنوان من فارغ إلى عنوان IP عام فعلي، استخدم
CTRL-Cلإيقاف عملية المراقبةkubectl.يظهر إخراج العينة التالي عنوان IP عاما صالحا تم تعيينه للخدمة:
NAME CLASS HOSTS ADDRESS PORTS AGE store-front webapprouting.kubernetes.azure.com * 4.255.22.196 80 12mافتح متصفح ويب لعنوان IP الخارجي الخاص بجهازك لرؤية تطبيق Azure Store أثناء العمل.
قم بحذف نظام المجموعة
إذا لم تكن تخطط لمراجعة <درس c0>AKS، قم بتنظيف الموارد غير الضرورية لتجنب Azure التهم. قم بتشغيل الأمر az group delete لإزالة مجموعة الموارد وخدمة الحاوية وجميع الموارد ذات الصلة.
az group delete --name <resource-group> --yes --no-wait
إشعار
تم إنشاء نظام مجموعة AKS بهوية مدارة يعينها المستخدم. إذا لم تعد بحاجة إلى هذه الهوية، يمكنك إزالتها يدويا.
عندما لم تعد بحاجة إلى الموارد التي تم إنشاؤها عبر Terraform، قم بتشغيل خطة terraform وحدد العلامة destroy .
terraform plan -destroy -out main.destroy.tfplan
قم بتشغيل تطبيق terraform لتطبيق خطة التنفيذ.
terraform apply main.destroy.tfplan
الخطوات التالية
في هذا التشغيل السريع، قمت بنشر مجموعة Kubernetes باستخدام AKS Automatic داخل شبكة ظاهرية مخصصة ثم نشرت تطبيقا بسيطا متعدد الحاويات إليه. هذا التطبيق النموذجي هو لأغراض العرض التوضيحي فقط ولا يمثل جميع أفضل الممارسات لتطبيقات Kubernetes. للحصول على إرشادات حول إنشاء حلول كاملة باستخدام AKS للإنتاج، راجع إرشادات حل AKS.
لمعرفة المزيد حول AKS Automatic، تابع إلى المقدمة.