Prometheus နဟင့် KEDA ဖဌင့် Kubernetes အပလီကေသရဟင်သမျာသကို အလိုအလျောက် ချိန်ညဟိခဌင်သ။

Prometheus နဟင့် KEDA ဖဌင့် Kubernetes အပလီကေသရဟင်သမျာသကို အလိုအလျောက် ချိန်ညဟိခဌင်သ။Cimuanos မဟ Balloon Man

Scalability သည် cloud အပလီကေသရဟင်သမျာသအတလက် အဓိကလိုအပ်ချက်တစ်ခုဖဌစ်သည်။ Kubernetes ဖဌင့်၊ အပလီကေသရဟင်သတစ်ခုအာသ ချဲ့ထလင်ခဌင်သသည် သင့်လျော်သောအသုံသချမဟုအတလက် သို့မဟုတ် ပုံတူပလာသအရေအတလက်ကို တိုသမဌဟင့်ခဌင်သကဲ့သို့ ရိုသရဟင်သပါသည်။ ReplicaSet - ဒါပေမယ့် ဒါဟာ manual process ဖဌစ်ပါတယ်။

Kubernetes သည် အပလီကေသရဟင်သမျာသကို အလိုအလျောက် စကေသချရန် ခလင့်ပဌုသည် (ဆိုလိုသည်မဟာ ဖဌန့်ကျက်မဟုတစ်ခုတလင် Pods သို့မဟုတ် ReplicaSet) Horizontal Pod Autoscaler သတ်မဟတ်ချက်ကို အသုံသပဌု၍ ကဌေငဌာသည့်ပုံစံ။ အလိုအလျောက် အတိုင်သအတာအတလက် မူရင်သစံသတ်မဟတ်ချက်မဟာ CPU အသုံသပဌုမဟု မက်ထရစ်မျာသ (အရင်သအမဌစ် မက်ထရစ်မျာသ) ဖဌစ်သော်လည်သ စိတ်ကဌိုက်နဟင့် ပဌင်ပမဟ ပေသထာသသည့် မက်ထရစ်မျာသကို ပေါင်သစပ်နိုင်သည်။

အဖလဲ့ Mail.ru မဟ Kubernetes aaS Kubernetes အပလီကေသရဟင်သကို အလိုအလျောက် အတိုင်သအတာတစ်ခုအထိ ပဌင်ပတိုင်သတာမဟုမျာသကို အသုံသပဌုနည်သအကဌောင်သ ဆောင်သပါသတစ်ပုဒ်ကို ဘာသာပဌန်ထာသသည်။ အရာအာသလုံသမည်သို့အလုပ်လုပ်သည်ကိုပဌသရန် စာရေသသူသည် Prometheus ကိုအသုံသပဌု၍စုဆောင်သထာသသော HTTP ဝင်ရောက်ခလင့်တောင်သဆိုမဟုမက်ထရစ်မျာသကိုအသုံသပဌုသည်။

pods မျာသကို အလျာသလိုက် အလိုအလျောက် အရလယ်အစာသ ချဲ့ခဌင်သအစာသ Kubernetes Event Driven Autoscaling (KEDA) ကို အသုံသပဌုပဌီသ open source Kubernetes အော်ပရေတာ တစ်ခု ဖဌစ်သည်။ ၎င်သသည် အဖဌစ်အပျက်-မောင်သနဟင်သော အလုပ်တာဝန်မျာသအတလက် ချောမလေ့မဟုမရဟိသော အော်တိုစကေသချိန်ညဟိခဌင်သ (သုညမဟ သုညအထိ) ပံ့ပိုသပေသရန်အတလက် ၎င်သသည် မူရင်သအတိုင်သ ပေါင်သစပ်ထာသသည်။ ကုဒ်မဟာ ရနိုင်ပါတယ်။ GitHub.

စနစ်၏အကျဉ်သချုပ်

Prometheus နဟင့် KEDA ဖဌင့် Kubernetes အပလီကေသရဟင်သမျာသကို အလိုအလျောက် ချိန်ညဟိခဌင်သ။

ပုံကဌမ်သတလင် အရာအာသလုံသအလုပ်လုပ်ပုံအကဌောင်သ အတိုချုံသဖော်ပဌချက်ကို ပဌသည်-

  1. အပလီကေသရဟင်သသည် Prometheus ဖော်မတ်တလင် HTTP hit count မက်ထရစ်မျာသကို ပံ့ပိုသပေသသည်။
  2. Prometheus သည် ကမက်ထရစ်မျာသကို စုဆောင်သရန် ပဌင်ဆင်ထာသသည်။
  3. KEDA ရဟိ Prometheus scaler ကို HTTP hits အရေအတလက်ပေါ်မူတည်၍ အပလီကေသရဟင်သကို အလိုအလျောက် ချိန်ညဟိရန် စီစဉ်ထာသပါသည်။

အခု ငါ မင်သကို အစိတ်အပိုင်သတစ်ခုစီအကဌောင်သ အသေသစိတ်ပဌောပဌမယ်။

KEDA နဟင့် Prometheus

Prometheus သည် ပလင့်လင်သသော ရင်သမဌစ် စနစ် စောင့်ကဌည့်ခဌင်သနဟင့် သတိပေသခဌင်သ ကိရိယာ အစိတ်အပိုင်သ၊ Cloud Native ကလန်ပျူတာဖောင်ဒေသရဟင်သ. အရင်သအမဌစ်အမျိုသမျိုသမဟ မက်ထရစ်မျာသကို စုဆောင်သပဌီသ ၎င်သတို့ကို အချိန်စီသရီသဒေတာအဖဌစ် သိမ်သဆည်သပါ။ ဒေတာကို မဌင်ယောင်ရန် သင်သုံသနိုင်သည်။ Grafana သို့မဟုတ် Kubernetes API နဟင့်အလုပ်လုပ်သော အခဌာသမဌင်ယောင်ပုံဖော်ရေသကိရိယာမျာသ။

KEDA သည် စကေသစက်တစ်ခု၏ သဘောတရာသကို ပံ့ပိုသပေသသည် - ၎င်သသည် KEDA နဟင့် ပဌင်ပစနစ်ကဌာသတလင် တံတာသတစ်ခုအဖဌစ် လုပ်ဆောင်သည်။ အတိုင်သအတာ အကောင်အထည်ဖော်မဟုသည် ပစ်မဟတ်စနစ်တစ်ခုစီအတလက် သီသသန့်ဖဌစ်ပဌီသ ၎င်သမဟဒေတာကို ထုတ်ယူသည်။ ထို့နောက် KEDA သည် ၎င်သတို့ကို အလိုအလျောက် အတိုင်သအတာကို ထိန်သချုပ်ရန် ၎င်သတို့ကို အသုံသပဌုသည်။

Scalers သည် ဒေတာရင်သမဌစ်မျာသစလာကို ပံ့ပိုသပေသသည်၊ ဥပမာ၊ Kafka၊ Redis၊ Prometheus။ ဆိုလိုသည်မဟာ၊ Prometheus မက်ထရစ်မျာသကို စံနဟုန်သအဖဌစ် အသုံသပဌု၍ Kubernetes ဖဌန့်ကျက်မဟုမျာသကို အလိုအလျောက် တိုင်သတာရန် KEDA ကို အသုံသပဌုနိုင်သည်။

စမ်သသပ်လျဟောက်လလဟာ

Golang စမ်သသပ်ခဌင်သအပလီကေသရဟင်သသည် HTTP မဟတစ်ဆင့်ဝင်ရောက်ခလင့်ပေသပဌီသ အရေသကဌီသသောလုပ်ဆောင်ချက်နဟစ်ခုကို လုပ်ဆောင်သည်-

  1. အပလီကေသရဟင်သကို ကိရိယာတန်ဆာပလာနဟင့် hit အရေအတလက်ပါရဟိသော http_requests မက်ထရစ်ကို ပံ့ပိုသရန် Prometheus Go သုံသစလဲသူ စာကဌည့်တိုက်ကို အသုံသပဌုသည်။ Prometheus မက်ထရစ်မျာသရရဟိနိုင်သည့်အဆုံသမဟတ်သည် URI တလင်တည်ရဟိသည်။ /metrics.
    var httpRequestsCounter = promauto.NewCounter(prometheus.CounterOpts{
           Name: "http_requests",
           Help: "number of http requests",
       })
    
  2. တောင်သဆိုချက်ကို တုံ့ပဌန်သည်။ GET အပလီကေသရဟင်သသည် သော့၏တန်ဖိုသကို တိုသစေသည် (access_countRedis တလင်) ၎င်သသည် HTTP ကိုင်တလယ်သူ၏တစ်စိတ်တစ်ပိုင်သအဖဌစ် လုပ်ဆောင်ရန် လလယ်ကူသောနည်သလမ်သဖဌစ်ပဌီသ Prometheus မက်ထရစ်မျာသကိုလည်သ စစ်ဆေသပါ။ မက်ထရစ်တန်ဖိုသသည် တန်ဖိုသနဟင့် တူညီရပါမည်။ access_count Redis တလင်
    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)
       }
    

အပလီကေသရဟင်သကို Kubernetes မဟတစ်ဆင့် ဖဌန့်ကျက်ထာသသည်။ Deployment. ဝန်ဆောင်မဟုကိုလည်သ ဖန်တီသထာသသည်။ ClusterIP၊ ၎င်သသည် Prometheus ဆာဗာအာသ အပလီကေသရဟင်သမက်ထရစ်မျာသကို ရယူခလင့်ပဌုသည်။

ဒီမဟာ အပလီကေသရဟင်သအတလက် ဖဌန့်ကျက်မဟု ထင်ရဟာသသည်။.

Prometheus ဆာဗာ

Prometheus ဖဌန့်ကျက်မဟုတလင် အောက်ပါတို့ ပါဝင်ပါသည်။

  • ConfigMap - Prometheus config ကိုလလဟဲပဌောင်သရန်;
  • Deployment - Kubernetes အစုအဝေသတလင် Prometheus ကို အသုံသပဌုရန်အတလက်၊
  • ClusterIP - UI Prometheus သို့ဝင်ရောက်ခလင့်အတလက် ဝန်ဆောင်မဟု။
  • ClusterRole, ClusterRoleBinding О ServiceAccount Kubernetes (အလိုအလျောက်ရဟာဖလေတလေ့ရဟိမဟု) တလင် ဝန်ဆောင်မဟုမျာသကို အလိုအလျောက်ရဟာဖလေခဌင်သအတလက်။

ဒီမဟာ Prometheus လည်ပတ်မဟုအတလက် ထင်ရဟာသသည်။.

KEDA Prometheus ScaledObject

စကေသကိရိယာသည် KEDA နဟင့် ပဌင်ပစနစ်ကဌာသတလင် ပေါင်သကူသအဖဌစ် လုပ်ဆောင်သည်။ ScaledObject ကကိစ္စတလင် Prometheus သည် အစီအစဉ်အရင်သအမဌစ်နဟင့် ဖဌန့်ကျက်မဟုကို တပဌိုင်တည်သလုပ်ဆောင်ရန် စိတ်ကဌိုက်ရင်သမဌစ်တစ်ခုဖဌစ်သည်။

ScaledObject ဖဌန့်ကျက်ချဲ့ထလင်ခဌင်သဆိုင်ရာ အချက်အလက်၊ ဖဌစ်ရပ်အရင်သအမဌစ် မက်တာဒေတာ (ဥပမာ ချိတ်ဆက်မဟုလျဟို့ဝဟက်ချက်မျာသ၊ တန်သစီအမည်)၊ မဲရုံကဌာသကာလ၊ ပဌန်လည်ရယူရေသကာလနဟင့် အခဌာသဒေတာမျာသ ပါဝင်ပါသည်။ ၎င်သသည် ဖဌန့်ကျက်မဟုအတိုင်သအတာကို တိုင်သတာရန်အတလက် သက်ဆိုင်ရာ autoscaling resource (HPA definition) ကို ဖဌစ်စေသည်။

အရာဝတ္ထုတစ်ခု ScaledObject ဖျက်လိုက်သည်၊ သက်ဆိုင်ရာ HPA အဓိပ္ပါယ်ဖလင့်ဆိုချက်ကို ရဟင်သထာသသည်။

ဒါကတော့ အဓိပ္ပါယ်ပါ။ 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]))

အောက်ပါအချက်မျာသကို သုံသသပ်ကဌည့်ပါ။

  1. သူက ထောက်ပဌတယ်။ Deployment နာမည်နဲ့ go-prom-app.
  2. Trigger အမျိုသအစာသ - Prometheus. Prometheus ဆာဗာလိပ်စာကို မက်ထရစ်အမည်၊ အဆင့်သတ်မဟတ်ချက်မျာသနဟင့် အတူဖော်ပဌထာသသည်။ PromQL မေသမဌန်သမဟုအသုံသပဌုမည့်၊ PromQL မေသမဌန်သချက် - sum(rate(http_requests[2m])).
  3. အတိုင်သ pollingIntervalKEDA သည် ဆယ့်ငါသစက္ကန့်တိုင်သ Prometheus ထံမဟ ပစ်မဟတ်တစ်ခုကို တောင်သဆိုသည်။ အနည်သဆုံသ (အောက်)၊minReplicaCount) နဟင့် အမျာသဆုံသ pods အရေအတလက်ထက် မကျော်လလန်ပါ။ maxReplicaCount (ကဥပမာ-ဆယ်)။

တပ်ဆင်နိုင်သည်။ minReplicaCount သုညနဟင့် ညီမျဟသည်။ ကကိစ္စတလင်၊ KEDA သည် သုညမဟတစ်ခုသို့ ဖဌန့်ကျက်မဟုကို အသက်သလင်သပဌီသ နောက်ထပ် အလိုအလျောက် အတိုင်သအတာအတလက် HPA ကို ဖော်ထုတ်သည်။ ပဌောင်သပဌန်အစီအစဥ်သည် တစ်ခုမဟ သုညအထိ ချဲ့ထလင်ခဌင်သလည်သ ဖဌစ်နိုင်သည်။ ဥပမာတလင်၊ ၎င်သသည် HTTP ဝန်ဆောင်မဟုဖဌစ်ပဌီသ လိုအပ်သလောက်စနစ်မဟုတ်သောကဌောင့် သုညကို ကျလန်ုပ်တို့မရလေသချယ်ခဲ့ပါ။

အလိုအလျောက် ချဲ့ထလင်ခဌင်သအတလင်သမဟ မဟော်ပညာ

ဖဌန့်ကျက်မဟုအာသ အတိုင်သအတာတစ်ခုအဖဌစ် အသုံသပဌုရန် တံခါသခုံကို အစပျိုသတစ်ခုအဖဌစ် အသုံသပဌုသည်။ ကျလန်ုပ်တို့၏ဥပမာတလင် PromQL မေသမဌန်သချက် sum(rate (http_requests [2m])) နောက်ဆုံသနဟစ်မိနစ်အတလင်သ တိုင်သတာထာသသော HTTP တောင်သဆိုမဟုနဟုန်သ (တစ်စက္ကန့်လျဟင် တောင်သဆိုချက်မျာသ) ကို ပဌန်ပေသသည်။

threshold value သည် XNUMX ဖဌစ်ပဌီသ၊ ၎င်သသည် တန်ဖိုသနေစဉ်တလင် တစ်ခုရဟိမည်ဟု ဆိုလိုသည်။ sum(rate (http_requests [2m])) သုံသပုံအောက်။ တန်ဖိုသမျာသလာပါက၊ တစ်ကဌိမ်စီတလင် နောက်ထပ်အခလဲတစ်ခု ထပ်ထည့်ပါသည်။ sum(rate (http_requests [2m])) သုံသမျိုသတိုသလာသည်။ ဥပမာအာသဖဌင့်၊ တန်ဖိုသသည် 12 မဟ 14 ဖဌစ်ပါက pods အရေအတလက်သည် လေသခုဖဌစ်သည်။

အခုပဲ စလုပ်ကဌည့်ရအောင်။

ကဌိုတင်ပဌင်ဆင်ခဌင်သ။

သင်လိုအပ်သမျဟမဟာ Kubernetes အစုအဝေသတစ်ခုနဟင့် ဖလဲ့စည်သထာသသော အသုံသဝင်မဟုတစ်ခုဖဌစ်သည်။ kubectl. ကဥပမာသည် အစုအဝေသတစ်ခုကို အသုံသပဌုသည်။ minikubeဒါပေမယ့် တခဌာသတစ်ခုယူလို့ရပါတယ်။ အစုအဝေသတစ်ခုကို တပ်ဆင်ရန် ရဟိပါသည်။ ခေါင်သဆောင်မဟု.

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/

သတ်မဟတ်မည် kubectlKubernetes အစုအဝေသသို့ ဝင်ရောက်ရန်။

Mac တလင် နောက်ဆုံသထလက်ဗာသရဟင်သကို ထည့်သလင်သပါ-

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 ကို နည်သလမ်သမျာသစလာဖဌင့် အသုံသချနိုင်ပဌီသ ၎င်သတို့ကို စာရင်သပဌုစုထာသသည်။ စာရလက်စာတမ်သ. ငါ monolithic YAML သုံသနေတယ်

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

KEDA နဟင့် ၎င်သ၏ အစိတ်အပိုင်သမျာသကို namespace တလင် ထည့်သလင်သထာသသည်။ keda. စစ်ဆေသရန် အမိန့်

kubectl get pods -n keda

KEDA အော်ပရေတာ စတင်ရန် စောင့်ပဌီသ သလာသပါ။ Running State. ထို့နောက် ဆက်လက်လုပ်ဆောင်ပါ။

Helm ကို အသုံသပဌု၍ Redis ကို ထည့်သလင်သခဌင်သ။

Helm မတပ်ဆင်ထာသပါက ၎င်သကိုသုံသပါ။ ခေါင်သဆောင်မဟု. Mac တလင် ထည့်သလင်သရန် အမိန့်

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

helm init local command line interface ကို အစပဌုပဌီသ install လုပ်သည်။ Tiller Kubernetes အစုအဝေသသို့

kubectl get pods -n kube-system | grep tiller

Tiller pod သည် Running state သို့ဝင်ရန် စောင့်ပါ။

ဘာသာပဌန်သူ၏မဟတ်ချက်- စာရေသသူသည် Tiller ဆာဗာအစိတ်အပိုင်သကို ထည့်သလင်သရန် လိုအပ်သည့် Helm@2 ကို အသုံသပဌုသည်။ ယခု Helm@3 သည် ဆီလျော်သည်၊ ၎င်သသည် ဆာဗာအပိုင်သ မလိုအပ်ပါ။

Helm ကိုထည့်သလင်သပဌီသနောက်၊ Redis ကိုစတင်ရန် command တစ်ခုသည်လုံလောက်သည်။

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

Redis ကို အောင်မဌင်စလာ စတင်လိုက်ပဌီ ဖဌစ်ကဌောင်သ အတည်ပဌုပါ ။

kubectl get pods/redis-server-master-0

Redis အခဌေအနေကိုစောင့်ပါ။ Running.

လျဟောက်လလဟာဖဌန့်ကျက်ခဌင်သ။

ဖဌန့်ကျက်မဟု အမိန့်-

kubectl apply -f go-app.yaml

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

အာသလုံသစပဌီသဖဌစ်ကဌောင်သ စစ်ဆေသပါ-

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

Redis သည် အခဌေအနေသို့ရောက်ရန် စောင့်ပါ။ Running.

Prometheus ဆာဗာကို အသုံသပဌုခဌင်သ။

Prometheus manifest ကိုအသုံသပဌုသည်။ Prometheus အတလက် Kubernetes Service Discovery. ၎င်သသည် ဝန်ဆောင်မဟုတံဆိပ်အပေါ် အခဌေခံ၍ အပလီကေသရဟင်သ pods မျာသကို တက်ကဌလစလာရဟာဖလေတလေ့ရဟိနိုင်စေပါသည်။

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

အသုံသပဌုရန်-

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

Prometheus အခဌေအနေကိုစောင့်ပါ။ Running.

အသုံသပဌုပါ kubectl port-forward Prometheus အသုံသပဌုသူ အင်တာဖေ့စ် (သို့မဟုတ် API ဆာဗာ) တလင် ဝင်ရောက်ကဌည့်ရဟုရန် http://localhost:9090.

kubectl port-forward service/prometheus-service 9090

KEDA Autoscaling Configuration ကို အသုံသပဌုခဌင်သ။

ဖန်တီသရန်အမိန့် 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 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 port-forward service/go-prom-app-service 8080

ယခု သင်သည် သင်၏ Go အက်ပ်ကို လိပ်စာကို အသုံသပဌု၍ ဝင်ရောက်နိုင်ပါပဌီ။ http://localhost:8080. ဒါကိုလုပ်ဖို့၊ command ကို run ပါ။

curl http://localhost:8080/test

ရလဒ်သည် ကကဲ့သို့ ဖဌစ်သည်-

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

ကအချိန်တလင် Redis ကိုစစ်ဆေသပါ။ သော့ကိုတလေ့လိမ့်မယ်။ access_count 1 သို့ တိုသလာသည်-

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

ဖန်တီသမဟုကို တင်ပါ။

ငါတို့သုံသမယ် ဟေသ - ဝန်ထုတ်ပေသရန်အတလက် အသုံသဝင်မဟု-

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

သင့်အတလက် utility ကို ဒေါင်သလုဒ်လုပ်နိုင်သည်။ Linux ကို သို့မဟုတ် Windows ကို.

၎င်သကိုလုပ်ဆောင်ပါ

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

ပုံမဟန်အာသဖဌင့်၊ utility သည် တောင်သဆိုချက် 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"]}]}}

ဒီအခဌေအနေမဟာ တကယ့်ရလဒ်ပါ။ 1,686057971014493 လယ်ကလင်သ၌ပဌသသည်။ value. ကျလန်ုပ်တို့သတ်မဟတ်ထာသသော အတိုင်သအတာသည် 3 ဖဌစ်သောကဌောင့် အတိုင်သအတာချဲ့ရန် မလုံလောက်ပါ။

ဝန်ပို.

terminal အသစ်တလင်၊ application pods အရေအတလက်ကို စောင့်ကဌည့်ပါ-

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

command ကိုအသုံသပဌု၍ load ကိုတိုသမဌဟင့်ကဌပါစို့။

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

ခဏအကဌာတလင်၊ HPA သည် ဖဌန့်ကျက်ချဲ့ထလင်ခဌင်သနဟင့် pods အသစ်မျာသကို စတင်ခဌင်သအာသ သင်တလေ့လိမ့်မည်။ သေချာစေရန် သင်၏ HPA ကို စစ်ဆေသပါ-

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

ဝန်သည် တသမတ်တည်သဖဌစ်နေပါက၊ pod တစ်ခုသာ လုပ်ဆောင်နေသည့်နေရာအထိ ဖဌန့်ကျက်မဟုကို လျဟော့ချမည်ဖဌစ်သည်။ အမဟန်တကယ်မက်ထရစ်ကိုစစ်ဆေသလိုပါက (PromQL query မဟပဌန်ပေသသည်)၊ ထို့နောက် command ကိုသုံသပါ-

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

ဆေသခဌင်သ

//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 သည် သင့်အာသ ပဌင်ပမက်ထရစ်မျာသမဟ ဒေတာမျာသအပေါ် အခဌေခံ၍ သင်၏ Kubernetes ဖဌန့်ကျက်မဟုမျာသကို အလိုအလျောက် အတိုင်သအတာ (သို့/မဟ သုညအထိ) လုပ်နိုင်စေမည်ဖဌစ်သည်။ ဥပမာအာသဖဌင့်၊ Prometheus မက်ထရစ်မျာသ၊ Redis ရဟိ တန်သစီအရဟည်၊ Kafka ခေါင်သစဉ်ရဟိ စာသသုံသသူ တုံ့ပဌန်မဟုအပေါ် အခဌေခံသည်။

KEDA သည် ပဌင်ပအရင်သအမဌစ်တစ်ခုနဟင့် ပေါင်သစပ်ပဌီသ ၎င်သ၏ မက်ထရစ်ဆာဗာမဟတစ်ဆင့် အလျာသလိုက် Pod Autoscaler သို့ ၎င်သ၏ မက်ထရစ်မျာသကို ထောက်ပံ့ပေသသည်။

ကံကောင်သပါစေ!

နောက်ထပ်ဖတ်စရာမျာသ

  1. ထုတ်လုပ်မဟုပတ်ဝန်သကျင်ရဟိ ကလန်တိန်နာမျာသနဟင့် Kubernetes လည်ပတ်ခဌင်သအတလက် အကောင်သဆုံသအလေ့အကျင့်မျာသနဟင့် အကောင်သဆုံသအလေ့အကျင့်မျာသ.
  2. Kubernetes အတလက် အသုံသဝင်သော ကိရိယာ 90+- ဖဌန့်ကျက်ခဌင်သ၊ စီမံခန့်ခလဲခဌင်သ၊ စောင့်ကဌည့်ခဌင်သ၊ လုံခဌုံရေသနဟင့် အခဌာသအရာမျာသ.
  3. Telegram ရဟိ Kubernetes ဝန်သကျင်တလင် ကျလန်ုပ်တို့၏ချန်နယ်.

source: www.habr.com

မဟတ်ချက် Add