إنشاء وتكوين مجموعة Azure Kubernetes Services (AKS) لاستخدام العقد الظاهرية باستخدام Azure CLI

تمكن العقد الظاهرية اتصال الشبكة بين pods التي تعمل في مثيلات حاوية Azure (ACI) ومجموعات AKS. لتوفير هذا الاتصال، يمكنك إنشاء شبكة فرعية للشبكة الظاهرية وتعيين الأذونات المفوضة. تعمل العُقد الظاهرية فقط مع مجموعات AKS التي تم إنشاؤها باستخدام شبكة متقدمة (Azure CNI). بشكل افتراضي، يتم إنشاء مجموعات AKS مع الشبكات الأساسية (kubenet). توضح لك هذه المقالة كيفية إنشاء شبكة افتراضية وشبكات فرعية، ثم نشر مجموعة AKS التي تستخدم الشبكات المتقدمة.

توضح هذه المقالة كيفية استخدام Azure CLI لإنشاء موارد الشبكة الظاهرية وتكوينها ومجموعة AKS الممكنة مع العقد الظاهرية.

قبل البدء

هام

قبل استخدام العُقد الظاهرية مع AKS، راجع كلّاً من قيود العقد الظاهرية لـ AKS وقيود الشبكات الظاهرية لـ ACI. تؤثر هذه القيود على الموقع وتكوين الشبكة وتفاصيل التكوين الأخرى لكل من مجموعة AKS والعُقد الظاهرية.

  • تحتاج إلى موفر خدمة ACI مسجل مع اشتراكك. يمكنك التحقق من حالة تسجيل موفر ACI باستخدام az provider list الأمر .

    az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
    

    يجب على موفر Microsoft.ContainerInstance الإبلاغ على أنه مسجل، كما هو موضح في المثال التالي الناتج:

    Namespace                    RegistrationState    RegistrationPolicy
    ---------------------------  -------------------  --------------------
    Microsoft.ContainerInstance  Registered           RegistrationRequired
    

    إذا ظهر الموفر على أنه NotRegistered، فقم بتسجيل الموفر باستخدام az provider register.

    az provider register --namespace Microsoft.ContainerInstance
    
  • إذا كنت تستخدم Azure CLI، تتطلب هذه المقالة الإصدار 2.0.49 من Azure CLI أو أحدث. قم بتشغيل az --version للعثور على الإصدار. إذا كنت بحاجة إلى التثبيت أو الترقية، فراجع تثبيت Azure CLI. يمكنك أيضا استخدام Azure Cloud Shell.

إطلاق Azure Cloud Shell

Azure Cloud Shell هو shell تفاعلي مجاني يمكنك استخدامه لتشغيل الخطوات الواردة في هذه المقالة. يحتوي على أدوات Azure الشائعة المثبتة مسبقا والمكونة.

لفتح Cloud Shell، حدد Try it من الزاوية اليمنى العليا لقالب التعليمات البرمجية. يمكنك أيضًا تشغيل Cloud Shell في علامة تبويب مستعرض منفصلة بالانتقال إلى https://shell.azure.com/bash. حدد "Copy" لنسخ كتل التعليمة البرمجية، ولصقها في Cloud Shell، ثم اضغط على "enter" لتشغيلها.

إنشاء مجموعة موارد

مجموعة الموارد عبارة عن حاوية منطقية يتم فيها توزيع موارد Azure وإدارتها.

  • إنشاء مجموعة موارد باستخدام az group create الأمر .

    az group create --name myResourceGroup --location eastus
    

إنشاء شبكة ظاهرية

هام

تتطلب العقدة الظاهرية شبكة ظاهرية مخصصة وشبكة فرعية مقترنة. لا يمكن إقرانه بنفس الشبكة الظاهرية مثل نظام مجموعة AKS.

  1. إنشاء شبكة ظاهرية az network vnet create باستخدام الأمر . ينشئ المثال التالي شبكة ظاهرية تسمى myVnet ببادئة عنوان 10.0.0.0/8 وشبكة فرعية تسمى myAKSSubnet. بادئة العنوان لهذه الشبكة الفرعية افتراضيا إلى 10.240.0.0/16.

    az network vnet create \
        --resource-group myResourceGroup \
        --name myVnet \
        --address-prefixes 10.0.0.0/8 \
        --subnet-name myAKSSubnet \
        --subnet-prefix 10.240.0.0/16
    
  2. إنشاء شبكة فرعية إضافية للعقد الظاهرية az network vnet subnet create باستخدام الأمر . ينشئ المثال التالي شبكة فرعية تسمى myVirtualNodeSubnet ببادئة عنوان 10.241.0.0/16.

    az network vnet subnet create \
        --resource-group myResourceGroup \
        --vnet-name myVnet \
        --name myVirtualNodeSubnet \
        --address-prefixes 10.241.0.0/16
    

إنشاء نظام مجموعة AKS مع الهوية المُدارة

  1. احصل على معرف الشبكة الفرعية az network vnet subnet show باستخدام الأمر .

    az network vnet subnet show --resource-group myResourceGroup --vnet-name myVnet --name myAKSSubnet --query id -o tsv
    
  2. إنشاء نظام مجموعة AKS باستخدام az aks create الأمر واستبدال <subnetId> بالمعرف الذي تم الحصول عليه في الخطوة السابقة. ينشئ المثال التالي مجموعة تسمى myAKSCluster مع خمس عقد.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --node-count 5 \
        --network-plugin azure \
        --vnet-subnet-id <subnetId> \
        --generate-ssh-keys
    

    بعد عدة دقائق، يكمل الأمر ويعيد معلومات بتنسيق JSON حول نظام المجموعة.

لمزيد من المعلومات حول الهويات المدارة، راجع استخدام الهويات المدارة.

تمكين الوظيفة الإضافية للعقد الظاهرية

  • تمكين العقد الظاهرية az aks enable-addons باستخدام الأمر . يستخدم المثال التالي الشبكة الفرعية المسماة myVirtualNodeSubnet التي تم إنشاؤها في خطوة سابقة.

    az aks enable-addons \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --addons virtual-node \
        --subnet-name myVirtualNodeSubnet
    

الاتصال بنظام المجموعة

  1. قم بتكوين kubectl للاتصال بنظام مجموعة Kubernetes باستخدام أمر az aks get-credentials. تقوم هذه الخطوة بتنزيل بيانات الاعتماد وتكوين Kubernetes CLI لاستخدامها.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. تحقق من الاتصال بالمجموعة باستخدام kubectl get الأمر الذي يقوم بإرجاع قائمة بعقد نظام المجموعة.

    kubectl get nodes
    

    يظهر إخراج المثال التالي عقدة الجهاز الظاهري الفردية التي تم إنشاؤها والعقدة الظاهرية ل Linux، virtual-node-aci-linux:

    NAME                          STATUS    ROLES     AGE       VERSION
    virtual-node-aci-linux        Ready     agent     28m       v1.11.2
    aks-agentpool-14693408-0      Ready     agent     32m       v1.11.2
    

نشر تطبيق نموذج

  1. قم بإنشاء ملف باسم virtual-node.yaml وانسخه في YAML التالي. يقوم YAML بجدولة الحاوية على العقدة عن طريق تعريف nodeSelector والتسامح.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: aci-helloworld
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: aci-helloworld
      template:
        metadata:
          labels:
            app: aci-helloworld
        spec:
          containers:
          - name: aci-helloworld
            image: mcr.microsoft.com/azuredocs/aci-helloworld
            ports:
            - containerPort: 80
          nodeSelector:
            kubernetes.io/role: agent
            beta.kubernetes.io/os: linux
            type: virtual-kubelet
          tolerations:
          - key: virtual-kubelet.io/provider
            operator: Exists
          - key: azure.com/aci
            effect: NoSchedule
    
  2. قم بتشغيل التطبيق باستخدام kubectl apply الأمر .

    kubectl apply -f virtual-node.yaml
    
  3. احصل على قائمة بالقرون والعقدة المجدولة kubectl get pods باستخدام الأمر مع الوسيطة -o wide .

    kubectl get pods -o wide
    

    تتم جدولة الجراب على العقدة الظاهرية virtual-node-aci-linux، كما هو موضح في إخراج المثال التالي:

    NAME                            READY     STATUS    RESTARTS   AGE       IP           NODE
    aci-helloworld-9b55975f-bnmfl   1/1       Running   0          4m        10.241.0.4   virtual-node-aci-linux
    

    يتم تعيين عنوان IP داخلي للحجرة من الشبكة الفرعية لشبكة Azure الظاهرية المفوضة للاستخدام مع العُقد الظاهرية.

إشعار

إذا كنت تستخدم صورًا مخزنة في Azure Container Registry، فقم بتكوين سر Kubernetes واستخدمه. القيد الحالي للعقد الظاهرية هو أنه لا يمكنك استخدام المصادقة الأساسية لخدمة Microsoft Entra المتكاملة. إذا كنت لا تستخدم سرّاً، فإن pods المجدولة على العُقد الظاهرية تفشل في البدء والإبلاغ عن الخطأ HTTP response status code 400 error code "InaccessibleImage".

اختبار pod العُقدة الظاهرية

  1. اختبر الجراب الذي يعمل على العقدة الظاهرية عن طريق التصفح إلى التطبيق التجريبي مع عميل ويب. نظراً لأنه يتم تعيين عنوان IP داخلي لـ pod، يمكنك اختبار هذا الاتصال بسرعة من pod آخر على مجموعة AKS.

  2. إنشاء حاوية اختبار وإرفاق جلسة طرفية بها باستخدام الأمر التالي kubectl run -it .

    kubectl run -it --rm testvk --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
    
  3. تثبيت curl في جراب باستخدام apt-get.

    apt-get update && apt-get install -y curl
    
  4. الوصول إلى عنوان الجراب الخاص بك باستخدام curl، مثل http://10.241.0.4. قم بتوفير عنوان IP الداخلي الخاص بك الموضح في الأمر السابق kubectl get pods .

    curl -L http://10.241.0.4
    

    يتم عرض التطبيق التجريبي، كما هو موضح في إخراج المثال المكثف التالي:

    <html>
    <head>
      <title>Welcome to Azure Container Instances!</title>
    </head>
    [...]
    
  5. أغلق جلسة المحطة إلى حجرة الاختبار الخاصة بك باستخدام exit. عند انتهاء جلسة العمل الخاصة بك، يتم حذف الجراب.

قم بإزالة العُقد الظاهرية

  1. احذف الجراب الذي aci-helloworld يعمل على العقدة الظاهرية kubectl delete باستخدام الأمر .

    kubectl delete -f virtual-node.yaml
    
  2. تعطيل العقد الظاهرية az aks disable-addons باستخدام الأمر .

    az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node
    
  3. قم بإزالة موارد الشبكة الظاهرية ومجموعة الموارد باستخدام الأوامر التالية.

    # Change the name of your resource group, cluster and network resources as needed
    RES_GROUP=myResourceGroup
    AKS_CLUSTER=myAKScluster
    AKS_VNET=myVnet
    AKS_SUBNET=myVirtualNodeSubnet
    
    # Get AKS node resource group
    NODE_RES_GROUP=$(az aks show --resource-group $RES_GROUP --name $AKS_CLUSTER --query nodeResourceGroup --output tsv)
    
    # Get network profile ID
    NETWORK_PROFILE_ID=$(az network profile list --resource-group $NODE_RES_GROUP --query "[0].id" --output tsv)
    
    # Delete the network profile
    az network profile delete --id $NETWORK_PROFILE_ID -y
    
    # Grab the service association link ID
    SAL_ID=$(az network vnet subnet show --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --query id --output tsv)/providers/Microsoft.ContainerInstance/serviceAssociationLinks/default
    
    # Delete the service association link for the subnet
    az resource delete --ids $SAL_ID --api-version 2021-10-01
    
    # Delete the subnet delegation to Azure Container Instances
    az network vnet subnet update --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --remove delegations
    

الخطوات التالية

في هذه المقالة، قمت بجدولة جراب على العقدة الظاهرية وتعيين عنوان IP داخلي خاص. يمكنك بدلاً من ذلك إنشاء نشر خدمة وتوجيه نسبة استخدام الشبكة إلى pod الخاص بك من خلال موازن التحميل أو وحدة التحكم في الدخول. لمزيد من المعلومات، راجع إنشاء وحدة تحكم أساسية في الدخول في AKS.

غالبًا ما تكون العقد الظاهرية عبارة عن مكوّن واحد من حل التحجيم في AKS. لمزيد من المعلومات حول حلول التحجيم، راجع المقالات التالية: