Alıştırma - AKS kümesinde birden çok düğüm yapılandırma ve sıfıra ölçeklendirmeyi etkinleştirme

Tamamlandı

Azure Kubernetes Service, her bir düğüm havuzunda çalışan düğümlerle belirli iş yüklerini eşleştirmek için farklı düğüm havuzları oluşturmanıza olanak sağlar.

İnsansız hava aracı izleme örneğinden hatırlayacağınız üzere ekibiniz, uçuk hava koşullarında uçuş yolu bilgilerini işleyen ve en uygun uçuş rotalarını oluşturan yeni bir tahmine dayalı modelleme hizmeti geliştirmiş. Bu hizmet için GPU tabanlı sanal makine (VM) desteği gerekiyor ve hizmet yalnızca haftanın belirli günlerinde çalıştırılıyor. Takım, hizmet çalıştırılmadığında herhangi bir VMS kullanılmadığından emin olmak istiyor.

Burada, Azure Kubernetes Service (AKS) tarafından yönetilen bir Kubernetes kümesi oluşturacaksınız. Ardından, kümeyi birden çok düğüm havuzunu destekleyecek şekilde yapılandıracak ve kümelerin düğüm havuzlarındaki düğümleri ölçeklendirmesine izin vereceğiz. Ardından, dinamik düğüm sayısına sahip kullanıcı iş yüklerini desteklemek için ikinci bir düğüm havuzu ekleyeceksiniz. Son olarak, AKS kümenizde kullanılan düğümlerin maliyetini azaltmak için düğüm sayısını sıfıra ölçeklendireceksiniz.

Yeni bir kaynak grubu oluşturma

  1. Azure hesabınızı kullanarak Azure Cloud Shell’de oturum açın. Cloud Shell’in Bash sürümünü seçin.

  2. Bu modüldeki tüm alıştırmalarda burada oluşturduğunuz değerleri yeniden kullanacaksınız. Çıkışı gelecekte kullanmak üzere kaydedin.

  3. Kaynak grubunuzu barındırmak için bir bölge seçin. Sonraki alıştırmalardaki özellikler tüm bölgelerde kullanılamaz. Bu nedenle bölgeniz olarak eastus kullanmanızı öneririz. Farklı bir değer kullanmayı seçerseniz değerini değiştirin REGION_NAME.

    Değişkenlerinizi kaydetmek için aşağıdaki komutları çalıştırın:

    REGION_NAME=eastus
    RESOURCE_GROUP=rg-akscostsaving
    AKS_CLUSTER_NAME=akscostsaving-$RANDOM
    

    Bahşiş

    Komutları panoya kopyalamak için Kopyala düğmesini kullanabilirsiniz. Yapıştırmak için Cloud Shell terminalinde yeni bir satıra sağ tıklayıp Yapıştır'ı seçin veya Shift+Insert klavye kısayolunu (macOS üzerinde⌘+V) kullanın.

    Komutunu çalıştırarak echo her değeri de kontrol edebilirsiniz; örneğin, echo $REGION_NAME.

  4. not edin AKS_CLUSTER_NAME. Alıştırmalar boyunca bu değeri daha sonra kümenizin temizleme ve yapılandırma ayarları için kullanacaksınız.

    echo $AKS_CLUSTER_NAME
    
  5. rg-akscostsaving adlı yeni bir kaynak grubu oluşturun. Bu alıştırmalarda oluşturduğunuz tüm kaynakları bu kaynak grubuna dağıtacaksınız. Tek kaynak grubu kullanırsanız, modülü bitirdikten sonra kaynakları daha kolay temizleyebilirsiniz.

    az group create \
        --name $RESOURCE_GROUP \
        --location $REGION_NAME
    

AKS kümesini oluşturma

Kaynak grubu oluşturulduktan sonra, grup içinde AKS kümeleri oluşturabilirsiniz. İlk adımınız, seçtiğiniz bölgede Kubernetes sürümünü almaktır. Bu sürüm kümenizi yapılandıracak şekilde ayarlanmıştır.

  1. Kubernetes sürümünü almak için komutunu çalıştırın az aks get-versions . Aşağıdaki sorgu önizleme olmayan bir Kubernetes sürümü döndürür. Bu değeri adlı VERSIONbir Bash değişkeninde depolayın. Sürüm numarasını almak ve depolamak için aşağıdaki komutu çalıştırın:

    VERSION=$(az aks get-versions \
        --location $REGION_NAME \
        --query "values[?isPreview==null].version | [-1]" \
        --output tsv)
    echo $VERSION
    
  2. az aks create AKS kümesini oluşturmak için komutunu çalıştırın. Küme, sistem düğümü havuzunda iki düğümle çalışır. Bu komutun tamamlanması birkaç dakika sürebilir.

    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $AKS_CLUSTER_NAME \
        --location $REGION_NAME \
        --kubernetes-version $VERSION \
        --node-count 2 \
        --load-balancer-sku standard \
        --vm-set-type VirtualMachineScaleSets \
        --generate-ssh-keys
    

    az aks create komutunda Kubernetes kümenizi tam olarak istediğiniz şekilde yapılandırmanızı sağlayan birkaç parametre vardır. Kümenize ölçeklendirme ve birden çok düğüm havuzu desteği eklemek için yapılandırmanız gereken iki önemli parametre vardır:

    Parametre ve değer Açıklama
    --load-balancer-sku standard AKS'deki varsayılan yük dengeleyici desteği, basic düzeydedir. basic yük dengeleyici, birden çok düğüm havuzu kullanıldığında desteklenmez. Değeri standard olarak ayarlayın.
    --vm-set-type VirtualMachineScaleSets AKS'deki ölçeklendirme özelliklerini kullanmak için sanal makine ölçek kümeleri gerekir. Bu parametre ölçek kümesi desteği sunar.

    --node-count 2 parametresi kullanılarak varsayılan düğüm havuzunda iki düğüm yapılandırıldığına dikkat edin. Önceki açıklamadan, temel sistem hizmetlerinin bu sistem düğümü havuzunda çalıştırıldığını hatırlayın. Üretim kümelerinin, küme işleminde güvenilirlik için en az --node-count 3 kullanması önemlidir. Bu alıştırmada maliyet nedeniyle yalnızca iki düğüm kullanıyoruz.

  3. Yeni kümenizdeki düğüm havuzlarını listelemek için az aks nodepool list komutunu çalıştırın:

    az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
    

    Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:

    [
      {
        "agentPoolType": "VirtualMachineScaleSets",
        "availabilityZones": null,
        "count": 2,
        "enableAutoScaling": null,
        "enableNodePublicIp": false,
        "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1",
        "mode": "System",
        "name": "nodepool1",
        ...
        "type": "Microsoft.ContainerService/managedClusters/agentPools",
        "upgradeSettings": null,
        "vmSize": "Standard_DS2_v2",
        "vnetSubnetId": null
      }
    ]
    

    Düğüm havuzunun mode olarak ayarlandığına System ve öğesinin name otomatik olarak atandığını görebilirsiniz.

Düğüm havuzu ekleme

  1. Kümenizde tek bir düğüm havuzu var. komutunu çalıştırarak az aks nodepool add ikinci bir düğüm havuzu ekleyin. Üç düğüme ve adına batchprocplsahip bir kullanıcı düğümü havuzu oluşturmak için bu adımda komutunu çalıştırın. Düğüm havuzu adlarının küçük harfle başlaması gerektiğini ve yalnızca alfasayısal karakterlerden oluşabileceğini unutmayın. Linux düğüm adları en fazla 12 karakter, Windows düğüm adları ise en fazla altı karakter uzunluğunda olabilir.

    Şu komutu çalıştırın:

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl \
        --node-count 2
    
  2. Yeni kümenizdeki yeni düğüm havuzunu listelemek için az aks nodepool list komutunu çalıştırın:

    az aks nodepool list --resource-group $RESOURCE_GROUP --cluster-name $AKS_CLUSTER_NAME
    

    Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:

    [
      {
        "agentPoolType": "VirtualMachineScaleSets",
        "availabilityZones": null,
        "count": 2,
        "enableAutoScaling": null,
        "enableNodePublicIp": false,
        "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl",
        "mode": "User",
        "name": "batchprocpl",
        ...
        "type": "Microsoft.ContainerService/managedClusters/agentPools",
        "upgradeSettings": {
          "maxSurge": null
        },
        "vmSize": "Standard_DS2_v2",
        "vnetSubnetId": null
      },
      {
        "agentPoolType": "VirtualMachineScaleSets",
        "availabilityZones": null,
        "count": 2,
        "enableAutoScaling": null,
        "enableNodePublicIp": false,
        "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/nodepool1",
        "mode": "System",
        "name": "nodepool1",
        ...
        "type": "Microsoft.ContainerService/managedClusters/agentPools",
        "upgradeSettings": null,
        "vmSize": "Standard_DS2_v2",
        "vnetSubnetId": null
      }
    ]
    

    Yeni düğüm havuzunun mode değerinin User olarak ayarlandığına ve name değerinin batchprocpl olduğuna dikkat edin.

Düğüm havuzu düğüm sayısını sıfır olarak ölçeklendirme

Düğüm havuzundaki az aks nodepool scale düğümleri el ile ölçeklendirmek için komutunu çalıştırın.

az aks nodepool scale komutunu çalıştırın ve --node-count parametresini kullanarak düğüm sayısı değerini 0 olarak ayarlayın.

Aşağıda komutun bir örneği verilmiştir:

az aks nodepool scale \
    --resource-group $RESOURCE_GROUP \
    --cluster-name $AKS_CLUSTER_NAME \
    --name batchprocpl \
    --node-count 0

Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:

{
  "agentPoolType": "VirtualMachineScaleSets",
  "availabilityZones": null,
  "count": 0,
  "enableAutoScaling": null,
  "enableNodePublicIp": false,
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourcegroups/rg-akscostsaving/providers/Microsoft.ContainerService/managedClusters/akscostsaving-17835/agentPools/batchprocpl",
  "maxCount": null,
  "maxPods": 110,
  "minCount": null,
  "mode": "User",
  "name": "batchprocpl",
  "nodeImageVersion": "AKSUbuntu-1604-2020.06.10",
  "nodeLabels": null,
  "nodeTaints": null,
  "orchestratorVersion": "1.17.9",
  "osDiskSizeGb": 128,
  "osType": "Linux",
  "provisioningState": "Succeeded",
  "proximityPlacementGroupId": null,
  "resourceGroup": "rg-akscostsaving",
  "scaleSetEvictionPolicy": null,
  "scaleSetPriority": null,
  "spotMaxPrice": null,
  "tags": null,
  "type": "Microsoft.ContainerService/managedClusters/agentPools",
  "upgradeSettings": {
    "maxSurge": null
  },
  "vmSize": "Standard_DS2_v2",
  "vnetSubnetId": null
}

Düğüm havuzu count parametre değerinin 0 olarak ve değerinin olarak ayarlandığına enableAutoScalingnulldikkat edin. İş yüklerini zamanlamak için bu düğüm havuzunun düğüm sayısını el ile artırmanız gerekir çünkü düğüm oluşturma işlemi varsayılan olarak otomatik olarak gerçekleşmez.

Kubernetes bağlamını yapılandırma

Yukarıdaki komutun çıkışında düğüm havuzu sayısı 0 olarak belirtilmiştir. kubectl get nodes komutunu çalıştırarak kümedeki kullanılabilen düğümleri doğrulayabilirsiniz.

  1. Kümenizin API sunucusuyla etkileşime geçmek için komutunu çalıştırın kubectl . kubectl hizmetinin bağlanması için bir Kubernetes kümesi bağlamı yapılandırmanız gerekir. Bağlam kümenin adresini, bir kullanıcıyı ve ad alanını içerir. Cloud Shell'de az aks get-credentials Kubernetes bağlamını yapılandırmak için komutunu çalıştırın.

    Şu komutu çalıştırarak küme kimlik bilgilerini alın:

    az aks get-credentials \
        --resource-group $RESOURCE_GROUP \
        --name $AKS_CLUSTER_NAME
    

    Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz.

    Merged "akscostsaving-17835" as current context in /home/user/.kube/config
    
  2. Düğüm havuzlarınızdaki düğümleri listeleyin.

    kubectl get nodes
    

    Aşağıda komutun çıktısının bir örneğini inceleyebilirsiniz:

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-nodepool1-37990379-vmss000000   Ready    agent   32m   v1.17.9
    aks-nodepool1-37990379-vmss000001   Ready    agent   32m   v1.17.9
    

    az aks nodepool list komutunun sonucunda iki düğüm havuzu listelenmesine rağmen kümede yalnızca iki düğüm bulunduğuna ve ikisinin de nodepool1 kaynaklı olduğuna dikkat edin.

İş yükü taleplerini doğrudan yönettiğiniz durumlarda AKS maliyetlerini iyileştirmek için iyi bir strateji belirlemek isterseniz:

  • Düğüm havuzlarındaki düğüm sayısını el ile ölçeklendirin.
  • Yüksek maliyetli NV tabanlı kullanıcı düğümü havuzlarını sıfıra ölçeklendirin.

Şimdi düğümleri ölçeklendirmeniz gereken ancak talebi doğrudan kontrol etmediğiniz başka bir stratejiye göz atalım.