рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдПрдХ рдкреНрд░рдореБрдЦ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде, рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдирд╛ рдЙрддрдирд╛ рд╣реА рд╕рд░рд▓ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдЙрдЪрд┐рдд рддреИрдирд╛рддреА рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝рд╛рдирд╛ ReplicaSet
- рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдореИрдиреНрдпреБрдЕрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реИред
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ (рдпрд╛рдиреА рддреИрдирд╛рддреА рдореЗрдВ рдкреЙрдбреНрд╕ рдпрд╛ ReplicaSet
) рдХреНрд╖реИрддрд┐рдЬ рдкреЙрдб рдСрдЯреЛрд╕реНрдХреЗрд▓рд░ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреЛрд╖рдгрд╛рддреНрдордХ рддрд░реАрдХреЗ рд╕реЗред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рдирджрдВрдб рд╕реАрдкреАрдпреВ рдЙрдкрдпреЛрдЧ рдореЗрдЯреНрд░рд┐рдХреНрд╕ (рд╕рдВрд╕рд╛рдзрди рдореЗрдЯреНрд░рд┐рдХреНрд╕) рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдХрд╕реНрдЯрдо рдФрд░ рдмрд╛рд╣рд░реА рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЯреАрдо
рдкреЙрдбреНрд╕ рдХреА рдХреНрд╖реИрддрд┐рдЬ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЗрд╡реЗрдВрдЯ рдбреНрд░рд┐рд╡реЗрди рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ (рдХреЗрдИрдбреАрдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдСрдкрд░реЗрдЯрд░ рд╣реИред рдпрд╣ рдЗрд╡реЗрдВрдЯ-рд╕рдВрдЪрд╛рд▓рд┐рдд рд╡рд░реНрдХрд▓реЛрдб рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдмрд╛рдз рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ (рд╢реВрдиреНрдп рд╕реЗ/рд╢реВрдиреНрдп рд╕рд╣рд┐рдд) рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖реИрддрд┐рдЬ рдкреЙрдб рдСрдЯреЛрд╕реНрдХреЗрд▓рд░ рдХреЗ рд╕рд╛рде рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИред рдХреЛрдб рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ
рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди
рдЖрд░реЗрдЦ рдЗрд╕ рдмрд╛рдд рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ HTTP рд╣рд┐рдЯ рдХрд╛рдЙрдВрдЯ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
- рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЛ рдЗрди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдПрдХрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рдХреЗрдИрдбреАрдП рдореЗрдВ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рд╕реНрдХреЗрд▓рд░ рдХреЛ HTTP рд╣рд┐рдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЕрдм рдореИрдВ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛ред
рдХреЗрдбрд╛ рдФрд░ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕
рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╕рд┐рд╕реНрдЯрдо рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдФрд░ рдЕрд▓рд░реНрдЯрд┐рдВрдЧ рдЯреВрд▓рдХрд┐рдЯ, рднрд╛рдЧ рд╣реИ
рдХреЗрдИрдбреАрдП рд╕реНрдХреЗрд▓рд░ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдХреЗрдИрдбреАрдП рдФрд░ рдмрд╛рд╣рд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдмреАрдЪ рдПрдХ рдкреБрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рд╕реНрдХреЗрд▓рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддреНрдпреЗрдХ рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИ рдФрд░ рдЙрд╕рд╕реЗ рдбреЗрдЯрд╛ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред рдлрд┐рд░ KEDA рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╕реНрдХреЗрд▓рд░ рдХрдИ рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд╛рдлреНрдХрд╛, рд░реЗрдбрд┐рд╕, рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ред рдЕрд░реНрдерд╛рддреН, KEDA рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдирджрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рддреИрдирд╛рддреА рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди
рдЧреЛрд▓рд╛рдВрдЧ рдкрд░реАрдХреНрд╖рдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рджреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:
- рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрдВрд╕реНрдЯреНрд░реБрдореЗрдВрдЯ рдХрд░рдиреЗ рдФрд░ http_requests рдореАрдЯреНрд░рд┐рдХ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдЧреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рд┐рдЯ рдЧрд┐рдирддреА рд╢рд╛рдорд┐рд▓ рд╣реЛрддреА рд╣реИред рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдЬрд╣рд╛рдВ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рд╡рд╣ рдпреВрдЖрд░рдЖрдИ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ
/metrics
.var httpRequestsCounter = promauto.NewCounter(prometheus.CounterOpts{ Name: "http_requests", Help: "number of http requests", })
- рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ
GET
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреБрдВрдЬреА рдХрд╛ рдорд╛рди рдмрдврд╝рд╛рддрд╛ рд╣реИ (access_count
) рд░реЗрдбрд┐рд╕ рдореЗрдВред рдпрд╣ HTTP рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдФрд░ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред рдореАрдЯреНрд░рд┐рдХ рдорд╛рди рдорд╛рди рдХреЗ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП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) }
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ Deployment
. рдПрдХ рд╕реЗрд╡рд╛ рднреА рдмрдирд╛рдИ рдЧрдИ рд╣реИ ClusterIP
, рдпрд╣ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рд╕рд░реНрд╡рд░ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ
рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рд╕рд░реНрд╡рд░
рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдореЗрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рдирд┐рдореНрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
ConfigMap
- рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;Deployment
- рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП;ClusterIP
- рдпреВрдЖрдИ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛;ClusterRole
,ClusterRoleBinding
╨╕ServiceAccount
- рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ (рдСрдЯреЛ-рдбрд┐рд╕реНрдХрд╡рд░реА) рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рд╕реНрд╡рдд: рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рдпрд╣рд╛рдВ
рдХреЗрдбрд╛ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рд╕реНрдХреЗрд▓реНрдбрдСрдмреНрдЬреЗрдХреНрдЯ
рд╕реНрдХреЗрд▓рд░ рдХреЗрдИрдбреАрдП рдФрд░ рдмрд╛рд╣рд░реА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдмреАрдЪ рдПрдХ рдкреБрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред ScaledObject
рдПрдХ рдХрд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрди рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╡реЗрдВрдЯ рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ред
ScaledObject
рдЗрд╕рдореЗрдВ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА, рдИрд╡реЗрдВрдЯ рд╕реНрд░реЛрдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ (рдЬреИрд╕реЗ рдХрдиреЗрдХреНрд╢рди рд░рд╣рд╕реНрдп, рдХрддрд╛рд░ рдирд╛рдо), рдорддрджрд╛рди рдЕрдВрддрд░рд╛рд▓, рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдЕрд╡рдзрд┐ рдФрд░ рдЕрдиреНрдп рдбреЗрдЯрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рддреИрдирд╛рддреА рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрди (рдПрдЪрдкреАрдП рдкрд░рд┐рднрд╛рд╖рд╛) рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
рдЬрдм рдХреЛрдИ рд╡рд╕реНрддреБ ScaledObject
рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рдВрдмрдВрдзрд┐рдд рдПрдЪрдкреАрдП рдкрд░рд┐рднрд╛рд╖рд╛ рд╕рд╛рдлрд╝ рдХрд░ рджреА рдЧрдИ рд╣реИред
рдпрд╣рд╛рдБ рдкрд░рд┐рднрд╛рд╖рд╛ рд╣реИ 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
. рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рд╕рд░реНрд╡рд░ рдкрддреЗ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдореАрдЯреНрд░рд┐рдХ рдирд╛рдо, рд╕реАрдорд╛ рдФрд░ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИрдкреНрд░реЛрдордХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА , рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкреНрд░реЛрдордХреНрдпреВрдПрд▓ рдХреНрд╡реЗрд░реА -sum(rate(http_requests[2m]))
. - рдХреЗ рдЕрдиреБрд╕рд╛рд░
pollingInterval
,KEDA рд╣рд░ рдкрдВрджреНрд░рд╣ рд╕реЗрдХрдВрдб рдореЗрдВ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рд╕реЗ рдПрдХ рд▓рдХреНрд╖реНрдп рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХреЗ рдЕрдВрддрд░реНрдЧрдд (minReplicaCount
), рдФрд░ рдкреЙрдбреНрд╕ рдХреА рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИmaxReplicaCount
(рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ - рджрд╕).
рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ minReplicaCount
рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░. рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреЗрдИрдбреАрдП рд╢реВрдиреНрдп-рд╕реЗ-рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЖрдЧреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдЪрдкреАрдП рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдЙрд▓рдЯрд╛ рдХреНрд░рдо рднреА рд╕рдВрднрд╡ рд╣реИ, рдпрд╛рдиреА рдПрдХ рд╕реЗ рд╢реВрдиреНрдп рддрдХ рд╕реНрдХреЗрд▓рд┐рдВрдЧред рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдордиреЗ рд╢реВрдиреНрдп рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ HTTP рд╕реЗрд╡рд╛ рд╣реИ рди рдХрд┐ рдСрди-рдбрд┐рдорд╛рдВрдб рдкреНрд░рдгрд╛рд▓реАред
рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рдЕрдВрджрд░ рдХрд╛ рдЬрд╛рджреВ
рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрд╢реЛрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреНрд░рд┐рдЧрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, PromQL рдХреНрд╡реЗрд░реА sum(rate (http_requests [2m]))
рдкрд┐рдЫрд▓реЗ рджреЛ рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдорд╛рдкреА рдЧрдИ рдПрдХрддреНрд░рд┐рдд HTTP рдЕрдиреБрд░реЛрдз рджрд░ (рдкреНрд░рддрд┐ рд╕реЗрдХрдВрдб рдЕрдиреБрд░реЛрдз) рд▓реМрдЯрд╛рддрд╛ рд╣реИред
рдЪреВрдБрдХрд┐ рд╕реАрдорд╛ рдорд╛рди рддреАрди рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдорд╛рди рдХреЗ рдиреАрдЪреЗ рдПрдХ рд╣реЛрдЧрд╛ sum(rate (http_requests [2m]))
рддреАрди рд╕реЗ рдХрдо. рдпрджрд┐ рдорд╛рди рдмрдврд╝рддрд╛ рд╣реИ, рддреЛ рд╣рд░ рдмрд╛рд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдк рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ sum(rate (http_requests [2m]))
рддреАрди рд╕реЗ рдмрдврд╝ рдЬрд╛рддрд╛ рд╣реИ. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдорд╛рди 12 рд╕реЗ 14 рддрдХ рд╣реИ, рддреЛ рдкреЙрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЪрд╛рд░ рд╣реИред
рдЖрдЗрдП рдЕрдм рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ!
presetting
рдЖрдкрдХреЛ рдмрд╕ рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдФрд░ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ 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/
рд╕реНрдерд┐рдд
рдореИрдХ рдкрд░ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
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 рдХреЛ рдХрдИ рддрд░реАрдХреЛрдВ рд╕реЗ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реЗ рдЗрд╕рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ
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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЯрд┐рд▓рд░ рд╕рд░реНрд╡рд░ рдШрдЯрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЕрдм рд╣реЗрд▓реНрдо@3 рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкрд╛рд░реНрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╣реЗрд▓реНрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд░реЗрдбрд┐рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
helm install --name redis-server --set cluster.enabled=false --set
usePassword=false stable/redis
рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ Redis рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рд╛рд░рдВрдн рд╣реЛ рдЧрдпрд╛ рд╣реИ:
kubectl get pods/redis-server-master-0
рд░реЗрдбрд┐рд╕ рдХреЗ рд░рд╛рдЬреНрдп рдореЗрдВ рдЖрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ 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
рд░реЗрдбрд┐рд╕ рдХреЗ рд░рд╛рдЬреНрдп рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ 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
рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ (рдпрд╛ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░) рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
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
рдЕрдм рдЖрдк рдкрддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЧреЛ рдРрдк рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ
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 рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреА рд╣реИред рдЖрдк рдЗрд╕реЗ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд░реЗрдбрд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
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
рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рдмрд╛рдж, рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдЪрдкреАрдП рддреИрдирд╛рддреА рдХреЛ рдмрдврд╝рд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рдирдП рдкреЙрдбреНрд╕ рд▓реЙрдиреНрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдПрдЪрдкреАрдП рдЬрд╛рдВрдЪреЗрдВ:
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
рдирд┐рд╖реНрдХрд░реНрд╖
рдХреЗрдИрдбреАрдП рдЖрдкрдХреЛ рдмрд╛рд╣рд░реА рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдкрдиреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ (рд╢реВрдиреНрдп рд╕реЗ/рддрдХ) рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд░реЗрдбрд┐рд╕ рдореЗрдВ рдХрддрд╛рд░ рдХреА рд▓рдВрдмрд╛рдИ, рдХрд╛рдлреНрдХрд╛ рд╡рд┐рд╖рдп рдореЗрдВ рдЙрдкрднреЛрдХреНрддрд╛ рд╡рд┐рд▓рдВрдмрддрд╛ред
рдХреЗрдИрдбреАрдП рдПрдХ рдмрд╛рд╣рд░реА рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рд╕рд░реНрд╡рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЙрд░рд┐рдЬреЙрдиреНрдЯрд▓ рдкреЙрдб рдСрдЯреЛрд╕реНрдХреЗрд▓рд░ рдХреЛ рдЕрдкрдиреЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╕реМрднрд╛рдЧреНрдп!
рдФрд░ рдХреНрдпрд╛ рдкрдврд╝реЗрдВ:
рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдФрд░ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ .рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП 90+ рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг: рдкрд░рд┐рдирд┐рдпреЛрдЬрди, рдкреНрд░рдмрдВрдзрди, рдирд┐рдЧрд░рд╛рдиреА, тАЛтАЛтАЛтАЛрд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдмрд╣реБрдд рдХреБрдЫ .рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдореЗрдВ рд╣рдорд╛рд░рд╛ рдЪреИрдирд▓ рдЕрд░рд╛рдЙрдВрдб рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ .
рд╕реНрд░реЛрдд: www.habr.com