Övning – Konfigurera flera noder och aktivera skalning till noll i ett AKS-kluster

Slutförd

Med Azure Kubernetes Service kan du skapa olika nodpooler för att matcha specifika arbetsbelastningar mot noderna som körs i varje nodpool.

Kom ihåg från exemplet med drönarspårning att ditt team har utvecklat en ny tjänst för förutsägelsemodellering som bearbetar flygvägsinformation under extrema väderförhållanden och skapar optimala flygvägar. Den här tjänsten kräver stöd för GPU-baserade virtuella datorer (VM) och körs bara under specifika veckodagar. Teamet vill se till att inga virtuella datorer används när tjänsten inte körs.

Här skapar du ett AKS-hanterat (Azure Kubernetes Service) Kubernetes-kluster. Därefter konfigurerar du klustret så att det stöder flera nodpooler och gör att kluster kan skala noderna i nodpoolerna. Sedan lägger du till en andra nodpool för att stödja användararbetsbelastningar med ett dynamiskt nodantal. Slutligen skalar du antalet noder till noll för att minska kostnaden för de noder som används i AKS-klustret.

Skapa en ny resursgrupp

  1. Logga in i Azure Cloud Shell med ditt Azure-konto. Välj Bash-versionen av Cloud Shell.

  2. Du återanvänder de värden som du skapar här under alla övningar i den här modulen. Spara utdata för framtida användning.

  3. Välj en region som värd för resursgruppen. Funktioner från senare övningar är inte tillgängliga i alla regioner. Därför rekommenderar vi att du använder eastus som din region. Om du väljer att använda ett annat värde ändrar du värdet REGION_NAMEför .

    Kör följande kommandon för att registrera dina variabler:

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

    Dricks

    Du kan använda knappen Kopiera till att kopiera kommandon till Urklipp. Om du vill klistra in högerklickar du på en ny rad i Cloud Shell-terminalen och väljer Klistra in eller använder kortkommandot Skift+Insert (⌘+V på macOS).

    Du kan kontrollera varje värde genom att echo köra kommandot, echo $REGION_NAMEtill exempel .

  4. Anteckna din AKS_CLUSTER_NAME. Under övningarna använder du det här värdet senare för rensning och konfigurationsinställningar för klustret.

    echo $AKS_CLUSTER_NAME
    
  5. Skapa en ny resursgrupp med namnet rg-akscostsaving. Du distribuerar alla resurser som du skapar i de här övningarna i den här resursgruppen. Med en enda resursgrupp blir det enklare att rensa resurserna när du har slutfört modulen.

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

Skapa AKS-klustret

När resursgruppen har skapats kan du skapa AKS-kluster i gruppen. Ditt första steg är att hämta Kubernetes-versionen i den valda regionen. Den här versionen är inställd på att konfigurera klustret.

  1. Kör kommandot för att hämta Kubernetes-versionen az aks get-versions . Följande fråga returnerar en Kubernetes-version som inte är förhandsversion. Lagra värdet i en Bash-variabel med namnet VERSION. Hämta och lagra versionsnumret genom att köra följande kommando:

    VERSION=$(az aks get-versions \
        --location $REGION_NAME \
        --query "values[?isPreview==null].version | [-1]" \
        --output tsv)
    echo $VERSION
    
  2. az aks create Kör kommandot för att skapa AKS-klustret. Klustret körs med två noder i systemnodpoolen. Det kan ta några minuter att slutföra kommandot.

    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
    

    Kommandot az aks create har flera parametrar som möjliggör exakt konfiguration av ditt Kubernetes-kluster. Det finns två viktiga parametrar när du konfigurerar rätt stöd i klustret för skalning och flera nodpooler:

    Parameter och värde beskrivning
    --load-balancer-sku standard Standardmässigt lastbalanserarstöd i AKS är basic. Lastbalanseraren basic stöds inte när du använder flera nodpooler. Ange värdet till standard.
    --vm-set-type VirtualMachineScaleSets VM-skalningsuppsättningar krävs för användning av skalningsfunktionerna i AKS. Den här parametern aktiverar stöd för skalningsuppsättningar.

    Lägg märke till att två noder konfigureras i standardnodpoolen med hjälp av parametern --node-count 2. Kom ihåg från föregående beskrivning att viktiga systemtjänster körs i den här systemnodpoolen. Det är viktigt att produktionsklustret använder minst --node-count 3 så att du får tillförlitlighet i klusterdriften. Vi använder bara två noder för kostnadsöverväganden i den här övningen.

  3. Kör kommandot az aks nodepool list för att visa nodpoolerna i det nya klustret:

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

    Här är ett exempel på utdata från kommandot:

    [
      {
        "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
      }
    ]
    

    Observera att nodpoolens mode är inställd på System och att den name tilldelas automatiskt.

Lägga till en nodpool

  1. Klustret har en enskild nodpool. Lägg till en andra nodpool genom att az aks nodepool add köra kommandot . Kör kommandot i det här steget för att skapa en användarnodpool med tre noder och namnet batchprocpl. Tänk på att nodpoolernas namn måste börja med en liten bokstav och bara får innehålla alfanumeriska tecken. Namn på nodpooler är begränsade till tolv tecken för Linux-nodpooler och sex tecken för Windows-nodpooler.

    Kör följande kommando:

    az aks nodepool add \
        --resource-group $RESOURCE_GROUP \
        --cluster-name $AKS_CLUSTER_NAME \
        --name batchprocpl \
        --node-count 2
    
  2. Kör kommandot az aks nodepool list för att visa den nya nodpoolen i det nya klustret:

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

    Här är ett exempel på utdata från kommandot:

    [
      {
        "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
      }
    ]
    

    Observera att mode för den nya nodpoolen är angett till User och att name är batchprocpl.

Skala antalet noder för nodpoolen till noll

az aks nodepool scale Kör kommandot för att skala noder i en nodpool manuellt.

Kör kommandot az aks nodepool scale och använd parametern --node-count för att ange värdet för antal noder till 0.

Här är ett exempel på kommandot:

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

Här är ett exempel på utdata från kommandot:

{
  "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
}

Observera att parametervärdet för nodpoolen count är inställt på 0 och att enableAutoScaling värdet är inställt på null. Om du vill schemalägga arbetsbelastningar måste du öka antalet noder för den här nodpoolen manuellt, eftersom nodskapandet inte sker automatiskt som standard.

Konfigurera Kubernetes-kontexten

I utdata för det föregående kommandot är antalet nodpooler angett till 0. Du kan bekräfta tillgängliga noder i klustret genom att köra kommandot kubectl get nodes.

  1. Kör kubectl för att interagera med klustrets API-server. Du måste konfigurera en Kubernetes-klusterkontext för att tillåta kubectl att ansluta. Kontexten innehåller klustrets adress, en användare och ett namnområde. az aks get-credentials Kör kommandot för att konfigurera Kubernetes-kontexten i Cloud Shell.

    Hämta klustrets autentiseringsuppgifter genom att köra det här kommandot:

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

    Här är ett exempel på utdata från kommandot.

    Merged "akscostsaving-17835" as current context in /home/user/.kube/config
    
  2. Visa en lista över noderna i dina nodpooler.

    kubectl get nodes
    

    Här är ett exempel på kommandoutdata:

    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
    

    Observera att även om kommandot az aks nodepool list visar två nodpooler så finns det bara två noder tillgängliga i klustret, och båda kommer från nodepool1.

En bra strategi för att optimera kostnader i AKS när du hanterar arbetsbelastningskrav direkt är att göra följande:

  • Skala antalet noder i nodpooler manuellt.
  • Skala dyra NV-baserade nodpooler till noll.

Nu ska vi titta på en strategi där du behöver skala noder men inte kontrollerar efterfrågan direkt.