ڪلائوڊ ايپليڪيشنن لاءِ اسڪاليبلٽي هڪ اهم ضرورت آهي. ڪبرنيٽس سان، ايپليڪيشن کي اسڪيل ڪرڻ ايترو آسان آهي جيترو مناسب ڊيپلائيشن لاءِ نقلن جو تعداد وڌائڻ يا ReplicaSet - پر اهو هڪ دستي عمل آهي.
Kubernetes ايپليڪيشنن کي خودڪار طريقي سان ماپ ڪرڻ جي اجازت ڏئي ٿو (يعني پوڊس ۾ ڊيپلائيمينٽ يا ReplicaSet) افقي پوڊ آٽو اسڪيلر جي وضاحت کي استعمال ڪندي بيان ڪيل انداز ۾. خودڪار اسڪيلنگ لاءِ ڊفالٽ معيار سي پي يو استعمال ميٽرڪس (وسيع ميٽرڪس) آهي، پر توهان ڪسٽم ۽ خارجي طور تي مهيا ڪيل ميٽرڪس کي ضم ڪري سگهو ٿا.
ٽيم Mail.ru کان Kubernetes aaS هڪ مضمون جو ترجمو ڪيو ويو آهي ته ڪيئن استعمال ڪجي ٻاهرين ميٽرڪس کي خودڪار طريقي سان ماپڻ لاءِ ڪبرنيٽس ايپليڪيشن. اهو ڏيکارڻ لاءِ ته سڀ ڪجهه ڪيئن ڪم ڪري ٿو، ليکڪ استعمال ڪري ٿو HTTP رسائي جي درخواست ميٽرڪس، جيڪي گڏ ڪيا ويا آهن پروميٿيس استعمال ڪندي.
پوڊز جي افقي آٽو اسڪيلنگ جي بدران، ڪبرنيٽس ايونٽ ڊريوين آٽو اسڪيلنگ (KEDA) استعمال ڪيو ويندو آهي، هڪ اوپن سورس ڪبرنيٽس آپريٽر. اهو مقامي طور تي Horizontal Pod Autoscaler سان ضم ڪري ٿو ته ايونٽ تي هلندڙ ڪم لوڊ لاءِ بيحد آٽو اسڪيلنگ (بشمول / صفر کان) مهيا ڪرڻ لاءِ. ڪوڊ تي دستياب آهي GitHub.
Prometheus انهن ماپن کي گڏ ڪرڻ لاءِ ترتيب ڏنو ويو آهي.
KEDA ۾ Prometheus اسڪيلر ترتيب ڏنل آهي خودڪار طريقي سان ايپليڪيشن کي ماپڻ لاءِ HTTP هٽن جي تعداد جي بنياد تي.
هاڻي مان توهان کي هر عنصر بابت تفصيل سان ٻڌايان ٿو.
KEDA ۽ Prometheus
Prometheus هڪ اوپن سورس سسٽم مانيٽرنگ ۽ خبردار ڪرڻ وارو ٽول ڪٽ آهي، حصو ڪلائوڊ اصلي ڪمپيوٽنگ فائونڊيشن. مختلف ذريعن کان ميٽرڪ گڏ ڪري ٿو ۽ انهن کي ٽائيم سيريز ڊيٽا طور محفوظ ڪري ٿو. ڊيٽا کي ڏسڻ لاء توهان استعمال ڪري سگهو ٿا گرافانا يا ٻيا بصري اوزار جيڪي ڪبرنيٽس API سان ڪم ڪن ٿا.
KEDA اسڪيلر جي تصور کي سپورٽ ڪري ٿو - اهو KEDA ۽ خارجي نظام جي وچ ۾ هڪ پل جي طور تي ڪم ڪري ٿو. اسڪيلر لاڳو ڪرڻ هر ٽارگيٽ سسٽم لاء مخصوص آهي ۽ ان مان ڊيٽا ڪڍي ٿو. KEDA وري انهن کي استعمال ڪري ٿو خودڪار اسڪيلنگ کي ڪنٽرول ڪرڻ لاءِ.
اسڪالر ڪيترن ئي ڊيٽا ذريعن کي سپورٽ ڪن ٿا، مثال طور، ڪافڪا، ريڊس، پروميٿيوس. اهو آهي، KEDA استعمال ڪري سگهجي ٿو خودڪار طور تي ڪبرنيٽس جي ڊيپلائيمينٽ کي ماپڻ لاءِ Prometheus metrics کي معيار طور استعمال ڪندي.
استعمال ڪري ٿو Prometheus Go ڪلائنٽ لئبريري ايپليڪيشن کي اوزار ڏيڻ ۽ مهيا ڪرڻ لاءِ http_requests ميٽرڪ، جنهن ۾ هٽ ڳڻپ شامل آهي. آخري پوائنٽ جتي پروميٿيوس ميٽرڪس موجود آهن URI تي واقع آهي /metrics.
var httpRequestsCounter = promauto.NewCounter(prometheus.CounterOpts{
Name: "http_requests",
Help: "number of http requests",
})
هڪ درخواست جي جواب ۾ GET اپليڪيشن ڪي جي قيمت وڌائي ٿي (access_count) ريڊس ۾. هي HTTP هينڊلر جي حصي طور ڪم ڪرڻ جو هڪ آسان طريقو آهي ۽ پرومٿيوس ميٽرڪس کي به چيڪ ڪريو. ميٽرڪ قدر لازمي طور تي ساڳيو هجڻ گهرجي access_count ريڊس ۾.
اسڪيلر KEDA ۽ خارجي سسٽم جي وچ ۾ پل جي طور تي ڪم ڪري ٿو جنهن مان ميٽرڪ حاصل ڪرڻ جي ضرورت آهي. ScaledObject ھڪڙو ڪسٽم وسيلو آھي جنھن کي ترتيب ڏيڻ جي ضرورت آھي ايونٽ ماخذ سان ترتيب ڏيڻ لاءِ، ھن صورت ۾ Prometheus.
ScaledObject ڊيپلائيمينٽ اسڪيلنگ جي معلومات تي مشتمل آهي، واقعي جو ماخذ ميٽاداٽا (جهڙوڪ ڪنيڪشن راز، قطار جو نالو)، پولنگ جو وقفو، بحالي جي مدت، ۽ ٻيو ڊيٽا. ان جي نتيجي ۾ لاڳاپيل آٽو اسڪيلنگ ريسورس (HPA تعريف) جي تعين کي ماپڻ لاءِ.
هن ڏانهن اشارو ڪيو Deployment نالي سان go-prom-app.
ٽريگر جو قسم - Prometheus. Prometheus سرور ايڊريس سان گڏ ذڪر ڪيو ويو آهي ميٽرڪ نالو، حد ۽ PromQL سوال، جيڪو استعمال ڪيو ويندو. PromQL سوال - sum(rate(http_requests[2m])).
جي مطابق pollingIntervalKEDA هر پندرهن سيڪنڊن ۾ Prometheus کان هڪ ٽارگيٽ جي درخواست ڪري ٿو. گهٽ ۾ گهٽ هڪ هيٺ (minReplicaCount)، ۽ پوڊ جي وڌ ۾ وڌ تعداد کان وڌيڪ نه آهي maxReplicaCount (هن مثال ۾ - ڏهه).
انسٽال ڪري سگهجي ٿو minReplicaCount صفر جي برابر. انهي صورت ۾، KEDA صفر کان هڪ مقرري کي چالو ڪري ٿو ۽ پوء وڌيڪ خودڪار اسڪيلنگ لاء HPA کي ظاهر ڪري ٿو. ريورس آرڊر پڻ ممڪن آهي، اهو آهي، هڪ کان صفر تائين اسڪيلنگ. مثال ۾، اسان صفر نه چونڊيو آهي ڇو ته هي هڪ HTTP خدمت آهي ۽ نه هڪ آن ڊيمانڊ سسٽم.
خودڪار اسڪيلنگ اندر جادو
حد کي استعمال ڪيو ويندو آهي ٽرڪ جي طور تي تعیناتي کي ماپ ڪرڻ لاء. اسان جي مثال ۾، PromQL سوال sum(rate (http_requests [2m])) واپسي مجموعي HTTP درخواست جي شرح (في سيڪنڊ درخواستون)، آخري ٻن منٽن ۾ ماپيل.
جيئن ته حد جي قيمت ٽي آهي، ان جو مطلب آهي ته اتي هڪ هوندو جڏهن قدر هيٺ sum(rate (http_requests [2m])) ٽن کان گهٽ. جيڪڏهن قيمت وڌائي ٿي، هر وقت هڪ اضافي ذيلي شامل ڪيو ويندو sum(rate (http_requests [2m])) ٽي وڌائي ٿو. مثال طور، جيڪڏهن قيمت 12 کان 14 تائين آهي، پوء پوڊ جو تعداد چار آهي.
هاڻي اچو ته ان کي ترتيب ڏيڻ جي ڪوشش ڪريو!
اڳئين سيٽنگ
توهان کي صرف هڪ ڪبرنيٽس ڪلستر ۽ ترتيب ڏنل يوٽيلٽي جي ضرورت آهي kubectl. هي مثال ڪلستر استعمال ڪري ٿو minikubeپر توهان ڪنهن ٻئي کي وٺي سگهو ٿا. اتي موجود ڪلستر کي انسٽال ڪرڻ لاء رهنمائي ڪندڙ.
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
چيڪ ڪريو ته هر شي شروع ٿي وئي آهي:
kubectl get pods -l=app=prometheus-server
پروميٿيس جي رياست ۾ وڃڻ جو انتظار ڪريو Running.
استعمال ڪريو kubectl port-forward Prometheus يوزر انٽرفيس (يا API سرور) تائين رسائي حاصل ڪرڻ لاءِ http://localhost:9090.
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 برابر 1:
kubectl get pods -l=app=go-prom-app
تصديق ڪريو ته HPA وسيلو ڪاميابي سان ٺاهيو ويو:
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 exec -it redis-server-master-0 -- redis-cli get access_count
//output
"1"
پڪ ڪريو ته ميٽرڪ قدر آهي http_requests ساڳيو:
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
ٿڪل
KEDA توهان کي اجازت ڏئي ٿو ته خود بخود توهان جي ڪبرنيٽس ڊيپلائيمينٽ کي ماپڻ (صفر کان/ تائين) خارجي ميٽرڪس جي ڊيٽا جي بنياد تي. مثال طور، Prometheus metrics جي بنياد تي، ريڊس ۾ قطار جي ڊيگهه، ڪافڪا موضوع ۾ صارفين جي ويڪرائي.
KEDA هڪ خارجي ماخذ سان ضم ٿي ٿو ۽ پڻ مهيا ڪري ٿو ان جي ميٽرڪس کي Metrics سرور ذريعي Horizontal Pod Autoscaler.