рдЬрд╛рдЙ? рдмрд╛рд╕! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН (рдХреБрдмреЗрдХрди EU'2020 рдмрд╛рдЯ рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

рдпрд╕ рд╡рд░реНрд╖, рдореБрдЦреНрдп рдпреВрд░реЛрдкреАрдпрди рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд╕рдореНрдореЗрд▓рди - KubeCon + CloudNativeCon Europe 2020 - рднрд░реНрдЪреБрдЕрд▓ рдерд┐рдпреЛред рдЬреЗ рд╣реЛрд╕реН, рдврд╛рдБрдЪрд╛рдорд╛ рдпрд╕реНрддреЛ рдкрд░рд┐рд╡рд░реНрддрдирд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рд▓рд╛рдореЛ-рдирд┐рдпреЛрдЬрд┐рдд рд░рд┐рдкреЛрд░реНрдЯ рдбреЗрд▓рд┐рднрд░ рдЧрд░реНрдирдмрд╛рдЯ рд░реЛрдХреЗрди "рдЬрд╛рдиреБрд╣реЛрд╕реН? рдмрд╛рд╕! рд╣рд╛рдореНрд░реЛ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрд╕рдорд░реНрдкрд┐рдд рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН рд╢реЗрд▓ рдЕрдкрд░реЗрдЯрд░.

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

рдЬрд╛рдЙ? рдмрд╛рд╕! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН (рдХреБрдмреЗрдХрди EU'2020 рдмрд╛рдЯ рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

рдкрд░рд┐рдЪрдп рджрд┐рдБрджреИ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рднрд┐рдбрд┐рдпреЛ (рдЕрдЩреНрдЧреНрд░реЗрдЬреАрдорд╛ ~23 рдорд┐рдиреЗрдЯ, рд▓реЗрдЦ рднрдиреНрджрд╛ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд░реВрдкрдорд╛ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реАрдореВрд▓рдХ) рд░ рдкрд╛рда рдлрд╛рд░рдордорд╛ рдпрд╕рдХреЛ рдореБрдЦреНрдп рдЕрдВрд╢ред рдЬрд╛рдЙ!

рдлреНрд▓реНрдпрд╛рдиреНрдЯрдорд╛ рд╣рд╛рдореА рдирд┐рд░рдиреНрддрд░ рд╕рдмреИ рдХреБрд░рд╛рд▓рд╛рдИ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬ рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрдЫреМрдВред рдЖрдЬ рд╣рд╛рдореА рдЕрд░реНрдХреЛ рд░реЛрдЪрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдмрд╛рд░реЗ рдХреБрд░рд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рднреЗрдЯреНрдиреБрд╣реЛрд╕реН: рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрд┐рдн рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдЩ!

рдЬреЗ рд╣реЛрд╕реН, рдпреЛ рд╕рдмреИ рд╣реБрдиреНрдЫ рднрдиреНрдиреЗ рд╕рдиреНрджрд░реНрднрдмрд╛рдЯ рд╕реБрд░реБ рдЧрд░реМрдВ: рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ред

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

Kubernetes рдорд╛ API рд▓рд╛рдИ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░рдХреЛ рд╡рд╕реНрддреБрдХреЛ рд▓рд╛рдЧрд┐ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВ рд╕рд╣рд┐рддрдХреЛ рдлрд╛рдЗрд▓ рд╕рд░реНрднрд░рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рдпрд╕ рд╕рд░реНрднрд░рдорд╛ рд╡рд╕реНрддреБрд╣рд░реВ (рд╕рдВрд╕рд╛рдзрдирд╣рд░реВ) YAML рдлрд╛рдЗрд▓рд╣рд░реВрджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдЧрд░рд┐рдиреНрдЫред рдердк рд░реВрдкрдорд╛, рд╕рд░реНрднрд░рд╕рдБрдЧ рдЖрдзрд╛рд░рднреВрдд API рдЫ рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рддреАрди рдЪреАрдЬрд╣рд░реВ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ:

  • рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрд╣реЛрд╕реН рдпрд╕рдХреЛ рдкреНрд░рдХрд╛рд░ рд░ рдирд╛рдо рджреНрд╡рд╛рд░рд╛ рд╕рдВрд╕рд╛рдзрди;
  • рдкрд░рд┐рд╡рд░реНрддрди рд╕реНрд░реЛрдд (рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рд╕рд░реНрднрд░рд▓реЗ рдХреЗрд╡рд▓ "рд╕рд╣реА" рд╡рд╕реНрддреБрд╣рд░реВ рднрдгреНрдбрд╛рд░ рдЧрд░реНрджрдЫ - рд╕рдмреИ рдЧрд▓рдд рддрд░рд┐рдХрд╛рд▓реЗ рдмрдирд╛рдЗрдПрдХреЛ рд╡рд╛ рдЕрдиреНрдп рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрднрд┐рдкреНрд░реЗрд░рд┐рдд рдЦрд╛рд░реЗрдЬ рдЧрд░рд┐рдПрдХреЛ рдЫ);
  • рдЯреНрд░реНрдпрд╛рдХ рд╕реНрд░реЛрддрдХреЛ рд▓рд╛рдЧрд┐ (рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рддреБрд░реБрдиреНрддреИ рдпрд╕рдХреЛ рд╣рд╛рд▓рдХреЛ/рдЕрдкрдбреЗрдЯ рдЧрд░рд┐рдПрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ)ред

рдпрд╕рд░реА, Kubernetes рд▓реЗ рддреАрдирд╡рдЯрд╛ рдЖрдзрд╛рд░рднреВрдд рд╡рд┐рдзрд┐рд╣рд░реВ (YAML manifests рдХреЛ рд▓рд╛рдЧрд┐) рдлрд╛рдЗрд▓ рд╕рд░реНрднрд░рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рд░реНрдп рдЧрд░реНрджрдЫ (рд╣реЛ, рд╡рд╛рд╕реНрддрд╡рдорд╛ рддреНрдпрд╣рд╛рдБ рдЕрд░реВрд╣рд░реВ рдЫрдиреН, рддрд░ рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдЕрд╣рд┐рд▓реЗрдХреЛ рд▓рд╛рдЧрд┐ рдЫреЛрдбреНрдиреЗрдЫреМрдВ)ред

рдЬрд╛рдЙ? рдмрд╛рд╕! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН (рдХреБрдмреЗрдХрди EU'2020 рдмрд╛рдЯ рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

рддреНрдпрд╣рд╛рдБ рджреБрдИ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░рдХрд╛ рдирд┐рдпрдиреНрддреНрд░рдХрд╣рд░реВ рдЫрдиреНред рдкрд╣рд┐рд▓реЛрд▓реЗ Kubernetes рдмрд╛рдЯ рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдиреНрдЫ, рдпрд╕рд▓рд╛рдИ рдиреЗрд╕реНрдЯреЗрдб рддрд░реНрдХ рдЕрдиреБрд╕рд╛рд░ рдкреНрд░рд╢реЛрдзрди рдЧрд░реНрдЫ, рд░ K8s рдорд╛ рдлрд░реНрдХрд╛рдЙрдБрдЫред рджреЛрд╕реНрд░реЛрд▓реЗ Kubernetes рдмрд╛рдЯ рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдиреНрдЫ, рддрд░, рдкрд╣рд┐рд▓реЛ рдкреНрд░рдХрд╛рд░рдХреЛ рд╡рд┐рдкрд░реАрдд, рдХреЗрд╣рд┐ рдмрд╛рд╣реНрдп рд╕реНрд░реЛрддрд╣рд░реВрдХреЛ рдЕрд╡рд╕реНрдерд╛ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрджрдЫред

Kubernetes рдорд╛ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реМрдВ:

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

рддреНрдпрд╕рдкрдЫрд┐ рдпреЛ рд╕рдореНрдкреВрд░реНрдг рдЕрдиреБрдХреНрд░рдо рдЙрд▓реНрдЯреЛ рдХреНрд░рдордорд╛ рджреЛрд╣реЛрд░реНрдпрд╛рдЗрдПрдХреЛ рдЫ: рдХреБрдмреЗрд▓реЗрдЯрд▓реЗ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫ, рдкреЛрдбрдХреЛ рд╕реНрдерд┐рддрд┐ рдЧрдгрдирд╛ рдЧрд░реНрджрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдлрд┐рд░реНрддрд╛ рдкрдард╛рдЙрдБрдЫред ReplicaSet рдирд┐рдпрдиреНрддреНрд░рдХрд▓реЗ рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ рд░ рдкреНрд░рддрд┐рдХреГрддрд┐ рд╕реЗрдЯрдХреЛ рд╕реНрдерд┐рддрд┐ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрджрдЫред рдПрдЙрдЯреИ рдХреБрд░рд╛ рдбрд┐рдкреНрд▓реЛрдпрдореЗрдиреНрдЯ рдХрдиреНрдЯреНрд░реЛрд▓рд░рд╕рдБрдЧ рд╣реБрдиреНрдЫ рд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдЕрдиреНрддрддрдГ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ (рд╡рд░реНрддрдорд╛рди) рд╕реНрдерд┐рддрд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫред

рдЬрд╛рдЙ? рдмрд╛рд╕! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН (рдХреБрдмреЗрдХрди EU'2020 рдмрд╛рдЯ рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

рд╢реЗрд▓ рдЕрдкрд░реЗрдЯрд░

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

рдЬрд╛рдЙ? рдмрд╛рд╕! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН (рдХреБрдмреЗрдХрди EU'2020 рдмрд╛рдЯ рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг: рдЧреЛрдкреНрдп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐

рдПрдЙрдЯрд╛ рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рд╣реЗрд░реМрдВред

рдорд╛рдиреМрдВ рд╣рд╛рдореАрд╕рдБрдЧ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдЫред рдпрд╕рдорд╛ рдирд╛рдо рд╕реНрдерд╛рди рдЫ default рдХреЗрд╣рд┐ рдЧреЛрдкреНрдп рд╕рдВрдЧ mysecretред рдердк рд░реВрдкрдорд╛, рддреНрдпрд╣рд╛рдБ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдЕрдиреНрдп рдиреЗрдорд╕реНрдкреЗрд╕рд╣рд░реВ рдЫрдиреНред рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ рдХреЗрд╣реА рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд▓реЗрдмрд▓ рд╕рдВрд▓рдЧреНрди рдЫред рд╣рд╛рдореНрд░реЛ рд▓рдХреНрд╖реНрдп рд▓реЗрдмрд▓рдХреЛ рд╕рд╛рде рдиреЗрдорд╕реНрдкреЗрд╕рд╣рд░реВрдорд╛ рдЧреЛрдкреНрдп рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реНрдиреЗ рд╣реЛред

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

рдЕрдм рдЬрдм рдХрд╛рд░реНрдп рддрдпрд╛рд░ рдЧрд░рд┐рдПрдХреЛ рдЫ, рдпреЛ рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпрд╕рд▓рд╛рдИ рд▓рд╛рдЧреВ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрдиреЗ рд╕рдордп рд╣реЛред рддрд░ рдкрд╣рд┐рд▓реЗ рдпреЛ рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░ рдЖрдлреИрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреЗрд╣реА рд╢рдмреНрджрд╣рд░реВ рднрдиреНрди рд▓рд╛рдпрдХ рдЫред

рдХрд╕рд░реА рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░ рдХрд╛рдо рдЧрд░реНрджрдЫ

Kubernetes рдорд╛ рдЕрдиреНрдп рд╡рд░реНрдХрд▓реЛрдбрд╣рд░реВ рдЬрд╕реНрддреИ, рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░ рдЖрдлреНрдиреИ рдкреЛрдбрдорд╛ рдЪрд▓реНрдЫред рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдорд╛ рдпреЛ рдкреЛрдб рдорд╛ /hooks рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдлрд╛рдЗрд▓рд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреНред рдпреА Bash, Python, Ruby, рдЖрджрд┐ рдорд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реБрди рд╕рдХреНрдЫред рд╣рд╛рдореА рддреНрдпрд╕реНрддрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдлрд╛рдЗрд▓рд╣рд░реВрд▓рд╛рдИ рд╣реБрдХ (рд╣реБрдХрд╣рд░реБ).

рдЬрд╛рдЙ? рдмрд╛рд╕! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН (рдХреБрдмреЗрдХрди EU'2020 рдмрд╛рдЯ рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

рдЬрд╛рдЙ? рдмрд╛рд╕! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН (рдХреБрдмреЗрдХрди EU'2020 рдмрд╛рдЯ рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

Bash рдорд╛ рдЕрдкрд░реЗрдЯрд░ рдмрдирд╛рдЙрдБрджреИ

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

Bash рдорд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рддрдкрд╛рдИрдВ рд╣рд╛рдореНрд░реЛ рдорд╛ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд╕рд╛рде рднрдгреНрдбрд╛рд░рд╣рд░реВ.

рдпрд╕рд░реА рд╣рд╛рдореАрд▓реЗ YAML рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ 35 рд▓рд╛рдЗрдирд╣рд░реВ рд░ рдмрд╛рд╕ рдХреЛрдбрдХреЛ рд╕рдорд╛рди рдорд╛рддреНрд░рд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдПрдЙрдЯрд╛ рд╕рд╛рдзрд╛рд░рдг Kubernetes рдирд┐рдпрдиреНрддреНрд░рдХ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрд╖рдо рднрдпреМрдВ! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рдХреЛ рдХрд╛рдо рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдПрдХрд╕рд╛рде рдЬреЛрдбреНрдиреБ рд╣реЛред

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

рдЙрджрд╛рд╣рд░рдг рез: рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдкрдорд╛ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЧрд░реНрджреИ

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

рдЕрдм рдорд╛рдиреМрдВ рдХрд┐ рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдк рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рдЫ (v.2)ред рдпрджреНрдпрдкрд┐, рдкреЛрдбрд╣рд░реВрд▓реЗ ConfigMap (v.1) рдХреЛ рдЕрдШрд┐рд▓реНрд▓реЛ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫ:

рдЬрд╛рдЙ? рдмрд╛рд╕! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН (рдХреБрдмреЗрдХрди EU'2020 рдмрд╛рдЯ рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

рдЬрд╛рдЙ? рдмрд╛рд╕! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН (рдХреБрдмреЗрдХрди EU'2020 рдмрд╛рдЯ рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

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

рдЬрд╛рдЙ? рдмрд╛рд╕! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН (рдХреБрдмреЗрдХрди EU'2020 рдмрд╛рдЯ рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

рдЙрджрд╛рд╣рд░рдг реи: рдЕрдиреБрдХреВрд▓рди рд╕реНрд░реЛрдд рдкрд░рд┐рднрд╛рд╖рд╛рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрджреИ

рддрдкрд╛рдИрдВрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, Kubernetes рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╡рд╕реНрддреБрд╣рд░реВрдХреЛ рдЕрдиреБрдХреВрд▓рди рдкреНрд░рдХрд╛рд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВ рдкреНрд░рдХрд╛рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ MysqlDatabaseред рдпрд╕ рдкреНрд░рдХрд╛рд░рдХреЛ рджреБрдИ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдЫрдиреН рднрдиреМрдВ: name ╨╕ namespace.

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

рд╣рд╛рдореАрд╕рдБрдЧ рд╡рд┐рднрд┐рдиреНрди рдиреЗрдорд╕реНрдкреЗрд╕рд╣рд░реВ рднрдПрдХреЛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдЫ рдЬрд╕рдорд╛ рд╣рд╛рдореА MySQL рдбрд╛рдЯрд╛рдмреЗрд╕рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░ рд╕реНрд░реЛрддрд╣рд░реВ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ MysqlDatabase, рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ MySQL рд╕рд░реНрднрд░рдорд╛ рдЬрдбрд╛рди рдЧрд░реНрджреИ рд░ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд░ рдЕрд╡рд▓реЛрдХрди рдЧрд░рд┐рдПрдХрд╛ рдЕрд╡рд╕реНрдерд╛рд╣рд░реВ рд╕рд┐рдЩреНрдХреНрд░реЛрдирд╛рдЗрдЬ рдЧрд░реНрджреИред

рдЬрд╛рдЙ? рдмрд╛рд╕! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН (рдХреБрдмреЗрдХрди EU'2020 рдмрд╛рдЯ рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

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

рддрдкрд╛рдИрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ, рдкрд┐рдЩ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБ рднрдиреЗрдХреЛ рд╕рдЮреНрдЬрд╛рд▓ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрдиреЗ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд░рд▓ рддрд░рд┐рдХрд╛ рд╣реЛред рдпрд╕ рдЙрджрд╛рд╣рд░рдгрдорд╛ рд╣рд╛рдореА рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпрд╕реНрддреЛ рдирд┐рдЧрд░рд╛рдиреА рдХрд╕рд░реА рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдиреЗрдЫреМрдВред

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

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

рд╣рд╛рдореАрд▓реЗ рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░ рдХреЗ рд╣реЛ рднрдиреЗрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдпреМрдВ, рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рдЫрд┐рдЯреЛ рд░ рд╕рд╣рдЬ рд░реВрдкрдорд╛ Kubernetes рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреЗрд░ рджреЗрдЦрд╛рдпреМрдВ, рд░ рдпрд╕рдХреЛ рдкреНрд░рдпреЛрдЧрдХрд╛ рдзреЗрд░реИ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рджрд┐рдпреМрдВред

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

рд░ рдпрджрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпреЛ рдордирдкрд░реНрдпреЛ рднрдиреЗ, рд╣рд╛рдореА GitHub рдорд╛ рдирдпрд╛рдБ рдореБрджреНрджрд╛рд╣рд░реВ/PR/рддрд╛рд░рд╛рд╣рд░реВ рджреЗрдЦреНрди рдкрд╛рдЙрдБрджрд╛ рдЦреБрд╕реА рдЫреМрдВ, рдЬрд╣рд╛рдБ, рддрдкрд╛рдИрдВрд▓реЗ рдЕрд░реВрд▓рд╛рдИ рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рд░реЛрдЪрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВред рддрд┐рдиреАрд╣рд░реВ рдордзреНрдпреЗ рдпреЛ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫ addon-operator, рдЬреБрди рд╢реЗрд▓ рдЕрдкрд░реЗрдЯрд░рдХреЛ рдареВрд▓реЛ рднрд╛рдЗ рд╣реЛред рдпреЛ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд▓реЗ рдПрдб-рдЕрдирд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рд╣реЗрд▓реНрдо рдЪрд╛рд░реНрдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдЕрдкрдбреЗрдЯрд╣рд░реВ рдбреЗрд▓рд┐рднрд░ рдЧрд░реНрди рд░ рд╡рд┐рднрд┐рдиреНрди рдЪрд╛рд░реНрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ/рдорд╛рдирд╣рд░реВ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрди, рдЪрд╛рд░реНрдЯрд╣рд░реВрдХреЛ рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрди, рд░ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рднрдПрдХрд╛ рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдорд╛ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░реНрди рдкрдирд┐ рд╕рдХреНрдЫред

рдЬрд╛рдЙ? рдмрд╛рд╕! рд╢реЗрд▓-рдЕрдкрд░реЗрдЯрд░рд▓рд╛рдИ рднреЗрдЯреНрдиреБрд╣реЛрд╕реН (рдХреБрдмреЗрдХрди EU'2020 рдмрд╛рдЯ рд╕рдореАрдХреНрд╖рд╛ рд░ рднрд┐рдбрд┐рдпреЛ рд░рд┐рдкреЛрд░реНрдЯ)

рднрд┐рдбрд┐рдпреЛ рд░ рд╕реНрд▓рд╛рдЗрдбрд╣рд░реВ

рдкреНрд░рджрд░реНрд╢рдирдмрд╛рдЯ рднрд┐рдбрд┐рдпреЛ (~ 23 рдорд┐рдиреЗрдЯ):


рдкреНрд░рддрд┐рд╡реЗрджрди рдкреНрд░рд╕реНрддреБрддрд┐:

PS

рд╣рд╛рдореНрд░реЛ рдмреНрд▓рдЧрдорд╛ рдкрдирд┐ рдкрдвреНрдиреБрд╣реЛрд╕реН:

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди