Cvičení – vytvoření horizontalPodAutoscaler
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.
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 .
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
Pomocí příkazu vytvořte cluster
az aks create
AKS. Následující příklad vytvoří cluster pojmenovanýmyAKSCluster
vemyResourceGroup
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.
Pomocí příkazu získejte přihlašovací údaje pro cluster
az aks get-credentials
.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
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
Pomocí příkazu vytvořte obor názvů
kubectl create namespace
aplikace.kubectl create namespace hpa-contoso
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
Uložte soubor.
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
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
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)
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
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
Uložte soubor.
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
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
Uložte soubor.
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
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áapiVersion
apps/v1
a nazývácontoso-website
se . 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íčeminReplicas
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í.Uložte soubor.
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ů
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.