рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдкреНрд░рдореБрдЦ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред Kubernetes рдХреЛ рд╕рд╛рде, рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдорд╛рдкрди рдЧрд░реНрдиреБ рдЙрддрд┐ рдиреИ рд╕рд░рд▓ рдЫ рдЬрддреНрддрд┐рдХреИ рдЙрдкрдпреБрдХреНрдд рдбрд┐рдкреНрд▓реЛрдЗрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рддрд┐рдХреГрддрд┐рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рдмрдврд╛рдЙрдиреЗ рд╡рд╛ ReplicaSet
рддрд░ рдпреЛ рдореНрдпрд╛рдиреБрдЕрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛред
Kubernetes рд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдорд╛рдкрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ (рдЬрд╕реНрддреИ рдкреЛрдбрд╣рд░реВ рдбрд┐рдкреНрд▓реЛрдпрдорд╛ рд╡рд╛ ReplicaSet
) рддреЗрд░реНрд╕реЛ рдкреЛрдб рдЕрдЯреЛрд╕реНрдХреЗрд▓рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдШреЛрд╖рдгрд╛рддреНрдордХ рддрд░рд┐рдХрд╛рдорд╛ред рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд╕реНрдХреЗрд▓рд┐рдВрдЧрдХреЛ рд▓рд╛рдЧрд┐ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рдкрджрдгреНрдб CPU рдЙрдкрдпреЛрдЧ рдореЗрдЯреНрд░рд┐рдХреНрд╕ (рд╕рдВрд╕рд╛рдзрди рдореЗрдЯреНрд░рд┐рдХреНрд╕) рд╣реЛ, рддрд░ рддрдкрд╛рдИрдВ рдЕрдиреБрдХреВрд▓рди рд░ рдмрд╛рд╣реНрдп рд░реВрдкрдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдПрдХреАрдХреГрдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рдЯреЛрд▓реА
рдкреЛрдбрд╣рд░реВрдХреЛ рддреЗрд░реНрд╕реЛ рдЕрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧрдХреЛ рд╕рдЯреНрдЯрд╛, Kubernetes Event Driven Autoscaling (KEDA) рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд Kubernetes рдЕрдкрд░реЗрдЯрд░ред рдпреЛ рдШрдЯрдирд╛-рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд╛рд░реНрдпрднрд╛рд░рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд┐рдорд▓реЗрд╕ рдЕрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ (рд╢реВрдиреНрдпрдмрд╛рдЯ/рд╢реВрдиреНрдп рд╕рд╣рд┐рдд) рдкреНрд░рджрд╛рди рдЧрд░реНрди рд╣реЛрд░рд┐рдЬреЛрдиреНрдЯрд▓ рдкреЛрдб рдЕрдЯреЛрд╕реНрдХреЗрд▓рд░рд╕рдБрдЧ рдиреЗрдЯрд┐рдн рд░реВрдкрдорд╛ рдПрдХреАрдХреГрдд рд╣реБрдиреНрдЫред рдХреЛрдб рдЙрдкрд▓рдмреНрдз рдЫ
рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЕрд╡рд▓реЛрдХрди
рд░реЗрдЦрд╛рдЪрд┐рддреНрд░рд▓реЗ рд╕рдмреИ рдХреБрд░рд╛ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреНрдиреЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╡рд┐рд╡рд░рдг рджреЗрдЦрд╛рдЙрдБрдЫ:
- рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рдврд╛рдБрдЪрд╛рдорд╛ HTTP рд╣рд┐рдЯ рдЧрдгрдирд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред
- рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдпреА рдореЗрдЯреНрд░рд┐рдХрд╣рд░реВ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫред
- KEDA рдорд╛ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рд╕реНрдХреЗрд▓рд░ HTTP рд╣рд┐рдЯрд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдорд╛рдкрди рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдЫред
рдЕрдм рдо рддрдкрд╛рдИрдВрд▓рд╛рдИ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рдмрддрд╛рдЙрдиреЗрдЫреБред
рдХреЗрдбрд╛ рд░ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕
Prometheus рдПрдХ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкреНрд░рдгрд╛рд▓реА рдЕрдиреБрдЧрдорди рд░ рдЪреЗрддрд╛рд╡рдиреА рдЯреВрд▓рдХрд┐рдЯ, рднрд╛рдЧ рд╣реЛ
KEDA рд▓реЗ рд╕реНрдХреЗрд▓рд░рдХреЛ рдЕрд╡рдзрд╛рд░рдгрд╛рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ - рдпрд╕рд▓реЗ KEDA рд░ рдмрд╛рд╣реНрдп рдкреНрд░рдгрд╛рд▓реА рдмреАрдЪрдХреЛ рдкреБрд▓рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫред рд╕реНрдХреЗрд▓рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкреНрд░рддреНрдпреЗрдХ рд▓рдХреНрд╖реНрдп рдкреНрд░рдгрд╛рд▓реАрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЫ рд░ рдпрд╕рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдирд┐рдХрд╛рд▓реНрдЫред KEDA рд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдорд╛рдкрди рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред
рд╕реНрдХреЗрд▓рд░рд╣рд░реВрд▓реЗ рдзреЗрд░реИ рдбреЗрдЯрд╛ рд╕реНрд░реЛрддрд╣рд░реВ рд╕рдорд░реНрдерди рдЧрд░реНрдЫрдиреН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдХрд╛рдлреНрдХрд╛, рд░реЗрдбрд┐рд╕, рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ред рдЕрд░реНрдерд╛рддреН, KEDA рдорд╛рдкрджрдгреНрдбрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ Kubernetes рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯрд╣рд░реВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдорд╛рдкрди рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
рдкрд░реАрдХреНрд╖рдг рдЖрд╡реЗрджрди
Golang рдкрд░реАрдХреНрд╖рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧ HTTP рдорд╛рд░реНрдлрдд рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ рд░ рджреБрдИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрджрдЫ:
- рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ рдЗрдиреНрд╕реНрдЯреНрд░реБрдореЗрдиреНрдЯ рдЧрд░реНрди рд░ рд╣рд┐рдЯ рдХрд╛рдЙрдиреНрдЯ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреЗ http_requests рдореЗрдЯреНрд░рд┐рдХ рдкреНрд░рджрд╛рди рдЧрд░реНрди Prometheus Go рдХреНрд▓рд╛рдЗрдиреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЙрдкрд▓рдмреНрдз рд╣реБрдиреЗ рдЕрдиреНрддрд┐рдо рдмрд┐рдиреНрджреБ URI рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫ
/metrics
.var httpRequestsCounter = promauto.NewCounter(prometheus.CounterOpts{ Name: "http_requests", Help: "number of http requests", })
- рдЕрдиреБрд░реЛрдзрдХреЛ рдЬрд╡рд╛рдлрдорд╛
GET
рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ рдХреБрдЮреНрдЬреАрдХреЛ рдорд╛рди рдмрдврд╛рдЙрдБрдЫ (access_count
) Redis рдорд╛ред рдпреЛ HTTP рд╣реНрдпрд╛рдиреНрдбрд▓рд░рдХреЛ рднрд╛рдЧрдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗ рд░ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреЗ рд╕рдЬрд┐рд▓реЛ рддрд░рд┐рдХрд╛ рд╣реЛред рдореЗрдЯреНрд░рд┐рдХ рдорд╛рди рдорд╛рди рдЬрд╕реНрддреИ рд╣реБрдиреБрдкрд░реНрдЫ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
, рдпрд╕рд▓реЗ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рд╕рд░реНрднрд░рд▓рд╛рдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
рдпрд╣рд╛рдБ
рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рд╕рд░реНрднрд░
рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдореЗрдирд┐рдлреЗрд╕реНрдЯрдорд╛ рд╕рдорд╛рд╡реЗрд╢ рдЫ:
ConfigMap
- рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрди;Deployment
- рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рддреИрдирд╛рдд рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐;ClusterIP
- UI Prometheus рдХреЛ рдкрд╣реБрдБрдЪ рдХреЛ рд▓рд╛рдЧреА рд╕реЗрд╡рд╛;ClusterRole
,ClusterRoleBinding
╨╕ServiceAccount
- Kubernetes (рд╕реНрд╡рдд: рдЦреЛрдЬ) рдорд╛ рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рд╕реНрд╡рдд: рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ред
рдпрд╣рд╛рдБ
KEDA Prometheus ScaledObject
рд╕реНрдХреЗрд▓рд░рд▓реЗ рдХреЗрдбрд╛ рд░ рдмрд╛рд╣реНрдп рдкреНрд░рдгрд╛рд▓реА рдмреАрдЪрдХреЛ рдкреБрд▓рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрджрдЫ рдЬрд╕рдмрд╛рдЯ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред ScaledObject
рдпреЛ рдПрдХ рдЕрдиреБрдХреВрд▓рди рд╕реНрд░реЛрдд рд╣реЛ рдЬреБрди рдШрдЯрдирд╛ рд╕реНрд░реЛрддрд╕рдБрдЧ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрди рддреИрдирд╛рде рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ред
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
, рддрд░ рддрдкрд╛рдИрдВ рдХреБрдиреИ рдкрдирд┐ рдЕрд░реНрдХреЛ рд▓рд┐рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рддреНрдпрд╣рд╛рдБ рдЫ
рдореНрдпрд╛рдХрдорд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН:
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 рд╕реНрдерд╛рдкрдирд╛
рддрдкрд╛рдИрдВ рдзреЗрд░реИ рддрд░рд┐рдХрд╛рдорд╛ 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
Kubernetes рдХреНрд▓рд╕реНрдЯрд░рдорд╛ред
kubectl get pods -n kube-system | grep tiller
рдЯрд┐рд▓рд░ рдкреЛрдб рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдкреНрд░рд╡реЗрд╢ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрдиреБрд╣реЛрд╕реНред
рдЕрдиреБрд╡рд╛рджрдХрдХреЛ рдЯрд┐рдкреНрдкрдгреА: рд▓реЗрдЦрдХрд▓реЗ рд╣реЗрд▓реНрдо@2 рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдЬрд╕рд▓рд╛рдИ рдЯрд┐рд▓рд░ рд╕рд░реНрднрд░ рдХрдореНрдкреЛрдиреЗрдиреНрдЯ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдЕрдм Helm@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
.
Prometheus рд╕рд░реНрднрд░ рддреИрдирд╛рде рдЧрд░реНрджреИ
Prometheus manifest рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ
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
рдмрд░рд╛рдмрд░ рез:
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
рдпрд╕ рдмрд┐рдиреНрджреБрдорд╛ рдкрдирд┐ 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
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЗрдЯреНрд░рд┐рдХрдХреЛ рдорд╛рди рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН (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 рд▓реЗ рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯ рд╕реНрдХреЗрд▓ рдЧрд░реНрджреИ рд░ рдирдпрд╛рдБ рдкреЛрдбрд╣рд░реВ рд╕реБрд░реВ рдЧрд░реЗрдХреЛ рджреЗрдЦреНрдиреБрд╣реБрдиреЗрдЫред рдпреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рдЖрдлреНрдиреЛ 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
рдпрджрд┐ рд▓реЛрдб рдЕрд╕рдВрдЧрдд рдЫ рднрдиреЗ, рддреИрдирд╛рддреА рдмрд┐рдиреНрджреБрдорд╛ рдШрдЯрд╛рдЗрдиреЗрдЫ рдЬрд╣рд╛рдБ рдХреЗрд╡рд▓ рдПрдХ рдкреЛрдб рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореЗрдЯреНрд░рд┐рдХ (PromQL рдХреНрд╡реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдлрд┐рд░реНрддрд╛ рдЧрд░рд┐рдПрдХреЛ) рдЬрд╛рдБрдЪ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН:
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 рдмрд╛рд╣реНрдп рд╕реНрд░реЛрддрд╕рдБрдЧ рдПрдХреАрдХреГрдд рд╣реБрдиреНрдЫ рд░ Metrics Server рдорд╛рд░реНрдлрдд Horizontal Pod Autoscaler рдорд╛ рдЖрдлреНрдиреЛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред
рд╢реБрднрдХрд╛рдордирд╛!
рдЕрд░реБ рдХреЗ рдкрдвреНрдиреЗ:
рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдгрдорд╛ рдХрдиреНрдЯреЗрдирд░ рд░ Kubernetes рдЪрд▓рд╛рдЙрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрддреНрддрдо рдЕрднреНрдпрд╛рд╕рд╣рд░реВ рд░ рдЙрддреНрддрдо рдЕрднреНрдпрд╛рд╕рд╣рд░реВ .Kubernetes рдХреЛ рд▓рд╛рдЧрд┐ 90+ рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдгрд╣рд░реВ: рддреИрдирд╛рддреА, рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди, рдирд┐рдЧрд░рд╛рдиреА, тАЛтАЛрд╕реБрд░рдХреНрд╖рд╛ рд░ рдердк .Telegram рдорд╛ Kubernetes рдХреЛ рдЖрд╕рдкрд╛рд╕ рд╣рд╛рдореНрд░реЛ рдЪреНрдпрд╛рдирд▓ .
рд╕реНрд░реЛрдд: www.habr.com