Miisaankani waa shuruudda muhiimka ah ee codsiyada daruuraha. Kubernetes, cabirida arji waa mid fudud sida kordhinta tirada nuqulada ku haboon ee la diri karo ama ReplicaSet - laakiin waa hab-socodka gacanta.
Kubernetes waxay ogolaataa codsiyada in si toos ah loo miisaamo (tusaale ahaan, Pods ee meelaynta ama ReplicaSet) si caddaynaya iyadoo la adeegsanayo qeexida Horizontal Pod Autoscaler. Shuruudaha caadiga ah ee cabirka tooska ah waa cabbirada isticmaalka CPU (miisaanka kheyraadka), laakiin waxaad isku dari kartaa cabbirada caadiga ah iyo kuwa dibadda laga bixiyo.
kooxda Kubernetes aaS ka Mail.ru tarjumay maqaal ku saabsan sida loo isticmaalo cabbirrada dibadda si si toos ah loo cabbiro codsiga Kubernetes. Si loo tuso sida wax walba u shaqeeyaan, qoraagu wuxuu adeegsadaa cabbirka codsiga gelitaanka HTTP, kuwaas oo la soo ururiyo iyadoo la adeegsanayo Prometheus.
Halkii laga heli lahaa toosan toosan ee boodhadhka, Kubernetes Event Driven Autoscaling (KEDA) ayaa la isticmaalaa, oo ah hawlwadeenka Kubernetes il furan. Waxay ku biirtay asal ahaan Horizontal Pod Autoscaler si ay u bixiso otomaatig aan toos ahayn (ay ku jirto ilaa/ eber) culeyska shaqada ee ay wado dhacdada. Koodhka ayaa laga heli karaa GitHub.
Dulmar kooban oo ku saabsan nidaamka
Jaantusku wuxuu muujinayaa sharraxaad kooban oo ku saabsan sida wax walba u shaqeeyaan:
Codsigu wuxuu ku bixiyaa cabbirka tirinta HTTP ee qaabka Prometheus.
Prometheus waxaa loo habeeyey si uu u ururiyo cabbiradan.
Miisaanka Prometheus ee KEDA waxaa loo habeeyey inuu si toos ah u cabbiro codsiga ku salaysan tirada hits HTTP.
Hadda waxaan si faahfaahsan kaaga sheegi doonaa shay kasta.
KEDA iyo Prometheus
Prometheus waa agabka la socodka iyo feejignaanta nidaamka isha furan, qayb Aasaaska Kombuyuutarka Dhalada Bulsho ee Cloud. Wuxuu ka soo ururiyaa cabbirada ilo kala duwan wuxuuna u kaydiyaa sidii xog taxane ah oo wakhti ah. Si aad u sawirto xogta waxaad isticmaali kartaa Grafana ama qalab kale oo muuqaal ah oo la shaqeeya Kubernetes API.
KEDA waxay taageertaa fikradda miisaan-qaade - waxay u shaqeysaa sidii buundo u dhaxaysa KEDA iyo nidaamka dibadda. Hirgelinta miisaanku waxay gaar u tahay nidaam kasta oo la beegsanayo waxayna ka soo saartaa xogta. KEDA waxay markaa u isticmaashaa iyaga si ay u xakamayso ismiidaminta tooska ah.
Scalers waxay taageeraan ilo xogeedyo badan, tusaale ahaan, Kafka, Redis, Prometheus. Taasi waa, KEDA waxaa loo isticmaali karaa in si toos ah loo cabbiro Kubernetes geynta iyadoo la adeegsanayo cabbirrada Prometheus sida shuruudaha.
Codsiga tijaabi
Codsiga tijaabada Golang wuxuu bixiyaa marin u helka HTTP wuxuuna qabtaa laba hawlood oo muhiim ah:
Wuxuu adeegsadaa maktabadda macmiilka ee Prometheus Go si uu u qalabeeyo arjiga oo uu u bixiyo mitirka http_requests, kaas oo ka kooban tiro garaac ah. Halka ugu dambaysa ee mitirka Prometheus laga heli karo waxay ku taal URI /metrics.
var httpRequestsCounter = promauto.NewCounter(prometheus.CounterOpts{
Name: "http_requests",
Help: "number of http requests",
})
Iyadoo laga jawaabayo codsi GET Codsigu wuxuu kordhiyaa qiimaha furaha (access_count) ee Redis. Tani waa hab sahlan oo lagu sameeyo shaqada iyada oo qayb ka ah maamulaha HTTP iyo sidoo kale hubi cabbirada Prometheus. Qiimaha mitirku waa inuu la mid yahay qiimaha access_count Redis.
Miisaanku wuxuu u shaqeeyaa sidii buundo u dhaxaysa KEDA iyo nidaamka dibadda kaas oo cabbirada loo baahan yahay in laga helo. ScaledObject waa kheyraad caado ah oo u baahan in la geeyo si loo waafajiyo daabulidda isha dhacdada, kiiskan Prometheus.
ScaledObject waxa ku jira xogta meelaynta, xogta badan ee isha dhacdada (sida sirta xidhiidhka, magaca safka), wakhtiga doorashada, muddada soo kabashada, iyo xog kale. Waxay keentaa kheyraadka autoscaling ee u dhigma (Qeexida HPA) si loo cabbiro hawlgelinta.
Marka shay ScaledObject waa la tirtiray, qeexida HPA ee u dhiganta waa la nadiifiyay.
Waa kan qeexitaanku ScaledObject Tusaale ahaan, waxay isticmaashaa miisaan Prometheus:
Nooca kicinta - Prometheus. Ciwaanka Prometheus ee server-ka waxaa lagu xusay magaca mitirka ah, marinka iyo Waydii PromQL, kaas oo la isticmaali doono. Weydiinta PromQL - sum(rate(http_requests[2m])).
Sida laga soo xigtay pollingInterval,KEDA waxay ka codsataa bartilmaameedka Prometheus shan iyo toban ilbiriqsi kasta. Ugu yaraan mid ka hooseeya (minReplicaCount), iyo tirada ugu badan ee galalka aan ka badnayn maxReplicaCount (tusaale ahaan - toban).
Ku rakibi kara minReplicaCount oo le'eg eber. Xaaladdan oo kale, KEDA waxay hawlgelisaa meelaynta eber-ka-hal ka dibna waxay soo bandhigtaa HPA si ay u miisaanto si toos ah. Nidaamka rogaal celiska ah sidoo kale waa suurtagal, taas oo ah, in la miisaamo hal ilaa eber. Tusaalaha, ma aanan dooran eber sababtoo ah kani waa adeeg HTTP ee maaha nidaam dalabaad ah.
Sixirka gudaha autoscaling
Meesha waxa loo isticmaalaa kicin ahaan si loo cabbiro geynta. Tusaalahayaga, weydiinta PromQL sum(rate (http_requests [2m])) waxay soo celisaa celceliska codsiga HTTP isku-darka ah (codsiyada ilbiriqsi kasta), oo la qiyaasay labadii daqiiqo ee u dambeeyay.
Maadaama qiimihiisu yahay saddex, waxay la macno tahay in uu mid hoos jiri doono inta uu qiimuhu socdo sum(rate (http_requests [2m])) in ka yar saddex. Haddii qiimuhu kordho, qayb dheeraad ah ayaa lagu daraa mar kasta sum(rate (http_requests [2m])) waxay ku kordhisaa saddex. Tusaale ahaan, haddii qiimihiisu yahay 12 ilaa 14, markaa tirada boodhku waa afar.
Hadda aan isku dayno dejinta!
habayn
Waxa kaliya ee aad u baahan tahay waa kutlada Kubernetes iyo utility habaysan kubectl. Tusaalahani waxa uu isticmaalayaa koox minikube, laakiin waxaad qaadan kartaa mid kasta oo kale. Si loo rakibo koox waxaa jira hage.
Qoraalka turjubaanka: Qoraagu wuxuu isticmaalaa Helm@2, kaas oo u baahan in qaybta server-ka ee Tiller la rakibo. Hadda Helm@3 waa khuseeya, uma baahna qayb server ah.
Kadib rakibidda Helm, hal amar ayaa ku filan inuu bilaabo Redis:
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
Hubi in wax walba ay bilaabeen:
kubectl get pods -l=app=prometheus-server
Sug Prometheus si uu u galo gobolka Running.
Adeegso kubectl port-forward si aad u gasho is dhexgalka isticmaalaha Prometheus (ama server API) ee http://localhost:9090.
KEDA_POD_NAME=$(kubectl get pods -n keda
-o=jsonpath='{.items[0].metadata.name}')
kubectl logs $KEDA_POD_NAME -n keda
Natiijadu waxay u egtahay sidan:
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"
Hoos ka hubi codsiyada Hal tusaale waa inuu socdaa sababtoo ah minReplicaCount waxay la mid tahay 1:
kubectl get pods -l=app=go-prom-app
Xaqiiji in agabka HPA loo abuuray si guul leh:
kubectl get hpa
Waa inaad aragto wax sida:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
keda-hpa-go-prom-app Deployment/go-prom-app 0/3 (avg) 1 10 1 45s
Hubinta caafimaadka: gelitaanka codsiga
Si aad u gasho barta ugu dambaysa ee REST ee codsigeena, orod:
Hadda waxaad geli kartaa barnaamijkaaga Go adoo isticmaalaya ciwaanka http://localhost:8080. Si tan loo sameeyo, socodsii amarka:
curl http://localhost:8080/test
Natiijadu waxay u egtahay sidan:
Accessed on 2019-10-21 11:29:10.560385986 +0000 UTC
m=+406004.817901246
Access count 1
Halkaa marka ay marayso sidoo kale hubi Redis. Waxaad arki doontaa in furaha access_count koray 1:
kubectl exec -it redis-server-master-0 -- redis-cli get access_count
//output
"1"
Hubi in qiimaha mitirku yahay http_requests isku mid:
curl http://localhost:8080/metrics | grep http_requests
//output
# HELP http_requests number of http requests
# TYPE http_requests counter
http_requests 1
//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
gunaanad
KEDA waxay kuu ogolaanaysaa inaad si toos ah u cabbirto Kubernetes geyntaada (laga bilaabo eber) iyadoo lagu salaynayo xogta cabbirada dibadda. Tusaale ahaan, ku salaysan cabbirka Prometheus, dhererka safka ee Redis, daahitaanka macaamilka ee mawduuca Kafka.
KEDA waxay la midaysaa il dibadeed waxayna sidoo kale bixisaa cabbirkeeda iyada oo loo marayo Metrics Server ilaa Horizontal Pod Autoscaler.