ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’ Kubernetes ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธื ืก ืžื™ื˜ Prometheus ืื•ืŸ KEDA

ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’ Kubernetes ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธื ืก ืžื™ื˜ Prometheus ืื•ืŸ KEDAื‘ืึทืœืึธืŸ ืžืขื ื˜ืฉ ื“ื•ืจืš Cimuanos

ืกืงืึทืœืึทื‘ื™ืœื™ื˜ื™ ืื™ื– ืึท ืฉืœื™ืกืœ ืคืึธื“ืขืจื•ื ื’ ืคึฟืึทืจ ื•ื•ืึธืœืงืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื–. ืžื™ื˜ Kubernetes, ืกืงื™ื™ืœื™ื ื’ ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื™ื– ื•ื•ื™ ืคึผืฉื•ื˜ ื•ื•ื™ ื™ื ืงืจื™ืกื™ื ื’ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืจืขืคึผืœืึทืงืึทื– ืคึฟืึทืจ ื“ื™ ืฆื•ื ืขืžืขืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึธื“ืขืจ ReplicaSet - ืึธื‘ืขืจ ื“ืึธืก ืื™ื– ืึท ืžืึทื ื•ืึทืœ ืคึผืจืึธืฆืขืก.

Kubernetes ืึทืœืึทื•ื– ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ืฆื• ื–ื™ื™ืŸ ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ืกืงื™ื™ืœื“ (ื“"ื” ืคึผืึธื“ืก ืื™ืŸ ืึท ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืึธื“ืขืจ ReplicaSet) ืื™ืŸ ืึท ื“ืขืงืœืึทืจืึทื˜ื™ื•ื•ืข ืฉื˜ื™ื™ื’ืขืจ ื ื™ืฆืŸ ื“ื™ ื”ืึธืจื™ื–ืึธื ื˜ืึทืœ ืคึผืึธื“ ืึทื•ื˜ืึธืกืงืึทืœืขืจ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’. ื“ื™ ืคืขืœื™ืงื™ื™ึทื˜ ืงืจื™ื˜ืขืจื™ืึธืŸ ืคึฟืึทืจ ืึธื˜ืึทืžืึทื˜ื™ืง ืกืงื™ื™ืœื™ื ื’ ืื™ื– ืงืคึผื• ื‘ืึทื ื™ืฅ ืžืขื˜ืจื™ืงืก (ืจื™ืกืึธืจืก ืžืขื˜ืจื™ืงืก), ืึธื‘ืขืจ ืื™ืจ ืงืขื ืขืŸ ื•ื™ืกืฉื˜ื™ืžืขืŸ ืžื ื”ื’ ืื•ืŸ ื•ื™ืกื•ื•ื™ื™ื ื™ืง ืฆื•ื’ืขืฉื˜ืขืœื˜ ืžืขื˜ืจื™ืงืก.

ืงืึธืœืขืงื˜ื™ื•ื• Kubernetes aaS ืคึฟื•ืŸ Mail.ru ืื™ื‘ืขืจื’ืขื–ืขืฆื˜ ืึทืŸ ืึทืจื˜ื™ืงืœ ื•ื•ื™ ืฆื• ื ื•ืฆืŸ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืžืขื˜ืจื™ืงืก ืฆื• ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื•ื•ืึธื’ ืึท Kubernetes ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ. ืฆื• ื•ื•ื™ื™ึทื–ืŸ ื•ื•ื™ ืึทืœืฅ ืึทืจื‘ืขื˜, ื“ืขืจ ืžื—ื‘ืจ ื ื™ืฆื˜ HTTP ืึทืงืกืขืก ื‘ืขื˜ืŸ ืžืขื˜ืจื™ืงืก, ื•ื•ืึธืก ื–ืขื ืขืŸ ื’ืขื–ืืžืœื˜ ืžื™ื˜ ืคึผืจืึธืžืขื˜ื”ืขื•ืก.

ืึทื ืฉื˜ืึธื˜ ื”ืึธืจื™ื–ืึธื ื˜ืึทืœ ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’ ืคื•ืŸ ืคึผืึธื“ืก, Kubernetes Event Driven Autoscaling (KEDA) ืื™ื– ื’ืขื ื™ืฆื˜, ืึทืŸ ืึธืคึฟืŸ ืžืงื•ืจ Kubernetes ืึธืคึผืขืจืึทื˜ืึธืจ. ืขืก ื™ื ื˜ืึทื’ืจื™ื™ืฅ ื’ืขื‘ื•ื™ืจืŸ ืžื™ื˜ ื”ืึธืจื™ื–ืึธื ื˜ืึทืœ ืคึผืึธื“ ืึทื•ื˜ืึธืกืงืึทืœืขืจ ืฆื• ืฆื•ืฉื˜ืขืœืŸ ืกื™ืžืœืึทืก ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’ (ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืฆื• / ืคึฟื•ืŸ ื ื•ืœ) ืคึฟืึทืจ ื’ืขืฉืขืขื ื™ืฉ-ื’ืขื˜ืจื™ื‘ืŸ ื•ื•ืขืจืงืœืึธื•ื“ื–. ืงืึธื“ ื‘ื ื™ืžืฆื ืื™ืŸ ื’ื™ื˜ื”ื•ื‘.

ืงื•ืจืฅ ืื™ื‘ืขืจื‘ืœื™ืง ืคื•ืŸ ื“ื™ ืกื™ืกื˜ืขื

ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’ Kubernetes ืึทืคึผืคึผืœื™ืงืึทื˜ื™ืึธื ืก ืžื™ื˜ Prometheus ืื•ืŸ KEDA

ื“ื™ ื“ื™ืึทื’ืจืึทืžืข ื•ื•ื™ื™ื–ื˜ ืึท ืงื•ืจืฅ ื‘ืึทืฉืจื™ื™ึทื‘ื•ื ื’ ืคื•ืŸ ื•ื•ื™ ืึทืœืฅ ืึทืจื‘ืขื˜:

  1. ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื’ื™ื˜ HTTP ื”ื™ื˜ ืฆื™ื™ืœืŸ ืžืขื˜ืจื™ืงืก ืื™ืŸ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืคึฟืึธืจืžืึทื˜.
  2. ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืื™ื– ืงืึทื ืคื™ื’ื™ืขืจื“ ืฆื• ื–ืึทืžืœืขืŸ ื“ื™ ืžืขื˜ืจื™ืงืก.
  3. ื“ื™ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืกืงืึทืœืขืจ ืื™ืŸ KEDA ืื™ื– ืงืึทื ืคื™ื’ื™ืขืจื“ ืฆื• ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื•ื•ืึธื’ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ื”ื˜ื˜ืคึผ ื”ื™ืฅ.

ืื™ืฆื˜ ืื™ืš ื•ื•ืขื˜ ื–ืึธื’ืŸ ืื™ืจ ืื™ืŸ ื“ืขื˜ืึทืœ ื•ื•ืขื’ืŸ ื™ืขื“ืขืจ ืขืœืขืžืขื ื˜.

KEDA ืื•ืŸ ืคึผืจืึธืžืขื˜ื”ืขื•ืก

ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืื™ื– ืึทืŸ ืึธืคึฟืŸ ืžืงื•ืจ ืกื™ืกื˜ืขื ืžืึธื ื™ื˜ืึธืจื™ื ื’ ืื•ืŸ ืึทืœืขืจื˜ื™ื ื’ ื˜ืึธืึธืœืงื™ื˜, ื˜ื™ื™ืœ ืงืœืึธื•ื“ ื ืึทื˜ื™ื•ื•ืข ืงืึทืžืคึผื™ื•ื˜ื™ื ื’ ื•ื•ื™ืงื™ืคึผืขื“ื™ืข. ืงืึทืœืขืงืฅ ืžืขื˜ืจื™ืงืก ืคื•ืŸ ืคืึทืจืฉื™ื“ืŸ ืงื•ื•ืืœืŸ ืื•ืŸ ืกื˜ืึธืจื– ื–ื™ื™ ื•ื•ื™ ืฆื™ื™ื˜ ืกืขืจื™ืข ื“ืึทื˜ืŸ. ืฆื• ื•ื•ื™ื–ืฉื•ื•ืึทืœื™ื™ื– ื“ืึทื˜ืŸ ืื™ืจ ืงืขื ืขืŸ ื ื•ืฆืŸ ื’ืจืืคืื ื ืึธื“ืขืจ ืื ื“ืขืจืข ื•ื•ื™ื–ืฉื•ื•ืึทืœืึทื–ื™ื™ืฉืึทืŸ ืžื›ืฉื™ืจื™ื ื•ื•ืึธืก ืึทืจื‘ืขื˜ ืžื™ื˜ ื“ื™ Kubernetes API.

KEDA ืฉื˜ื™ืฆื˜ ื“ืขื ื‘ืึทื’ืจื™ืฃ ืคื•ืŸ ืึท ืกืงืึทืœืขืจ - ืขืก ืึทืงื˜ ื•ื•ื™ ืึท ื‘ืจื™ืง ืฆื•ื•ื™ืฉืŸ KEDA ืื•ืŸ ื“ื™ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืกื™ืกื˜ืขื. ื“ื™ ืกืงืึทืœืขืจ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืื™ื– ืกืคึผืขืฆื™ืคื™ืฉ ืฆื• ื™ืขื“ืขืจ ืฆื™ืœ ืกื™ืกื˜ืขื ืื•ืŸ ืขืงืกื˜ืจืึทืงื˜ ื“ืึทื˜ืŸ ืคื•ืŸ ืขืก. KEDA ื“ืขืจื ืึธืš ื ื™ืฆื˜ ื–ื™ื™ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืึธื˜ืึทืžืึทื˜ื™ืง ืกืงื™ื™ืœื™ื ื’.

ืกืงืึทืœืขืจื– ืฉื˜ื™ืฆืŸ ืงื™ื™ืคืœ ื“ืึทื˜ืŸ ืงื•ื•ืืœืŸ, ืœืžืฉืœ, Kafka, Redis, Prometheus. ื“ืึธืก ืื™ื–, KEDA ืงืขื ืขืŸ ื•ื•ืขืจืŸ ื’ืขื ื•ืฆื˜ ืฆื• ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื•ื•ืึธื’ Kubernetes ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ ื ื™ืฆืŸ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืžืขื˜ืจื™ืงืก ื•ื•ื™ ืงืจื™ื™ื˜ื™ืจื™ืึท.

ื˜ืขืกื˜ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ

ื“ื™ Golang ืคึผืจื•ื‘ื™ืจืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื’ื™ื˜ ืึทืงืกืขืก ื“ื•ืจืš ื”ื˜ื˜ืคึผ ืื•ืŸ ืคึผืขืจืคืึธืจืžื– ืฆื•ื•ื™ื™ ื•ื•ื™ื›ื˜ื™ืง ืคืึทื ื’ืงืฉืึทื ื–:

  1. ื ื™ืฆื˜ ื“ื™ Prometheus Go ืงืœื™ืขื ื˜ ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืฆื• ื™ื ืกื˜ืจื•ืžืขื ื˜ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืื•ืŸ ืฆื•ืฉื˜ืขืœืŸ ื“ื™ http_requests ืžืขื˜ืจื™ืง, ื•ื•ืึธืก ื›ึผื•ืœืœ ืึท ืฉืœืึธื’ืŸ ืฆื™ื™ืœืŸ. ื“ื™ ืขื ื“ืคึผื•ื™ื ื˜ ื•ื•ื• ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืžืขื˜ืจื™ืงืก ื–ืขื ืขืŸ ื‘ื ื™ืžืฆื ืื™ื– ืœื™ื’ืŸ ืื™ืŸ ื“ื™ URI /metrics.
    var httpRequestsCounter = promauto.NewCounter(prometheus.CounterOpts{
           Name: "http_requests",
           Help: "number of http requests",
       })
    
  2. ืื™ืŸ ืขื ื˜ืคืขืจ ืฆื• ืึท ื‘ืงืฉื” GET ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ื™ื ืงืจืึทืžืึทื ืฅ ื“ื™ ื•ื•ืขืจื˜ ืคื•ืŸ ื“ื™ ืฉืœื™ืกืœ (access_count) ืื™ืŸ ืจืขื“ื™ืก. ื“ืึธืก ืื™ื– ืึทืŸ ื’ืจื™ื ื’ ื•ื•ืขื’ ืฆื• ื˜ืึธืŸ ื“ื™ ืึทืจื‘ืขื˜ ื•ื•ื™ ืึท ื˜ื™ื™ืœ ืคื•ืŸ ืึท ื”ื˜ื˜ืคึผ ื”ืึทื ื“ืœืขืจ ืื•ืŸ ืื•ื™ืš ืงืึธื ื˜ืจืึธืœื™ืจืŸ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืžืขื˜ืจื™ืงืก. ื“ื™ ืžืขื˜ืจื™ืง ื•ื•ืขืจื˜ ืžื•ื–ืŸ ื–ื™ื™ืŸ ื“ื™ ื–ืขืœื‘ืข ื•ื•ื™ ื“ื™ ื•ื•ืขืจื˜ access_count ืื™ืŸ ืจืขื“ื™ืก.
    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, ืขืก ืึทืœืึทื•ื– ื“ื™ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืกืขืจื•ื•ืขืจ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืžืขื˜ืจื™ืงืก.

ื“ืึธ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื‘ืึทืฉื™ื™ึทืžืคึผืขืจืœืขืš ืคึฟืึทืจ ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ.

ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืกืขืจื•ื•ื™ืจืขืจ

ื“ื™ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืžืึทื ืึทืคืขืกื˜ื™ื– ื‘ืืฉื˜ื™ื™ื˜ ืคื•ืŸ:

  • ConfigMap - ืฆื• ืึทืจื™ื‘ืขืจืคื™ืจืŸ ื“ื™ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ;
  • Deployment - ืคึฟืึทืจ ื“ื™ืคึผืœื•ื™ื™ื ื’ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืื™ืŸ ืึท ืงื•ื‘ืขืจื ืขื˜ืขืก ืงื ื•ื™ืœ;
  • ClusterIP - ืกืขืจื•ื•ื™ืก ืคึฟืึทืจ ืึทืงืกืขืก ืฆื• UI Prometheus;
  • ClusterRole, ClusterRoleBinding ะธ ServiceAccount - ืคึฟืึทืจ ืึทื•ื˜ืึธ-ื“ื™ื˜ืขืงืฉืึทืŸ ืคื•ืŸ ืกืขืจื•ื•ื™ืกืขืก ืื™ืŸ Kubernetes (ืึธื˜ืึทืžืึทื˜ื™ืง ื•ืคื“ืขืงื•ื ื’).

ื“ืึธ ื‘ืึทืฉื™ื™ึทืžืคึผืขืจืœืขืš ืคึฟืึทืจ ืคืœื™ืกื ื“ื™ืง ืคึผืจืึธืžืขื˜ื”ืขื•ืก.

KEDA Prometheus ScaledObject

ื“ืขืจ ืกืงืึทืœืขืจ ืึทืงื˜ ื•ื•ื™ ืึท ื‘ืจื™ืง ืฆื•ื•ื™ืฉืŸ KEDA ืื•ืŸ ื“ื™ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืกื™ืกื˜ืขื ืคื•ืŸ ื•ื•ืึธืก ืžืขื˜ืจื™ืงืก ื“ืึทืจืคึฟืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ. ScaledObject ืื™ื– ืึท ืžื ื”ื’ ืžื™ื˜ืœ ื•ื•ืึธืก ื“ืึทืจืฃ ื–ื™ื™ืŸ ื“ื™ืคึผืœื•ื™ื“ ืฆื• ืกื™ื ื’ืงืจืึทื ื™ื™ื– ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืžื™ื˜ ื“ื™ ื’ืขืฉืขืขื ื™ืฉ ืžืงื•ืจ, ืื™ืŸ ื“ืขื ืคืึทืœ Prometheus.

ScaledObject ื›ึผื•ืœืœ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืกืงื™ื™ืœื™ื ื’ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข, ื’ืขืฉืขืขื ื™ืฉ ืžืงื•ืจ ืžืขื˜ืึทื“ืึทื˜ืึท (ืึทื–ืึท ื•ื•ื™ ืงืฉืจ ืกื™ืงืจื™ืฅ, ืจื™ื™ ื ืึธืžืขืŸ), ืคึผืึธืœืœื™ื ื’ ืžืขื”ืึทืœืขืš, ืึธืคึผื–ื•ืš ืฆื™ื™ึทื˜ ืื•ืŸ ืื ื“ืขืจืข ื“ืึทื˜ืŸ. ืขืก ืจืขื–ื•ืœื˜ืื˜ืŸ ืื™ืŸ ื“ื™ ืงืึธืจืึทืกืคึผืึทื ื“ื™ื ื’ ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’ ืžื™ื˜ืœ (HPA ื“ืขืคึฟื™ื ื™ืฆื™ืข) ืฆื• ื•ื•ืึธื’ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜.

ื•ื•ืขืŸ ืึท ื›ื™ื™ืคืขืฅ 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. ื˜ืจื™ื’ืขืจ ื˜ื™ืคึผ - Prometheus. ื“ื™ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืกืขืจื•ื•ืขืจ ืึทื“ืจืขืก ืื™ื– ื“ืขืจืžืื ื˜ ืฆื•ื–ืืžืขืŸ ืžื™ื˜ ื“ื™ ืžืขื˜ืจื™ืง ื ืึธืžืขืŸ, ืฉื•ื•ืขืœ ืื•ืŸ ืคึผืจืึธืžืงืœ ืึธื ืคึฟืจืขื’, ื•ื•ืึธืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ื’ืขื•ื•ื™ื™ื ื˜. ืคึผืจืึธืžืงืœ ืึธื ืคึฟืจืขื’ - sum(rate(http_requests[2m])).
  3. ืœื•ื™ื˜ pollingInterval,ืงืขื“ืึท ื‘ืขื˜ืŸ ืึท ืฆื™ืœ ืคื•ืŸ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ื™ืขื“ืขืจ ืคื•ืคืฆืŸ ืกืขืงื•ื ื“ืขืก. ืœืคึผื—ื•ืช ืื™ื™ืŸ ืื•ื ื˜ืขืจ (minReplicaCount), ืื•ืŸ ื“ื™ ืžืึทืงืกื™ืžื•ื ื ื•ืžืขืจ ืคื•ืŸ ืคึผืึธื“ืก ืื™ื– ื ื™ืฉื˜ ื™ืงืกื™ื“ maxReplicaCount (ืื™ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ - ืฆืขืŸ).

ืงืขื ืขืŸ ื™ื ืกื˜ืึทืœื™ืจืŸ minReplicaCount ื’ืœื™ื™ืš ืฆื• ื ื•ืœ. ืื™ืŸ ื“ืขื ืคืึทืœ, KEDA ืึทืงื˜ืึทื•ื•ื™ื™ืฅ ื“ื™ ื ื•ืœ-ืฆื•-ืื™ื™ืŸ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื•ืŸ ื“ืขืžืึธืœื˜ ื™ืงืกืคึผืึธื•ื–ื“ ื“ื™ HPA ืคึฟืึทืจ ื•ื•ื™ื™ึทื˜ืขืจ ืึธื˜ืึทืžืึทื˜ื™ืง ืกืงื™ื™ืœื™ื ื’. ื“ืขืจ ืคืึทืจืงืขืจื˜ ืกื“ืจ ืื™ื– ืื•ื™ืš ืžืขื’ืœืขืš, ื“ืึธืก ืื™ื–, ืกืงื™ื™ืœื™ื ื’ ืคื•ืŸ ืื™ื™ืŸ ืฆื• ื ื•ืœ. ืื™ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ, ืžื™ืจ ื”ืึธื‘ืŸ ื ื™ืฉื˜ ืื•ื™ืกืงืœื™ื™ึทื‘ืŸ ื ื•ืœ ื•ื•ื™ื™ึทืœ ื“ืึธืก ืื™ื– ืึท ื”ื˜ื˜ืคึผ ื“ื™ื ืกื˜ ืื•ืŸ ื ื™ืฉื˜ ืึทืŸ ืื•ื™ืฃ-ืคืึธื“ืขืจื•ื ื’ ืกื™ืกื˜ืขื.

ื“ื™ ืžืึทื’ื™ืฉ ืื™ืŸ ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’

ื“ื™ ืฉื•ื•ืขืœ ืื™ื– ื’ืขื ื™ืฆื˜ ื•ื•ื™ ืึท ืฆื™ื ื’ืœ ืฆื• ื•ื•ืึธื’ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜. ืื™ืŸ ืื•ื ื“ื–ืขืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื“ื™ PromQL ืึธื ืคึฟืจืขื’ sum(rate (http_requests [2m])) ืงืขืจื˜ ื“ื™ ื’ืขืžื™ื™ื ื–ืึทื ื”ื˜ื˜ืคึผ ื‘ืขื˜ืŸ ืงื•ืจืก (ืจื™ืงื•ื•ืขืก ืคึผืขืจ ืกืขืงื•ื ื“ืข), ื’ืขืžืืกื˜ืŸ ืื™ืŸ ื“ื™ ืœืขืฆื˜ืข ืฆื•ื•ื™ื™ ืžื™ื ื•ื˜.

ื–ื™ื ื˜ ื“ื™ ืฉื•ื•ืขืœ ื•ื•ืขืจื˜ ืื™ื– ื“ืจื™ื™, ืขืก ืžื™ื˜ืœ ืึทื– ืขืก ื•ื•ืขื˜ ื–ื™ื™ืŸ ืื™ื™ื ืขืจ ืื•ื ื˜ืขืจ ื“ื™ ื•ื•ืขืจื˜ sum(rate (http_requests [2m])) ื•ื•ื™ื™ื ื™ืงืขืจ ื•ื•ื™ ื“ืจื™ื™ึท. ืื•ื™ื‘ ื“ื™ ื•ื•ืขืจื˜ ื™ื ืงืจื™ืกื™ื–, ืึทืŸ ื ืึธืš ืกืึทื‘ ืื™ื– ืžื•ืกื™ืฃ ื™ืขื“ืขืจ ืžืึธืœ sum(rate (http_requests [2m])) ื™ื ืงืจื™ืกื™ื– ื“ื•ืจืš ื“ืจื™ื™ึท. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื•ื™ื‘ ื“ื™ ื•ื•ืขืจื˜ ืื™ื– 12-14, ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืคึผืึธื“ืก ืื™ื– ืคื™ืจ.

ืื™ืฆื˜ ืœืึธื–ืŸ ืก ืคึผืจื•ื‘ื™ืจืŸ ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ ืขืก!

ืคืึทืจ-ื‘ืึทืฉื˜ืขื˜ื™ืงืŸ

ืึทืœืข ืื™ืจ ื“ืึทืจืคึฟืŸ ืื™ื– ืึท ืงื•ื‘ืขืจื ืขื˜ืขืก ืงื ื•ื™ืœ ืื•ืŸ ืึท ืงืึทื ืคื™ื’ื™ืขืจื“ ื ื•ืฆืŸ kubectl. ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ื ื™ืฆื˜ ืึท ืงื ื•ื™ืœ minikube, ืึธื‘ืขืจ ืื™ืจ ืงืขื ืขืŸ ื ืขืžืขืŸ ืงื™ื™ืŸ ืื ื“ืขืจืข. ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ืึท ืงื ื•ื™ืœ ืขืก ืื™ื– ืคื™ืจืขืจืฉืึทืคื˜.

ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืข ืื•ื™ืฃ ืžืขืง:

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/

ืฉื˜ืขืœืŸ kubectlืฆื• ืึทืงืกืขืก ื“ื™ Kubernetes ืงื ื•ื™ืœ.

ื™ื ืกื˜ืึทืœื™ืจืŸ ื“ื™ ืœืขืฆื˜ืข ื•ื•ืขืจืกื™ืข ืื•ื™ืฃ ืžืขืง:

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 ืื™ืŸ ืขื˜ืœืขื›ืข ื•ื•ืขื’ืŸ, ื–ื™ื™ ื–ืขื ืขืŸ ืœื™ืกื˜ืขื“ ืื™ืŸ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ. ืื™ืš ื ื•ืฆืŸ ืžืึทื ืึทืœื™ื˜ื™ืง YAML:

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

KEDA ืื•ืŸ ื–ื™ื™ึทืŸ ืงืึทืžืคึผืึธื•ื ืึทื ืฅ ื–ืขื ืขืŸ ืื™ื ืกื˜ืึทืœื™ืจืŸ ืื™ืŸ ื“ื™ ื ืึทืžืขืกืคึผืึทืกืข keda. ื‘ืึทืคึฟืขืœ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ:

kubectl get pods -n keda

ื•ื•ืึทืจื˜ืŸ ืคึฟืึทืจ KEDA ืึธืคึผืขืจืึทื˜ืึธืจ ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ืื•ืŸ ื’ื™ื™ืŸ ืฆื• Running State. ืื•ืŸ ื ืึธืš ื“ืขื, ืคืึธืจื–ืขืฆืŸ.

ื™ื ืกื˜ืึธืœื™ื ื’ Redis ื ื™ืฆืŸ ื”ืขืœื

ืื•ื™ื‘ ืื™ืจ ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ื”ืขืœื ืื™ื ืกื˜ืึทืœื™ืจืŸ, ื ื•ืฆืŸ ื“ืขื ืคื™ืจืขืจืฉืึทืคื˜. ื‘ืึทืคึฟืขืœ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ ืื•ื™ืฃ ืžืขืง:

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

helm init ื™ื ื™ืฉืึทืœื™ื™ื–ื™ื– ื“ื™ ื”ื™ื’ืข ื‘ืึทืคึฟืขืœืŸ ืฉื•ืจื” ืฆื•ื‘ื™ื ื“ ืื•ืŸ ืื•ื™ืš ื™ื ืกื˜ืึธืœื– Tiller ืฆื• ื“ื™ ืงื•ื‘ืขืจื ืขื˜ืขืก ืงื ื•ื™ืœ.

kubectl get pods -n kube-system | grep tiller

ื•ื•ืึทืจื˜ืŸ ื‘ื™ื– ื“ื™ ื˜ื™ืœืขืจ ืคึผืึธื“ ืึทืจื™ื™ึทืŸ ื“ื™ ืคืœื™ืกื ื“ื™ืง ืฉื˜ืึทื˜.

ืื™ื‘ืขืจื–ืขืฆืขืจ'ืก ื ืึธื˜ื™ืฅ: ื“ืขืจ ืžื—ื‘ืจ ื ื™ืฆื˜ ื”ืขืœื @ 2, ื•ื•ืึธืก ืจื™ืงื•ื•ื™ื™ืขืจื– ื“ื™ ื˜ื™ืœืœืขืจ ืกืขืจื•ื•ืขืจ ืงืึธืžืคึผืึธื ืขื ื˜ ืฆื• ื–ื™ื™ืŸ ืื™ื ืกื˜ืึทืœื™ืจืŸ. ืื™ืฆื˜ ื”ืขืœื @ 3 ืื™ื– ื‘ืึทื˜ื™ื™ึทื˜ื™ืง, ืขืก ื˜ื•ื˜ ื ื™ืฉื˜ ื“ืึทืจืคืŸ ืึท ืกืขืจื•ื•ืขืจ ื˜ื™ื™ืœ.

ื ืึธืš ื™ื ืกื˜ืึธืœื™ื ื’ ื”ืขืœื, ืื™ื™ืŸ ื‘ืึทืคึฟืขืœ ืื™ื– ื’ืขื ื•ื’ ืฆื• ืึธื ื”ื™ื™ื‘ืŸ Redis:

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.

ื“ื™ืคึผืœื•ื™ื™ื ื’ ืึท ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืกืขืจื•ื•ื™ืจืขืจ

ื“ื™ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืžืึทื ืึทืคืขืกื˜ื™ื– ื ื™ืฆื˜ Kubernetes Service Discovery ืคึฟืึทืจ ืคึผืจืึธืžืขื˜ื”ืขื•ืก. ืขืก ืึทืœืึทื•ื– ื“ื™ื ืึทืžื™ืฉ ื•ืคื“ืขืงื•ื ื’ ืคื•ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคึผืึธื“ืก ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืกืขืจื•ื•ื™ืก ืคื™ืจืžืข.

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

ื•ื•ืึทืจื˜ืŸ ืคึฟืึทืจ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืฆื• ื’ื™ื™ืŸ ืื™ืŸ ืฉื˜ืึทื˜ Running.

ื ื™ืฆืŸ kubectl port-forward ืฆื• ืึทืงืกืขืก ื“ื™ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ื‘ืึทื ื™ืฆืขืจ ืฆื•ื‘ื™ื ื“ (ืึธื“ืขืจ ืึทืคึผื™ ืกืขืจื•ื•ืขืจ) ืื™ืŸ http://localhost:9090.

kubectl port-forward service/prometheus-service 9090

ื“ื™ืคึผืœื•ื™ื™ื ื’ KEDA ืึทื•ื˜ืึธืกืงืึทืœื™ื ื’ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ

ื‘ืึทืคึฟืขืœ ืฆื• ืฉืึทืคึฟืŸ 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. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืœื•ื™ืคืŸ ื“ื™ ื‘ืึทืคึฟืขืœ:

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

ืื™ืจ ืงืขื ืขืŸ ืื•ื™ืš ืืจืืคืงืืคื™ืข ื“ื™ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคึฟืึทืจ ืœื™ื ื•ืงืก ืึธื“ืขืจ ืคึฟืขื ืฆื˜ืขืจ.

ืœื•ื™ืคืŸ ืขืก:

./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

ื•ื•ืึทืœืึทื“ื™ื™ื˜ ื“ื™ ื•ื•ืขืจื˜ ืคื•ืŸ ื“ื™ ืคืึทืงื˜ื™ืฉ ืžืขื˜ืจื™ืง (ืฆื•ืจื™ืงื’ืขืงื•ืžืขืŸ ื“ื•ืจืš ื“ื™ ืคึผืจืึธืžืงืœ ืึธื ืคึฟืจืขื’):

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.

ืžืขืจ ืžืึทืกืข!

ืื™ืŸ ื“ื™ ื ื™ื™ึทืข ื•ื•ืึธืงื–ืึทืœ, ืžืึธื ื™ื˜ืึธืจ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืคึผืึธื“ืก:

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

ื–ืืœ ืก ืคืึทืจื’ืจืขืกืขืจืŸ ื“ื™ ืžืึทืกืข ื ื™ืฆืŸ ื“ื™ ื‘ืึทืคึฟืขืœ:

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

ื ืึธืš ืึท ื‘ืฉืขืช, ืื™ืจ ื•ื•ืขื˜ ื–ืขืŸ HPA ืกืงื™ื™ืœื™ื ื’ ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ืื•ืŸ ืงืึทื˜ืขืจ ื ื™ื™ึท ืคึผืึธื“ืก. ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ื™ืŸ 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

ืื•ื™ื‘ ื“ื™ ืžืึทืกืข ืื™ื– ืกืชื™ืจื”, ื“ื™ ื“ื™ืคึผืœื•ื™ืžืึทื ื˜ ื•ื•ืขื˜ ื–ื™ื™ืŸ ืจื™ื“ื•ืกื˜ ืฆื• ื“ื™ ืคื•ื ื˜ ื•ื•ื• ื‘ืœื•ื™ื– ืื™ื™ืŸ ืคึผืึธื“ ืื™ื– ืคืœื™ืกื ื“ื™ืง. ืื•ื™ื‘ ืื™ืจ ื•ื•ื™ืœืŸ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืคืึทืงื˜ื™ืฉ ืžืขื˜ืจื™ืง (ืฆื•ืจื™ืงื’ืขืงื•ืžืขืŸ ื“ื•ืจืš ื“ื™ ืคึผืจืึธืžืงืœ ืึธื ืคึฟืจืขื’), ื ื•ืฆืŸ ื“ื™ ื‘ืึทืคึฟืขืœ:

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

Cleanup

//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 ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืื•ื™ื˜ืึธืžืึทื˜ื™ืฉ ื•ื•ืึธื’ ื“ื™ื™ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก ื“ื™ืคึผืœื•ื™ืžืึทื ืฅ (ืฆื• / ืคึฟื•ืŸ ื ื•ืœ) ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ืึทื˜ืŸ ืคื•ืŸ ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืžืขื˜ืจื™ืงืก. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ืคึผืจืึธืžืขื˜ื”ืขื•ืก ืžืขื˜ืจื™ืงืก, ืจื™ื™ ืœืขื ื’ ืื™ืŸ Redis, ืงืึทื ืกื•ืžืขืจ ืœื™ื™ื˜ืึทื ืกื™ ืื™ืŸ ืงืึทืคืงืึท ื˜ืขืžืข.

KEDA ื™ื ื˜ืึทื’ืจื™ื™ืฅ ืžื™ื˜ ืึท ืคื•ื ื“ืจื•ื™ืกื ื“ื™ืง ืžืงื•ืจ ืื•ืŸ ืื•ื™ืš ื’ื™ื˜ ื–ื™ื™ึทืŸ ืžืขื˜ืจื™ืงืก ื“ื•ืจืš ืžืขื˜ืจื™ืงืก ืกืขืจื•ื•ื™ืจืขืจ ืฆื• ื”ืึธืจื™ื–ืึธื ื˜ืึทืœ ืคึผืึธื“ ืึทื•ื˜ืึธืกืงืึทืœืขืจ.

ื’ื•ื˜ ื’ืœื™ืง!

ื•ื•ืึธืก ืึทื ื“ืขืจืฉ ืฆื• ืœื™ื™ืขื ืขืŸ:

  1. ื‘ืขืกื˜ืขืจ ืคึผืจืึทืงื˜ื™ืกื™ื– ืื•ืŸ ื‘ืขืกื˜ืขืจ ืคึผืจืึทืงื˜ื™ืกื™ื– ืคึฟืึทืจ ืคืœื™ืกื ื“ื™ืง ืงืึทื ื˜ื™ื™ื ืขืจื– ืื•ืŸ ืงื•ื‘ืขืจื ืขื˜ืขืก ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข ื™ื ื•ื•ื™ื™ืจืึทื ืžืึทื ืฅ.
  2. 90+ ื ื•ืฆื™ืง ืžื›ืฉื™ืจื™ื ืคึฟืึทืจ Kubernetes: ื“ื™ืคึผืœื•ื™ืžืึทื ื˜, ืคืึทืจื•ื•ืึทืœื˜ื•ื ื’, ืžืึธื ื™ื˜ืึธืจื™ื ื’, ื–ื™ื›ืขืจื”ื™ื™ื˜ ืื•ืŸ ืžืขืจ.
  3. ืื•ื ื“ื–ืขืจ ืงืึทื ืึทืœ ืึทืจื•ื Kubernetes ืื™ืŸ ื˜ืขืœืขื’ืจืึทื.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’