ΠΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ β ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΎΠ±Π»Π°ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π‘ 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 Event Driven Autoscaling (KEDA) β ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Kubernetes Ρ ΠΎΡΠΊΡΡΡΡΠΌ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ. ΠΠ½ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΡΠ΅ΡΡΡ Ρ Horizontal Pod Autoscaler, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΠ»Π°Π²Π½ΠΎΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π΄ΠΎ/ΠΎΡ Π½ΡΠ»Ρ) Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΡ
ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ ΡΠ°Π±ΠΎΡΠΈΡ
Π½Π°Π³ΡΡΠ·ΠΎΠΊ. ΠΠΎΠ΄ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π°
ΠΡΠ°ΡΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ ΡΠ°Π±ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
Dhiagiramu inoratidza tsananguro pfupi yekuti zvese zvinoshanda sei:
- Chishandiso chinopa HTTP hit count count metrics muPrometheus fomati.
- Prometheus inogadzirirwa kuunganidza aya metrics.
- 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
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:
- 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", })
- 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
Prometheus Server
ΠΠ°Π½ΠΈΡΠ΅ΡΡ ΡΠ°Π·Π²Π΅ΡΡΡΠ²Π°Π½ΠΈΡ Prometheus ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ·:
ConfigMap
β Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³Π° Prometheus;Deployment
- yekuendesa Prometheus muboka reKubernetes;ClusterIP
β ΡΠ΅ΡΠ²ΠΈΡ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ UI Prometheus;ClusterRole
,ClusterRoleBinding
ΠΈServiceAccount
- yekutarisa otomatiki masevhisi muKubernetes (Auto-discovery).
pano
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:
- Anonongedzera
Deployment
Nezitago-prom-app
. - Trigger type -
Prometheus
. Iyo Prometheus server kero inotaurwa pamwe chete nezita remetric, chikumbaridzo uyePromQL mubvunzo , ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ. ΠΠ°ΠΏΡΠΎΡ PromQL βsum(rate(http_requests[2m]))
. - 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
Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ Π²Π΅ΡΡΠΈΡ Π½Π° 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
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 Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, ΠΎΠ½ΠΈ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Ρ Π²
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, Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ΡΡ ΡΡΠΈΠΌ
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_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
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, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π°Π΄ΡΠ΅Ρ
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
curl -o hey https://storage.googleapis.com/hey-release/hey_darwin_amd64
&& chmod a+x hey
Iwe unogona zvakare kudhawunirodha chishandiso che
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:
Maitiro akanakisa uye akanakisa maitiro ekumhanyisa midziyo uye Kubernetes munzvimbo dzekugadzira .90+ maturusi anobatsira eKubernetes: kuendesa, manejimendi, kutarisa, kuchengetedza uye nezvimwe .Yedu chiteshi Around Kubernetes muTeregiramu .
Source: www.habr.com