Ćwiczenie — tworzenie narzędzia HorizontalPodAutoscaler
Ćwiczenie — skalowanie aplikacji
Tworzenie klastra AKS
Przed rozpoczęciem skalowania aplikacji należy utworzyć klaster usługi AKS z wymaganymi zasobami.
Zaloguj się do usługi Azure Cloud Shell przy użyciu konta, w którym chcesz wdrożyć zasoby, i wybierz pozycję Bash jako działającą powłokę.
Utwórz grupę zasobów przy użyciu
az group create
polecenia . Poniższy przykład obejmuje tworzenie grupy zasobów o nazwiemyResourceGroup
w lokalizacjieastus
:az group create --name myResourceGroup --location eastus
Utwórz klaster usługi AKS przy użyciu
az aks create
polecenia . Poniższy przykład tworzy klaster o nazwiemyAKSCluster
wmyResourceGroup
grupie zasobów. Klaster ma jeden węzeł i używa rozmiaruStandard_DS2_v2
maszyny wirtualnej.az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 1 --node-vm-size Standard_DS2_v2 --enable-app-routing --generate-ssh-keys
Wykonanie tego polecenia zajmie kilka minut.
Pobierz poświadczenia dla klastra przy użyciu
az aks get-credentials
polecenia .az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Sprawdź, czy klaster jest uruchomiony i czy możesz nawiązać z nim połączenie przy użyciu
kubectl get nodes
polecenia .kubectl get nodes
Polecenie powinno zwrócić jeden węzeł ze stanem
Ready
.
Wdrażanie zasobów aplikacji
Teraz, gdy masz klaster, możesz wdrożyć w niej aplikację.
Wdrażanie aplikacji
Utwórz przestrzeń nazw aplikacji przy użyciu
kubectl create namespace
polecenia .kubectl create namespace hpa-contoso
Utwórz nowy plik o nazwie
deployment.yml
w edytorze usługi Cloud Shell i wklej do niego następujący kod 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
Zapisz plik.
Wdróż aplikację w klastrze przy użyciu
kubectl apply
polecenia .kubectl apply -f deployment.yml
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
deployment.apps/contoso-website created
Tworzenie strefy DNS i wdrażanie zasobu ruchu przychodzącego
Utwórz strefę usługi Azure DNS przy użyciu
az network dns zone create
polecenia . Poniższy przykład tworzy strefę DNS o nazwie contoso-website.com:az network dns zone create --resource-group myResourceGroup --name contoso-website.com
Pobierz identyfikator zasobu dla strefy DNS przy użyciu
az network dns zone show
polecenia i zapisz dane wyjściowe w zmiennej o nazwie DNS_ZONE_ID.DNS_ZONE_ID=$(az network dns zone show --resource-group myResourceGroup --name contoso-website.com --query id --output tsv)
Zaktualizuj dodatek klastra routingu aplikacji, aby włączyć integrację usługi Azure DNS przy użyciu
az aks approuting zone
polecenia .az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${DNS_ZONE_ID} --attach-zones
Utwórz plik o nazwie
ingress.yml
w edytorze usługi Cloud Shell i wklej do niego następujący kod YAML. Pamiętaj, aby zastąpić<dns-zone-name>
symbol zastępczy nazwą strefy 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
Zapisz plik.
Wdróż zasób ruchu przychodzącego w klastrze przy użyciu
kubectl apply
polecenia .kubectl apply -f ingress.yml
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
ingress.networking.k8s.io/contoso-website created
Tworzenie zasobu usługi
Utwórz plik o nazwie
service.yml
w edytorze usługi Cloud Shell i wklej do niego następujący kod YAML:apiVersion: v1 kind: Service metadata: name: contoso-website namespace: hpa-contoso spec: type: ClusterIP ports: - port: 80 targetPort: 80 selector: app: contoso-website
Zapisz plik.
Wdróż zasób usługi w klastrze przy użyciu
kubectl apply
polecenia .kubectl apply -f service.yml
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
service/contoso-website created
Tworzenie narzędzia HorizontalPodAutoscaler
Utwórz plik o nazwie
hpa.yml
w edytorze usługi Cloud Shell i wklej do niego następujący kod 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
Ważne jest, aby podkreślić, że
scaleTargetRef
klucze muszą być takie same jak utworzony zasób wdrożenia. W Twoim przypadku utworzone wdrożenie maapiVersion
wartość jakoapps/v1
i nosi nazwęcontoso-website
. Ta usługa HPA jest skonfigurowana do wykonywania zapytań dotyczących natywnej metryki procesora CPU. Jeśli ta metryka przekroczy średnią 20% przez określony czas, skaluje wdrożenie w poziomie w jednostce. Algorytm używany do obliczania tej metryki jest oparty na tym równaniu matematycznym:desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
Klucze
minReplicas
imaxReplicas
definiują minimalną i maksymalną liczbę replik, które może mieć wdrożenie. Kluczmetrics
definiuje metryki zapytań HPA w celu skalowania wdrożenia. W tym przypadku narzędzie HPA wykonuje zapytania dotyczące metryk procesora CPU i pamięci. Jeśli metryka procesora CPU przekroczy 20% lub metryka pamięci przekroczy 50%, narzędzie HPA skaluje wdrożenie w poziomie.Zapisz plik.
Utwórz narzędzie HPA przy użyciu
kubectl apply
polecenia .kubectl apply -f hpa.yml
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
horizontalpodautoscaler.autoscaling/contoso-website created
Sprawdzanie wyników
Wykonaj zapytanie dotyczące metryk i użycia narzędzia HPA przy użyciu
kubectl get hpa
polecenia .kubectl get hpa --namespace hpa-contoso
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE contoso-website Deployment/contoso-website 0%/20%, 0%/50% 1 10 1 83s
Zwróć uwagę na kolumnę
TARGETS
. Przedstawia bieżące użycie metryk zdefiniowanych w narzędziu HPA. W takim przypadku użycie procesora CPU wynosi 0%, a użycie pamięci wynosi 0%. Dzieje się tak, ponieważ aplikacja nie odbiera żadnego ruchu.Uwaga
Możliwe, że narzędzie HPA wyświetla
unknown
metryki przez pierwsze kilka sekund, ponieważ próbuje uzyskać dostęp do interfejsu API metryk, aby pobrać te metryki z serwera.