Tha scalability na phrìomh riatanas airson tagraidhean sgòthan. Le Kubernetes, tha sgèileadh tagradh cho sìmplidh ri bhith ag àrdachadh an àireamh de mhac-samhail airson an cleachdadh iomchaidh no ReplicaSet - ach is e pròiseas làimhe a th’ ann.
Leigidh Kubernetes le tagraidhean a bhith air an sgèileadh gu fèin-ghluasadach (ie Pods ann an cleachdadh no ReplicaSet) ann an dòigh dhearbhach a’ cleachdadh an t-sònrachadh Horizontal Pod Autoscaler. Is e an slat-tomhais bunaiteach airson sgèileadh fèin-ghluasadach metrics cleachdadh CPU (meatairean stòrais), ach faodaidh tu metrics gnàthaichte agus taobh a-muigh a thoirt a-steach.
sgioba Kubernetes aaS bho Mail.ru eadar-theangachadh artaigil air mar a chleachdas tu meatrach taobh a-muigh gus iarrtas Kubernetes a sgèile gu fèin-ghluasadach. Gus sealltainn mar a tha a h-uile càil ag obair, bidh an t-ùghdar a’ cleachdadh metrics iarrtas ruigsinneachd HTTP, a tha air an cruinneachadh a’ cleachdadh Prometheus.
An àite fèin-sgèileadh còmhnard de pods, thathas a’ cleachdadh Kubernetes Event Driven Autoscaling (KEDA), gnìomhaiche stòr fosgailte Kubernetes. Bidh e a’ fighe a-steach gu dùthchasach le Horizontal Pod Autoscaler gus fèin-sgèileadh fuaigheil a thoirt seachad (a’ toirt a-steach gu / bho neoni) airson eallach obrach air a stiùireadh le tachartas. Còd ri fhaighinn aig GitHub.
Geàrr-chunntas air an t-siostam
Tha an diagram a’ sealltainn tuairisgeul goirid air mar a tha a h-uile càil ag obair:
Tha an tagradh a’ toirt seachad meatrach àireamh hit HTTP ann an cruth Prometheus.
Tha Prometheus air a rèiteachadh gus na meatrach sin a chruinneachadh.
Tha an sgèilear Prometheus ann an KEDA air a rèiteachadh gus an tagradh a sgèileadh gu fèin-ghluasadach stèidhichte air an àireamh de bhuillean HTTP.
A-nis innsidh mi dhut gu mionaideach mu gach eileamaid.
KEDA agus Prometheus
Tha Prometheus na inneal sgrùdaidh agus rabhaidh siostam stòr fosgailte, pàirt Bunait Coimpiutaireachd Dùthchasach Cloud. A’ cruinneachadh metrics bho dhiofar thùsan agus gan stòradh mar dàta sreath ùine. Gus dàta fhaicinn, faodaidh tu a chleachdadh grafana no innealan seallaidh eile a bhios ag obair leis an Kubernetes API.
Tha KEDA a 'toirt taic don bhun-bheachd de sgèileadair - tha e na dhrochaid eadar KEDA agus an siostam a-muigh. Tha buileachadh an sgèileadair sònraichte do gach siostam targaid agus a’ tarraing dàta bhuaithe. Bidh KEDA an uairsin gan cleachdadh gus smachd a chumail air sgèileadh fèin-ghluasadach.
Bidh scalers a’ toirt taic do ghrunn stòran dàta, mar eisimpleir, Kafka, Redis, Prometheus. Is e sin, faodar KEDA a chleachdadh gus cleachdadh Kubernetes a sgèile gu fèin-ghluasadach a’ cleachdadh metrics Prometheus mar shlatan-tomhais.
Iarrtas deuchainn
Tha tagradh deuchainn Golang a’ toirt cothrom tro HTTP agus a’ coileanadh dà ghnìomh chudromach:
A’ cleachdadh leabharlann teachdaiche Prometheus Go gus an tagradh a chleachdadh agus am meatrach http_requests a thoirt seachad, anns a bheil cunntas bhuail. Tha an t-àite crìochnachaidh far a bheil metrics Prometheus rim faighinn aig an URI /metrics.
var httpRequestsCounter = promauto.NewCounter(prometheus.CounterOpts{
Name: "http_requests",
Help: "number of http requests",
})
Mar fhreagairt air iarrtas GET bidh an tagradh ag àrdachadh luach na h-iuchrach (access_count) ann an Redis. Is e dòigh fhurasta a tha seo airson an obair a dhèanamh mar phàirt de làimhseachadh HTTP agus cuideachd sùil a thoirt air metrics Prometheus. Feumaidh an luach meatrach a bhith co-ionann ris an luach access_count ann an Redis.
Tha an tagradh air a chuir gu Kubernetes tro Deployment. Tha seirbheis air a chruthachadh cuideachd ClusterIP, leigidh e le frithealaiche Prometheus metrics tagraidh fhaighinn.
Tha an sgèilear ag obair mar dhrochaid eadar KEDA agus an siostam a-muigh às am feumar metrics fhaighinn. ScaledObject na ghoireas àbhaisteach a dh’ fheumar a chleachdadh gus an cleachdadh a shioncronachadh le stòr an tachartais, sa chùis seo Prometheus.
ScaledObject anns a bheil fiosrachadh sgèileadh cleachdadh, meata-dàta stòr tachartais (leithid dìomhaireachdan ceangail, ainm ciudha), àm bhòtaidh, ùine ath-bheothachaidh, agus dàta eile. Bidh e a’ leantainn gu goireas fèin-sgèile co-fhreagarrach (mìneachadh HPA) gus an cleachdadh a sgèileadh.
Nuair a nì nì ScaledObject air a dhubhadh às, tha am mìneachadh HPA co-fhreagarrach air a ghlanadh.
Seo am mìneachadh ScaledObject airson ar n-eisimpleir, bidh e a’ cleachdadh sgèilear Prometheus:
Tha e a’ comharrachadh Deployment Le ainm go-prom-app.
Seòrsa brosnachaidh - Prometheus. Thathas a’ toirt iomradh air seòladh frithealaiche Prometheus còmhla ris an ainm meatrach, stairsneach agus Ceist PromQL, a thèid a chleachdadh. Ceist PromQL - sum(rate(http_requests[2m])).
A rèir pollingInterval, Bidh KEDA ag iarraidh targaid bho Prometheus a h-uile còig diog deug. Co-dhiù aon fo (minReplicaCount), agus chan eil an àireamh as motha de pods nas àirde na maxReplicaCount (anns an eisimpleir seo - deich).
Faodar a stàladh minReplicaCount co-ionann ri neoni. Anns a ’chùis seo, bidh KEDA a’ gnìomhachadh cleachdadh neoni-gu-aon agus an uairsin a ’nochdadh an HPA airson tuilleadh sgèileadh fèin-ghluasadach. Tha an òrdugh cùil comasach cuideachd, is e sin, sgèileadh bho aon gu neoni. San eisimpleir, cha do thagh sinn neoni oir is e seirbheis HTTP a tha seo agus chan e siostam air-iarrtas.
An draoidheachd taobh a-staigh autoscaling
Tha an stairsneach air a chleachdadh mar inneal brosnachaidh gus an cleachdadh a mheudachadh. Anns an eisimpleir againn, a’ cheist PromQL sum(rate (http_requests [2m])) a’ tilleadh an ìre iarrtais HTTP iomlan (iarrtasan gach diog), air a thomhas thairis air an dà mhionaid mu dheireadh.
Leis gur e luach an stairsnich trì, tha e a’ ciallachadh gum bi aon fo fhad ‘s a tha an luach sum(rate (http_requests [2m])) nas lugha na trì. Ma thèid an luach àrdachadh, thèid fo-roinn a bharrachd a chur ris gach turas sum(rate (http_requests [2m])) àrdachadh le trì. Mar eisimpleir, ma tha an luach bho 12 gu 14, tha an àireamh de pods ceithir.
A-nis feuch sinn a rèiteachadh!
ro-aithris
Chan eil agad ach cruinneachadh Kubernetes agus goireas rèiteachaidh kubectl. Tha an eisimpleir seo a’ cleachdadh brabhsair minikube, ach faodaidh tu fear sam bith eile a ghabhail. Gus brabhsair a stàladh tha stiùireadh.
helm init a’ tòiseachadh an eadar-aghaidh loidhne-àithne ionadail agus cuideachd a’ stàladh Tiller gu buidheann Kubernetes.
kubectl get pods -n kube-system | grep tiller
Fuirich airson am pod Tiller a dhol a-steach don stàit ruith.
Nota an eadar-theangair: Bidh an t-ùghdar a’ cleachdadh Helm@2, a dh’ fheumas am pàirt frithealaiche Tiller a chuir a-steach. A-nis tha Helm@3 buntainneach, chan fheum e pàirt frithealaiche.
Às deidh dhut Helm a chuir a-steach, tha aon àithne gu leòr airson Redis a thòiseachadh:
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
Dèan cinnteach gu bheil a h-uile càil air tòiseachadh:
kubectl get pods -l=app=prometheus-server
Fuirich airson Prometheus a dhol a-steach don stàit Running.
KEDA_POD_NAME=$(kubectl get pods -n keda
-o=jsonpath='{.items[0].metadata.name}')
kubectl logs $KEDA_POD_NAME -n keda
Tha an toradh a’ coimhead rudeigin mar seo:
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"
Thoir sùil air fo aplacaidean. Feumaidh aon eisimpleir a bhith a’ ruith air sgàth minReplicaCount co-ionann ri 1:
kubectl get pods -l=app=go-prom-app
Dèan cinnteach gun deach goireas HPA a chruthachadh gu soirbheachail:
kubectl get hpa
Bu chòir dhut rudeigin mar seo fhaicinn:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
keda-hpa-go-prom-app Deployment/go-prom-app 0/3 (avg) 1 10 1 45s
Sgrùdadh slàinte: ruigsinneachd tagraidh
Gus faighinn gu puing crìochnachaidh REST an tagraidh againn, ruith:
Faodaidh tu a-nis faighinn chun app Go agad leis an t-seòladh http://localhost:8080. Gus seo a dhèanamh, ruith an àithne:
curl http://localhost:8080/test
Tha an toradh a’ coimhead rudeigin mar seo:
Accessed on 2019-10-21 11:29:10.560385986 +0000 UTC
m=+406004.817901246
Access count 1
Aig an ìre seo cuideachd thoir sùil air Redis. Chì thu sin an iuchair access_count àrdachadh gu 1:
kubectl exec -it redis-server-master-0 -- redis-cli get access_count
//output
"1"
Dèan cinnteach gu bheil an luach meatrach http_requests An t-aon rud:
curl http://localhost:8080/metrics | grep http_requests
//output
# HELP http_requests number of http requests
# TYPE http_requests counter
http_requests 1
Cruthachadh Luchdaich
Cleachdaidh sinn Hey - goireas airson luchdan a ghineadh:
Anns a 'chùis seo, tha an toradh fìor 1,686057971014493 agus tha e air a thaisbeanadh san raon value. Chan eil seo gu leòr airson sgèileadh, oir is e 3 an stairsneach a shuidhich sinn.
Barrachd luchdan!
Anns a’ chrìoch ùr, cùm sùil air an àireamh de pods tagraidh:
kubectl get pods -l=app=go-prom-app -w
Meudaichidh sinn an luchd leis an àithne:
./hey -n 2000 http://localhost:8080/test
An ceann greiseag, chì thu HPA a 'sgèileadh an cleachdadh agus a' cur air bhog pods ùra. Thoir sùil air an HPA agad gus dèanamh cinnteach:
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
Ma tha an luchd neo-chunbhalach, thèid an cleachdadh a lughdachadh chun na h-ìre far nach eil ach aon pod a’ ruith. Ma tha thu airson sùil a thoirt air an fhìor mheatrach (air a thilleadh le ceist PromQL), cleachd an àithne:
//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
co-dhùnadh
Leigidh KEDA leat na cleachdaidhean Kubernetes agad a sgèileadh gu fèin-ghluasadach (gu / bho neoni) stèidhichte air dàta bho mheatrics taobh a-muigh. Mar eisimpleir, stèidhichte air metrics Prometheus, fad ciudha ann an Redis, latency luchd-cleachdaidh ann an cuspair Kafka.
Bidh KEDA a’ fighe a-steach le stòr bhon taobh a-muigh agus cuideachd a’ toirt seachad a mheatairean tro Metrics Server gu Horizontal Pod Autoscaler.