Ćwiczenie — wdrażanie obiektu skalowania w klastrze usługi Azure Kubernetes Service
W tym ćwiczeniu wdrożysz niestandardową definicję zasobu obiektu skalowania (CRD) w klastrze usługi AKS. Obiekt skalowania zawiera wyzwalacz, który łączy wdrożona aplikację z usługą KEDA. Po wdrożeniu w usłudze AKS usługa KEDA monitoruje listę usługi Redis i skaluje w górę, jeśli długość listy przekracza zdefiniowany próg i skaluje w dół, jeśli długość listy spadnie poniżej zdefiniowanego progu.
ScaledObject
omówienie manifestu
scaleTargetRef
: W tej sekcji opisano, które obciążenie obserwuje KEDA.scaleTargetRef: apiVersion: apps/v1 # Optional. Default: apps/v1 kind: deployment # Optional. Default: Deployment name: contoso-microservice # Mandatory. Must be in the same namespace as the ScaledObject envSourceContainerName: contoso-microservice # Optional. Default: .spec.template.spec.containers[0]
minReplicaCount
imaxReplicaCount
: Te atrybuty określają zakres replik KEDA używanych do skalowania. W takim przypadku należy poinstruować KEDA, aby skalować z minimum zera do maksimum 20.minReplicaCount: 0 # Optional. Default: 0 maxReplicaCount: 20 # Optional. Default: 100
Uwaga
minReplicaCount: 0
przyjmuje domyślną liczbę replik wdrożenia z jednej do zera. Dzieje się tak, jeśli usługa jest bezczynna i nie przetwarza żadnych zdarzeń. W takim przypadku, jeśli na liście redis nie ma żadnych elementów, a usługa pozostaje bezczynna, KEDA skaluje do zera.advanced
: Ta sekcja jest związana z zaawansowanymi dostosowaniami usługi KEDA. PolecenierestoreToOriginalReplicaCount
nakazuje KEDA zwrócenie liczby replik do oryginalnej wartości po zdarzeń skalowania w górę. W takim przypadku należy ustawićfalse
wartość , co powoduje, że skalowanie wminReplicaCount
dół do wartości zero.restoreToOriginalReplicaCount: false # Optional. Default: false horizontalPodAutoscalerConfig: # Optional. Section to specify HPA related options behavior: # Optional. Use to modify HPA's scaling behavior scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 100 periodSeconds: 15
triggers
: Ta sekcja służyscalers
do wykrywania, czy obiekt powinien zostać aktywowany lub zdezaktywowany, i przekaż metryki niestandardowe dla określonych źródeł zdarzeń.listLength
Metryka nakazuje usłudze KEDA skalowanie w górę, gdy na liście znajduje się dziesięć elementów.triggers: - type: redis metadata: # address: # Format must be host:port passwordFromEnv: REDIS_KEY listName: keda # Required listLength: "10" # Required enableTLS: "false" # optional databaseIndex: "0" # optional hostFromEnv: REDIS_HOST portFromEnv: REDIS_PORT
Aby uzyskać więcej informacji, zobacz KEDA Scalers.
Tworzenie manifestu ScaledObject
W usłudze Cloud Shell utwórz plik manifestu dla wdrożenia kubernetes o nazwie
scaled-object.yaml
przy użyciutouch
polecenia :touch scaled-object.yaml
Otwórz edytor zintegrowany w usłudze Cloud Shell, wprowadzając polecenie
code .
Otwórz plik i dodaj następującą sekcję
scaled-object.yaml
kodu YAML:apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: scaled-contoso spec: scaleTargetRef: apiVersion: apps/v1 # Optional. Default: apps/v1 kind: deployment # Optional. Default: Deployment name: contoso-microservice # Mandatory. Must be in the same namespace as the ScaledObject envSourceContainerName: contoso-microservice # Optional. Default: .spec.template.spec.containers[0] pollingInterval: 30 # Optional. Default: 30 seconds cooldownPeriod: 120 # Optional. Default: 300 seconds minReplicaCount: 0 # Optional. Default: 0 maxReplicaCount: 20 # Optional. Default: 100 advanced: # Optional. Section to specify advanced options restoreToOriginalReplicaCount: false # Optional. Default: false horizontalPodAutoscalerConfig: # Optional. Section to specify HPA related options behavior: # Optional. Use to modify HPA's scaling behavior scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 100 periodSeconds: 15 triggers: - type: redis metadata: # address: # Format must be host:port passwordFromEnv: REDIS_KEY listName: keda # Required listLength: "10" # Required enableTLS: "false" # optional databaseIndex: "0" # optional hostFromEnv: REDIS_HOST portFromEnv: REDIS_PORT
Zapisz plik manifestu (CTRL + S) i zamknij edytor (CTRL + Q).
Stosowanie manifestu
Wdróż manifest w klastrze przy użyciu
kubectl apply
polecenia :kubectl apply -f ./scaled-object.yaml
Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
scaledobject.keda.sh/scaled-contoso created
Sprawdź liczbę uruchomionych zasobników przy użyciu
kubectl get pods
polecenia :kubectl get pods
Dane wyjściowe powinny wyglądać podobnie do poniższych przykładowych danych wyjściowych z uruchomionym jednym zasobnikiem:
NAME READY STATUS RESTARTS AGE contoso-microservice-794d98b5-4flvg 1/1 Running 0 2m1s
Okresowo uruchamiaj polecenie ,
kubectl get pods
aby sprawdzić, czy wdrożenie skaluje liczbę zasobników zgodnie z listą prac.Uwaga
Jeśli zainstalowano narzędzie systemu Linux, możesz użyć
watch kubectl get pods
polecenia , aby wyświetlić skalowanie zasobników w celu przetworzenia elementów listy usługi Redis. Jeśli nie, możesz użyćkubectl get pods -w
polecenia .Dane wyjściowe powinny wyglądać podobnie do następujących przykładowych danych wyjściowych:
NAME READY STATUS RESTARTS AGE contoso-microservice-794d98b5-4flvg 1/1 Running 0 3m contoso-microservice-794d98b5-4jpxp 1/1 Running 0 3m contoso-microservice-794d98b5-4lw7b 1/1 Running 0 2m15s contoso-microservice-794d98b5-5fqj5 1/1 Running 0 3m contoso-microservice-794d98b5-5kdbw 1/1 Running 0 2m15s
Po przetworzeniu cooldownPeriod
wszystkich elementów i wygaśnięciu zobaczysz, że liczba zasobników wynosi zero. Dzieje się tak, ponieważ KEDA usunęła wszystkie uruchomione repliki i nie ma elementów do przetworzenia.