рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рд╣рдордиреЗ рдЕрдкрдирд╛ рдирдпрд╛ рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреНрд░реЛрдбрдХреНрд╢рди рдореЗрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдерд╛ - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдкреНрд▓рдЧрдЗрди, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдХрд╣рд╛ рдкреНрд▓рдЧрдЗрди рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ . рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдЖрдкрдХреЗ рд╕рд╛рде рдпрд╣ рдХрд╣рд╛рдиреА рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдордиреЗ рдкреНрд▓рдЧрдЗрди рдХреИрд╕реЗ рдмрдирд╛рдпрд╛, рд╣рдордиреЗ рдХреМрди рд╕реЗ рдЙрдкрдХрд░рдг рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдФрд░ рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди рд╣рдореЗрдВ рдХрд┐рди-рдХрд┐рди рдореБрд╢реНрдХрд┐рд▓реЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ!
рднрд╛рдЧ 0 - рдкрд░рд┐рдЪрдп: рд╣рдо рдпрд╣рд╛рдВ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪреЗ?
рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣рдорд╛рд░реЗ рдорди рдореЗрдВ рд╕рдВрдпреЛрдЧ рд╕реЗ рдЖрдпрд╛ред рд╣рдорд╛рд░реА рдХрдВрдкрдиреА 10 рд╕реЗ рдЕрдзрд┐рдХ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬрдЯрд┐рд▓рддрд╛ рд╡рд╛рд▓реА рд╡реЗрдм рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░ рд░рд╣реА рд╣реИред рдЗрд╕ рджреМрд░рд╛рди, рд╣рдордиреЗ рд╡рд┐рднрд┐рдиреНрди рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛, рджрд┐рд▓рдЪрд╕реНрдк рдорд╛рдорд▓реЛрдВ рдФрд░ рдЕрдиреБрднрд╡ рдХрд╛ рдЦрдЬрд╛рдирд╛ рдЬрдорд╛ рдХрд┐рдпрд╛ рд╣реИред рдФрд░ рдХрд┐рд╕реА рдмрд┐рдВрджреБ рдкрд░, рд╣рдордиреЗ рдЦреБрдж рд╕реЗ рдкреВрдЫрд╛: "рдХреНрдпрд╛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЬрд╛рджреБрдИ рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ, "рд╕реЗрдЯ рдФрд░ рднреВрд▓ рдЬрд╛рдУ" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?" рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ + рдЧреНрд░рд╛рдлрд╛рдирд╛ рдмрдВрдбрд▓ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ K8S рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЗ рд▓рд┐рдП рдЙрджреНрдпреЛрдЧ рдорд╛рдирдХ рд░рд╣рд╛ рд╣реИред рдФрд░ рдЗрд╕ рд╕реНрдЯреИрдХ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рд╕реЗрдЯ рд╣реИ: рдкреНрд░реЛрдореЗрдерд┐рдпрд╕-рдСрдкрд░реЗрдЯрд░, рдбреИрд╢рдмреЛрд░реНрдб рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕-рдорд┐рдХреНрд╕рд┐рди, рдЧреНрд░рд╛рдлрд╛рдирд╛-рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕-рдРрдкред
рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд┐рдХрд▓реНрдк grafana-kubernetes-app рдкреНрд▓рдЧрдЗрди рд▓рдЧ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдЬрд╝реНрдпрд╛рджрд╛ рд╕рдордп рд╕реЗ рд╕рдкреЛрд░реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ node-exporter рдФрд░ kube-state-metrics рдХреЗ рдирдП рд╡рд░реНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдПрдХ рд╕рдордп рдкрд░ рд╣рдордиреЗ рддрдп рдХрд┐рдпрд╛: "рдХреНрдпреЛрдВ рди рд╣рдо рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдПрдБ?"
рд╣рдордиреЗ рдЕрдкрдиреЗ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдХреМрди рд╕реЗ рд╡рд┐рдЪрд╛рд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛:
- "рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдорд╛рдирдЪрд┐рддреНрд░" рдХрд╛ рджреГрд╢реНрдп: рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡, рдирд╛рдорд╕реНрдерд╛рди, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЖрджрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣реАрдХреГрдд;
- "рддреИрдирд╛рддреА - рд╕реЗрд╡рд╛ (+ рдкреЛрд░реНрдЯ)" рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрдиреЗрдХреНрд╢рдиреЛрдВ рдХрд╛ рджреГрд╢реНрдпреАрдХрд░рдг.
- рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдбреНрд╕ рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХрд╛ рджреГрд╢реНрдпреАрдХрд░рдгред
- рдХрдИ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░рд┐рдд рдХрд░рдирд╛: рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдФрд░ k8s рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ред
- рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рднрд╛рдЧ (рдкреНрд░реЛрд╕реЗрд╕рд░ рд╕рдордп, рдореЗрдореЛрд░реА, рдбрд┐рд╕реНрдХ рд╕рдмрд╕рд┐рд╕реНрдЯрдо, рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ) рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрд░реНрдХ - рдкреЙрдбреНрд╕ рдХреА рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕реНрдерд┐рддрд┐, рдЙрдкрд▓рдмреНрдз рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рд╕рдЬреАрд╡рддрд╛/рддреИрдпрд╛рд░реА рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдкрд╛рд░рд┐рдд рд╣реЛрдиреЗ рдХреА рдЬрд╛рдирдХрд╛рд░реА, рджреЛрдиреЛрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреАред
рднрд╛рдЧ 1: "рдЧреНрд░рд╛рдлрд╛рдирд╛ рдкреНрд▓рдЧрдЗрди" рдХреНрдпрд╛ рд╣реИ?
рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, рдЧреНрд░рд╛рдлрд╛рдирд╛ рдкреНрд▓рдЧрдЗрди рдПрдХ рдХреЛрдгреАрдп рдирд┐рдпрдВрддреНрд░рдХ рд╣реИ рдЬреЛ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХреА рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ (/var/grafana/рдкреНрд▓рдЧрдЗрдиреНрд╕/ /dist/рдореЙрдбреНрдпреВрд▓.js) рдФрд░ рдЗрд╕реЗ SystemJS рдореЙрдбреНрдпреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА рдЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдлрд╝рд╛рдЗрд▓ plugin.json рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдореЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИ: рдирд╛рдо, рд╕рдВрд╕реНрдХрд░рдг, рдкреНрд▓рдЧрдЗрди рдкреНрд░рдХрд╛рд░, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА/рд╕рд╛рдЗрдЯ/рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рд▓рд┐рдВрдХ, рдирд┐рд░реНрднрд░рддрд╛рдПрдБ, рдЖрджрд┐ред

рдореЙрдбреНрдпреВрд▓.ts

рдкреНрд▓рдЧрдЗрди.json
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдордиреЗ plugin.type = app рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рд╣реИред рдХреНрдпреЛрдВрдХрд┐ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
рдкреИрдирд▓рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ - рдХреБрдЫ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рджреГрд╢реНрдпрдорд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдирд▓ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рднрд┐рдиреНрди рдбреИрд╢рдмреЛрд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд: рдХреБрдЫ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рдХрдиреЗрдХреНрдЯрд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдореЗрдерд┐рдпрд╕-рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕, рдХреНрд▓рд┐рдХрд╣рд╛рдЙрд╕-рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕, рдЗрд▓рд╛рд╕реНрдЯрд┐рдХрд╕рд░реНрдЪ-рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕)ред
рдЕрдиреБрдкреНрд░рдпреЛрдЧ: рдПрдХ рдкреНрд▓рдЧрдЗрди рдЬреЛ рдЖрдкрдХреЛ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХреЗ рдЕрдВрджрд░ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдлреНрд░рдВрдЯрдПрдВрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ, рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ HTML рдкреЗрдЬ рдмрдирд╛рдиреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдХреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ (рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕, рдкреИрдирд▓) рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдбреИрд╢рдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдкреНрд░рдХрд╛рд░ = рдРрдк рдХреЗ рд╕рд╛рде рдкреНрд▓рдЧрдЗрди рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг.
рдЖрдк рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рдордиреЗ рдЗрд╕реЗ рдЪреБрдирд╛ рд╣реИ)ред рдЖрдк рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЗрд▓реЛ-рд╡рд░реНрд▓реНрдб рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕реНрдЯрд╛рд░реНрдЯрд░ рдкреИрдХреНрд╕ рд╣реИрдВ (рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд░рд┐рдПрдХреНрдЯ рдкрд░ рдПрдХ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдЙрджрд╛рд╣рд░рдг рднреА рд╣реИ) рдЬрд┐рдирдореЗрдВ рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП рдмрдВрдбрд▓рд░реНрд╕ рд╣реИрдВред
рднрд╛рдЧ 2: рд╕реНрдерд╛рдиреАрдп рд╡рд╛рддрд╛рд╡рд░рдг рддреИрдпрд╛рд░ рдХрд░рдирд╛
рдкреНрд▓рдЧрдЗрди рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╕рднреА рдкреВрд░реНрд╡-рд╕реНрдерд╛рдкрд┐рдд рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдкреНрд░реЛрдореЗрдерд┐рдпрд╕, рдиреЛрдб-рдПрдХреНрд╕рдкреЛрд░реНрдЯрд░, рдХреНрдпреВрдм-рд╕реНрдЯреЗрдЯ-рдореЗрдЯреНрд░рд┐рдХреНрд╕, рдЧреНрд░рд╛рдлрд╛рдирд╛ред рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рдЬрд▓реНрджреА, рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕рд╣рдЬрддрд╛ рд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╣реЙрдЯ-рд░реАрд▓реЛрдб рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЧреНрд░рд╛рдлрд╛рдирд╛ рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рдбреЗрд╡рд▓рдкрд░ рдХреА рдорд╢реАрди рд╕реЗ рд╕реАрдзреЗ рдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рдорд╛рд░реА рд░рд╛рдп рдореЗрдВ, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИ рдЕрдЧрд▓рд╛ рдЪрд░рдг рдкреНрд░реЛрдореЗрдерд┐рдпрд╕-рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ + рдЧреНрд░рд╛рдлрд╛рдирд╛ рдмрдВрдбрд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рдорд┐рдиреАрдХреНрдпреВрдм рдкрд░ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕-рдСрдкрд░реЗрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рджреГрдврд╝рддрд╛ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рджреГрдврд╝рддрд╛: рд╕рддреНрдп charts/grafana/values.yaml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ PV рдФрд░ PVC рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ persistence.existingClaim рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
рд╣рдорд╛рд░реА рдЕрдВрддрд┐рдо рдорд┐рдиреАрдХреНрдпреВрдм рд▓реЙрдиреНрдЪ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
minikube start --kubernetes-version=v1.13.4 --memory=4096 --bootstrapper=kubeadm --extra-config=scheduler.address=0.0.0.0 --extra-config=controller-manager.address=0.0.0.0
minikube mount
/home/sergeisporyshev/Projects/Grafana:/var/grafana --gid=472 --uid=472 --9p-version=9p2000.Lрднрд╛рдЧ 3: рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд┐рдХрд╛рд╕
рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓
рдкреНрд▓рдЧрдЗрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рддреИрдпрд╛рд░реА рдореЗрдВ, рд╣рдордиреЗ рдЙрди рд╕рднреА рдмреБрдирд┐рдпрд╛рджреА рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЗрдХрд╛рдЗрдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╣рдо рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреНрд▓рд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ: рдкреЙрдб, рдкрд░рд┐рдирд┐рдпреЛрдЬрди, рдбреЗрдореЙрдирд╕реЗрдЯ, рд╕реНрдЯреЗрдЯрдлреБрд▓рд╕реЗрдЯ, рдЬреЙрдм, рдХреНрд░реЛрдирдЬреЙрдм, рд╕рд░реНрд╡рд┐рд╕, рдиреЛрдб, рдиреЗрдорд╕реНрдкреЗрд╕ред рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рд╕ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдмреЗрд╕рдореЙрдбрд▓ рдХреНрд▓рд╛рд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЬреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░, рдбрд┐рд╕реНрдЯреНрд░рдХреНрдЯрд░, рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рджреГрд╢реНрдпрддрд╛ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдХреНрд▓рд╛рд╕ рдЕрдиреНрдп рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЗ рд╕рд╛рде рдиреЗрд╕реНрдЯреЗрдб рд╕рдВрдмрдВрдзреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдкреЙрдбреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреАред
import {Pod} from "./pod";
import {Service} from "./service";
import {BaseModel} from './traits/baseModel';
export class Deployment extends BaseModel{
pods: Array<Pod>;
services: Array<Service>;
constructor(data: any){
super(data);
this.pods = [];
this.services = [];
}
}рдЧреЗрдЯрд░реНрд╕ рдФрд░ рд╕реЗрдЯрд░реНрд╕ рдХреА рдорджрдж рд╕реЗ рд╣рдо рдЕрдкрдиреА рдЬрд╝рд░реВрд░рдд рдХреЗ рдПрдВрдЯрд┐рдЯреА рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдкрдардиреАрдп рд░реВрдк рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдпрд╛ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрд╡рдВрдЯрди рдпреЛрдЧреНрдп рд╕реАрдкреАрдпреВ рдиреЛрдбреНрд╕ рдХрд╛ рдлрд╝реЙрд░реНрдореЗрдЯреЗрдб рдЖрдЙрдЯрдкреБрдЯ:
get cpuAllocatableFormatted(){
let cpu = this.data.status.allocatable.cpu;
if(cpu.indexOf('m') > -1){
cpu = parseInt(cpu)/1000;
}
return cpu;
}рдкреЗрдЬ
рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рднреА рдкреГрд╖реНрдареЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ рд╣рдорд╛рд░реЗ pluing.json рдореЗрдВ рдирд┐рд░реНрднрд░рддрд╛ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ:

рдкреНрд░рддреНрдпреЗрдХ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рдореЗрдВ рд╣рдореЗрдВ рдкреГрд╖реНрда рдХрд╛ рдирд╛рдо (рддрдм рдЗрд╕реЗ рдПрдХ рд╕реНрд▓рдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдпрд╣ рдкреГрд╖реНрда рдкрд╣реБрдВрдЪ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛) рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛; рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдШрдЯрдХ рдХрд╛ рдирд╛рдо (рдШрдЯрдХреЛрдВ рдХреА рд╕реВрдЪреА module.ts рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХреА рдЬрд╛рддреА рд╣реИ); рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рднреВрдорд┐рдХрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреГрд╖реНрда рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдп рдЙрдкрд▓рдмреНрдз рд╣реИ рдФрд░ рд╕рд╛рдЗрдбрдмрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред
рдкреЗрдЬ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдШрдЯрдХ рдореЗрдВ, рд╣рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯUrl рд╕реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╡рд╣рд╛рдВ рдорд╛рд░реНрдХрдЕрдк рдХреЗ рд╕рд╛рде HTML рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдЕрдВрджрд░, рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рдо 2 рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХреЛрдгреАрдп рд╕реЗрд╡рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
- backendSrv рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ grafana api рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ;
- datasourceSrv тАФ рдПрдХ рд╕реЗрд╡рд╛ рдЬреЛ рдЖрдкрдХреЗ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рд╕рднреА рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдерд╛рдиреАрдп рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, .getAll() рд╡рд┐рдзрд┐ рд╕рднреА рд╕реНрдерд╛рдкрд┐рдд рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреА рд╕реВрдЪреА рд▓реМрдЯрд╛рддреА рд╣реИ; .get( ) - рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХрд╛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд▓реМрдЯрд╛рддрд╛ рд╣реИред



рднрд╛рдЧ 4: рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд
рдЧреНрд░рд╛рдлрд╛рдирд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рдмрд┐рд▓реНрдХреБрд▓ рд╡реИрд╕рд╛ рд╣реА рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЕрдиреНрдп рд╕рднреА рд╣реИрдВ: рдЗрд╕рдХрд╛ рдЕрдкрдирд╛ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдореЙрдбреНрдпреВрд▓.js рд╣реИ, рдореЗрдЯрд╛ рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рд▓реА рдПрдХ рдлрд╝рд╛рдЗрд▓ plugin.json рд╣реИред рдЯрд╛рдЗрдк = рдРрдк рдХреЗ рд╕рд╛рде рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдо рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдореЗрдерд┐рдпрд╕-рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕) рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рд╕реАрдзреЗ рдкреНрд▓рдЧрдЗрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ (dist/datasource/*) рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рдХреЛ рдкреНрд▓рдЧрдЗрди рдХреЛрдб рдХреЗ рд╕рд╛рде рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ config.html рдЯреЗрдореНрдкрд▓реЗрдЯ рдФрд░ ConfigCtrl рдирд┐рдпрдВрддреНрд░рдХ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреЗрдЬ рдФрд░ рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЖрдкрдХреЗ рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рдХреЗ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред
KubeGraf рдкреНрд▓рдЧрдЗрди рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ (рд╕реНрд░реЛрдд рдХреЛрдб рдЙрдкрд▓рдмреНрдз рд╣реИ ):
- k8s api-рд╕рд░реНрд╡рд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ (рдиреЗрдорд╕реНрдкреЗрд╕, рдкрд░рд┐рдирд┐рдпреЛрдЬрдиреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛...)
- рдкреНрд░реЛрдореЗрдерд┐рдпрд╕-рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ (рдЬрд┐рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЪреБрдирд╛ рдЬрд╛рддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдкреНрд░реЙрдХреНрд╕реА рдЕрдиреБрд░реЛрдз рдФрд░ рд╕реНрдЯреЗрдЯрд┐рдХ рдкреГрд╖реНрдареЛрдВ рдФрд░ рдбреИрд╢рдмреЛрд░реНрдб рджреЛрдиреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдирд╛ред
- рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕реНрдереИрддрд┐рдХ рдкреГрд╖реНрдареЛрдВ рдкрд░ рдбреЗрдЯрд╛ рдЕрджреНрдпрддрди рдХрд░рдирд╛ (рдирд┐рд░реНрдзрд╛рд░рд┐рдд рддрд╛рдЬрд╝рд╛ рджрд░ рд╕рдордп рдХреЗ рд╕рд╛рде)ред
- grafana-dashboards рдореЗрдВ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╢реАрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реАрдЬрд╝ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ (рд╡рд┐рдзрд┐ .metriFindQuery())



- рдЕрдВрддрд┐рдо k8s рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред
testDatasource(){
let url = '/api/v1/namespaces';
let _url = this.url;
if(this.accessViaToken)
_url += '/__proxy';
_url += url;
return this.backendSrv.datasourceRequest({
url: _url,
method: "GET",
headers: {"Content-Type": 'application/json'}
})
.then(response => {
if (response.status === 200) {
return {status: "success", message: "Data source is OK", title: "Success"};
}else{
return {status: "error", message: "Data source is not OK", title: "Error"};
}
}, error => {
return {status: "error", message: "Data source is not OK", title: "Error"};
})
}рд╣рдорд╛рд░реА рд░рд╛рдп рдореЗрдВ, рдПрдХ рдЕрд▓рдЧ рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреЗ рд▓рд┐рдП рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рддрдВрддреНрд░ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рдЕрдВрддрд┐рдо рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рддрдХ рдкрд╣реБрдБрдЪ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЧреНрд░рд╛рдлрд╝рд╛рдирд╛ рдШрдЯрдХ - рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕рдПрдЪрдЯреАрдкреАрд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдШрдЯрдХ рдХреЗ рд╕рд╛рде, рд╣рдо рдпреВрдЖрд░рдПрд▓ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рдкреНрд░рдорд╛рдгреАрдХрд░рдг/рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ http рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рддрдХ рдкрд╣реБрдБрдЪ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: рд▓реЙрдЧрд┐рди-рдкрд╛рд╕рд╡рд░реНрдб, рдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ/рдХреНрд▓рд╛рдЗрдВрдЯ-рдХреАред рдПрдХ рд╡рд╛рд╣рдХ рдЯреЛрдХрди (k8s рдХреЗ рд▓рд┐рдП рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣реБрдБрдЪ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдереЛрдбрд╝рд╛ "рдзреЛрдЦрд╛" рджреЗрдирд╛ рдкрдбрд╝рд╛ред
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЧреНрд░рд╛рдлрд╛рдирд╛ рддрдВрддреНрд░ "рдкреНрд▓рдЧрдЗрди рд░реВрдЯреНрд╕" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП )ред рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ, рд╣рдо рд░реВрдЯрд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЧреНрд░рд╛рдлрд╝рд╛рдирд╛ рдкреНрд░реЙрдХреНрд╕реА рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рд▓рд┐рдП, рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рд╣реЗрдбрд░ рдпрд╛ рдпреВрдЖрд░рдПрд▓ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ jsonData рдФрд░ secureJsonData рдлрд╝реАрд▓реНрдб (рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдлрд╝реЙрд░реНрдо рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдпрд╛ рдЯреЛрдХрди рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реЛрдз /__рдкреНрд░реЙрдХреНрд╕реА/api/v1/рдиреЗрдорд╕реНрдкреЗрд╕ рдлреЙрд░реНрдо рдХреЗ URL рдкрд░ рдкреНрд░реЙрдХреНрд╕реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
/api/v8/namespaces рдХреЛ Authorization: Bearer рд╣реЗрдбрд░ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝реЗрдВред


рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, k8s рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдБрдЪ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдЖрдк рдпрд╣рд╛рдБ рднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ .
рднрд╛рдЧ 5: рд░рд┐рд╣рд╛рдИ

рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдУрдкрди рд╕реЛрд░реНрд╕ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред рдЧреНрд░рд╛рдлрд╛рдирд╛ рдореЗрдВ, рдпрд╣ рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ, рдЬреЛ рдпрд╣рд╛рдБ рдЙрдкрд▓рдмреНрдз рд╣реИ
рдЖрдкрдХреЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕реНрдЯреЛрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ , repo.json рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╕рд╛рдордЧреНрд░реА рдЬреЛрдбрд╝рдирд╛:

рдЬрд╣рд╛рдВ version рдЖрдкрдХреЗ рдкреНрд▓рдЧрдЗрди рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, url рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдХрд╛ рд▓рд┐рдВрдХ рд╣реИ, рдФрд░ commit рдЙрд╕ рдХрдорд┐рдЯ рдХрд╛ рд╣реИрд╢ рд╣реИ рдЬреЛ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдПрдЧрд╛ред
рдФрд░ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рдЕрджреНрднреБрдд рддрд╕реНрд╡реАрд░ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

рдЗрд╕рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдХреЗ Readme.md, Changelog.md рдФрд░ plugin.json рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдкреНрд▓рдЧрдЗрди рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рднрд╛рдЧ 6: рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
рд╣рдордиреЗ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрд╛рдж рднреА рдЕрдкрдиреЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдФрд░ рдЕрдм рд╣рдо рдХреНрд▓рд╕реНрдЯрд░ рдиреЛрдб рд╕рдВрд╕рд╛рдзрди рдЙрдкрдпреЛрдЧ рдХреА рд╕рд╣реА рдирд┐рдЧрд░рд╛рдиреА рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, UX рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдкреНрд▓рдЧрдЗрди рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ GitHub рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдлреАрдбрдмреИрдХ рдХреЛ рднреА рд╕реБрд▓рдЭрд╛ рд░рд╣реЗ рд╣реИрдВ (рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛ рдпрд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдЫреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢реА рд╣реЛрдЧреА ЁЯЩВ )ред
рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЛ рдЧреНрд░рд╛рдлрд╛рдирд╛ рдЬреИрд╕реЗ рдЕрджреНрднреБрдд рдЯреВрд▓ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рдВрднрд╡рддрдГ рдЖрдк рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреНрд▓рдЧрдЗрди рднреА рд▓рд┐рдЦ рд╕рдХреЗрдВрдЧреЗред
рдзрдиреНрдпрд╡рд╛рдж!)
рд╕реНрд░реЛрдд: www.habr.com
