Ö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 med 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-baserad virtuell dator (VM) och körs endast på specifika dagar under veckan. Teamet vill se till att inga virtuella datorer används när tjänsten inte körs.

Här skapar du ett AkS-hanterat Kubernetes-kluster (Azure Kubernetes Service). 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 på 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 för REGION_NAME.

    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 för att kopiera kommandon till urklippet. Om du vill klistra in högerklickar du på en ny rad i Cloud Shell-terminalen och väljer Klistra ineller använder kortkommandot Skift+Insert (⌘+V på macOS).

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

  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. En enskild resursgrupp gör 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 az aks get-versions för att hämta Kubernetes-versionen. Följande fråga returnerar en Kubernetes-version som inte är förhandsversion. Lagra värdet i en Bash-variabel med namnet VERSION. Kör följande kommando för att hämta och lagra versionsnumret:

    VERSION=$(az aks get-versions \
        --location $REGION_NAME \
        --query "values[?isPreview==null].version | [-1]" \
        --output tsv)
    echo $VERSION
    
  2. Kör kommandot az aks create för att skapa AKS-klustret. Klustret körs med två noder i systemnodpoolen. Det kan ta några minuter att slutföra det här 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 för att konfigurera rätt stöd i klustret för skalning och flera nodpooler:

    Parameter och värde Beskrivning
    --load-balancer-sku standard Standardstöd för lastbalanserare i AKS är basic. Den basic lastbalanseraren stöds inte när du använder flera nodpooler. Ange värdet till standard.
    --vm-set-type VirtualMachineScaleSets Om du vill använda skalningsfunktionerna i AKS krävs virtuella maskinskalningsuppsättningar. Den här parametern aktiverar stöd för skalningsuppsättningar.

    Observera 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 produktionskluster använder minst --node-count 3 för tillförlitlighet i klusterdrift. Vi använder bara två noder här 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 name tilldelas automatiskt.

Lägga till en nodpool

  1. Klustret har en enda nodpool. Lägg till en andra nodpool genom att köra kommandot az aks nodepool add. 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 namn på nodpooler måste börja med en liten bokstav och endast innehålla alfanumeriska tecken. Namn på nodpooler är begränsade till 12 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 en lista över 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 den nya nodpoolens mode är inställd på User och att name är batchprocpl.

Skala nodantalet för nodpoolen till noll

Kör kommandot az aks nodepool scale 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 nodpoolens count parametervärde är inställt på 0 och att värdet för enableAutoScaling ä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 från föregående kommando anges antalet noderpooler 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 så att kubectl kan ansluta. Kontexten innehåller klustrets adress, en användare och ett namnområde. Kör kommandot az aks get-credentials för att konfigurera Kubernetes-kontexten i Cloud Shell.

    Hämta autentiseringsuppgifterna för klustret 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 finns det bara två noder tillgängliga i klustret och båda är från nodepool1.

För att optimera kostnaderna för AKS när du hanterar arbetsbelastningskrav direkt är en bra strategi att:

  • Skala nodantalet manuellt i nodpooler.
  • Skala dyra, NV-baserade användarnodpooler till noll.

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