рдпрд╕ рд╡рд░реНрд╖, рдпреБрд░реЛрдкрдХреЛ рдкреНрд░рдореБрдЦ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд╕рдореНрдореЗрд▓рди - рдХреБрдмреЗрдХрди + рдХреНрд▓рд╛рдЙрдбрдиреЗрдЯрд┐рднрдХрди рдпреБрд░реЛрдк реирежреиреж - рднрд░реНрдЪреБрдЕрд▓ рдерд┐рдпреЛред рдпрджреНрдпрдкрд┐, рдврд╛рдБрдЪрд╛рдорд╛ рдпреЛ рдкрд░рд┐рд╡рд░реНрддрдирд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрд╕рдорд░реНрдкрд┐рдд рд╣рд╛рдореНрд░реЛ рд▓рд╛рдореЛ-рдпреЛрдЬрдирд╛рдмрджреНрдз рднрд╛рд╖рдг, "рдЬрд╛рдиреБрд╣реЛрд╕реН? рдмрд╛рд╢! рд╢реЗрд▓ рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН" рдкреНрд░рджрд╛рди рдЧрд░реНрдирдмрд╛рдЯ рд░реЛрдХреЗрдиред .
рдпрд╕ рд╡рд╛рд░реНрддрд╛рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдпреЛ рд▓реЗрдЦрд▓реЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рд╕рд░рд▓ рдмрдирд╛рдЙрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрджрдЫ рд░ рд╢реЗрд▓ рдЕрдкрд░реЗрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕рдорд╛ рдХрд╕рд░реА рдЖрдлреНрдиреИ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдБрдЫред

рдкрд░рд┐рдЪрдп рджрд┐рдБрджреИ (рдЕрдВрдЧреНрд░реЗрдЬреАрдорд╛ ~реирей рдорд┐рдиреЗрдЯ, рд▓реЗрдЦ рднрдиреНрджрд╛ рдзреЗрд░реИ рдЬрд╛рдирдХрд╛рд░реАрдореВрд▓рдХ) рд░ рдпрд╕рдХреЛ рд╕рд╛рд░рд╛рдВрд╢ рдкрд╛рдардХреЛ рд░реВрдкрдорд╛ред рдЕрдм рдЬрд╛рдФрдВ!
рдлреНрд▓реНрдпрд╛рдиреНрдЯрдорд╛, рд╣рд╛рдореА рдирд┐рд░рдиреНрддрд░ рд╕рдмреИ рдХреБрд░рд╛рд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рди рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрджреИрдЫреМрдВред рдЖрдЬ, рд╣рд╛рдореА рдЕрд░реНрдХреЛ рд░реЛрдорд╛рдЮреНрдЪрдХ рдЕрд╡рдзрд╛рд░рдгрд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫреМрдВред рднреЗрдЯреНрдиреБрд╣реЛрд╕реН: рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрд┐рдн рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдЩ!
рдпрджреНрдпрдкрд┐, рдпреЛ рд╕рдмреИ рдХреБрди рд╕рдиреНрджрд░реНрднрдорд╛ рднрдЗрд░рд╣реЗрдХреЛ рдЫ рднрдиреНрдиреЗрдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реМрдВ: рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ред
рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдПрдкреАрдЖрдИ рд░ рдирд┐рдпрдиреНрддреНрд░рдХрд╣рд░реВ
Kubernetes API рд▓рд╛рдИ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдкреНрд░рдХрд╛рд░рдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рд╣рд░реВ рднрдПрдХреЛ рдлрд╛рдЗрд▓ рд╕рд░реНрднрд░рдХреЛ рд░реВрдкрдорд╛ рд╕реЛрдЪреНрди рд╕рдХрд┐рдиреНрдЫред рдпрд╕ рд╕рд░реНрднрд░рдорд╛ рд░рд╣реЗрдХрд╛ рд╡рд╕реНрддреБрд╣рд░реВ (рд╕реНрд░реЛрддрд╣рд░реВ) YAML рдлрд╛рдЗрд▓рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░рд┐рдиреНрдЫред рдпрд╕рдмрд╛рд╣реЗрдХ, рд╕рд░реНрднрд░рдорд╛ рдПрдЙрдЯрд╛ рдЖрдзрд╛рд░рднреВрдд API рдЫ рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рддреАрдирд╡рдЯрд╛ рдХрд╛рдо рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ:
- рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рд╕реНрд░реЛрддрдХреЛ рдкреНрд░рдХрд╛рд░ рд░ рдирд╛рдо;
- рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрд░реЛрдд (рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╕рд░реНрднрд░рд▓реЗ рдХреЗрд╡рд▓ "рд╕рд╣реА" рд╡рд╕реНрддреБрд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрджрдЫ - рд╕рдмреИ рдЧрд▓рдд рд░реВрдкрдорд╛ рдмрдирд╛рдЗрдПрдХрд╛ рд╡рд╛ рдЕрдиреНрдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрднрд┐рдкреНрд░реЗрд░рд┐рдд рд╡рд╕реНрддреБрд╣рд░реВ рдЦрд╛рд░реЗрдЬ рдЧрд░рд┐рдиреНрдЫ);
- рдЯреНрд░реНрдпрд╛рдХ рд╕реНрд░реЛрддрдХреЛ рд▓рд╛рдЧрд┐ (рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рддреБрд░реБрдиреНрддреИ рдпрд╕рдХреЛ рд╣рд╛рд▓рдХреЛ/рдЕрдкрдбреЗрдЯ рдЧрд░рд┐рдПрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ)ред
рддреНрдпрд╕реЛрднрдП, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд▓реЗ рддреАрди рдЖрдзрд╛рд░рднреВрдд рд╡рд┐рдзрд┐рд╣рд░реВ (рд╣реЛ, рд╡рд╛рд╕реНрддрд╡рдорд╛ рдЕрд░реВ рдкрдирд┐ рдЫрдиреН, рддрд░ рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐ рдЫреЛрдбреНрдиреЗрдЫреМрдВ) рд╕рд╣рд┐рдд рдПрдХ рдкреНрд░рдХрд╛рд░рдХреЛ рдлрд╛рдЗрд▓ рд╕рд░реНрднрд░ (YAML рдкреНрд░рдХрдЯреАрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐) рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рд░реНрдп рдЧрд░реНрджрдЫред

рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ рдХрд┐ рд╕рд░реНрднрд░рд▓реЗ рдЬрд╛рдирдХрд╛рд░реА рдорд╛рддреНрд░ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рд╕рдХреНрдЫред рдпрд╕рд▓рд╛рдИ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдЫ рдирд┐рдпрдиреНрддреНрд░рдХ тАФ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдХреЛ рд╕рдВрд╕рд╛рд░рдорд╛ рджреЛрд╕реНрд░реЛ рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд░ рдЖрдзрд╛рд░рднреВрдд рдЕрд╡рдзрд╛рд░рдгрд╛ред
рджреБрдИ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░рдХрд╛ рдирд┐рдпрдиреНрддреНрд░рдХрд╣рд░реВ рдЫрдиреНред рдкрд╣рд┐рд▓реЛрд▓реЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдмрд╛рдЯ рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдиреНрдЫ, рдиреЗрд╕реНрдЯреЗрдб рддрд░реНрдХ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдЫ, рд░ K8s рдорд╛ рдлрд░реНрдХрд╛рдЙрдБрдЫред рджреЛрд╕реНрд░реЛрд▓реЗ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдмрд╛рдЯ рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдиреНрдЫ рддрд░, рдкрд╣рд┐рд▓реЛ рдкреНрд░рдХрд╛рд░рдХреЛ рд╡рд┐рдкрд░реАрдд, рдмрд╛рд╣реНрдп рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рдЕрд╡рд╕реНрдерд╛ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрджрдЫред
рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдорд╛ рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реМрдВ:
- рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯ рдирд┐рдпрдиреНрддреНрд░рдХ (рд╕рдорд╛рд╡реЗрд╢ рдЧрд░рд┐рдПрдХреЛ)
kube-controller-manager) рд▓реЗ рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫ рд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реЗрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫред - рдпрд╕ рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рдЖрдзрд╛рд░рдорд╛ ReplicaSet рд▓реЗ рджреБрдИ рдкреНрд░рддрд┐рдХреГрддрд┐рд╣рд░реВ (рджреБрдИ рдкреЛрдбрд╣рд░реВ) рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ, рддрд░ рдпреА рдкреЛрдбрд╣рд░реВ рдЕрдЭреИ рддрд╛рд▓рд┐рдХрд╛рдмрджреНрдз рдЧрд░рд┐рдПрдХрд╛ рдЫреИрдирдиреНред
- рдЕрдиреБрд╕реВрдЪрдХрд▓реЗ рдкреЛрдбрд╣рд░реВрдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдЙрдБрдЫ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ YAML рд╣рд░реВрдорд╛ рдиреЛрдб рдЬрд╛рдирдХрд╛рд░реА рдердкреНрдЫред
- рдХреБрдмреЗрд▓реЗрдЯрд╣рд░реВрд▓реЗ рдмрд╛рд╣реНрдп рд╕реНрд░реЛрддрдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЧрд░реНрдЫрдиреН (рдЬрд╕реНрддреИ, рдбрдХрд░)ред
рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рд╕рдореНрдкреВрд░реНрдг рдЕрдиреБрдХреНрд░рдо рдЙрд▓реНрдЯреЛ рджреЛрд╣реЛрд░рд┐рдиреНрдЫ: рдХреБрдмрд▓реЗрдЯрд▓реЗ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрдЫ, рдкреЛрдбрдХреЛ рд╕реНрдерд┐рддрд┐ рдЧрдгрдирд╛ рдЧрд░реНрдЫ, рд░ рдпрд╕рд▓рд╛рдИ рдлрд┐рд░реНрддрд╛ рдкрдард╛рдЙрдБрдЫред рд░реЗрдкреНрд▓рд┐рдХрд╛рд╕реЗрдЯ рдирд┐рдпрдиреНрддреНрд░рдХрд▓реЗ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫ рд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реЗрдЯрдХреЛ рд╕реНрдерд┐рддрд┐ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрдЫред рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯ рдирд┐рдпрдиреНрддреНрд░рдХрд╕рдБрдЧ рдкрдирд┐ рддреНрдпрд╕реНрддреИ рд╣реБрдиреНрдЫ, рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдЕрдиреНрддрддрдГ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░рд┐рдПрдХреЛ (рд╣рд╛рд▓рдХреЛ) рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫред

рд╢реЗрд▓ рдЕрдкрд░реЗрдЯрд░
рдпреЛ рдерд╛рд╣рд╛ рднрдпреЛ рдХрд┐ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд╡рд┐рднрд┐рдиреНрди рдирд┐рдпрдиреНрддреНрд░рдХрд╣рд░реВрдХреЛ рд╕рд╣рдХрд╛рд░реНрдпрдорд╛ рдирд┐рд░реНрдорд┐рдд рдЫ (рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ рдкрдирд┐ рдирд┐рдпрдиреНрддреНрд░рдХрд╣рд░реВ рд╣реБрдиреН)ред рдкреНрд░рд╢реНрди рдЙрдареНрдЫ: рдиреНрдпреВрдирддрдо рдкреНрд░рдпрд╛рд╕рдорд╛ рддрдкрд╛рдИрдВ рдХрд╕рд░реА рдЖрдлреНрдиреИ рдЕрдкрд░реЗрдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ? рд░ рддреНрдпрд╣реАрдБ рд╣рд╛рдореНрд░реЛ рдЕрдкрд░реЗрдЯрд░ рдЖрдЙрдБрдЫред рдпрд╕рд▓реЗ рдкреНрд░рдгрд╛рд▓реА рдкреНрд░рд╢рд╛рд╕рдХрд╣рд░реВрд▓рд╛рдИ рдкрд░рд┐рдЪрд┐рдд рд╡рд┐рдзрд┐рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЖрдлреНрдиреИ рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
рдПрдЙрдЯрд╛ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг: рдЧреЛрдкреНрдп рдХреБрд░рд╛рд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдЙрдиреЗ
рдПрдЙрдЯрд╛ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рд╣реЗрд░реМрдВред
рдорд╛рдиреМрдВ рд╣рд╛рдореАрд╕рдБрдЧ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдЫред рдпрд╕рдорд╛ рдПрдЙрдЯрд╛ рдиреЗрдорд╕реНрдкреЗрд╕ рдЫред default рдХреЗрд╣реА рдЧреЛрдкреНрдп рдХреБрд░рд╛рд╣рд░реВ рд╕рд╣рд┐рдд mysecretрдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдЕрдиреНрдп рдиреЗрдорд╕реНрдкреЗрд╕рд╣рд░реВ рдкрдирд┐ рдЫрдиреНред рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдХреЗрд╣реАрдорд╛ рдПрдЙрдЯрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЗрдмрд▓ рдЬреЛрдбрд┐рдПрдХреЛ рдЫред рд╣рд╛рдореНрд░реЛ рд▓рдХреНрд╖реНрдп рднрдиреЗрдХреЛ рд▓реЗрдмрд▓ рднрдПрдХреЛ рдиреЗрдорд╕реНрдкреЗрд╕рд╣рд░реВрдорд╛ рдЧреЛрдкреНрдп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреБ рд╣реЛред
рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдирдпрд╛рдБ рдиреЗрдорд╕реНрдкреЗрд╕рд╣рд░реВ рджреЗрдЦрд╛ рдкрд░реНрди рд╕рдХреНрдиреЗ рд░ рддреА рдордзреНрдпреЗ рдХреЗрд╣реАрдорд╛ рдпреЛ рд▓реЗрдмрд▓ рд╣реБрди рд╕рдХреНрдиреЗ рднрдПрдХрд╛рд▓реЗ рдХрд╛рд░реНрдп рдЬрдЯрд┐рд▓ рдЫред рдЕрд░реНрдХреЛрддрд░реНрдл, рд▓реЗрдмрд▓ рдореЗрдЯрд╛рдЗрдБрджрд╛, рдЧреЛрдкреНрдп рдкрдирд┐ рдореЗрдЯрд╛рдЙрдиреБрдкрд░реНрдЫред рдпрд╕рдмрд╛рд╣реЗрдХ, рдЧреЛрдкреНрдп рдЖрдлреИрдВ рдкрдирд┐ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрди рд╕рдХреНрдЫ: рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдирдпрд╛рдБ рдЧреЛрдкреНрдп рд▓реЗрдмрд▓рд╣рд░реВ рднрдПрдХрд╛ рд╕рдмреИ рдиреЗрдорд╕реНрдкреЗрд╕рд╣рд░реВрдорд╛ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреБрдкрд░реНрдЫред рдпрджрд┐ рдХреБрдиреИ рдЧреЛрдкреНрдп рдХреБрдиреИ рдиреЗрдорд╕реНрдкреЗрд╕рдорд╛ рдЧрд▓реНрддрд┐рд▓реЗ рдореЗрдЯрд╛рдЗрдпреЛ рднрдиреЗ, рд╣рд╛рдореНрд░реЛ рдЕрдкрд░реЗрдЯрд░рд▓реЗ рдпрд╕рд▓рд╛рдИ рддреБрд░реБрдиреНрддреИ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдЧрд░реНрдиреБрдкрд░реНрдЫред
рдЕрдм рдХрд╛рд░реНрдп рддрдпрд╛рд░ рднрдЗрд╕рдХреЗрдХреЛ рдЫ, рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпрд╕рд▓рд╛рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрдиреЗ рд╕рдордп рдЖрдПрдХреЛ рдЫред рддрд░ рдкрд╣рд┐рд▓реЗ, рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреЗрд╣реА рд╢рдмреНрджрд╣рд░реВред
рд╢реЗрд▓ рдЕрдкрд░реЗрдЯрд░рд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ
рдЕрдиреНрдп рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХрд╛рд░реНрдпрднрд╛рд░рд╣рд░реВ рдЬрд╕реНрддреИ, рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░ рдЖрдлреНрдиреИ рдкреЛрдбрдорд╛ рдЪрд▓реНрдЫред рдпрд╕ рдкреЛрдбрдорд╛, рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ /hooks рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдлрд╛рдЗрд▓рд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдиреНрдЫрдиреНред рдпреА рдмрд╛рд╢, рдкрд╛рдЗрдерди, рд░реБрдмреА, рдЖрджрд┐рдорд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рд╣реБрди рд╕рдХреНрдЫрдиреНред рд╣рд╛рдореА рдпрд╕реНрддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдлрд╛рдЗрд▓рд╣рд░реВрд▓рд╛рдИ рд╣реБрдХ рднрдиреНрдЫреМрдВ (рд╣реБрдХрд╣рд░реБ).

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

рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓реЗ рдХреБрди рд╣реБрдХ рдХрд╣рд┐рд▓реЗ рд░ рдХрд╣рд┐рд▓реЗ рдЪрд▓рд╛рдЙрдиреЗ рднрдиреЗрд░ рдХрд╕рд░реА рдерд╛рд╣рд╛ рдкрд╛рдЙрдБрдЫ? рдкреНрд░рддреНрдпреЗрдХ рд╣реБрдХрдорд╛ рджреБрдИ рдЪрд░рдгрд╣рд░реВ рд╣реБрдиреНрдЫрдиреНред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкрдХреЛ рд╕рдордпрдорд╛, рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓реЗ рд╕рдмреИ рд╣реБрдХрд╣рд░реВрд▓рд╛рдИ рдЖрд░реНрдЧреБрдореЗрдиреНрдЯрдХреЛ рд╕рд╛рде рдЪрд▓рд╛рдЙрдБрдЫред --config тАФ рдпреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдЪрд░рдг рд╣реЛред рдпрд╕рдкрдЫрд┐, рд╣реБрдХрд╣рд░реВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдкрдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдиреНрдЫрдиреНтАФрддрд┐рдиреАрд╣рд░реВ рдмрд╛рдБрдзрд┐рдПрдХрд╛ рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдорд╛ред рдкрдЫрд┐рд▓реНрд▓реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣реБрдХрд▓реЗ рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕рдиреНрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ (рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕рдиреНрджрд░реНрдн) тАФ JSON рдврд╛рдБрдЪрд╛рдорд╛ рдбреЗрдЯрд╛, рдЬрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╣рд╛рдореА рддрд▓ рдердк рд╡рд┐рд╡рд░рдгрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫреМрдВред
Bash рдорд╛ рдЕрдкрд░реЗрдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
рдЕрдм рд╣рд╛рдореА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд▓рд╛рдЧрд┐ рддрдпрд╛рд░ рдЫреМрдВред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рджреБрдИ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рд▓реЗрдЦреНрдиреБ рдкрд░реНрдиреЗрдЫ (рдЦреИрд░, рд╣рд╛рдореА рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрдЫреМрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп , рдЬрд╕рд▓реЗ Bash рдорд╛ рд╣реБрдХ рд▓реЗрдЦрдирд▓рд╛рдИ рдзреЗрд░реИ рд╕рд░рд▓ рдмрдирд╛рдЙрдБрдЫ):
- рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдЪрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдкрд╣рд┐рд▓реЛ рдЖрд╡рд╢реНрдпрдХ рдЫ - рдпрд╕рд▓реЗ рдмрд╛рдЗрдиреНрдбрд┐рдЩ рд╕рдиреНрджрд░реНрдн рдЖрдЙрдЯрдкреБрдЯ рдЧрд░реНрдЫ;
- рджреЛрд╕реНрд░реЛрдорд╛ рд╣реБрдХрдХреЛ рдореБрдЦреНрдп рддрд░реНрдХ рд╕рдорд╛рд╡реЗрд╢ рдЫред
#!/bin/bash
source /shell_lib.sh
function __config__() {
cat << EOF
configVersion: v1
# BINDING CONFIGURATION
EOF
}
function __main__() {
# THE LOGIC
}
hook::run "$@"
рдЕрд░реНрдХреЛ рдЪрд░рдг рднрдиреЗрдХреЛ рд╣рд╛рдореАрд▓рд╛рдИ рдХреБрди рд╡рд╕реНрддреБрд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫ рднрдиреЗрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрдиреБ рд╣реЛред рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╣рд╛рдореАрд▓реЗ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ:
- рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╕реНрд░реЛрдд рдЧреЛрдкреНрдп;
- рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рд░рд╣реЗрдХрд╛ рд╕рдмреИ рдиреЗрдорд╕реНрдкреЗрд╕рд╣рд░реВ, рдХреБрдирдорд╛ рд▓реЗрдмрд▓ рдЬреЛрдбрд┐рдПрдХреЛ рдЫ рднрдиреЗрд░ рдЬрд╛рдиреНрдирдХреЛ рд▓рд╛рдЧрд┐;
- рдЧреЛрдкреНрдп рдХреБрд░рд╛рд╣рд░реВрд▓рд╛рдИ рд▓рдХреНрд╖рд┐рдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рддрд╛рдХрд┐ рддрд┐рдиреАрд╣рд░реВ рд╕рдмреИ рд╕реНрд░реЛрдд рдЧреЛрдкреНрдп рдХреБрд░рд╛рд╕рдБрдЧ рд╕рдордиреНрд╡рдпрд┐рдд рдЫрдиреНред
рдЧреЛрдкреНрдп рд╕реНрд░реЛрддрдХреЛ рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдиреБрд╣реЛрд╕реН
рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдмрд╛рдЗрдиреНрдбрд┐рдЩ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдПрдХрджрдо рд╕рд░рд▓ рдЫред рд╣рд╛рдореА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдЫреМрдВ рдХрд┐ рд╣рд╛рдореА рдирд╛рдордХ рдЧреЛрдкреНрдпрдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдЫреМрдВ mysecret рдирд╛рдо рд╕реНрдерд╛рдирдорд╛ default:

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) рд░ рдирд┐рдореНрди рдмрд╛рдзреНрдпрдХрд╛рд░реА рд╕рдиреНрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН:

рддрдкрд╛рдИрдВрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдпрд╕рдорд╛ рдирд╛рдо рд░ рд╕рдореНрдкреВрд░реНрдг рд╡рд╕реНрддреБ рд╕рдорд╛рд╡реЗрд╢ рдЫред
рдиреЗрдорд╕реНрдкреЗрд╕рд╣рд░реВрдХреЛ рдЯреНрд░рдпрд╛рдХ рд░рд╛рдЦреНрджреИ
рдЕрдм рд╣рд╛рдореАрд▓реЗ рдиреЗрдорд╕реНрдкреЗрд╕рд╣рд░реВрдорд╛ рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдиреБ рдкрд░реНрдЫред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдирд┐рдореНрди рдмрд╛рдЗрдиреНрдбрд┐рдЩ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреЗрдЫреМрдВ:
- name: namespaces
group: main
apiVersion: v1
kind: Namespace
jqFilter: |
{
namespace: .metadata.name,
hasLabel: (
.metadata.labels // {} |
contains({"secret": "yes"})
)
}
group: main
keepFullObjectsInMemory: false
рддрдкрд╛рдИрдВрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ "" рдирд╛рдордХреЛ рдирдпрд╛рдБ рдлрд┐рд▓реНрдб рджреЗрдЦрд╛ рдкрд░реЗрдХреЛ рдЫред jqрдлрд┐рд▓реНрдЯрд░ред рдпрд╕рдХреЛ рдирд╛рдорд▓реЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдП рдЬрд╕реНрддреИ, jqFilter рд╕рдмреИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдлрд┐рд▓реНрдЯрд░ рдЧрд░реНрджрдЫ рд░ рд╣рд╛рдореАрд▓рд╛рдИ рд░реБрдЪрд┐ рднрдПрдХрд╛ рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд╕рд╣рд┐рдд рдирдпрд╛рдБ JSON рд╡рд╕реНрддреБ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫред рдпреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рднрдПрдХреЛ рд╣реБрдХрд▓реЗ рдирд┐рдореНрди рдмрд╛рдЗрдиреНрдбрд┐рдЩ рд╕рдиреНрджрд░реНрдн рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫ:

рдпрд╕рдорд╛ рдПрдЙрдЯрд╛ рдПрд░реЗ рд╕рдорд╛рд╡реЗрд╢ рдЫ 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рдЧреЛрдкреНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛ рдЕрдиреНрддрд┐рдо рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдПрдиреЛрдЯреЗрд╕рдирдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ: рдпрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЧреЛрдкреНрдп рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВ рддреБрд▓рдирд╛ рдЧрд░реНрди рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рд░рд╛рдЦреНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
рдпрд╕ рддрд░рд┐рдХрд╛рд▓реЗ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рд╣реБрдХрд▓реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрджрд╛ рдорд╛рдерд┐ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХрд╛ рддреАрди рдмрд╛рдЗрдиреНрдбрд┐рдЩ рд╕рдиреНрджрд░реНрднрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫред рдпреА рдПрдХ рдкреНрд░рдХрд╛рд░рдХреЛ рд╕реНрдиреНрдпрд╛рдкрд╕рдЯрдХреЛ рд░реВрдкрдорд╛ рд╕реЛрдЪреНрди рд╕рдХрд┐рдиреНрдЫ (рд╕реНрдиреНрдпрд╛рдкрд╢рдЯ) рдХреНрд▓рд╕реНрдЯрд░ред

рдпреА рд╕рдмреИ рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рдЖрдзрд╛рд░рдорд╛, рд╣рд╛рдореА рдЖрдзрд╛рд░рднреВрдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдпреЛ рд╕рдмреИ рдиреЗрдорд╕реНрдкреЗрд╕рд╣рд░реВрдорд╛ рджреЛрд╣реЛрд░рд┐рдиреНрдЫ рд░:
- рдпрджрд┐
hasLabelрдорд╛рдорд┐рд▓рд╛рдорд╛trueрд╣рд╛рд▓рдХреЛ рдиреЗрдорд╕реНрдкреЗрд╕рдХреЛ рд▓рд╛рдЧрд┐:- рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рд░рд╣рд╕реНрдпрд▓рд╛рдИ рд╕реНрдерд╛рдиреАрдп рд░рд╣рд╕реНрдпрд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрдЫ:
- рдпрджрд┐ рддрд┐рдиреАрд╣рд░реВ рдЙрд╕реНрддреИ рдЫрдиреН рднрдиреЗ - рдХреЗрд╣реА рдЧрд░реНрджреИрди;
- рдпрджрд┐ рддрд┐рдиреАрд╣рд░реВ рдлрд░рдХ рдЫрдиреН рднрдиреЗ, рдпреЛ рдЧрд░рд┐рдиреНрдЫ
kubectl replaceрд╡рд╛create;
- рд╡рд┐рд╢реНрд╡рд╡реНрдпрд╛рдкреА рд░рд╣рд╕реНрдпрд▓рд╛рдИ рд╕реНрдерд╛рдиреАрдп рд░рд╣рд╕реНрдпрд╕рдБрдЧ рддреБрд▓рдирд╛ рдЧрд░реНрдЫ:
- рдпрджрд┐
hasLabelрдорд╛рдорд┐рд▓рд╛рдорд╛falseрд╣рд╛рд▓рдХреЛ рдиреЗрдорд╕реНрдкреЗрд╕рдХреЛ рд▓рд╛рдЧрд┐:- рджрд┐рдЗрдПрдХреЛ рдиреЗрдорд╕реНрдкреЗрд╕рдорд╛ рдЧреЛрдкреНрдп рдЫреИрди рднрдиреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрджрдЫ:
- рдпрджрд┐ рд╕реНрдерд╛рдиреАрдп рдЧреЛрдкреНрдп рдЙрдкрд╕реНрдерд┐рдд рдЫ рднрдиреЗ, рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реН
kubectl delete; - рдпрджрд┐ рд╕реНрдерд╛рдиреАрдп рдЧреЛрдкреНрдп рдлреЗрд▓рд╛ рдкрд░реЗрди рднрдиреЗ, рдпрд╕рд▓реЗ рдХреЗрд╣реА рдЧрд░реНрджреИрдиред
- рдпрджрд┐ рд╕реНрдерд╛рдиреАрдп рдЧреЛрдкреНрдп рдЙрдкрд╕реНрдерд┐рдд рдЫ рднрдиреЗ, рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдореЗрдЯрд╛рдЙрдиреБрд╣реЛрд╕реН
- рджрд┐рдЗрдПрдХреЛ рдиреЗрдорд╕реНрдкреЗрд╕рдорд╛ рдЧреЛрдкреНрдп рдЫреИрди рднрдиреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрджрдЫ:

рддрдкрд╛рдИрдВ рдпрд╕рд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рдмрд╛рдЯ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ .
рдпрд╕рд░реА рд╣рд╛рдореАрд▓реЗ рейрел рд▓рд╛рдЗрдирдХрд╛ YAML рдХрдиреНрдлрд┐рдЧ рд░ рд▓рдЧрднрдЧ рдЙрд╣реА рдорд╛рддреНрд░рд╛рдорд╛ Bash рдХреЛрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдПрдЙрдЯрд╛ рд╕рд╛рдзрд╛рд░рдг Kubernetes рдирд┐рдпрдиреНрддреНрд░рдХ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрд╖рдо рднрдпреМрдВ! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рдХреЛ рдХрд╛рдо рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдПрдХрд╕рд╛рде рдЬреЛрдбреНрдиреБ рд╣реЛред
рдпрджреНрдпрдкрд┐, рдЧреЛрдкреНрдп рдХреБрд░рд╛рд╣рд░реВ рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреБ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдХреЛ рдПрдХ рдорд╛рддреНрд░ рдкреНрд░рдпреЛрдЧ рд╣реЛрдЗрдиред рдпрд╕рдХреЛ рдХреНрд╖рдорддрд╛рд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди рдпрд╣рд╛рдБ рдХреЗрд╣реА рдердк рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдЫрдиреНред
рдЙрджрд╛рд╣рд░рдг рез: рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдкрдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЧрд░реНрдиреЗ
рддреАрдирд╡рдЯрд╛ рдкреЛрдбрд╣рд░реВ рдорд┐рд▓реЗрд░ рдмрдиреЗрдХреЛ рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯрд▓рд╛рдИ рд╡рд┐рдЪрд╛рд░ рдЧрд░реМрдВред рдкреЛрдбрд╣рд░реВрд▓реЗ рдХреЗрд╣реА рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдк рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреНред рдЬрдм рдкреЛрдбрд╣рд░реВ рд╕реБрд░реБ рдЧрд░рд┐рдПрдХрд╛ рдерд┐рдП, рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдк рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рд╕реНрдерд╛рдорд╛ рдерд┐рдпреЛ (рдпрд╕рд▓рд╛рдИ рд╕рдВрд╕реНрдХрд░рдг рез рднрдиреМрдВ)ред рддрджрдиреБрд╕рд╛рд░, рд╕рдмреИ рдкреЛрдбрд╣рд░реВрд▓реЗ рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдкрдХреЛ рдпреЛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреНред
рдЕрдм рдорд╛рдиреМрдВ рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдк рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рдЫ (v.2)ред рдпрджреНрдпрдкрд┐, рдкреЛрдбрд╣рд░реВрд▓реЗ рдЕрдЭреИ рдкрдирд┐ рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдк (v.1) рдХреЛ рдЕрдШрд┐рд▓реНрд▓реЛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫрдиреН:

рдо рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдирдпрд╛рдБ ConfigMap (v.2) рдорд╛ рдХрд╕рд░реА рдорд╛рдЗрдЧреНрд░реЗрдЯ рдЧрд░реНрди рд╕рдХреНрдЫреБ? рдЙрддреНрддрд░ рд╕рд░рд▓ рдЫ: рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЦрдгреНрдбрдорд╛ рдЪреЗрдХрд╕рдо рдПрдиреЛрдЯреЗрд╕рди рдердкреМрдВред template рддреИрдирд╛рддреА рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд╣рд░реВ:

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

рдЙрджрд╛рд╣рд░рдг реи: рдЕрдиреБрдХреВрд▓рди рд╕реНрд░реЛрдд рдкрд░рд┐рднрд╛рд╖рд╛рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджреИ
рддрдкрд╛рдИрдВрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рди рд╡рд╕реНрддреБ рдкреНрд░рдХрд╛рд░рд╣рд░реВ (рдкреНрд░рдХрд╛рд░рд╣рд░реВ) рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ MysqlDatabaseрдорд╛рдиреМрдВ рдпрд╕ рдкреНрд░рдХрд╛рд░рдорд╛ рджреБрдИ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдЫрдиреН: name ╨╕ namespace.
apiVersion: example.com/v1alpha1
kind: MysqlDatabase
metadata:
name: foo
namespace: bar
рд╣рд╛рдореАрд╕рдБрдЧ рд╡рд┐рднрд┐рдиреНрди рдиреЗрдорд╕реНрдкреЗрд╕рд╣рд░реВ рднрдПрдХреЛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдЫ рдЬрд╕рдорд╛ рд╣рд╛рдореА MySQL рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╢реЗрд▓ рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рд╕реНрд░реЛрддрд╣рд░реВ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред MysqlDatabase, MySQL рд╕рд░реНрднрд░рдорд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЬрдбрд╛рди рд░ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рдЗрдЪреНрдЫрд┐рдд рд░ рдЕрд╡рд▓реЛрдХрди рдЧрд░рд┐рдПрдХреЛ рдЕрд╡рд╕реНрдерд╛рд╣рд░реВрдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬреЗрд╕рдиред

рдЙрджрд╛рд╣рд░рдг рей: рдХреНрд▓рд╕реНрдЯрд░ рдиреЗрдЯрд╡рд░реНрдХрдХреЛ рдирд┐рдЧрд░рд╛рдиреА
рд╣рд╛рдореАрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, рдкрд┐рдЩ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рдиреЗрдЯрд╡рд░реНрдХ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрдиреЗ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд░рд▓ рддрд░рд┐рдХрд╛ рд╣реЛред рдпрд╕ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореА рд╢реЗрд▓ рдЕрдкрд░реЗрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдорд╛рди рдирд┐рдЧрд░рд╛рдиреА рдХрд╕рд░реА рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдиреЗрдЫреМрдВред
рдкрд╣рд┐рд▓рд╛, рддрдкрд╛рдИрдВрд▓реЗ рдиреЛрдбрд╣рд░реВрдорд╛ рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдиреБ рдкрд░реНрдиреЗрдЫред рд╢реЗрд▓ рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдбрдХреЛ рдирд╛рдо рд░ 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 рдмрд╛рдЗрдиреНрдбрд┐рдЩ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ред

рддрдкрд╛рдИрдВ рдЬрддрд┐рд╕реБрдХреИ рд╕рдВрдЦреНрдпрд╛рдорд╛ рдХреНрдпреБ/рд╣реБрдХрд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХрд╛ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдпреЛрдЬрдирд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдПрдЙрдЯрд╛ рдХреНрдпреБрд▓реЗ рджреБрдИрд╡рдЯрд╛ рд╣реБрдХрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрдЫ, рд╡рд╛ рдпрд╕рдХреЛ рд╡рд┐рдкрд░реАрддред

рддрдкрд╛рдИрдВрд▓реЗ рдЧрд░реНрдиреБрдкрд░реНрдиреЗ рднрдиреЗрдХреЛ рддрджрдиреБрд╕рд╛рд░ рдлрд┐рд▓реНрдб рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреБ рд╣реЛред queue рдмрд╛рдЗрдиреНрдбрд┐рдЩ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдорд╛ред рдпрджрд┐ рдХреБрдиреИ рдХреНрдпреБ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди рднрдиреЗ, рд╣реБрдХ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреНрдпреБрдорд╛ рдЪрд▓реНрдЫ (default)ред рдпреЛ рдХреНрдпреБрдЗрдЩ рдореЗрдХрд╛рдирд┐рдЬрдорд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╣реБрдХрд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджрд╛ рд╕рдмреИ рд╕реНрд░реЛрдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
рдирд┐рд╖реНрдХрд░реНрд╖рдорд╛
рд╣рд╛рдореАрд▓реЗ рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░ рднрдиреЗрдХреЛ рдХреЗ рд╣реЛ рднрдиреЗрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдпреМрдВ, рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рдЫрд┐рдЯреЛ рд░ рд╕рдЬрд┐рд▓реИрд╕рдБрдЧ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреЗрд░ рджреЗрдЦрд╛рдпреМрдВ, рд░ рдпрд╕рдХреЛ рдкреНрд░рдпреЛрдЧрдХрд╛ рдзреЗрд░реИ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрдпреМрдВред
рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА, рд╕рд╛рдереИ рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рджреНрд░реБрдд рдЧрд╛рдЗрдб, рд╕рдореНрдмрдиреНрдзрд┐рддрдорд╛ рдЙрдкрд▓рдмреНрдз рдЫред рдХреБрдиреИ рдкрдирд┐ рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рд╕рдореНрдкрд░реНрдХ рдЧрд░реНрди рдирд╣рд┐рдЪрдХрд┐рдЪрд╛рдЙрдиреБрд╣реЛрд╕реН: рддрдкрд╛рдИрдВ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╡рд┐рд╢реЗрд╖ рдЫрд▓рдлрд▓рдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ (рд░реВрд╕реА рднрд╛рд╖рд╛рдорд╛) рд╡рд╛ (рдЕрдВрдЧреНрд░реЗрдЬреАрдорд╛)ред
рд░ рдпрджрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпреЛ рдорди рдкрд░реНрдпреЛ рднрдиреЗ, рд╣рд╛рдореА GitHub рдорд╛ рдирдпрд╛рдБ рдЕрдВрдХ/PRs/рддрд╛рд░рд╛рд╣рд░реВ рд╣реЗрд░реНрди рдкрд╛рдЙрдБрджрд╛ рд╕рдзреИрдВ рдЦреБрд╕реА рд╣реБрдиреЗрдЫреМрдВ, рдЬрд╣рд╛рдБ, рд╡реИрд╕реЗ, рддрдкрд╛рдИрдВрд▓реЗ рдЕрд░реВрд╣рд░реВ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рддреА рдордзреНрдпреЗ, рдпреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫ , рдЬреБрди рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рдХреЛ рдЬреЗрдареЛ рднрд╛рдЗ рд╣реЛрдпреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд▓реЗ рдПрдб-рдЕрдирд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдЕрджреНрдпрд╛рд╡рдзрд┐рдХрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ, рд╡рд┐рднрд┐рдиреНрди рдЪрд╛рд░реНрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ/рдорд╛рдирд╣рд░реВ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрджрдЫ, рдЪрд╛рд░реНрдЯ рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрджрдЫ, рд░ рдХреНрд▓рд╕реНрдЯрд░ рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдорд╛ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрди рд╕рдХреНрдЫред

рднрд┐рдбрд┐рдпреЛ рд░ рд╕реНрд▓рд╛рдЗрдбрд╣рд░реВ
рдкреНрд░рджрд░реНрд╢рдирдХреЛ рднрд┐рдбрд┐рдпреЛ (~реирей рдорд┐рдиреЗрдЯ):

рдкреНрд░рддрд┐рд╡реЗрджрди рдкреНрд░рд╕реНрддреБрддрд┐:
PS
рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдорд╛ рдкрдирд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН:
- ┬л┬╗;
- ┬л┬╗;
- ┬л┬╗;
- ┬л.
рд╕реНрд░реЛрдд: www.habr.com
