Autoscaling Kubernetes application uchishandisa Prometheus uye KEDA

Autoscaling Kubernetes application uchishandisa Prometheus uye KEDABalloon Man naCimuanos

ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ β€” ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ для ΠΎΠ±Π»Π°Ρ‡Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π‘ Kubernetes ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊ ΠΆΠ΅ просто, ΠΊΠ°ΠΊ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ количСство Ρ€Π΅ΠΏΠ»ΠΈΠΊ для ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ развСртывания ΠΈΠ»ΠΈ ReplicaSet - asi inzira yemanyorero.

Kubernetes inobvumira maapplication kuti azviyerwe otomatiki (kureva maPods mune deployment kana ReplicaSet) nenzira yekuzivisa uchishandisa Horizontal Pod Autoscaler yakatarwa. Iyo yekumisikidza chiyero chekuyera otomatiki ndeye CPU yekushandisa metrics (resource metrics), asi iwe unogona kubatanidza tsika uye kunze metrics yakapihwa.

chikwata Kubernetes aaS kubva kuMail.ru ΠΏΠ΅Ρ€Π΅Π²Π΅Π»Π° ΡΡ‚Π°Ρ‚ΡŒΡŽ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ внСшниС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ для автоматичСского ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ прилоТСния Kubernetes. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π°Π²Ρ‚ΠΎΡ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ запросов HTTP-доступа, ΠΎΠ½ΠΈ ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Prometheus.

ВмСсто Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΎΠ², примСняСтся Kubernetes Event Driven Autoscaling (KEDA) β€” ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Kubernetes с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ. Он ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ интСгрируСтся с Horizontal Pod Autoscaler, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠ»Π°Π²Π½ΠΎΠ΅ Π°Π²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π² Ρ‚ΠΎΠΌ числС Π΄ΠΎ/ΠΎΡ‚ нуля) для управляСмых событиями Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… Π½Π°Π³Ρ€ΡƒΠ·ΠΎΠΊ. Код доступСн Π½Π° GitHub.

ΠšΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы

Autoscaling Kubernetes application uchishandisa Prometheus uye KEDA

Dhiagiramu inoratidza tsananguro pfupi yekuti zvese zvinoshanda sei:

  1. Chishandiso chinopa HTTP hit count count metrics muPrometheus fomati.
  2. Prometheus inogadzirirwa kuunganidza aya metrics.
  3. Iyo Prometheus scaler muKEDA inogadzirirwa kuyera otomatiki application zvichienderana nehuwandu hweHTTP hits.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ расскаТу ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ элСмСнтС.

KEDA uye Prometheus

Prometheus ndeye yakavhurika sosi system yekutarisa uye yekunyevera toolkit, chikamu Cloud Native Computing Nheyo. Inounganidza metrics kubva kwakasiyana masosi uye inoachengeta senge data data. Kuti uone data yaunogona kushandisa grafana kana mamwe maturusi ekuona anoshanda neKubernetes API.

KEDA inotsigira pfungwa ye scaler - inoita sebhiriji pakati peKEDA nekunze system. Kuitwa kwe scaler kwakananga kune yega yega chinangwa system uye inobvisa data kubva mairi. KEDA yobva yavashandisa kudzora otomatiki kuyera.

Scalers inotsigira akawanda data masosi, semuenzaniso, Kafka, Redis, Prometheus. Ndokunge, KEDA inogona kushandiswa kuyera otomatiki Kubernetes deployments uchishandisa Prometheus metrics semaitiro.

Test application

Iyo Golang test application inopa mukana kuburikidza neHTTP uye inoita maviri akakosha mabasa:

  1. Inoshandisa iyo Prometheus Go mutengi raibhurari kuridza chishandiso uye kupa iyo http_requests metric, ine hit count. Iyo yekupedzisira iyo Prometheus metrics inowanikwa inowanikwa kuURI /metrics.
    var httpRequestsCounter = promauto.NewCounter(prometheus.CounterOpts{
           Name: "http_requests",
           Help: "number of http requests",
       })
    
  2. Mukupindura chikumbiro GET ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ»ΡŽΡ‡Π° (access_count) Π² Redis. Π­Ρ‚ΠΎ простой способ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° HTTP, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Prometheus. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ access_count muRedis.
    func main() {
           http.Handle("/metrics", promhttp.Handler())
           http.HandleFunc("/test", func(w http.ResponseWriter, r 
    *http.Request) {
               defer httpRequestsCounter.Inc()
               count, err := client.Incr(redisCounterName).Result()
               if err != nil {
                   fmt.Println("Unable to increment redis counter", err)
                   os.Exit(1)
               }
               resp := "Accessed on " + time.Now().String() + "nAccess count " + strconv.Itoa(int(count))
               w.Write([]byte(resp))
           })
           http.ListenAndServe(":8080", nil)
       }
    

Iyo application inotumirwa kuKubernetes kuburikidza Deployment. Sevhisi inogadzirwa zvakare ClusterIP, inobvumira sevha yePrometheus kuwana mametric ekushandisa.

pano deployment manifest yekushandiswa.

Prometheus Server

ΠœΠ°Π½ΠΈΡ„Π΅ΡΡ‚ развСртывания Prometheus состоит ΠΈΠ·:

  • ConfigMap β€” для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° Prometheus;
  • Deployment - yekuendesa Prometheus muboka reKubernetes;
  • ClusterIP β€” сСрвис для доступа ΠΊ UI Prometheus;
  • ClusterRole, ClusterRoleBinding ΠΈ ServiceAccount - yekutarisa otomatiki masevhisi muKubernetes (Auto-discovery).

pano манифСст для запуска Prometheus.

KEDA Prometheus ScaledObject

Π‘ΠΊΠ΅ΠΉΠ»Π΅Ρ€ дСйствуСт ΠΊΠ°ΠΊ мост ΠΌΠ΅ΠΆΠ΄Ρƒ KEDA ΠΈ внСшнСй систСмой, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ. ScaledObject itsika sosi inoda kuisirwa kuwiriranisa kutumirwa neyechiitiko sosi, mune iyi kesi Prometheus.

ScaledObject ine ruzivo rwekuyeresa, chiitiko sosi metadata (sezvakavanzika zvekubatanidza, zita remutsetse), nguva yekuvhota, nguva yekudzoreredza, uye imwe data. Iyo inoguma mune inoenderana autoscaling sosi (HPA tsananguro) kuyera kutumirwa.

Когда ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ScaledObject удаляСтся, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ Π΅ΠΌΡƒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ HPA очищаСтся.

Heino tsanangudzo ScaledObject для нашСго ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, Π² Π½Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ скСйлСр Prometheus:

apiVersion: keda.k8s.io/v1alpha1
kind: ScaledObject
metadata:
 name: prometheus-scaledobject
 namespace: default
 labels:
   deploymentName: go-prom-app
spec:
 scaleTargetRef:
   deploymentName: go-prom-app
 pollingInterval: 15
 cooldownPeriod:  30
 minReplicaCount: 1
 maxReplicaCount: 10
 triggers:
 - type: prometheus
   metadata:
     serverAddress: 
http://prometheus-service.default.svc.cluster.local:9090
     metricName: access_frequency
     threshold: '3'
     query: sum(rate(http_requests[2m]))

Chimbofunga pfungwa dzinotevera:

  1. Anonongedzera Deployment Nezita go-prom-app.
  2. Trigger type - Prometheus. Iyo Prometheus server kero inotaurwa pamwe chete nezita remetric, chikumbaridzo uye PromQL mubvunzo, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ. Запрос PromQL β€” sum(rate(http_requests[2m])).
  3. Maererano ne pollingInterval,KEDA inokumbira chinangwa kubva kuPrometheus masekonzi gumi neshanu ega ega. Inenge imwe pasi (minReplicaCount), Π° максимальноС количСство ΠΏΠΎΠ΄ΠΎΠ² Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ maxReplicaCount (mumuenzaniso uyu - gumi).

Inogona kuisa minReplicaCount zvakaenzana ne zero. Muchiitiko ichi, KEDA inomisa zero-kune-imwe kutumirwa uye yobva yafumura iyo HPA kuti iwedzere kuyera otomatiki. Kurongeka kwemashure kunogonekawo, kureva, kuyera kubva kune imwe kuenda ku zero. Mumuenzaniso, isu hatina kusarudza zero nekuti iyi ibasa reHTTP uye kwete pane-inodiwa system.

Iwo mashiripiti mukati autoscaling

ΠŸΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² качСствС Ρ‚Ρ€ΠΈΠ³Π³Π΅Ρ€Π° для ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ развСртывания. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ запрос PromQL sum(rate (http_requests [2m])) inodzosa iyo yakaunganidzwa yeHTTP yekukumbira mwero (zvikumbiro pasekondi), yakayerwa pamaminetsi maviri apfuura.

Sezvo kukosha kwechikumbaridzo kuri matatu, zvinoreva kuti pachave neimwe pasi apo kukosha sum(rate (http_requests [2m])) мСньшС Ρ‚Ρ€Π΅Ρ…. Если ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ возрастаСт, добавляСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° sum(rate (http_requests [2m])) увСличиваСтся Π½Π° Ρ‚Ρ€ΠΈ. НапримСр, Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ 12 Π΄ΠΎ 14, Ρ‚ΠΎ количСство ΠΏΠΎΠ΄ΠΎΠ² β€” Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ!

Pre-setting

Всё, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ β€” кластСр Kubernetes ΠΈ настроСнная ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° kubectl. Uyu muenzaniso unoshandisa cluster minikube, asi unogona kutora chero imwe ipi zvayo. Kuisa cluster iripo gwara.

Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ Π½Π° Mac:

curl -Lo minikube 
https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 
&& chmod +x minikube
sudo mkdir -p /usr/local/bin/
sudo install minikube /usr/local/bin/

Set kubectl, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ кластСру Kubernetes.

Isa iyo yazvino vhezheni paMac:

curl -LO 
"https://storage.googleapis.com/kubernetes-release/release/$(curl -s
https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/darwin/amd64/kubectl"
chmod +x ./kubectl
sudo mv ./kubectl /usr/local/bin/kubectl
kubectl version

Установка KEDA

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ KEDA нСсколькими способами, ΠΎΠ½ΠΈ пСрСчислСны Π² zvinyorwa. Ndiri kushandisa monolithic YAML:

kubectl apply -f
https://raw.githubusercontent.com/kedacore/keda/master/deploy/KedaScaleController.yaml

KEDA ΠΈ Π΅Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² пространство ΠΈΠΌΠ΅Π½ keda. Команда для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ:

kubectl get pods -n keda

Mirira KEDA Operator kutanga uye kuenda Running State. Uye shure kwaizvozvo, enderera.

Установка Redis ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Helm

Если Ρƒ вас Π½Π΅ установлСн Helm, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ΡΡŒ этим utungamiri. Raira kuisa paMac:

brew install kubernetes-helm
helm init --history-max 200

helm init ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ интСрфСйс ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Π° Ρ‚Π°ΠΊΠΆΠ΅ устанавливаСт Tiller kune Kubernetes cluster.

kubectl get pods -n kube-system | grep tiller

Mirira iyo Tiller pod kuti ipinde muRunning state.

Chiziviso chemushanduri: Munyori anoshandisa Helm @ 2, iyo inoda kuti Tiller server chikamu kuti iiswe. Iye zvino Helm @ 3 yakakosha, haidi sevha chikamu.

Mushure mekuisa Helm, murairo mumwe wakakwana kutanga Redis:

helm install --name redis-server --set cluster.enabled=false --set 
usePassword=false stable/redis

Tarisa kuti Redis yatanga zvinobudirira:

kubectl get pods/redis-server-master-0

Π”ΠΎΠΆΠ΄ΠΈΡ‚Π΅ΡΡŒ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ΄ Redis ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ Π² состояниС Running.

Application Deployment

Команда для развСртывания:

kubectl apply -f go-app.yaml

//output
deployment.apps/go-prom-app created
service/go-prom-app-service created

Tarisa kuti zvese zvatanga:

kubectl get pods -l=app=go-prom-app

Mirira kuti Redis ipinde mudunhu Running.

Kutumira Prometheus Server

Iyo Prometheus inoratidza inoshandisa Kubernetes Service Discovery yePrometheus. Iyo inobvumira kuwanikwa kwemaitiro ekushandisa pods zvichibva pane iyo sevhisi label.

kubernetes_sd_configs:
   - role: service
   relabel_configs:
   - source_labels: [__meta_kubernetes_service_label_run]
     regex: go-prom-app-service
     action: keep

Kutumira:

kubectl apply -f prometheus.yaml

//output
clusterrole.rbac.authorization.k8s.io/prometheus created
serviceaccount/default configured
clusterrolebinding.rbac.authorization.k8s.io/prometheus created
configmap/prom-conf created
deployment.extensions/prometheus-deployment created
service/prometheus-service created

Tarisa kuti zvese zvatanga:

kubectl get pods -l=app=prometheus-server

Mirira kuti Prometheus apinde muhurumende Running.

Shandisa kubectl port-forward kuwana iyo Prometheus mushandisi interface (kana API server) pa http://localhost:9090.

kubectl port-forward service/prometheus-service 9090

Π Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ KEDA

Raira kugadzira ScaledObject:

kubectl apply -f keda-prometheus-scaledobject.yaml

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Π»ΠΎΠ³ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° KEDA:

KEDA_POD_NAME=$(kubectl get pods -n keda 
-o=jsonpath='{.items[0].metadata.name}')
kubectl logs $KEDA_POD_NAME -n keda

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

time="2019-10-15T09:38:28Z" level=info msg="Watching ScaledObject:
default/prometheus-scaledobject"
time="2019-10-15T09:38:28Z" level=info msg="Created HPA with 
namespace default and name keda-hpa-go-prom-app"

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΏΠΎΠ΄ прилоТСния. Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠΎΠ΄ΠΈΠ½ экзСмпляр, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ minReplicaCount zvakaenzana ne1:

kubectl get pods -l=app=go-prom-app

Tarisa kuti HPA sosi yakagadzirwa zvinobudirira:

kubectl get hpa

Π’Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Π²Ρ€ΠΎΠ΄Π΅:

NAME                   REFERENCE                TARGETS     MINPODS   MAXPODS   REPLICAS   AGE
keda-hpa-go-prom-app   Deployment/go-prom-app   0/3 (avg)   1         10        1          45s

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° работоспособности: доступ ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ REST нашСго прилоТСния, запуститС:

kubectl port-forward service/go-prom-app-service 8080

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Go, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ адрСс http://localhost:8080. Kuti uite izvi, shandisa murairo:

curl http://localhost:8080/test

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выглядит ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊ:

Accessed on 2019-10-21 11:29:10.560385986 +0000 UTC 
m=+406004.817901246
Access count 1

Panguva ino zvakare tarisa Redis. Uchaona kuti kiyi yacho access_count yakawedzera kusvika ku1:

kubectl exec -it redis-server-master-0 -- redis-cli get access_count
//output
"1"

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ http_requests zvimwe chete:

curl http://localhost:8080/metrics | grep http_requests
//output
# HELP http_requests number of http requests
# TYPE http_requests counter
http_requests 1

Load Creation

Tichashandisa Hey - chishandiso chekugadzira mutoro:

curl -o hey https://storage.googleapis.com/hey-release/hey_darwin_amd64 
&& chmod a+x hey

Iwe unogona zvakare kudhawunirodha chishandiso che Linux kana Windows.

Imhanye:

./hey http://localhost:8080/test

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Π° отправляСт 200 запросов. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² этом, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ Prometheus, Π° Ρ‚Π°ΠΊΠΆΠ΅ Redis.

curl http://localhost:8080/metrics | grep http_requests
//output
# HELP http_requests number of http requests
# TYPE http_requests counter
http_requests 201
kubectl exec -it redis-server-master-0 -- redis-cli get access_count
//output
201

ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ фактичСской ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ (Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠΉ запросом PromQL):

curl -g 
'http://localhost:9090/api/v1/query?query=sum(rate(http_requests[2m]))'
//output
{"status":"success","data":{"resultType":"vector","result":[{"metric":{},"value":[1571734214.228,"1.686057971014493"]}]}}

Muchiitiko ichi mhedzisiro chaiyo ndeye 1,686057971014493 uye inoratidzwa mumunda value. Izvi hazvina kukwana kuyera, sezvo chikumbaridzo chatinoisa chiri 3.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ!

Mune itsva terminal, tarisa huwandu hwemapodhi ekushandisa:

kubectl get pods -l=app=go-prom-app -w

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠΌ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

./hey -n 2000 http://localhost:8080/test

Mushure mechinguva, iwe uchaona HPA ichiyera kutumirwa uye kuvhura mapodhi matsva. Tarisa HPA yako kuti uve nechokwadi:

kubectl get hpa
NAME                   REFERENCE                TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
keda-hpa-go-prom-app   Deployment/go-prom-app   1830m/3 (avg)   1         10        6          4m22s

Если Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° нСпостоянна, Ρ€Π°Π·Π²Π΅Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡΡ Π΄ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΠ΄. Если Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ„Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΡƒ (Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΡƒΡŽ запросом PromQL), Ρ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ:

curl -g 
'http://localhost:9090/api/v1/query?query=sum(rate(http_requests[2m]))'

Kuchenesa

//Delete KEDA
kubectl delete namespace keda
//Delete the app, Prometheus server and KEDA scaled object
kubectl delete -f .
//Delete Redis
helm del --purge redis-server

mhedziso

KEDA inokutendera kuti uzviyere otomatiki yako Kubernetes deployments (ku/kubva zero) zvichibva pane data kubva kunze metrics. Semuenzaniso, zvichibva paPrometheus metrics, kureba kwemutsetse muRedis, mutengi latency muKafka musoro.

KEDA inosanganisirwa neyekunze sosi uye inopawo metrics yayo kuburikidza neMetrics Server kune Horizontal Pod Autoscaler.

Good luck!

Zvimwe zvekuverenga:

  1. Maitiro akanakisa uye akanakisa maitiro ekumhanyisa midziyo uye Kubernetes munzvimbo dzekugadzira.
  2. 90+ maturusi anobatsira eKubernetes: kuendesa, manejimendi, kutarisa, kuchengetedza uye nezvimwe.
  3. Yedu chiteshi Around Kubernetes muTeregiramu.

Source: www.habr.com

Voeg