рдХреНрд▓рд╛рдЙрдб рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕рд╕рд╛рдареА рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рд╣реА рдореБрдЦреНрдп рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. Kubernetes рд╕рд╣, рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХрд░рдгреЗ рдпреЛрдЧреНрдп рддреИрдирд╛рддреАрд╕рд╛рдареА рдкреНрд░рддрд┐рдХреГрддреАрдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЗрддрдХреЗ рд╕реЛрдкреЗ рдЖрд╣реЗ рдХрд┐рдВрд╡рд╛ ReplicaSet
- рдкрдг рд╣реА рдПрдХ рдореЕрдиреНрдпреБрдЕрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд╣реЗ.
Kubernetes рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдВрдирд╛ рдЖрдкреЛрдЖрдк рд╕реНрдХреЗрд▓ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ (рдЙрджрд╛. рдЙрдкрдпреЛрдЬрдирд╛рддреАрд▓ рдкреЙрдбреНрд╕ рдХрд┐рдВрд╡рд╛ ReplicaSet
) рдХреНрд╖реИрддрд┐рдЬ рдкреЙрдб рдСрдЯреЛрд╕реНрдХреЗрд▓рд░ рддрдкрд╢реАрд▓ рд╡рд╛рдкрд░реВрди рдШреЛрд╖рдгрд╛рддреНрдордХ рдкрджреНрдзрддреАрдиреЗ. рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рд╕реНрдХреЗрд▓рд┐рдВрдЧрд╕рд╛рдареА рдбреАрдлреЙрд▓реНрдЯ рдирд┐рдХрд╖ CPU рд╡рд╛рдкрд░ рдореЗрдЯреНрд░рд┐рдХреНрд╕ (рд╕рдВрд╕рд╛рдзрди рдореЗрдЯреНрд░рд┐рдХреНрд╕) рдЖрд╣реЗ, рдкрд░рдВрддреБ рддреБрдореНрд╣реА рд╕рд╛рдиреБрдХреВрд▓ рдЖрдгрд┐ рдмрд╛рд╣реНрдпрд░рд┐рддреНрдпрд╛ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдПрдХрддреНрд░рд┐рдд рдХрд░реВ рд╢рдХрддрд╛.
рд╕рдВрдШ
рдкреЙрдбреНрд╕рдЪреНрдпрд╛ рдХреНрд╖реИрддрд┐рдЬ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧрдРрд╡рдЬреА, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЗрд╡реНрд╣реЗрдВрдЯ рдбреНрд░рд╛рдпрд╡реНрд╣рди рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ (KEDA) рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рддреЛ, рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ Kubernetes рдСрдкрд░реЗрдЯрд░. рдЗрд╡реНрд╣реЗрдВрдЯ-рдЪрд╛рд▓рд┐рдд рд╡рд░реНрдХрд▓реЛрдбреНрд╕рд╕рд╛рдареА рд╕реАрдорд▓реЗрд╕ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ (рд╢реВрдиреНрдп рдкрд╛рд╕реВрди/рд╢реВрдиреНрдп рд╕рд╣рд┐рдд) рдкреНрд░рджрд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗ рдХреНрд╖реИрддрд┐рдЬ рдкреЙрдб рдСрдЯреЛрд╕реНрдХреЗрд▓рд░рд╕рд╣ рдореВрд│рдкрдгреЗ рд╕рдорд╛рдХрд▓рд┐рдд рдХрд░рддреЗ. рдХреЛрдб рдпреЗрдереЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ
рдкреНрд░рдгрд╛рд▓реАрдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди
рдЖрдХреГрддреА рд╕рд░реНрд╡рдХрд╛рд╣реА рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ рдпрд╛рдЪреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд░реНрдгрди рджрд░реНрд╢рд╡рд┐рддреЗ:
- рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ HTTP рд╣рд┐рдЯ рдХрд╛рдЙрдВрдЯ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ.
- рд╣реЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЧреЛрд│рд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЖрд╣реЗ.
- KEDA рдордзреАрд▓ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рд╕реНрдХреЗрд▓рд░ рд╣реЗ HTTP рд╣рд┐рдЯрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдНрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдореЛрдЬрдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдЖрд╣реЗ.
рдЖрддрд╛ рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХрд╛рдмрджреНрджрд▓ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╕рд╛рдВрдЧреЗрди.
рдХреЗрдбрд╛ рдЖрдгрд┐ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕
рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рд╣реЗ рдУрдкрди рд╕реЛрд░реНрд╕ рд╕рд┐рд╕реНрдЯрдо рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдЖрдгрд┐ рдЕрд▓рд░реНрдЯрд┐рдВрдЧ рдЯреВрд▓рдХрд┐рдЯ рдЖрд╣реЗ
KEDA рд╕реНрдХреЗрд▓рд░рдЪреНрдпрд╛ рд╕рдВрдХрд▓реНрдкрдиреЗрд▓рд╛ рд╕рдорд░реНрдерди рджреЗрддреЗ - рддреЗ рдХреЗрдбрд╛ рдЖрдгрд┐ рдмрд╛рд╣реНрдп рдкреНрд░рдгрд╛рд▓реА рдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рдкреВрд▓ рдореНрд╣рдгреВрди рдХрд╛рдо рдХрд░рддреЗ. рд╕реНрдХреЗрд▓рд░ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдкреНрд░рддреНрдпреЗрдХ рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реАрд╕рд╛рдареА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рддреВрди рдбреЗрдЯрд╛ рдХрд╛рдврддреЛ. KEDA рдирдВрддрд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рддреЗ.
рд╕реНрдХреЗрд▓рд░ рдПрдХрд╛рдзрд┐рдХ рдбреЗрдЯрд╛ рд╕реНрддреНрд░реЛрддрд╛рдВрдирд╛ рд╕рдорд░реНрдерди рджреЗрддрд╛рдд, рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХрд╛рдлреНрдХрд╛, рд░реЗрдбрд┐рд╕, рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕. рдореНрд╣рдгрдЬреЗрдЪ, KEDA рдЪрд╛ рд╡рд╛рдкрд░ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕рдЪрд╛ рдирд┐рдХрд╖ рдореНрд╣рдгреВрди рд╡рд╛рдкрд░ рдХрд░реВрди рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЙрдкрдпреЛрдЬрдирд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рдореЛрдЬрдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ.
рдЪрд╛рдЪрдгреА рдЕрд░реНрдЬ
рдЧреЛрд▓рд╛рдВрдЧ рдЪрд╛рдЪрдгреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ HTTP рджреНрд╡рд╛рд░реЗ рдкреНрд░рд╡реЗрд╢ рдкреНрд░рджрд╛рди рдХрд░рддреЛ рдЖрдгрд┐ рджреЛрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпреЗ рдХрд░рддреЛ:
- рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдВрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ http_requests рдореЗрдЯреНрд░рд┐рдХ рдкреНрд░рджрд╛рди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Prometheus Go рдХреНрд▓рд╛рдпрдВрдЯ рд▓рд╛рдпрдмреНрд░рд░реА рд╡рд╛рдкрд░рддреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рд╣рд┐рдЯ рд╕рдВрдЦреНрдпрд╛ рдЕрд╕рддреЗ. рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЬрд┐рдереЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗрдд рддреЛ рд╢реЗрд╡рдЯрдЪрд╛ рдмрд┐рдВрджреВ URI рд╡рд░ рд╕реНрдерд┐рдд рдЖрд╣реЗ
/metrics
.var httpRequestsCounter = promauto.NewCounter(prometheus.CounterOpts{ Name: "http_requests", Help: "number of http requests", })
- рд╡рд┐рдирдВрддреАрд▓рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рдореНрд╣рдгреВрди
GET
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд┐ рдЪреЗ рдореВрд▓реНрдп рд╡рд╛рдврд╡рддреЗ (access_count
) рд░реЗрдбрд┐рд╕ рдордзреНрдпреЗ. 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) }
рдЕрд░реНрдЬ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕рд╡рд░ рджреНрд╡рд╛рд░реЗ рддреИрдирд╛рдд рдХреЗрд▓рд╛ рдЖрд╣реЗ Deployment
. рдПрдХ рд╕реЗрд╡рд╛ рджреЗрдЦреАрд▓ рддрдпрд╛рд░ рдХреЗрд▓реА рдЖрд╣реЗ ClusterIP
, рд╣реЗ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рд╕рд░реНрд╡реНрд╣рд░рд▓рд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ.
рдпреЗрдереЗ
рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рд╕рд░реНрд╡реНрд╣рд░
рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдореЕрдирд┐рдлреЗрд╕реНрдЯрдордзреНрдпреЗ рд╣реЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ:
ConfigMap
- рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА;Deployment
- рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рддреИрдирд╛рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА;ClusterIP
- рдпреВрдЖрдп рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕реЗрд╡рд╛;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]))
рдХреГрдкрдпрд╛ рдЦрд╛рд▓реАрд▓ рдореБрджреНрджреЗ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛.
- рддреЛ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЛ
Deployment
рдирд╛рд╡рд╛рд╕рд╣go-prom-app
. - рдЯреНрд░рд┐рдЧрд░ рдкреНрд░рдХрд╛рд░ -
Prometheus
. рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рд╕рд░реНрд╡реНрд╣рд░ рдкрддреНрддрд╛ рдореЗрдЯреНрд░рд┐рдХ рдирд╛рд╡, рдереНрд░реЗрд╢реЛрд▓реНрдб рдЖрдгрд┐ рд╕реЛрдмрдд рдирдореВрдж рдХреЗрд▓рд╛ рдЖрд╣реЗPromQL рдХреНрд╡реЗрд░реА , рдЬреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдИрд▓. PromQL рдХреНрд╡реЗрд░реА -sum(rate(http_requests[2m]))
. - рдорддреЗ
pollingInterval
,рдХреЗрдИрдбреАрдП рджрд░ рдкрдВрдзрд░рд╛ рд╕реЗрдХрдВрджрд╛рдВрдиреА рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕рдХрдбреВрди рд▓рдХреНрд╖реНрдпрд╛рдЪреА рд╡рд┐рдирдВрддреА рдХрд░рддреЗ. рдХрд┐рдорд╛рди рдПрдХ рдЕрдВрддрд░реНрдЧрдд (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
, рдкрд░рдВрддреБ рддреБрдореНрд╣реА рджреБрд╕рд░реЗ рдХреЛрдгрддреЗрд╣реА рдШреЗрдК рд╢рдХрддрд╛. рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╣реЗ
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/
рд╕реЗрдЯ
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 рд▓рд╛ рдЕрдиреЗрдХ рдкреНрд░рдХрд╛рд░реЗ рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░реВ рд╢рдХрддрд╛, рддреЗ рддреНрдпрд╛рдд рд╕реВрдЪреАрдмрджреНрдз рдЖрд╣реЗрдд
kubectl apply -f
https://raw.githubusercontent.com/kedacore/keda/master/deploy/KedaScaleController.yaml
KEDA рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдШрдЯрдХ рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗрдд keda
. рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рдЖрджреЗрд╢:
kubectl get pods -n keda
KEDA рдСрдкрд░реЗрдЯрд░ рд╕реБрд░реВ рд╣реЛрдИрдкрд░реНрдпрдВрдд рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛ рдЖрдгрд┐ рд╡рд░ рдЬрд╛ Running State
. рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░, рд╕реБрд░реВ рдареЗрд╡рд╛.
рд╣реЗрд▓реНрдо рд╡рд╛рдкрд░реВрди рд░реЗрдбрд┐рд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ
рддреБрдордЪреНрдпрд╛рдХрдбреЗ рд╣реЗрд▓реНрдо рдЗрдиреНрд╕реНрдЯреЙрд▓ рдХреЗрд▓реЗрд▓реЗ рдирд╕рд▓реНрдпрд╛рд╕, рд╣реЗ рд╡рд╛рдкрд░рд╛
brew install kubernetes-helm
helm init --history-max 200
helm init
рд╕реНрдерд╛рдирд┐рдХ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ рд╕реБрд░реВ рдХрд░рддреЗ рдЖрдгрд┐ рд╕реНрдерд╛рдкрд┐рдд рджреЗрдЦреАрд▓ рдХрд░рддреЗ Tiller
рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рдХрдбреЗ.
kubectl get pods -n kube-system | grep tiller
рдЯрд┐рд▓рд░ рдкреЙрдб рд░рдирд┐рдВрдЧ рд╕реНрдЯреЗрдЯрдордзреНрдпреЗ рдпреЗрдИрдкрд░реНрдпрдВрдд рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛.
рдЕрдиреБрд╡рд╛рджрдХрд╛рдЪреА рдЯреАрдк: рд▓реЗрдЦрдХ рд╣реЗрд▓реНрдо@2 рд╡рд╛рдкрд░рддреЛ, рдЬреНрдпрд╛рд╕рд╛рдареА рдЯрд┐рд▓рд░ рд╕рд░реНрд╡реНрд╣рд░ рдШрдЯрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЖрддрд╛ Helm@3 рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдЖрд╣реЗ, рддреНрдпрд╛рд▓рд╛ рд╕рд░реНрд╡реНрд╣рд░ рднрд╛рдЧ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА.
рд╣реЗрд▓реНрдо рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рд░реЗрдбрд┐рд╕ рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдХрдорд╛рдВрдб рдкреБрд░реЗрд╢реА рдЖрд╣реЗ:
helm install --name redis-server --set cluster.enabled=false --set
usePassword=false stable/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_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
рдпреЗрдереЗ Prometheus рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕ (рдХрд┐рдВрд╡рд╛ API рд╕рд░реНрд╡реНрд╣рд░) рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА
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 рдЕреЕрдкрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░реВ рд╢рдХрддрд╛
curl http://localhost:8080/test
рдкрд░рд┐рдгрд╛рдо рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕рддреЗ:
Accessed on 2019-10-21 11:29:10.560385986 +0000 UTC
m=+406004.817901246
Access count 1
рдпрд╛рд╡реЗрд│реА рд░реЗрдбрд┐рд╕ рджреЗрдЦреАрд▓ рддрдкрд╛рд╕рд╛. рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рдХрд│реЗрд▓ 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
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЗрдЯреНрд░рд┐рдХрдЪреЗ рдореВрд▓реНрдп рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рд╛ (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 рдЖрд╣реЗ.
рдЕрдзрд┐рдХ рднрд╛рд░!
рдирд╡реАрди рдЯрд░реНрдорд┐рдирд▓рдордзреНрдпреЗ, рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдкреЙрдбреНрд╕рдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рд╛:
kubectl get pods -l=app=go-prom-app -w
рдХрдорд╛рдВрдб рд╡рд╛рдкрд░реВрди рд▓реЛрдб рд╡рд╛рдврд╡реВ:
./hey -n 2000 http://localhost:8080/test
рдХрд╛рд╣реА рдХрд╛рд│рд╛рдирдВрддрд░, рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдЪрдкреАрдП рддреИрдирд╛рддреА рд╕реНрдХреЗрд▓ рдХрд░рддрд╛рдирд╛ рдЖрдгрд┐ рдирд╡реАрди рдкреЙрдб рд▓реЙрдиреНрдЪ рдХрд░рддрд╛рдирд╛ рджрд┐рд╕реЗрд▓. рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдордЪрд╛ 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]))'
рд╕реНрд╡рдЪреНрдЫрддрд╛
//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 рдЙрдкрдпреЛрдЬрди (рд╢реВрдиреНрдп рдкрд╛рд╕реВрди/рд╢реВрдиреНрдп) рд╕реНрдХреЗрд▓ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕рд╡рд░ рдЖрдзрд╛рд░рд┐рдд, рд░реЗрдбрд┐рд╕рдордзреАрд▓ рд░рд╛рдВрдЧреЗрдЪреА рд▓рд╛рдВрдмреА, рдХрд╛рдлреНрдХрд╛ рд╡рд┐рд╖рдпрд╛рддреАрд▓ рдЧреНрд░рд╛рд╣рдХ рд╡рд┐рд▓рдВрдм.
KEDA рдмрд╛рд╣реНрдп рд╕реНрддреНрд░реЛрддрд╛рд╢реА рд╕рдорд╛рдХрд▓рд┐рдд рд╣реЛрддреЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕рд░реНрд╡реНрд╣рд░ рддреЗ Horizontal Pod Autoscaler рджреНрд╡рд╛рд░реЗ рджреЗрдЦреАрд▓ рдкреНрд░рджрд╛рди рдХрд░рддреЗ.
рд░рд┐рдЭрд░реНрд╡реНрд╣рд░реНрд╡реНрд╣рд░ ... рдкреБрдиреНрд╣рд╛!
рдЖрдгрдЦреА рдХрд╛рдп рд╡рд╛рдЪрд╛рдпрдЪреЗ:
рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдХрдВрдЯреЗрдирд░ рдЖрдгрд┐ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡реЛрддреНрддрдо рдкрджреНрдзрддреА рдЖрдгрд┐ рд╕рд░реНрд╡реЛрддреНрддрдо рдкрджреНрдзрддреА .Kubernetes рд╕рд╛рдареА 90+ рдЙрдкрдпреБрдХреНрдд рд╕рд╛рдзрдиреЗ: рдЙрдкрдпреЛрдЬрди, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди, рджреЗрдЦрд░реЗрдЦ, рд╕реБрд░рдХреНрд╖рд╛ рдЖрдгрд┐ рдмрд░реЗрдЪ рдХрд╛рд╣реА .рдЖрдордЪреЗ рдЪреЕрдиреЗрд▓ рдЕрд░рд╛рдЙрдВрдб рдХреБрдмрд░рдиреЗрдЯреЗрд╕ рдЯреЗрд▓реАрдЧреНрд░рд╛рдордордзреНрдпреЗ .
рд╕реНрддреНрд░реЛрдд: www.habr.com