Cvičení – vytvoření horizontalPodAutoscaler

Dokončeno

Cvičení – škálování aplikace

Vytvoření clusteru AKS

Než budete moct začít škálovat aplikaci, musíte vytvořit cluster AKS s požadovanými prostředky.

  1. Přihlaste se ke službě Azure Cloud Shell pomocí účtu, do kterého chcete nasadit prostředky, a jako spuštěné prostředí vyberte Bash .

  2. Pomocí příkazu vytvořte skupinu az group create prostředků. Následující příklad vytvoří skupinu prostředků myResourceGroup v umístění eastus:

    az group create --name myResourceGroup --location eastus
    
  3. Pomocí příkazu vytvořte cluster az aks create AKS. Následující příklad vytvoří cluster pojmenovaný myAKSCluster ve myResourceGroup skupině prostředků. Cluster má jeden uzel a používá Standard_DS2_v2 velikost virtuálního počítače.

    az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 1 --node-vm-size Standard_DS2_v2 --enable-app-routing --generate-ssh-keys
    

    Dokončení tohoto příkazu trvá několik minut.

  4. Pomocí příkazu získejte přihlašovací údaje pro cluster az aks get-credentials .

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  5. Pomocí příkazu ověřte, že je cluster spuštěný a že se k němu kubectl get nodes můžete připojit.

    kubectl get nodes
    

    Příkaz by měl vrátit jeden uzel se stavem Ready.

Nasazení prostředků aplikace

Teď, když máte cluster, můžete do něj nasadit aplikaci.

Nasazení aplikace

  1. Pomocí příkazu vytvořte obor názvů kubectl create namespace aplikace.

    kubectl create namespace hpa-contoso
    
  2. Vytvořte nový soubor s názvem deployment.yml v editoru Cloud Shell a vložte do něj následující kód YAML:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
      namespace: hpa-contoso
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: contoso-website
      template:
        metadata:
          labels:
            app: contoso-website
        spec:
          containers:
            - name: contoso-website
              image: mcr.microsoft.com/mslearn/samples/contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80
    
  3. Uložte soubor.

  4. Pomocí příkazu nasaďte aplikaci do clusteru kubectl apply .

    kubectl apply -f deployment.yml
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    deployment.apps/contoso-website created
    

Vytvoření zóny DNS a nasazení prostředku příchozího přenosu dat

  1. Pomocí příkazu vytvořte zónu az network dns zone create Azure DNS. Následující příklad vytvoří zónu DNS s názvem contoso-website.com:

    az network dns zone create --resource-group myResourceGroup --name contoso-website.com
    
  2. Pomocí příkazu získejte ID prostředku zóny az network dns zone show DNS a uložte výstup do proměnné s názvem DNS_ZONE_ID.

    DNS_ZONE_ID=$(az network dns zone show --resource-group myResourceGroup --name contoso-website.com --query id --output tsv)
    
  3. Aktualizujte doplněk clusteru směrování aplikací a povolte integraci Azure DNS pomocí az aks approuting zone příkazu.

    az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${DNS_ZONE_ID} --attach-zones
    
  4. Vytvořte soubor s názvem ingress.yml v editoru Cloud Shell a vložte do něj následující kód YAML. Nezapomeňte zástupný symbol nahradit <dns-zone-name> názvem zóny DNS.

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: contoso-website
      namespace: hpa-contoso
      annotations:
    spec:
      ingressClassName: webapprouting.kubernetes.azure.com
      rules:
      - host: <dns-zone-name>
        http:
          paths:
          - backend:
              service:
                name: contoso-website
                port:
                  number: 80
            path: /
            pathType: Prefix
    
  5. Uložte soubor.

  6. Pomocí příkazu nasaďte prostředek příchozího přenosu dat do clusteru kubectl apply .

    kubectl apply -f ingress.yml
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    ingress.networking.k8s.io/contoso-website created
    

Vytvoření prostředku služby

  1. Vytvořte soubor s názvem service.yml v editoru Cloud Shell a vložte do něj následující kód YAML:

    apiVersion: v1
    kind: Service
    metadata:
      name: contoso-website
      namespace: hpa-contoso
    spec:
      type: ClusterIP
      ports:
        - port: 80
          targetPort: 80
      selector:
        app: contoso-website
    
  2. Uložte soubor.

  3. Pomocí příkazu nasaďte prostředek služby do clusteru kubectl apply .

    kubectl apply -f service.yml
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    service/contoso-website created
    

Vytvoření HorizontalPodAutoscaler

  1. Vytvořte soubor s názvem hpa.yml v editoru Cloud Shell a vložte do něj následující kód YAML:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: contoso-website
      namespace: hpa-contoso
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: contoso-website
      minReplicas: 1
      maxReplicas: 10
      metrics:
        - type: Resource
          resource:
            name: cpu
            target:
              type: Utilization
              averageUtilization: 20
        - type: Resource
          resource:
            name: memory
            target:
              type: Utilization
              averageUtilization: 50
    

    Je důležité zdůraznit, že scaleTargetRef klíče musí být stejné jako vytvořený prostředek nasazení. Ve vašem případě se nasazení, které jste vytvořili, nazývá apiVersionapps/v1 a nazývá contoso-websitese . Tato platforma HPA je nakonfigurovaná tak, aby dotazovala nativní metriku procesoru. Pokud tato metrika po určitou dobu překročí průměr 20 %, škáluje nasazení v jednotce. Algoritmus použitý k výpočtu této metriky vychází z této matematické rovnice:

    desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
    

    maxReplicas Klíče minReplicas definují minimální a maximální počet replik, které může nasazení mít. Klíč metrics definuje metriky dotazů HPA pro škálování nasazení. V tomto případě HPA dotazuje metriky procesoru a paměti. Pokud metrika procesoru překročí 20 % nebo metrika paměti překročí 50 %, hpA škáluje nasazení.

  2. Uložte soubor.

  3. Pomocí příkazu vytvořte HPA kubectl apply .

    kubectl apply -f hpa.yml
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    horizontalpodautoscaler.autoscaling/contoso-website created
    

Kontrola výsledků

  1. Pomocí příkazu zadejte dotaz na metriky a využití HPA kubectl get hpa .

    kubectl get hpa --namespace hpa-contoso
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    NAME              REFERENCE                    TARGETS          MINPODS   MAXPODS   REPLICAS   AGE
    contoso-website   Deployment/contoso-website   0%/20%, 0%/50%   1         10        1          83s
    

    TARGETS Všimněte si sloupce. Zobrazuje aktuální využití metrik definovaných v prostředí HPA. V tomto případě je využití procesoru 0 % a využití paměti je 0 %. Důvodem je to, že aplikace nepřijímá žádný provoz.

    Poznámka:

    Je možné, že HPA zobrazuje unknown metriky za několik prvních sekund, protože se pokouší spojit s rozhraním API pro metriky a načíst je ze serveru.