рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рдпрд╛ рд╡рд░реНрд╖реА, рдореБрдЦреНрдп рдпреБрд░реЛрдкрд┐рдпрди рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреЙрдиреНрдлрд░рдиреНрд╕ - KubeCon + CloudNativeCon Europe 2020 - рдЖрднрд╛рд╕реА рд╣реЛрддреА. рддрдерд╛рдкрд┐, рд╕реНрд╡рд░реВрдкрд╛рддреАрд▓ рдЕрд╢рд╛ рдмрджрд▓рд╛рдореБрд│реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪрд╛ рджреАрд░реНрдШ рдирд┐рдпреЛрдЬрд┐рдд рдЕрд╣рд╡рд╛рд▓ рд╡рд┐рддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдкрд╛рд╕реВрди рд░реЛрдЦрд▓реЗ рдирд╛рд╣реА тАЬрдЬрд╛? рдмрд╛рд╢! рдЖрдордЪреНрдпрд╛ рдореБрдХреНрдд рд╕реНрд░реЛрдд рдкреНрд░рдХрд▓реНрдкрд╛рд▓рд╛ рд╕рдорд░реНрдкрд┐рдд рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░.

рдЪрд░реНрдЪреЗрддреВрди рдкреНрд░реЗрд░рд┐рдд рдЕрд╕рд▓реЗрд▓рд╛ рд╣рд╛ рд▓реЗрдЦ, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд▓рдн рдХрд░рдгреНрдпрд╛рдЪрд╛ рджреГрд╖реНрдЯреАрдХреЛрди рд╕рд╛рджрд░ рдХрд░рддреЛ рдЖрдгрд┐ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░реВрди рдХрдореАрдд рдХрдореА рдкреНрд░рдпрддреНрдирд╛рдд рддреБрдореНрд╣реА рд╕реНрд╡рддрдГрдЪреЗ рдХрд╕реЗ рдмрдирд╡реВ рд╢рдХрддрд╛ рд╣реЗ рджрд╛рдЦрд╡рддреЗ.

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рдкрд░рд┐рдЪрдп рджреЗрдд рдЖрд╣реЗ рдЕрд╣рд╡рд╛рд▓рд╛рдЪрд╛ рд╡реНрд╣рд┐рдбрд┐рдУ (рдЗрдВрдЧреНрд░рдЬреАрдордзреНрдпреЗ ~ 23 рдорд┐рдирд┐рдЯреЗ, рд▓реЗрдЦрд╛рдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдорд╛рд╣рд┐рддреАрдкреВрд░реНрдг) рдЖрдгрд┐ рддреНрдпрд╛рддреАрд▓ рдореБрдЦреНрдп рдЙрддрд╛рд░рд╛ рдордЬрдХреВрд░ рд╕реНрд╡рд░реВрдкрд╛рдд. рдЬрд╛!

рдлреНрд▓реЕрдВрдЯрдордзреНрдпреЗ рдЖрдореНрд╣реА рд╕рддрдд рд╕рд░реНрд╡рдХрд╛рд╣реА рдСрдкреНрдЯрд┐рдорд╛рдЗрдЭ рдЖрдгрд┐ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рддреЛ. рдЖрдЬ рдЖрдкрдг рдЖрдгрдЦреА рдПрдХрд╛ рд░реЛрдорд╛рдВрдЪрдХ рд╕рдВрдХрд▓реНрдкрдиреЗрдмрджреНрджрд▓ рдмреЛрд▓реВ. рднреЗрдЯрд╛: рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрд┐рд╡реНрд╣ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ!

рддрдерд╛рдкрд┐, рдЬреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рдд рд╣реЗ рд╕рд░реНрд╡ рдШрдбрддреЗ рддреНрдпрд╛ рд╕рдВрджрд░реНрднрд╛рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрдпрд╛: рдХреБрдмрд░реНрдиреЗрдЯреНрд╕.

Kubernetes API рдЖрдгрд┐ рдирд┐рдпрдВрддреНрд░рдХ

Kubernetes рдордзреАрд▓ API рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯрд╕рд╛рдареА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдВрд╕рд╣ рдлрд╛рдЗрд▓ рд╕рд░реНрд╡реНрд╣рд░рдЪрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдореНрд╣рдгреВрди рдкреНрд░рд╕реНрддреБрдд рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдпрд╛ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░реАрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ (рд╕рдВрд╕рд╛рдзрдиреЗ) YAML рдлрд╛рдЗрд▓реНрд╕рджреНрд╡рд╛рд░реЗ рджрд░реНрд╢рд╡рд┐рд▓реЗ рдЬрд╛рддрд╛рдд. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рд╕рд░реНрд╡реНрд╣рд░рдордзреНрдпреЗ рдореВрд▓рднреВрдд API рдЖрд╣реЗ рдЬреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рддреАрди рдЧреЛрд╖реНрдЯреА рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ:

  • рдорд┐рд│рд╡рд╛ рддреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдХрд╛рд░ рдЖрдгрд┐ рдирд╛рд╡рд╛рдиреБрд╕рд╛рд░ рд╕рдВрд╕рд╛рдзрди;
  • рдмрджрд▓ рд╕рдВрд╕рд╛рдзрди (рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рд╕рд░реНрд╡реНрд╣рд░ рдлрдХреНрдд "рдпреЛрдЧреНрдп" рд╡рд╕реНрддреВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЛ - рд╕рд░реНрд╡ рдЪреБрдХреАрдЪреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдВрд╕рд╛рдареА рд╣реЗрддреВ рдЯрд╛рдХреВрди рджрд┐рд▓реЗрд▓реЗ рдЖрд╣реЗрдд);
  • рдЯреНрд░реЕрдХ рд╕рдВрд╕рд╛рдзрдирд╛рд╕рд╛рдареА (рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд╕ рддреНрдпрд╛рдЪреА рд╡рд░реНрддрдорд╛рди/рдЕрджреНрдпрдпрд╛рд╡рдд рдЖрд╡реГрддреНрддреА рддреНрд╡рд░рд┐рдд рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ).

рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, Kubernetes рддреАрди рдореВрд▓рднреВрдд рдкрджреНрдзрддреАрдВрд╕рд╣ (YAML рдореЕрдирд┐рдлреЗрд╕реНрдЯрд╕рд╛рдареА) рдлрд╛рдЗрд▓ рд╕рд░реНрд╡реНрд╣рд░рдЪрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдореНрд╣рдгреВрди рдХрд╛рд░реНрдп рдХрд░рддреЗ (рд╣реЛрдп, рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рдЗрддрд░рд╣реА рдЖрд╣реЗрдд, рдкрд░рдВрддреБ рдЖрдореНрд╣реА рддреНрдпрд╛рдВрдирд╛ рдЖрддреНрддрд╛ рд╡рдЧрд│реВ).

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рд╕рдорд╕реНрдпрд╛ рдЕрд╢реА рдЖрд╣реЗ рдХреА рд╕рд░реНрд╡реНрд╣рд░ рдлрдХреНрдд рдорд╛рд╣рд┐рддреА рд╕рд╛рдард╡реВ рд╢рдХрддреЛ. рддреЗ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдирд┐рдпрдВрддреНрд░рдХ - рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреНрдпрд╛ рдЬрдЧрд╛рддреАрд▓ рджреБрд╕рд░реА рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрд╡рд╛рдЪреА рдЖрдгрд┐ рдореВрд▓рднреВрдд рд╕рдВрдХрд▓реНрдкрдирд╛.

рдирд┐рдпрдВрддреНрд░рдХрд╛рдВрдЪреЗ рджреЛрди рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рдЖрд╣реЗрдд. рдкреНрд░рдердо Kubernetes рдХрдбреВрди рдорд╛рд╣рд┐рддреА рдШреЗрддреЛ, рдиреЗрд╕реНрдЯреЗрдб рд▓реЙрдЬрд┐рдХрдиреБрд╕рд╛рд░ рддреНрдпрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЛ рдЖрдгрд┐ K8s рд╡рд░ рдкрд░рдд рдХрд░рддреЛ. рджреБрд╕рд░рд╛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдХрдбреВрди рдорд╛рд╣рд┐рддреА рдШреЗрддреЛ, рдкрд░рдВрддреБ, рдкрд╣рд┐рд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░рд╛рдкреНрд░рдорд╛рдгреЗ, рдХрд╛рд╣реА рдмрд╛рд╣реНрдп рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреА рд╕реНрдерд┐рддреА рдмрджрд▓рддреЛ.

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдордзреНрдпреЗ рдЙрдкрдпреЛрдЬрди рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╡рд░ рдмрд╛рд░рдХрд╛рдИрдиреЗ рдирдЬрд░ рдЯрд╛рдХреВрдпрд╛:

  • рдЙрдкрдпреЛрдЬрди рдирд┐рдпрдВрддреНрд░рдХ (рдпрд╛рдд рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ kube-controller-manager) рдЙрдкрдпреЛрдЬрдирд╛рд╡рд┐рд╖рдпреА рдорд╛рд╣рд┐рддреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рдЖрдгрд┐ рдПрдХ рдкреНрд░рддрд┐рдХреГрддреА рд╕реЗрдЯ рддрдпрд╛рд░ рдХрд░рддреЗ.
  • рдпрд╛ рдорд╛рд╣рд┐рддреАрдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ ReplicaSet рджреЛрди рдкреНрд░рддрд┐рдХреГрддреА (рджреЛрди рдкреЙрдбреНрд╕) рддрдпрд╛рд░ рдХрд░рддреЗ, рдкрд░рдВрддреБ рдпрд╛ рдкреЙрдбреНрд╕ рдЕрджреНрдпрд╛рдк рд╢реЗрдбреНрдпреВрд▓ рдХреЗрд▓реЗрд▓реЗ рдирд╛рд╣реАрдд.
  • рд╢реЗрдбреНрдпреБрд▓рд░ рдкреЙрдбреНрд╕ рд╢реЗрдбреНрдпреБрд▓ рдХрд░рддреЛ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ YAML рдордзреНрдпреЗ рдиреЛрдб рдорд╛рд╣рд┐рддреА рдЬреЛрдбрддреЛ.
  • рдХреБрдмреЗрд▓реЗрдЯреНрд╕ рдмрд╛рд╣реНрдп рд╕рдВрд╕рд╛рдзрдирд╛рдордзреНрдпреЗ рдмрджрд▓ рдХрд░рддрд╛рдд (рдбреЙрдХрд░ рдореНрд╣рдгрд╛).

рдордЧ рд╣рд╛ рд╕рдВрдкреВрд░реНрдг рдХреНрд░рдо рдЙрд▓рдЯ рдХреНрд░рдорд╛рдиреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рд╣реЛрддреЛ: рдХреБрдмреЗрд▓реЗрдЯ рдХрдВрдЯреЗрдирд░ рддрдкрд╛рд╕рддреЗ, рдкреЙрдбрдЪреНрдпрд╛ рд╕реНрдерд┐рддреАрдЪреА рдЧрдгрдирд╛ рдХрд░рддреЗ рдЖрдгрд┐ рддреЗ рдкрд░рдд рдкрд╛рдард╡рддреЗ. ReplicaSet рдирд┐рдпрдВрддреНрд░рдХ рд╕реНрдерд┐рддреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЛ рдЖрдгрд┐ рдкреНрд░рддрд┐рдХреГрддреА рд╕реЗрдЯрдЪреА рд╕реНрдерд┐рддреА рдЕрджреНрдпрддрдирд┐рдд рдХрд░рддреЛ. рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рдХрдВрдЯреНрд░реЛрд▓рд░рдЪреНрдпрд╛ рдмрд╛рдмрддреАрддрд╣реА рдЕрд╕реЗрдЪ рдШрдбрддреЗ рдЖрдгрд┐ рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ рд╢реЗрд╡рдЯреА рдЕрджреНрдпрддрдирд┐рдд (рд╡рд░реНрддрдорд╛рди) рд╕реНрдерд┐рддреА рдорд┐рд│рддреЗ.

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░

рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд╡рд┐рд╡рд┐рдз рдирд┐рдпрдВрддреНрд░рдХрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдпреБрдХреНрдд рдХрд╛рд░реНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЖрд╣реЗрдд (рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдСрдкрд░реЗрдЯрд░ рджреЗрдЦреАрд▓ рдирд┐рдпрдВрддреНрд░рдХ рдЖрд╣реЗрдд). рдкреНрд░рд╢реНрди рдЙрджреНрднрд╡рддреЛ, рдХрдореАрдд рдХрдореА рдкреНрд░рдпрддреНрдирд╛рдд рд╕реНрд╡рддрдГрдЪрд╛ рдСрдкрд░реЗрдЯрд░ рдХрд╕рд╛ рддрдпрд╛рд░ рдХрд░рд╛рдпрдЪрд╛? рдЖрдгрд┐ рдпреЗрдереЗ рдЖрдореНрд╣реА рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗрд▓рд╛ рдмрдЪрд╛рд╡рд╛рд╕рд╛рдареА рдпреЗрддреЛ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░. рд╣реЗ рд╕рд┐рд╕реНрдЯреАрдо рдкреНрд░рд╢рд╛рд╕рдХрд╛рдВрдирд╛ рдкрд░рд┐рдЪрд┐рдд рдкрджреНрдзрддреА рд╡рд╛рдкрд░реВрди рддреНрдпрд╛рдВрдЪреА рд╕реНрд╡рддрдГрдЪреА рд╡рд┐рдзрд╛рдиреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ.

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рд╕рд╛рдзреЗ рдЙрджрд╛рд╣рд░рдг: рдЧреБрдкрд┐рддреЗ рдХреЙрдкреА рдХрд░рдгреЗ

рдПрдХ рд╕рд╛рдзреЗ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ.

рд╕рдордЬрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдЖрд╣реЗ. рддреНрдпрд╛рдд рдиреЗрдорд╕реНрдкреЗрд╕ рдЖрд╣реЗ default рдХрд╛рд╣реА рд░рд╣рд╕реНрдпрд╛рдВрд╕рд╣ mysecret. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдЗрддрд░ рдиреЗрдорд╕реНрдкреЗрд╕ рдЖрд╣реЗрдд. рддреНрдпрд╛рдВрдЪреНрдпрд╛рдкреИрдХреА рдХрд╛рд╣реАрдВрдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЗрдмрд▓ рдЬреЛрдбрд▓реЗрд▓реЗ рдЖрд╣реЗ. рд▓реЗрдмрд▓рд╕рд╣ рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ рд╕рд┐рдХреНрд░реЗрдЯ рдХреЙрдкреА рдХрд░рдгреЗ рд╣реЗ рдЖрдордЪреЗ рдзреНрдпреЗрдп рдЖрд╣реЗ.

рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдирд╡реАрди рдиреЗрдорд╕реНрдкреЗрд╕ рджрд┐рд╕реВ рд╢рдХрддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдкреИрдХреА рдХрд╛рд╣реАрдВрдирд╛ рд╣реЗ рд▓реЗрдмрд▓ рдЕрд╕реВ рд╢рдХрддреЗ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдореБрд│реЗ рд╣реЗ рдХрд╛рд░реНрдп рдЧреБрдВрддрд╛рдЧреБрдВрддреАрдЪреЗ рдЖрд╣реЗ. рджреБрд╕рд░реАрдХрдбреЗ, рдЬреЗрд╡реНрд╣рд╛ рд▓реЗрдмрд▓ рд╣рдЯрд╡рд┐рд▓реЗ рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рдЧреБрдкреНрдд рджреЗрдЦреАрд▓ рд╣рдЯрд╡рд┐рд▓реЗ рдЬрд╛рд╡реЗ. рдпрд╛ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЧреБрдкреНрдд рд╕реНрд╡рддрдГ рджреЗрдЦреАрд▓ рдмрджрд▓реВ рд╢рдХрддреЗ: рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдирд╡реАрди рдЧреБрдкреНрдд рд▓реЗрдмрд▓рд╛рдВрд╕рд╣ рд╕рд░реНрд╡ рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ рдХреЙрдкреА рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдХреЛрдгрддреНрдпрд╛рд╣реА рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ рдЪреБрдХреВрди рд╕рд┐рдХреНрд░реЗрдЯ рд╣рдЯрд╡рд▓реЗ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЖрдордЪреНрдпрд╛ рдСрдкрд░реЗрдЯрд░рдиреЗ рддреЗ рддреНрд╡рд░рд┐рдд рдкреБрдирд░реНрд╕рдВрдЪрдпрд┐рдд рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ.

рдЖрддрд╛ рдХрд╛рд░реНрдп рддрдпрд╛рд░ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░реВрди рддреНрдпрд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ. рдкрд░рдВрддреБ рдкреНрд░рдердо рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рдмрджреНрджрд▓ рдХрд╛рд╣реА рд╢рдмреНрдж рдмреЛрд▓рдгреЗ рдпреЛрдЧреНрдп рдЖрд╣реЗ.

рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдордзреАрд▓ рдЗрддрд░ рд╡рд░реНрдХрд▓реЛрдбреНрд╕рдкреНрд░рдорд╛рдгреЗ, рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рд╕реНрд╡рддрдГрдЪреНрдпрд╛ рдкреЙрдбрдордзреНрдпреЗ рдЪрд╛рд▓рддреЛ. рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдпрд╛ рдкреЙрдбрдордзреНрдпреЗ /hooks рдПрдХреНрдЭрд┐рдХреНрдпреБрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓реНрд╕ рд╕рд╛рдард╡рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд. рдпрд╛ рдмреЕрд╢, рдкрд╛рдпрдерди, рд░реБрдмреА рдЗрддреНрдпрд╛рджреА рдордзреАрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрд╕реВ рд╢рдХрддрд╛рдд. рдЖрдореНрд╣реА рдЕрд╢рд╛ рдПрдХреНрдЭрд┐рдХреНрдпреВрдЯреЗрдмрд▓ рдлрд╛рдЗрд▓реНрд╕рдирд╛ рд╣реБрдХ рдореНрд╣рдгрддреЛ (рд╣реБрдХ).

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЗрд╡реНрд╣реЗрдВрдЯреНрд╕рдЪреА рд╕рджрд╕реНрдпрддрд╛ рдШреЗрддреЛ рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдЗрд╡реНрд╣реЗрдВрдЯрдЪреНрдпрд╛ рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдд рд╣реЗ рд╣реБрдХ рдЪрд╛рд▓рд╡рддреЛ.

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рдХреЛрдгрддрд╛ рд╣реБрдХ рдЖрдгрд┐ рдХрдзреА рдЪрд╛рд▓рд╡рд╛рд╡рд╛ рд╣реЗ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рдХрд╕реЗ рдХрд│рддреЗ? рдореБрджреНрджрд╛ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдкреНрд░рддреНрдпреЗрдХ рд╣реБрдХрдЪреЗ рджреЛрди рдЯрдкреНрдкреЗ рдЕрд╕рддрд╛рдд. рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рджрд░рдореНрдпрд╛рди, рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рддрд░реНрдХрд╛рдиреЗ рд╕рд░реНрд╡ рд╣реБрдХ рдЪрд╛рд▓рд╡рддреЛ --config рд╣рд╛ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪрд╛ рдЯрдкреНрдкрд╛ рдЖрд╣реЗ. рдЖрдгрд┐ рддреНрдпрд╛рдирдВрддрд░, рд╣реБрдХ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рд░реНрдЧрд╛рдиреЗ рд▓рд╛рдБрдЪ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд - рдЬреНрдпрд╛ рдЗрд╡реНрд╣реЗрдВрдЯрд╢реА рддреЗ рд╕рдВрд▓рдЧреНрди рдЖрд╣реЗрдд рддреНрдпрд╛рдВрдирд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рдореНрд╣рдгреВрди. рдирдВрддрд░рдЪреНрдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рд╣реБрдХрд▓рд╛ рдмрдВрдзрдирдХрд╛рд░рдХ рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЛ (рдмрдВрдзрдирдХрд╛рд░рдХ рд╕рдВрджрд░реНрдн) - JSON рд╕реНрд╡рд░реВрдкрд╛рдд рдбреЗрдЯрд╛, рдЬреНрдпрд╛рдмрджреНрджрд▓ рдЖрдореНрд╣реА рдЦрд╛рд▓реА рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдмреЛрд▓реВ.

рдмреЕрд╢ рдордзреНрдпреЗ рдСрдкрд░реЗрдЯрд░ рдмрдирд╡рдгреЗ

рдЖрддрд╛ рдЖрдореНрд╣реА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рддрдпрд╛рд░ рдЖрд╣реЛрдд. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣рд╛рд▓рд╛ рджреЛрди рдХрд╛рд░реНрдпреЗ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ (рддрд╕реЗ, рдЖрдореНрд╣реА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ рд▓рд╛рдпрдмреНрд░рд░реА shell_lib, рдЬреЗ рдмреЕрд╢рдордзреНрдпреЗ рд▓реЗрдЦрди рд╣реБрдХ рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рд╕реБрд▓рдн рдХрд░рддреЗ):

  • рдкреНрд░рдердо рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕реНрдЯреЗрдЬрд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ - рддреЗ рдмрдВрдзрдирдХрд╛рд░рдХ рд╕рдВрджрд░реНрдн рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ;
  • рджреБрд╕рд▒реНрдпрд╛рдордзреНрдпреЗ рд╣реБрдХрдЪреЗ рдореБрдЦреНрдп рддрд░реНрдХ рдЖрд╣реЗ.

#!/bin/bash

source /shell_lib.sh

function __config__() {
  cat << EOF
    configVersion: v1
    # BINDING CONFIGURATION
EOF
}

function __main__() {
  # THE LOGIC
}

hook::run "$@"

рдкреБрдвреАрд▓ рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХреЛрдгрддреНрдпрд╛ рд╡рд╕реНрддреВрдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рд╣реЗ рдард░рд╡рд┐рдгреЗ. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЖрдореНрд╣рд╛рд▓рд╛ рдЯреНрд░реЕрдХ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:

  • рдмрджрд▓рд╛рдВрд╕рд╛рдареА рд╕реНрддреНрд░реЛрдд рдЧреБрдкреНрдд;
  • рдХреНрд▓рд╕реНрдЯрд░рдордзреАрд▓ рд╕рд░реНрд╡ рдиреЗрдорд╕реНрдкреЗрд╕реЗрд╕, рдЬреЗрдгреЗрдХрд░реБрди рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд│реЗрд▓ рдХреА рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╢реА рдХреЛрдгрддреЗ рд▓реЗрдмрд▓ рдЬреЛрдбрд▓реЗрд▓реЗ рдЖрд╣реЗ;
  • рд▓рдХреНрд╖реНрдп рд░рд╣рд╕реНрдпреЗ рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреА рддреЗ рд╕рд░реНрд╡ рд╕реНрддреНрд░реЛрдд рдЧреБрдкреНрддрддреЗрд╢реА рд╕рдордХреНрд░рдорд┐рдд рдЖрд╣реЗрдд.

рдЧреБрдкреНрдд рд╕реНрддреНрд░реЛрддрд╛рдЪреА рд╕рджрд╕реНрдпрддрд╛ рдШреНрдпрд╛

рддреНрдпрд╛рд╕рд╛рдареА рдмрдВрдзрдирдХрд╛рд░рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ. рдЖрдореНрд╣реА рд╕реВрдЪрд┐рдд рдХрд░рддреЛ рдХреА рдЖрдореНрд╣рд╛рд▓рд╛ рдирд╛рд╡рд╛рд╕рд╣ рдЧреБрдкреНрддрддреЗрдордзреНрдпреЗ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЖрд╣реЗ mysecret рдиреЗрдорд╕реНрдкреЗрд╕ рдордзреНрдпреЗ default:

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

function __config__() {
  cat << EOF
    configVersion: v1
    kubernetes:
    - name: src_secret
      apiVersion: v1
      kind: Secret
      nameSelector:
        matchNames:
        - mysecret
      namespace:
        nameSelector:
          matchNames: ["default"]
      group: main
EOF

рдкрд░рд┐рдгрд╛рдореА, рдЬреЗрд╡реНрд╣рд╛ рд╕реНрддреНрд░реЛрдд рдЧреБрдкреНрдд рдмрджрд▓рддреЛ рддреЗрд╡реНрд╣рд╛ рд╣реБрдХ рдЯреНрд░рд┐рдЧрд░ рдХреЗрд▓рд╛ рдЬрд╛рдИрд▓ (src_secret) рдЖрдгрд┐ рдЦрд╛рд▓реАрд▓ рдмрдВрдзрдирдХрд╛рд░рдХ рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░рд╛:

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рдЬрд╕реЗ рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛, рддреНрдпрд╛рдд рдирд╛рд╡ рдЖрдгрд┐ рд╕рдВрдкреВрд░реНрдг рдСрдмреНрдЬреЗрдХреНрдЯ рдЖрд╣реЗ.

рдиреЗрдорд╕реНрдкреЗрд╕реЗрд╕рдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдареЗрд╡рдгреЗ

рдЖрддрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдиреЗрдорд╕реНрдкреЗрд╕реЗрд╕рдЪреА рд╕рджрд╕реНрдпрддрд╛ рдШреНрдпрд╛рд╡реА рд▓рд╛рдЧреЗрд▓. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЦрд╛рд▓реАрд▓ рдмрдВрдзрдирдХрд╛рд░рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЛ:

- name: namespaces
  group: main
  apiVersion: v1
  kind: Namespace
  jqFilter: |
    {
      namespace: .metadata.name,
      hasLabel: (
       .metadata.labels // {} |  
         contains({"secret": "yes"})
      )
    }
  group: main
  keepFullObjectsInMemory: false

рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рдирд╛рд╡рд╛рд╕рд╣ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдПрдХ рдирд╡реАрди рдлреАрд▓реНрдб рджрд┐рд╕рд▓реЗ рдЖрд╣реЗ jqFilter. рддреНрдпрд╛рдЪреНрдпрд╛ рдирд╛рд╡рд╛рдкреНрд░рдорд╛рдгреЗ, jqFilter рд╕рд░реНрд╡ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдорд╛рд╣рд┐рддреА рдлрд┐рд▓реНрдЯрд░ рдХрд░рддреЗ рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдлреАрд▓реНрдбрд╕рд╣ рдПрдХ рдирд╡реАрди JSON рдСрдмреНрдЬреЗрдХреНрдЯ рддрдпрд╛рд░ рдХрд░рддреЗ. рд╕рдорд╛рди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╣ рд╣реБрдХ рдЦрд╛рд▓реАрд▓ рдмрдВрдзрдирдХрд╛рд░рдХ рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрд▓:

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рддреНрдпрд╛рдд рдЕреЕрд░реЗ рдЖрд╣реЗ filterResults рдХреНрд▓рд╕реНрдЯрд░рдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдиреЗрдорд╕реНрдкреЗрд╕рд╕рд╛рдареА. рдмреБрд▓рд┐рдпрди рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓ hasLabel рджрд┐рд▓реЗрд▓реНрдпрд╛ рдиреЗрдорд╕реНрдкреЗрд╕рд▓рд╛ рд▓реЗрдмрд▓ рдЬреЛрдбрд▓реЗрд▓реЗ рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реЗ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ. рдирд┐рд╡рдбрдХрд░реНрддрд╛ keepFullObjectsInMemory: false рд╕рдВрдкреВрд░реНрдг рд╡рд╕реНрддреВ рдореЗрдорд░реАрдордзреНрдпреЗ рдареЗрд╡рдгреНрдпрд╛рдЪреА рдЧрд░рдЬ рдирд╛рд╣реА рдЕрд╕реЗ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ.

рд▓рдХреНрд╖реНрдп рд░рд╣рд╕реНрдпреЗ рдЯреНрд░реЕрдХрд┐рдВрдЧ

рдЖрдореНрд╣реА рд╕рд░реНрд╡ рд╕рд┐рдХреНрд░реЗрдЯреНрд╕рдЪреА рд╕рджрд╕реНрдпрддрд╛ рдШреЗрддреЛ рдЬреНрдпрд╛рдд рднрд╛рд╖реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗ рдЖрд╣реЗ managed-secret: "yes" (рд╣реЗ рдЖрдордЪреЗ рд▓рдХреНрд╖реНрдп рдЖрд╣реЗрдд dst_secrets):

- name: dst_secrets
  apiVersion: v1
  kind: Secret
  labelSelector:
    matchLabels:
      managed-secret: "yes"
  jqFilter: |
    {
      "namespace":
        .metadata.namespace,
      "resourceVersion":
        .metadata.annotations.resourceVersion
    }
  group: main
  keepFullObjectsInMemory: false

рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд jqFilter рдиреЗрдорд╕реНрдкреЗрд╕ рдЖрдгрд┐ рдкреЕрд░рд╛рдореАрдЯрд░ рд╡рдЧрд│рддрд╛ рд╕рд░реНрд╡ рдорд╛рд╣рд┐рддреА рдлрд┐рд▓реНрдЯрд░ рдХрд░рддреЗ resourceVersion. рдЧреБрдкрд┐рдд рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рд╢реЗрд╡рдЯрдЪреЗ рдкреЕрд░рд╛рдореАрдЯрд░ рднрд╛рд╖реНрдпрд╛рдХрдбреЗ рдкрд╛рдард╡рд▓реЗ рдЧреЗрд▓реЗ рд╣реЛрддреЗ: рддреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд░рд╣рд╕реНрдпрд╛рдВрдЪреНрдпрд╛ рдЖрд╡реГрддреНрддреНрдпрд╛рдВрдЪреА рддреБрд▓рдирд╛ рдХрд░рдгреНрдпрд╛рд╕ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдЕрджреНрдпрдпрд╛рд╡рдд рдареЗрд╡рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ.

рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗрд▓рд╛ рд╣реБрдХ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реНрдпрд╛рд╡рд░, рд╡рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реЗ рддреАрди рдмрдВрдзрдирдХрд╛рд░рдХ рд╕рдВрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрд▓. рддреНрдпрд╛рдВрдЪрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░рдЪрд╛ рд╕реНрдиреЕрдкрд╢реЙрдЯ рдореНрд╣рдгреВрди рд╡рд┐рдЪрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ (рд╕реНрдиреЕрдкрд╢реЙрдЯ) рдХреНрд▓рд╕реНрдЯрд░.

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рдпрд╛ рд╕рд░реНрд╡ рдорд╛рд╣рд┐рддреАрдЪреНрдпрд╛ рдЖрдзрд╛рд░реЗ, рдПрдХ рдореВрд▓рднреВрдд рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рд╣реЗ рд╕рд░реНрд╡ рдиреЗрдорд╕реНрдкреЗрд╕реЗрд╕рд╡рд░ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рддреЗ рдЖрдгрд┐:

  • рддрд░ hasLabel рд╡рд╕реНрддреВ true рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдиреЗрдорд╕реНрдкреЗрд╕рд╕рд╛рдареА:
    • рдЬрд╛рдЧрддрд┐рдХ рд░рд╣рд╕реНрдпрд╛рдЪреА рд╕реНрдерд╛рдирд┐рдХрд╛рд╢реА рддреБрд▓рдирд╛ рдХрд░рддреЗ:
      • рдЬрд░ рддреЗ рд╕рдорд╛рди рдЕрд╕рддреАрд▓ рддрд░ рддреЗ рдХрд╛рд╣реАрд╣реА рдХрд░рдд рдирд╛рд╣реА;
      • рдЬрд░ рддреЗ рд╡реЗрдЧрд│реЗ рдЕрд╕рддреАрд▓ рддрд░ - рдЕрдВрдорд▓рд╛рдд рдЖрдгрддреЗ kubectl replace рдХрд┐рдВрд╡рд╛ create;
  • рддрд░ hasLabel рд╡рд╕реНрддреВ false рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рдиреЗрдорд╕реНрдкреЗрд╕рд╕рд╛рдареА:
    • рдЧреБрдкреНрдд рджрд┐рд▓реЗрд▓реНрдпрд╛ рдиреЗрдорд╕реНрдкреЗрд╕рдордзреНрдпреЗ рдирд╛рд╣реА рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рд╛:
      • рд╕реНрдерд╛рдирд┐рдХ рд░рд╣рд╕реНрдп рдЙрдкрд╕реНрдерд┐рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рддреЗ рд╡рд╛рдкрд░реВрди рд╣рдЯрд╡рд╛ kubectl delete;
      • рдЬрд░ рд╕реНрдерд╛рдирд┐рдХ рдЧреБрдкрд┐рдд рд╕рд╛рдкрдбрд▓реЗ рдирд╛рд╣реА рддрд░ рддреЗ рдХрд╛рд╣реАрд╣реА рдХрд░рдд рдирд╛рд╣реА.

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рдмреЕрд╢рдордзреНрдпреЗ рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдЖрдкрдг рдЖрдордЪреНрдпрд╛ рдордзреНрдпреЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВ рд╢рдХрддрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╣ рднрд╛рдВрдбрд╛рд░.

рдЕрд╢рд╛рдкреНрд░рдХрд╛рд░реЗ рдЖрдореНрд╣реА YAML рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдЪреНрдпрд╛ 35 рдУрд│реА рдЖрдгрд┐ рддреНрдпрд╛рдЪ рдкреНрд░рдорд╛рдгрд╛рдд рдмреЕрд╢ рдХреЛрдб рд╡рд╛рдкрд░реВрди рдПрдХ рд╕рд╛рдзрд╛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХрдВрдЯреНрд░реЛрд▓рд░ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрд▓реЛ! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рдЪреЗ рдХрд╛рдо рддреНрдпрд╛рдВрдирд╛ рдПрдХрддреНрд░ рдЬреЛрдбрдгреЗ рдЖрд╣реЗ.

рддрдерд╛рдкрд┐, рдЧреБрдкрд┐рддреЗ рдХреЙрдкреА рдХрд░рдгреЗ рд╣реЗ рдпреБрдЯрд┐рд▓рд┐рдЯреАрдЪреНрдпрд╛ рдЕрд░реНрдЬрд╛рдЪреЗ рдПрдХрдореЗрд╡ рдХреНрд╖реЗрддреНрд░ рдирд╛рд╣реА. рддреЛ рдХрд╛рдп рд╕рдХреНрд╖рдо рдЖрд╣реЗ рд╣реЗ рджрд░реНрд╢рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдпреЗрдереЗ рдЖрдгрдЦреА рдХрд╛рд╣реА рдЙрджрд╛рд╣рд░рдгреЗ рдЖрд╣реЗрдд.

рдЙрджрд╛рд╣рд░рдг 1: ConfigMap рдордзреНрдпреЗ рдмрджрд▓ рдХрд░рдгреЗ

рддреАрди рд╢реЗрдВрдЧрд╛ рдЕрд╕рд▓реЗрд▓реА рдЙрдкрдпреЛрдЬрди рдкрд╛рд╣реВ. рдкреЙрдбреНрд╕ рдХрд╛рд╣реА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА ConfigMap рд╡рд╛рдкрд░рддрд╛рдд. рдЬреЗрд╡реНрд╣рд╛ рдкреЙрдбреНрд╕ рд▓рд╛рдБрдЪ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рддреЗрд╡реНрд╣рд╛ рдХреЙрдиреНрдлрд┐рдЧрдореЕрдк рдПрдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддреАрдд рд╣реЛрддрд╛ (рдпрд╛рд▓рд╛ v.1 рдореНрд╣рдгреВ рдпрд╛). рддреНрдпрд╛рдиреБрд╕рд╛рд░, рд╕рд░реНрд╡ рдкреЙрдбреНрд╕ рдХреЙрдиреНрдлрд┐рдЧрдореЕрдкрдЪреА рд╣реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╡реГрддреНрддреА рд╡рд╛рдкрд░рддрд╛рдд.

рдЖрддрд╛ ConfigMap рдмрджрд▓рд▓рд╛ рдЖрд╣реЗ рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВ (v.2). рддрдерд╛рдкрд┐, рдкреЙрдбреНрд╕ ConfigMap (v.1) рдЪреА рдорд╛рдЧреАрд▓ рдЖрд╡реГрддреНрддреА рд╡рд╛рдкрд░рддреАрд▓:

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рдореА рддреНрдпрд╛рдВрдирд╛ рдирд╡реАрди рдХреЙрдиреНрдлрд┐рдЧрдореЕрдк (v.2) рд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╕реЗ рдорд┐рд│рд╡реВ рд╢рдХрддреЛ? рдЙрддреНрддрд░ рд╕реЛрдкреЗ рдЖрд╣реЗ: рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд╛рдкрд░рд╛. рд╡рд┐рднрд╛рдЧрд╛рдордзреНрдпреЗ рдЪреЗрдХрд╕рдо рднрд╛рд╖реНрдп рдЬреЛрдбреВрдпрд╛ template рдЙрдкрдпреЛрдЬрди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди:

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рдкрд░рд┐рдгрд╛рдореА, рд╣реЗ рдЪреЗрдХрд╕рдо рд╕рд░реНрд╡ рдкреЙрдбрдордзреНрдпреЗ рдиреЛрдВрджрдгреАрдХреГрдд рд╣реЛрдИрд▓ рдЖрдгрд┐ рддреЗ рддреИрдирд╛рддреА рдкреНрд░рдорд╛рдгреЗрдЪ рдЕрд╕реЗрд▓. рдЖрддрд╛ рдХреЙрдиреНрдлрд┐рдЧрдореЕрдк рдмрджрд▓рд▓реНрдпрд╛рд╡рд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рднрд╛рд╖реНрдп рдЕрдкрдбреЗрдЯ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. рдЖрдгрд┐ рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдЙрдкрдпреБрдХреНрдд рдЖрд╣реЗ. рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрдХреНрдд рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рдПрдХ рд╣реБрдХ рдЬреЛ рдХреЙрдиреНрдлрд┐рдЧрдореЕрдкрдЪреА рд╕рджрд╕реНрдпрддрд╛ рдШреЗрдИрд▓ рдЖрдгрд┐ рдЪреЗрдХрд╕рдо рдЕрджреНрдпрддрдирд┐рдд рдХрд░реЗрд▓.

рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдиреЗ рдХреЙрдиреНрдлрд┐рдЧрдореЕрдкрдордзреНрдпреЗ рдмрджрд▓ рдХреЗрд▓реНрдпрд╛рд╕, рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рддреЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдИрд▓ рдЖрдгрд┐ рдЪреЗрдХрд╕рдордЪреА рдкреБрдирд░реНрдЧрдгрдирд╛ рдХрд░реЗрд▓. рдЬреНрдпрд╛рдирдВрддрд░ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреА рдЬрд╛рджреВ рдХрд╛рд░реНрдпрд╛рдд рдпреЗрдИрд▓: рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░ рдкреЙрдб рдорд╛рд░реЗрд▓, рдПрдХ рдирд╡реАрди рддрдпрд╛рд░ рдХрд░реЗрд▓, рддреЗ рд╣реЛрдгреНрдпрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рд╛ Ready, рдЖрдгрд┐ рдкреБрдвреАрд▓ рдПрдХрд╛рдХрдбреЗ рдЬрд╛рддреЗ. рдкрд░рд┐рдгрд╛рдореА, рдбрд┐рдкреНрд▓реЙрдпрдореЗрдВрдЯ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЭ рд╣реЛрдИрд▓ рдЖрдгрд┐ ConfigMap рдЪреНрдпрд╛ рдирд╡реАрди рдЖрд╡реГрддреНрддреАрд╡рд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрд▓.

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рдЙрджрд╛рд╣рд░рдг 2: рд╕рд╛рдиреБрдХреВрд▓ рд╕рдВрд╕рд╛рдзрди рд╡реНрдпрд╛рдЦреНрдпреЗрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреЗ

рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣рд┐рддреА рдЖрд╣реЗ рдХреА, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд╛рдиреБрдХреВрд▓ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рд╡рд╕реНрддреВ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрдкрдг рдкреНрд░рдХрд╛рд░ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ MysqlDatabase. рд╕рдордЬрд╛ рдпрд╛ рдкреНрд░рдХрд╛рд░рд╛рдд рджреЛрди рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕ рдЖрд╣реЗрдд: name ╨╕ namespace.

apiVersion: example.com/v1alpha1
kind: MysqlDatabase
metadata:
  name: foo
  namespace: bar

рдЖрдордЪреНрдпрд╛рдХрдбреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдиреЗрдорд╕реНрдкреЗрд╕рд╕рд╣ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрдореНрд╣реА MySQL рдбреЗрдЯрд╛рдмреЗрд╕ рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддреЛ. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рдЪрд╛ рд╡рд╛рдкрд░ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ MysqlDatabase, рддреНрдпрд╛рдВрдирд╛ MySQL рд╕рд░реНрд╡реНрд╣рд░рд╢реА рдЬреЛрдбрдгреЗ рдЖрдгрд┐ рдХреНрд▓рд╕реНрдЯрд░рдЪреНрдпрд╛ рдЗрдЪреНрдЫрд┐рдд рдЖрдгрд┐ рдирд┐рд░реАрдХреНрд╖рдг рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрдерд┐рддреАрдВрдЪреЗ рд╕рдордХреНрд░рдордг рдХрд░рдгреЗ.

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рдЙрджрд╛рд╣рд░рдг 3: рдХреНрд▓рд╕реНрдЯрд░ рдиреЗрдЯрд╡рд░реНрдХ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ

рддреБрдореНрд╣рд╛рд▓рд╛ рдорд╛рд╣рд┐рддреА рдЖрд╣реЗ рдХреА, рдкрд┐рдВрдЧ рд╡рд╛рдкрд░рдгреЗ рд╣рд╛ рдиреЗрдЯрд╡рд░реНрдХрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдорд╛рд░реНрдЧ рдЖрд╣реЗ. рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдд рдЖрдкрдг рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рд╡рд╛рдкрд░реВрди рдЕрд╕реЗ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рдХрд╕реЗ рдЕрдВрдорд▓рд╛рдд рдЖрдгрд╛рдпрдЪреЗ рддреЗ рджрд╛рдЦрд╡реВ.

рд╕рд░реНрд╡ рдкреНрд░рдердо, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдиреЛрдбреНрд╕рдЪреА рд╕рджрд╕реНрдпрддрд╛ рдШреНрдпрд╛рд╡реА рд▓рд╛рдЧреЗрд▓. рд╢реЗрд▓ рдСрдкрд░реЗрдЯрд░рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдбрдЪреЗ рдирд╛рд╡ рдЖрдгрд┐ IP рдкрддреНрддрд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдорджрддреАрдиреЗ, рддреЛ рдпрд╛ рдиреЛрдбреНрд╕рд▓рд╛ рдкрд┐рдВрдЧ рдХрд░реЗрд▓.

configVersion: v1
kubernetes:
- name: nodes
  apiVersion: v1
  kind: Node
  jqFilter: |
    {
      name: .metadata.name,
      ip: (
       .status.addresses[] |  
        select(.type == "InternalIP") |
        .address
      )
    }
  group: main
  keepFullObjectsInMemory: false
  executeHookOnEvent: []
schedule:
- name: every_minute
  group: main
  crontab: "* * * * *"

рдкреЕрд░рд╛рдореАрдЯрд░ executeHookOnEvent: [] рдХреЛрдгрддреНрдпрд╛рд╣реА рдЗрд╡реНрд╣реЗрдВрдЯрдЪреНрдпрд╛ рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдд рд╣реБрдХ рдЪрд╛рд▓реВ рд╣реЛрдгреНрдпрд╛рдкрд╛рд╕реВрди рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рддреЗ (рдореНрд╣рдгрдЬреЗ, рдиреЛрдбреНрд╕ рдмрджрд▓рдгреЗ, рдЬреЛрдбрдгреЗ, рд╣рдЯрд╡рдгреЗ рдпрд╛рд▓рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рдореНрд╣рдгреВрди). рддрдерд╛рдкрд┐, рддреЛ рдзрд╛рд╡реЗрд▓ (рдЖрдгрд┐ рдиреЛрдбреНрд╕рдЪреА рдпрд╛рджреА рдЕрдкрдбреЗрдЯ рдХрд░рд╛) рдЕрдиреБрд╕реВрдЪрд┐рдд - рдкреНрд░рддреНрдпреЗрдХ рдорд┐рдирд┐рдЯрд╛рд▓рд╛, рдлреАрд▓реНрдбрджреНрд╡рд╛рд░реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреЗрд▓реНрдпрд╛рдиреБрд╕рд╛рд░ schedule.

рдЖрддрд╛ рдкреНрд░рд╢реНрди рдЕрд╕рд╛ рдкрдбрддреЛ рдХреА рдкреЕрдХреЗрдЯ рд▓реЙрд╕ рд╕рд╛рд░рдЦреНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдВрдмрджреНрджрд▓ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдиреЗрдордХреЗ рдХрд╕реЗ рдХрд│реЗрд▓? рдЪрд▓рд╛ рдХреЛрдб рдкрд╛рд╣реВ:

function __main__() {
  for i in $(seq 0 "$(context::jq -r '(.snapshots.nodes | length) - 1')"); do
    node_name="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.name')"
    node_ip="$(context::jq -r '.snapshots.nodes['"$i"'].filterResult.ip')"
    packets_lost=0
    if ! ping -c 1 "$node_ip" -t 1 ; then
      packets_lost=1
    fi
    cat >> "$METRICS_PATH" <<END
      {
        "name": "node_packets_lost",
        "add": $packets_lost,
        "labels": {
          "node": "$node_name"
        }
      }
END
  done
}

рдЖрдореНрд╣реА рдиреЛрдбреНрд╕рдЪреНрдпрд╛ рд╕реВрдЪреАрджреНрд╡рд╛рд░реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рддреЛ, рддреНрдпрд╛рдВрдЪреА рдирд╛рд╡реЗ рдЖрдгрд┐ IP рдкрддреНрддреЗ рдорд┐рд│рд╡рддреЛ, рддреНрдпрд╛рдВрдирд╛ рдкрд┐рдВрдЧ рдХрд░рддреЛ рдЖрдгрд┐ рдкрд░рд┐рдгрд╛рдо рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕рд▓рд╛ рдкрд╛рдард╡рддреЛ. рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдкреНрд░реЛрдорд┐рдерд┐рдпрд╕рд▓рд╛ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдирд┐рд░реНрдпрд╛рдд рдХрд░реВ рд╢рдХрддреЛ, рддреНрдпрд╛рдВрдирд╛ рдкрд░реНрдпрд╛рд╡рд░рдг рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓рдордзреНрдпреЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдорд╛рд░реНрдЧрд╛рдиреБрд╕рд╛рд░ рд╕реНрдерд┐рдд рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕реЗрд╡реНрд╣ рдХрд░рдгреЗ $METRICS_PATH.

рдпрд╛рдкреНрд░рдорд╛рдгреЗ рддреБрдореНрд╣реА рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рд╕рд╛рдзреНрдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧрд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░ рдмрдирд╡реВ рд╢рдХрддрд╛.

рд░рд╛рдВрдЧреЗрдд рдЙрднреЗ рдЕрд╕рд▓реЗрд▓реА рдпрдВрддреНрд░рдгрд╛

рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рдордзреНрдпреЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рджреБрд╕рд░реНтАНрдпрд╛ рдорд╣рддреНрддреНрд╡рд╛рдЪреНрдпрд╛ рдпрдВрддреНрд░рдгреЗрдЪреЗ рд╡рд░реНрдгрди рдХреЗрд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп рд╣рд╛ рд▓реЗрдЦ рдЕрдкреВрд░реНрдг рдЕрд╕реЗрд▓. рдХрд▓реНрдкрдирд╛ рдХрд░рд╛ рдХреА рддреЗ рдХреНрд▓рд╕реНрдЯрд░рдордзреАрд▓ рдПрдЦрд╛рджреНрдпрд╛ рдЗрд╡реНрд╣реЗрдВрдЯрд▓рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рдореНрд╣рдгреВрди рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреЗ рд╣реБрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ.

  • рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдХрд╛рд╣реАрддрд░реА рдШрдбрд▓реНрдпрд╛рд╕ рдХрд╛рдп рд╣реЛрдИрд▓? рдЖрдгрдЦреА рдПрдХ рдШрдЯрдирд╛?
  • рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рд╣реБрдХрдЪрд╛ рджреБрд╕рд░рд╛ рдкреНрд░рд╕рдВрдЧ рдЪрд╛рд▓рд╡реЗрд▓ рдХрд╛?
  • рдХреНрд▓рд╕реНрдЯрд░рдордзреНрдпреЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдкрд╛рдЪ рдШрдЯрдирд╛ рдШрдбрд▓реНрдпрд╛ рддрд░?
  • рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рддреНрдпрд╛рдВрдирд╛ рд╕рдорд╛рдВрддрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрд▓ рдХрд╛?
  • рдореЗрдорд░реА рдЖрдгрд┐ CPU рд╕рд╛рд░рдЦреНрдпрд╛ рд╡рд╛рдкрд░рд▓реЗрд▓реНрдпрд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреЗ рдХрд╛рдп?

рд╕реБрджреИрд╡рд╛рдиреЗ, рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рдордзреНрдпреЗ рдЕрдВрдЧрднреВрдд рд░рд╛рдВрдЧреЗрдЪреА рдпрдВрддреНрд░рдгрд╛ рдЖрд╣реЗ. рд╕рд░реНрд╡ рдЗрд╡реНрд╣реЗрдВрдЯ рд░рд╛рдВрдЧреЗрдд рдЖрд╣реЗрдд рдЖрдгрд┐ рдХреНрд░рдорд╛рдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реА рдЖрд╣реЗрдд.

рд╣реЗ рдЙрджрд╛рд╣рд░рдгрд╛рдВрд╕рд╣ рд╕реНрдкрд╖реНрдЯ рдХрд░реВ. рд╕рдордЬрд╛ рдЖрдордЪреНрдпрд╛рдХрдбреЗ рджреЛрди рд╣реБрдХ рдЖрд╣реЗрдд. рдкрд╣рд┐рд▓реА рдШрдЯрдирд╛ рдкрд╣рд┐рд▓реНрдпрд╛ рд╣реБрдХрдХрдбреЗ рдЬрд╛рддреЗ. рддреНрдпрд╛рдЪреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рд╡рд░, рд░рд╛рдВрдЧ рдкреБрдвреЗ рд╕рд░рдХрддреЗ. рдкреБрдвреАрд▓ рддреАрди рдХрд╛рд░реНрдпрдХреНрд░рдо рджреБрд╕рд▒реНрдпрд╛ рд╣реБрдХрд╡рд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд - рддреЗ рд░рд╛рдВрдЧреЗрддреВрди рдХрд╛рдврд▓реЗ рдЬрд╛рддрд╛рдд рдЖрдгрд┐ рддреНрдпрд╛рдд "рдмрдВрдбрд▓" рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛рдд. рддреЗ рдЖрд╣реЗ рд╣реБрдХ рдЗрд╡реНрд╣реЗрдВрдЯреНрд╕рдЪреА рд╢реНрд░реЗрдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЛ тАФ рдХрд┐рдВрд╡рд╛, рдЕрдзрд┐рдХ рддрдВрддреЛрддрдВрдд, рдмрдВрдзрдирдХрд╛рд░рдХ рд╕рдВрджрд░реНрднрд╛рдВрдЪреА рдЕреЕрд░реЗ.

рддрд╕реЗрдЪ рдпрд╛ рдШрдЯрдирд╛ рдПрдХрд╛ рдореЛрдареНрдпрд╛ рдордзреНрдпреЗ рдПрдХрддреНрд░ рдХреЗрд▓реНрдпрд╛ рдЬрд╛рдК рд╢рдХрддрд╛рдд. рдпрд╛рд╕рд╛рдареА рдкреЕрд░рд╛рдореАрдЯрд░ рдЬрдмрд╛рдмрджрд╛рд░ рдЖрд╣реЗ group рдмрдВрдзрдирдХрд╛рд░рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ.

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рддреБрдореНрд╣реА рдХрд┐рддреАрд╣реА рд░рд╛рдВрдЧрд╛/рд╣реБрдХ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреЗ рд╡рд┐рд╡рд┐рдз рд╕рдВрдпреЛрдЬрди рддрдпрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдПрдХ рд░рд╛рдВрдЧ рджреЛрди рд╣реБрдХрд╛рдВрд╕рд╣ рдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдЙрд▓рдЯ рдХрд╛рд░реНрдп рдХрд░реВ рд╢рдХрддреЗ.

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рддреБрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рддреНрдпрд╛рдиреБрд╕рд╛рд░ рдлреАрд▓реНрдб рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ queue рдмрдВрдзрдирдХрд╛рд░рдХ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ. рд░рд╛рдВрдЧреЗрдЪреЗ рдирд╛рд╡ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рди рдХреЗрд▓реНрдпрд╛рд╕, рд╣реБрдХ рдбреАрдлреЙрд▓реНрдЯ рд░рд╛рдВрдЧреЗрд╡рд░ рдЪрд╛рд▓рддреЛ (default). рд╣реБрдХрд╕рд╣ рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рд╣реА рд░рд╛рдВрдЧреЗрдЪреА рдпрдВрддреНрд░рдгрд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рд░реНрд╡ рд╕рдВрд╕рд╛рдзрди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕рдорд╕реНрдпрд╛ рдкреВрд░реНрдгрдкрдгреЗ рд╕реЛрдбрд╡рд┐рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ.

рдирд┐рд╖реНрдХрд░реНрд╖

рдЖрдореНрд╣реА рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдореНрд╣рдгрдЬреЗ рдХрд╛рдп рд╣реЗ рд╕рдордЬрд╛рд╡реВрди рд╕рд╛рдВрдЧрд┐рддрд▓реЗ, рддреЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдСрдкрд░реЗрдЯрд░реНрд╕ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреНрд╡рд░реАрдд рдЖрдгрд┐ рд╕рд╣рдЬрддреЗрдиреЗ рдХрд╕реЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рддреЗ рджрд╛рдЦрд╡рд▓реЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рдЪреА рдЕрдиреЗрдХ рдЙрджрд╛рд╣рд░рдгреЗ рджрд┐рд▓реА.

рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рдмрджреНрджрд▓ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдорд╛рд╣рд┐рддреА, рддрд╕реЗрдЪ рддреЗ рдХрд╕реЗ рд╡рд╛рдкрд░рд╛рд╡реЗ рдпрд╛рдмрджреНрджрд▓ рдПрдХ рджреНрд░реБрдд рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓, рд╕рдВрдмрдВрдзрд┐рдд рдордзреНрдпреЗ рдЙрдкрд▓рдмреНрдз рдЖрд╣реЗ GitHub рд╡рд░ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ. рдкреНрд░рд╢реНрдирд╛рдВрд╕рд╣ рдЖрдордЪреНрдпрд╛рд╢реА рд╕рдВрдкрд░реНрдХ рд╕рд╛рдзрдгреНрдпрд╛рд╕ рдЕрдЬрд┐рдмрд╛рдд рд╕рдВрдХреЛрдЪ рдХрд░реВ рдирдХрд╛: рдЖрдкрдг рддреНрдпрд╛рдВрдЪреНрдпрд╛рд╢реА рд╡рд┐рд╢реЗрд╖ рдЪрд░реНрдЪрд╛ рдХрд░реВ рд╢рдХрддрд╛ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЧреНрд░реБрдк (рд░рд╢рд┐рдпрди рднрд╛рд╖реЗрдд) рдХрд┐рдВрд╡рд╛ рдордзреНрдпреЗ рд╣рд╛ рдордВрдЪ (рдЗрдВрдЧреНрд░рдЬреА рдордзреНрдпреЗ).

рдЖрдгрд┐ рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддреЗ рдЖрд╡рдбрд▓реЗ рдЕрд╕реЗрд▓ рддрд░, рдЖрдореНрд╣рд╛рд▓рд╛ GitHub рд╡рд░ рдирд╡реАрди рдЕрдВрдХ/PR/рддрд╛рд░реЗ рдкрд╛рд╣рдгреНрдпрд╛рдд рдиреЗрд╣рдореАрдЪ рдЖрдирдВрдж рд╣реЛрддреЛ, рдЬрд┐рдереЗ рддреБрдореНрд╣реА рдЗрддрд░рд╛рдВрдирд╛ рд╢реЛрдзреВ рд╢рдХрддрд╛. рдордиреЛрд░рдВрдЬрдХ рдкреНрд░рдХрд▓реНрдк. рддреНрдпрд╛рдкреИрдХреА рддреЗ рд╣рд╛рдпрд▓рд╛рдЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ рдЕреЕрдбрдСрди-рдСрдкрд░реЗрдЯрд░, рдЬреЛ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рдЪрд╛ рдореЛрдард╛ рднрд╛рдК рдЖрд╣реЗ. рд╣реА рдпреБрдЯрд┐рд▓рд┐рдЯреА рдЕреЕрдб-рдСрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯ рд╡рд╛рдкрд░рддреЗ, рдЕрджреНрдпрддрдиреЗ рд╡рд┐рддрд░реАрдд рдХрд░реВ рд╢рдХрддреЗ рдЖрдгрд┐ рд╡рд┐рд╡рд┐рдз рдЪрд╛рд░реНрдЯ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕/рд╡реНрд╣реЕрд▓реНрдпреВрдЬрдЪреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реВ рд╢рдХрддреЗ, рдЪрд╛рд░реНрдЯреНрд╕рдЪреНрдпрд╛ рдЗрдиреНрд╕реНрдЯреЙрд▓реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпреЗрд╡рд░ рдирд┐рдпрдВрддреНрд░рдг рдареЗрд╡рддреЗ рдЖрдгрд┐ рдХреНрд▓рд╕реНрдЯрд░рдордзреАрд▓ рдЗрд╡реНрд╣реЗрдВрдЯрдЪреНрдпрд╛ рдкреНрд░рддрд┐рд╕рд╛рджрд╛рдд рддреЗ рд╕реБрдзрд╛рд░рд┐рдд рджреЗрдЦреАрд▓ рдХрд░реВ рд╢рдХрддреЗ.

рдЬрд╛рдК? рдмрд╛рд╢! рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░рд▓рд╛ рднреЗрдЯрд╛ (рдХреБрдмреЗрдХреЙрди EU'2020 рдХрдбреВрди рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рд╡реНрд╣рд┐рдбрд┐рдУ рдЕрд╣рд╡рд╛рд▓)

рд╡реНрд╣рд┐рдбрд┐рдУ рдЖрдгрд┐ рд╕реНрд▓рд╛рдЗрдбреНрд╕

рдХрд╛рдордЧрд┐рд░реАрдордзреАрд▓ рд╡реНрд╣рд┐рдбрд┐рдУ (~реирей рдорд┐рдирд┐рдЯреЗ):


рдЕрд╣рд╡рд╛рд▓рд╛рдЪреЗ рд╕рд╛рджрд░реАрдХрд░рдг:

PS

рдЖрдордЪреНрдпрд╛ рдмреНрд▓реЙрдЧрд╡рд░ рджреЗрдЦреАрд▓ рд╡рд╛рдЪрд╛:

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛