Yandex.Cloud рдХреЛ рд▓рд╛рдЧрд┐ Kubernetes рдорд╛ CSI рдбреНрд░рд╛рдЗрднрд░ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрдиреЗ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрднрд╡

Yandex.Cloud рдХреЛ рд▓рд╛рдЧрд┐ Kubernetes рдорд╛ CSI рдбреНрд░рд╛рдЗрднрд░ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрдиреЗ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрднрд╡

рд╣рд╛рдореА рдпреЛ рдШреЛрд╖рдгрд╛ рдЧрд░реНрди рдкрд╛рдЙрдБрджрд╛ рдЦреБрд╕реА рдЫреМрдВ рдХрд┐ Flant рд▓реЗ Kubernetes рдХреЛ рд▓рд╛рдЧрд┐ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдЙрдкрдХрд░рдгрд╣рд░реВ рдЬрд╛рд░реА рдЧрд░реЗрд░ рдЖрдлреНрдиреЛ рдпреЛрдЧрджрд╛рди рд╡рд┐рд╕реНрддрд╛рд░ рдЧрд░реНрджреИрдЫред CSI рдЪрд╛рд▓рдХрдХреЛ рдЕрд▓реНрдлрд╛ рд╕рдВрд╕реНрдХрд░рдг Yandex.Cloud рдХреЛ рд▓рд╛рдЧрд┐ (рдХрдиреНрдЯреЗрдирд░ рднрдгреНрдбрд╛рд░рдг рдЗрдиреНрдЯрд░рдлреЗрд╕)ред

рддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдгрд╣рд░реВрдорд╛ рдЬрд╛рдиреБ рдЕрдШрд┐, Yandex рд╕рдБрдЧ рдкрд╣рд┐рд▓реЗ рдиреИ рд╕реЗрд╡рд╛ рднрдПрдХреЛ рдмреЗрд▓рд╛ рдпреЛ рдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреНрдиреЗ рдкреНрд░рд╢реНрдирдХреЛ рдЬрд╡рд╛рдл рджрд┐рдиреБрд╣реЛрд╕реНред Kubernetes рдХреЛ рд▓рд╛рдЧрд┐ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╕реЗрд╡рд╛.

рдкрд░рд┐рдЪрдп

рдпреЛ рдХрд┐рди рд╣реЛ?

рд╣рд╛рдореНрд░реЛ рдХрдореНрдкрдиреА рднрд┐рддреНрд░, рдЙрддреНрдкрд╛рджрдирдорд╛ Kubernetes рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдХреЛ рд╕реБрд░реБрджреЗрдЦрд┐ рдиреИ (рдЕрд░реНрдерд╛рдд рдзреЗрд░реИ рд╡рд░реНрд╖рджреЗрдЦрд┐), рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░реЛ рдЖрдлреНрдиреИ рдЙрдкрдХрд░рдг (рдбреЗрдХрд╣рд╛рдЙрд╕) рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрджреИ рдЖрдПрдХрд╛ рдЫреМрдВ, рдЬрд╕рд▓рд╛рдИ, рд╣рд╛рдореА рдЪрд╛рдБрдбреИ рдиреИ рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд░реВрдкрдорд╛ рдЙрдкрд▓рдмреНрдз рдЧрд░рд╛рдЙрдиреЗ рдпреЛрдЬрдирд╛рдорд╛ тАЛтАЛрдЫреМрдВред ред рдпрд╕рдХреЛ рдорджреНрджрддрд▓реЗ, рд╣рд╛рдореАрд▓реЗ рд╣рд╛рдореНрд░рд╛ рд╕рдмреИ рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВрд▓рд╛рдИ рд╕рдорд╛рди рд░реВрдкрдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдЫреМрдВ, рд░ рд╣рд╛рд▓ рддрд┐рдиреАрд╣рд░реВрдордзреНрдпреЗ 100 рднрдиреНрджрд╛ рдмрдвреА рдЫрдиреН, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░рдХрд╛ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирд╣рд░реВрдорд╛ рд░ рд╕рдмреИ рдЙрдкрд▓рдмреНрдз рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рд╣рд░реВрдорд╛ред

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

NB: рдпреЛ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрднрд╡ рд╣реЛ, рд░ рдпреЛ рдПрдХрджрдо рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЫред рд╣рд╛рдореА рдХреБрдиреИ рдкрдирд┐ рд╣рд╛рд▓рддрдорд╛ рддрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдХреЛ рд╕рдЯреНрдЯрд╛ рд╕рдмреИрд▓реЗ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВ рдЖрдлреНрдиреИ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНрдЫ рднрдиреЗрд░ рд╕реБрдЭрд╛рд╡ рджрд┐рдЗрд░рд╣реЗрдХрд╛ рдЫреИрдиреМрдВред рд╡реИрд╕реЗ, рд╣рд╛рдореАрд╕рдБрдЧ Yandex рдмрд╛рдЯ Kubernetes рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрдиреЗ рдХреБрдиреИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрднрд╡ рдЫреИрди рд░ рд╣рд╛рдореА рдпрд╕ рд▓реЗрдЦрдорд╛ рдпрд╕ рд╕реЗрд╡рд╛рдХреЛ рдХреБрдиреИ рдореВрд▓реНрдпрд╛рдЩреНрдХрди рджрд┐рдиреЗ рдЫреИрдиреМрдВред

рдпреЛ рдХреЗ рд╣реЛ рд░ рдХрд╕рдХреЛ рд▓рд╛рдЧрд┐?

рддреНрдпрд╕реЛрднрдП, рд╣рд╛рдореАрд▓реЗ Kubernetes рдорд╛ рднрдгреНрдбрд╛рд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рдЖрдзреБрдирд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рдЫреМрдВ: CSI рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ? ╨╕ рд╕рдореБрджрд╛рдп рдХрд╕рд░реА рдЖрдпреЛ рдпрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреАред

рд╣рд╛рд▓, рдзреЗрд░реИ рдареВрд▓рд╛ рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рдпрдХрд╣рд░реВрд▓реЗ рдЖрдлреНрдиреЛ рдХреНрд▓рд╛рдЙрдб рдбрд┐рд╕реНрдХрд╣рд░реВ Kubernetes рдорд╛ Persistent Volume рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдбреНрд░рд╛рдЗрднрд░рд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░реЗрдХрд╛ рдЫрдиреНред рдпрджрд┐ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рд╕рдБрдЧ рддреНрдпрд╕реНрддреЛ рдбреНрд░рд╛рдЗрднрд░ рдЫреИрди, рддрд░ рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрд╣рд░реВ API рдорд╛рд░реНрдлрдд рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫ, рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдИрд▓рд╛рдИ рдбреНрд░рд╛рдЗрднрд░ рдЖрдлреИрдВ рд▓рд╛рдЧреВ рдЧрд░реНрдирдмрд╛рдЯ рдХреЗрд╣рд┐ рдкрдирд┐ рд░реЛрдХреНрджреИрдиред рдпреЛ Yandex.Cloud рдХреЛ рд╕рд╛рде рднрдпреЛред

рд╣рд╛рдореАрд▓реЗ рд╡рд┐рдХрд╛рд╕рд▓рд╛рдИ рдЖрдзрд╛рд░ рдорд╛рдиреЗрдХрд╛ рдЫреМрдБ DigitalOcean рдХреНрд▓рд╛рдЙрдбрдХреЛ рд▓рд╛рдЧрд┐ CSI рдЪрд╛рд▓рдХ рд░ рдмрд╛рдЯ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдПрдХ рдЬреЛрдбреА GCP рдХрд╛ рд▓рд╛рдЧрд┐ рдЪрд╛рд▓рдХрд╣рд░реВ, рдХрд┐рдирдХрд┐ рдпреА рдХреНрд▓рд╛рдЙрдбрд╣рд░реВ (Google рд░ Yandex) рдХреЛ API рд╕рдБрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдзреЗрд░реИ рд╕рдорд╛рдирддрд╛рд╣рд░реВ рдЫрдиреНред рд╡рд┐рд╢реЗрд╖ рдЧрд░реА, рдПрдкреАрдЖрдИ рд░ GCP, рд░ рдорд╛ Yandex рд╡рд╕реНрддреБ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН Operation рд▓рд╛рдореЛ рд╕рдордп рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЕрдкрд░реЗрд╕рдирд╣рд░реВрдХреЛ рд╕реНрдерд┐рддрд┐ рдЯреНрд░реНрдпрд╛рдХ рдЧрд░реНрди (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдирдпрд╛рдБ рдбрд┐рд╕реНрдХ рд╕рд┐рд░реНрдЬрдирд╛)ред Yandex.Cloud API рд╕рдБрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди, рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН Yandex.Cloud Go SDK.

рдЧрд░реЗрдХреЛ рдХрд╛рдордХреЛ рдирддрд┐рдЬрд╛ GitHub рдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рд░ рддрд┐рдиреАрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреЛрдЧреА рд╣реБрди рд╕рдХреНрдЫ рдЬреЛ, рдХреБрдиреИ рдХрд╛рд░рдгрд▓реЗ, Yandex.Cloud рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд╣рд░реВрдорд╛ рдЖрдлреНрдиреИ Kubernetes рд╕реНрдерд╛рдкрдирд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреН (рддрд░ рддрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХреНрд▓рд╕реНрдЯрд░ рд╣реЛрдЗрди) рд░ CSI рдорд╛рд░реНрдлрдд рдбрд┐рд╕реНрдХрд╣рд░реВ (рдЕрд░реНрдбрд░) рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫрдиреНред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВ

рд╣рд╛рд▓ рдЪрд╛рд▓рдХрд▓реЗ рдирд┐рдореНрди рдХрд╛рд░реНрдпрд╣рд░реВрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫ:

  • рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдиреЛрдбрд╣рд░реВрдХреЛ рдЯреЛрдкреЛрд▓реЛрдЬреА рдЕрдиреБрд╕рд╛рд░ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рд╕рдмреИ рдХреНрд╖реЗрддреНрд░рд╣рд░реВрдорд╛ рдбрд┐рд╕реНрдХрд╣рд░реВ рдХреНрд░рдордмрджреНрдз рдЧрд░реНрджреИ;
  • рдкрд╣рд┐рд▓реЗ рдЕрд░реНрдбрд░ рдЧрд░рд┐рдПрдХрд╛ рдбрд┐рд╕реНрдХрд╣рд░реВ рд╣рдЯрд╛рдЙрдБрджреИ;
  • рдбрд┐рд╕реНрдХрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдлрд▓рд╛рдЗрди рд░рд┐рд╕рд╛рдЗрдЬ (Yandex.Cloud рд╕рдорд░реНрдерди рдирдЧрд░реНрдиреБрд╣реЛрд╕реН рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдорд╛ рдорд╛рдЙрдиреНрдЯ рдЧрд░рд┐рдПрдХрд╛ рдбрд┐рд╕реНрдХрд╣рд░реВ рдмрдврд╛рдЙрдБрджреИ)ред рд░рд┐рд╕рд╛рдЗрдЬрд┐рдЩрд▓рд╛рдИ рд╕рдХреЗрд╕рдореНрдо рдкреАрдбрд╛рд░рд╣рд┐рдд рдмрдирд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рдЪрд╛рд▓рдХрд▓рд╛рдИ рдХрд╕рд░реА рдкрд░рд┐рдорд╛рд░реНрдЬрди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рднрдиреНрдиреЗ рдЬрд╛рдирдХрд╛рд░реАрдХреЛ рд▓рд╛рдЧрд┐, рддрд▓ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реНред

рднрд╡рд┐рд╖реНрдпрдорд╛, рд╣рд╛рдореА рдбрд┐рд╕реНрдХ рд╕реНрдиреНрдпрд╛рдкрд╕рдЯрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд░ рдореЗрдЯрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рдорд░реНрдерди рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ рдпреЛрдЬрдирд╛ рдмрдирд╛рдЙрдБрдЫреМрдВред

рдореБрдЦреНрдп рдХрдард┐рдирд╛рдИ рд░ рдпрд╕рд▓рд╛рдИ рдХрд╕рд░реА рдкрд╛рд░ рдЧрд░реНрдиреЗ

Yandex.Cloud API рдорд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордпрдорд╛ рдбрд┐рд╕реНрдХ рдмрдврд╛рдЙрдиреЗ рдХреНрд╖рдорддрд╛рдХреЛ рдЕрднрд╛рд╡ рдПрдХ рд╕реАрдорд╛ рд╣реЛ рдЬрд╕рд▓реЗ PV (рдирд┐рд░рдиреНрддрд░ рднреЛрд▓реНрдпреБрдо) рдХреЛ рд▓рд╛рдЧрд┐ рд░рд┐рд╕рд╛рдЗрдЬ рдЕрдкрд░реЗрд╢рдирд▓рд╛рдИ рдЬрдЯрд┐рд▓ рдмрдирд╛рдЙрдБрдЫ: рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдпреЛ рдЖрд╡рд╢реНрдпрдХ рдЫ рдХрд┐ рдбрд┐рд╕реНрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреЛрдб рд░реЛрдХрд┐рдпреЛ, рд░ рдпрд╕рд▓реЗ рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рдирд┐рдореНрддреНрдпрд╛рдЙрди рд╕рдХреНрдЫред

рдЕрдиреБрд╕рд╛рд░ CSI рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рд╣рд░реВ, рдпрджрд┐ CSI рдирд┐рдпрдиреНрддреНрд░рдХрд▓реЗ рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░реНрдЫ рдХрд┐ рдпрд╕рд▓реЗ рдбрд┐рд╕реНрдХрд▓рд╛рдИ "рдЕрдлрд▓рд╛рдЗрди" рдорд╛рддреНрд░ рд░рд┐рд╕рд╛рдЗрдЬ рдЧрд░реНрди рд╕рдХреНрдЫ (VolumeExpansion.OFFLINE), рддреНрдпрд╕рдкрдЫрд┐ рдбрд┐рд╕реНрдХ рдмрдврд╛рдЙрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдпрд╕рд░реА рдЬрд╛рдиреБрдкрд░реНрдЫ:

рдпрджрд┐ рдкреНрд▓рдЧрдЗрдирд╕рдБрдЧ рдорд╛рддреНрд░ рдЫ VolumeExpansion.OFFLINE рд╡рд┐рд╕реНрддрд╛рд░ рдХреНрд╖рдорддрд╛ рд░ рднреЛрд▓реНрдпреБрдо рд╣рд╛рд▓ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЫ рд╡рд╛ рдиреЛрдбрдорд╛ рдЙрдкрд▓рдмреНрдз рдЫ ControllerExpandVolume рдХреБрдиреИ рдПрдХ рдкрдЫрд┐ рдорд╛рддреНрд░ рдХрд▓ рдЧрд░реНрдиреБрдкрд░реНрдЫ:

  • рдкреНрд▓рдЧрдЗрдирдорд╛ рдирд┐рдпрдиреНрддреНрд░рдХ рдЫ PUBLISH_UNPUBLISH_VOLUME рдХреНрд╖рдорддрд╛ рд░ ControllerUnpublishVolume рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЖрд╣реНрд╡рд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫред

рд╡рд╛ рдЕрд░реВ

  • рдкреНрд▓рдЧрдЗрдирд╕рдБрдЧ рдирд┐рдпрдиреНрддреНрд░рдХ рдЫреИрди PUBLISH_UNPUBLISH_VOLUME рдХреНрд╖рдорддрд╛, рдкреНрд▓рдЧрдЗрдирд╕рдБрдЧ рдиреЛрдб рдЫ STAGE_UNSTAGE_VOLUME рдХреНрд╖рдорддрд╛, рд░ NodeUnstageVolume рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдореНрдкрдиреНрди рднрдПрдХреЛ рдЫред

рд╡рд╛ рдЕрд░реВ

  • рдкреНрд▓рдЧрдЗрдирд╕рдБрдЧ рдирд┐рдпрдиреНрддреНрд░рдХ рдЫреИрди PUBLISH_UNPUBLISH_VOLUME рдХреНрд╖рдорддрд╛, рди рдиреЛрдб STAGE_UNSTAGE_VOLUME рдХреНрд╖рдорддрд╛, рд░ NodeUnpublishVolume рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдореНрдкрдиреНрди рдЧрд░реЗрдХреЛ рдЫред

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

рдпрджреНрдпрдкрд┐, рджреБрд░реНрднрд╛рдЧреНрдпрд╡рд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╛рдЗрдбрдХрд╛рд░рд╣рд░реВ рдорд╛рд░реНрдлрдд CSI рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рд▓реЗ рдпреА рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрджреИрди:

  • рд╕рд╛рдЗрдбрдХрд╛рд░ рдХрдиреНрдЯреЗрдирд░рдорд╛ csi-attacher, рдЬреБрди рдорд╛рдЙрдиреНрдЯрд╣рд░реВ рдмреАрдЪ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреНрддрд░рдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐рдХреЛ рд▓рд╛рдЧрд┐ рдЬрд┐рдореНрдореЗрд╡рд╛рд░ рд╣реБрдиреБрдкрд░реНрдЫ, рдпреЛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЕрдлрд▓рд╛рдЗрди рд░рд┐рд╕рд╛рдЗрдЬрдорд╛ рд▓рд╛рдЧреВ рд╣реБрдБрджреИрдиред рдпрд╕ рд╡рд┐рд╖рдпрдорд╛ рдЫрд▓рдлрд▓ рд╕реБрд░реБ рднрдПрдХреЛ рдЫ рдпрд╣рд╛рдБ.
  • рдпрд╕ рд╕рдиреНрджрд░реНрднрдорд╛ рд╕рд╛рдЗрдбрдХрд╛рд░ рдХрдиреНрдЯреЗрдирд░ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдХреЗ рд╣реЛ? CSI рдкреНрд▓рдЧрдЗрди рдЖрдлреИрд▓реЗ Kubernetes API рд╕рдБрдЧ рдЕрдиреНрддрд░реНрдХреНрд░рд┐рдпрд╛ рдЧрд░реНрджреИрди, рддрд░ рд╕рд╛рдЗрдбрдХрд╛рд░ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдкрдард╛рдЗрдПрдХреЛ gRPC рдХрд▓рд╣рд░реВрд▓рд╛рдИ рдорд╛рддреНрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рдиреНрдЫред рдкрдЫрд┐рд▓реНрд▓реЛ рд╡рд┐рдХрд╛рд╕ рднрдЗрд░рд╣реЗрдХреЛ рдЫ Kubernetes рд╕рдореБрджрд╛рдп рджреНрд╡рд╛рд░рд╛ред

рд╣рд╛рдореНрд░реЛ рдХреЗрд╕рдорд╛ (CSI рдкреНрд▓рдЧрдЗрди), рдбрд┐рд╕реНрдХ рдмрдврд╛рдЙрдиреЗ рдХрд╛рд░реНрдп рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

  1. рд╣рд╛рдореАрд▓реЗ gRPC рдХрд▓ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВ ControllerExpandVolume;
  2. рд╣рд╛рдореА API рдорд╛ рдбрд┐рд╕реНрдХ рдмрдврд╛рдЙрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджреИрдЫреМрдВ, рддрд░ рдбрд┐рд╕реНрдХ рдорд╛рдЙрдиреНрдЯ рднрдПрдХреЛрд▓реЗ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрди рдЕрд╕рдореНрднрд╡рддрд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╣рд╛рдореАрд▓реЗ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВ;
  3. рд╣рд╛рдореА рдирдХреНрд╕рд╛рдорд╛ рдбрд┐рд╕реНрдХ рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛ рднрдгреНрдбрд╛рд░ рдЧрд░реНрдЫреМрдВ, рдЬрд╕рдорд╛ рдбрд┐рд╕реНрдХрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреНрдЫрдиреН рдЬрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╡реГрджреНрдзрд┐ рдЕрдкрд░реЗрд╢рди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддрд▓, рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЛ рд▓рд╛рдЧреА, рд╣рд╛рдореА рдпреЛ рдирдХреНрд╕рд╛ рдХреЛ рд░реВрдкрдорд╛ рдХрд▓ рдЧрд░реНрдиреЗрдЫреМрдВ volumeResizeRequired;
  4. рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдбрд┐рд╕реНрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдкреЛрдб рд╣рдЯрд╛рдЙрдиреБрд╣реЛрд╕реНред Kubernetes рдпрд╕рд▓рд╛рдИ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫред рддрд╛рдХрд┐ рдбрд┐рд╕реНрдХ рдорд╛рдЙрдиреНрдЯ рдЧрд░реНрди рд╕рдордп рдЫреИрди (ControllerPublishVolume) рдорд╛рдЙрдиреНрдЯ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрд╛ рд╡реГрджреНрдзрд┐ рдЕрдкрд░реЗрд╢рди рдкреВрд░рд╛ рдЧрд░реНрдиреБ рдЕрдШрд┐, рд╣рд╛рдореА рдЬрд╛рдБрдЪ рдЧрд░реНрдЫреМрдВ рдХрд┐ рджрд┐рдЗрдПрдХреЛ рдбрд┐рд╕реНрдХ рдЕрдЭреИ рдЫ volumeResizeRequired рд░ рддреНрд░реБрдЯрд┐ рдлрд┐рд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН;
  5. CSI рдбреНрд░рд╛рдЗрднрд░рд▓реЗ рд░рд┐рд╕рд╛рдЗрдЬ рд╕рдЮреНрдЪрд╛рд▓рди рдкреБрди: рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫред рдпрджрд┐ рдЕрдкрд░реЗрд╢рди рд╕рдлрд▓ рднрдпреЛ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдбрд┐рд╕реНрдХрдмрд╛рдЯ рд╣рдЯрд╛рдЙрдиреБрд╣реЛрд╕реН volumeResizeRequired;
  6. рдХрд┐рдирднрдиреЗ рдбрд┐рд╕реНрдХ ID рдмрд╛рдЯ рд╣рд░рд╛рдЗрд░рд╣реЗрдХреЛ рдЫ volumeResizeRequired, ControllerPublishVolume рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкрд╛рд╕ рд╣реБрдиреНрдЫ, рдбрд┐рд╕реНрдХ рдорд╛рдЙрдиреНрдЯ рд╣реБрдиреНрдЫ, рдкреЛрдб рд╕реБрд░реБ рд╣реБрдиреНрдЫред

рд╕рдмреИ рдХреБрд░рд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╕рд░рд▓ рджреЗрдЦрд┐рдиреНрдЫ, рддрд░ рд╕рдзреИрдВрдХреЛ рд░реВрдкрдорд╛ рддреНрдпрд╣рд╛рдБ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдЫрдиреНред рдбрд┐рд╕реНрдХ рдмрдврд╛рдЙрдБрдЫ рдмрд╛рд╣реНрдп-рд░рд┐рд╕рд╛рдЗрдЬрд░, рдЬреБрди рдЕрдкрд░реЗрд╢рдирдХреЛ рдХреНрд░рдордорд╛ рддреНрд░реБрдЯрд┐рдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рд▓рд╛рдо рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ 1000 рд╕реЗрдХреЗрдиреНрдб рд╕рдореНрдордХреЛ рдЯрд╛рдЗрдордЖрдЙрдЯ рдЯрд╛рдЗрдордорд╛ рдШрд╛рддреАрдп рд╡реГрджреНрдзрд┐рдХреЛ рд╕рд╛рде:

func DefaultControllerRateLimiter() RateLimiter {
  return NewMaxOfRateLimiter(
  NewItemExponentialFailureRateLimiter(5*time.Millisecond, 1000*time.Second),
  // 10 qps, 100 bucket size.  This is only for retry speed and its only the overall factor (not per item)
  &BucketRateLimiter{Limiter: rate.NewLimiter(rate.Limit(10), 100)},
  )
}

рдпрд╕рд▓реЗ рдЖрд╡рдзрд┐рдХ рд░реВрдкрдорд╛ рдбрд┐рд╕реНрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛рд░реНрдп 15+ рдорд┐рдиреЗрдЯрдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реБрди рд╕рдХреНрдЫ рд░ рдпрд╕рд░реА, рд╕рдореНрдмрдиреНрдзрд┐рдд рдкреЛрдб рдЕрдиреБрдкрд▓рдмреНрдз рд╣реБрди рд╕рдХреНрдЫред

рдПрдХ рдорд╛рддреНрд░ рд╡рд┐рдХрд▓реНрдк рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдзреЗрд░реИ рд╕рдЬрд┐рд▓реИ рд░ рдкреАрдбрд╛рд░рд╣рд┐рдд рд░реВрдкрдорд╛ рд╕рдореНрднрд╛рд╡рд┐рдд рдбрд╛рдЙрдирдЯрд╛рдЗрдо рдХрдо рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдпреЛ рдЕрдзрд┐рдХрддрдо рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реАрдорд╛рдХреЛ рд╕рд╛рде рдмрд╛рд╣реНрдп-рд░рд┐рд╕рд╛рдЗрдЬрд░рдХреЛ рд╣рд╛рдореНрд░реЛ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рдкреНрд░рдпреЛрдЧ рдерд┐рдпреЛред 5 рд╕реЗрдХреЗрдиреНрдбрдорд╛:

workqueue.NewItemExponentialFailureRateLimiter(5*time.Millisecond, 5*time.Second)

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

рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рд╕реБрд░реБ рдЧрд░реНрди?

рдЪрд╛рд▓рдХ Kubernetes рд╕рдВрд╕реНрдХрд░рдг 1.15 рд░ рдЙрдЪреНрдЪ рдорд╛ рд╕рдорд░реНрдерд┐рдд рдЫред рдЪрд╛рд▓рдХрд▓реЗ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдирд┐рдореНрди рдЖрд╡рд╢реНрдпрдХрддрд╛рд╣рд░реВ рдкреВрд░рд╛ рдЧрд░реНрдиреБрдкрд░реНрдЫ:

  • рдлреНрд▓реНрдпрд╛рдЧ --allow-privileged рдореВрд▓реНрдп рдорд╛ рд╕реЗрдЯ true API рд╕рд░реНрднрд░ рд░ kubelet рдХреЛ рд▓рд╛рдЧрд┐;
  • рд╕рдорд╛рд╡реЗрд╢ --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true API рд╕рд░реНрднрд░ рд░ kubelet рдХреЛ рд▓рд╛рдЧрд┐;
  • рдорд╛рдЙрдиреНрдЯ рдкреНрд░рд╕рд╛рд░ (рдорд╛рдЙрдиреНрдЯ рдкреНрд░рд╕рд╛рд░) рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рд╕рдХреНрд╖рдо рд╣реБрдиреБрдкрд░реНрдЫред рдбрдХрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, рд╕рд╛рдЭрд╛ рдорд╛рдЙрдиреНрдЯрд╣рд░реВрд▓рд╛рдИ рдЕрдиреБрдорддрд┐ рджрд┐рди рдбреЗрдорди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдиреБрдкрд░реНрдЫред

рд╕реНрдерд╛рдкрдирд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИ рдЖрд╡рд╢реНрдпрдХ рдЪрд░рдгрд╣рд░реВ README рдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫред рд╕реНрдерд╛рдкрдирд╛рдорд╛ manifests рдмрд╛рдЯ Kubernetes рдорд╛ рд╡рд╕реНрддреБрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рд╕рдорд╛рд╡реЗрд╢ рдЫред

рдЪрд╛рд▓рдХрд▓реЗ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдирд┐рдореНрди рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрдЫ:

  • manifest рдорд╛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рдкрд╣рд┐рдЪрд╛рдирдХрд░реНрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реН (folder-id) Yandex.Cloud (рдХрд╛рдЧрдЬрд╛рдд рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН);
  • Yandex.Cloud API рд╕рдБрдЧ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрди, CSI рдЪрд╛рд▓рдХрд▓реЗ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫред рдкреНрд░рдХрдЯрдорд╛, рдЧреЛрдкреНрдп рдкрд╛рд░рд┐рдд рд╣реБрдиреБрдкрд░реНрдЫ рдЕрдзрд┐рдХреГрдд рдХреБрдЮреНрдЬреАрд╣рд░реВ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛рдмрд╛рдЯред рдХрд╛рдЧрдЬрд╛рддрдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ, рдХрд╕рд░реА рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рд░ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗред

рд╕рдордЧреНрд░рдорд╛ - рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рд░ рд╣рд╛рдореА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЦреБрд╕реА рд╣реБрдиреЗрдЫреМрдВ рд░ рдирдпрд╛рдБ рдореБрджреНрджрд╛рд╣рд░реВрдпрджрд┐ рддрдкрд╛рдЗрдБ рдХреБрдиреИ рд╕рдорд╕реНрдпрд╛ рд╕рд╛рдордирд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ!

рдердк рд╕рдорд░реНрдерди

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

рдердк рд░реВрдкрдорд╛, Yandex рд╕рдБрдЧ рд╕рдореНрднрд╡рддрдГ рдпрд╕рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд Kubernetes рдХреНрд▓рд╕реНрдЯрд░рдорд╛ CSI рдбреНрд░рд╛рдЗрднрд░рдХреЛ рдЖрдлреНрдиреИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЫ, рдЬреБрди рдЦреБрд▓рд╛ рд╕реНрд░реЛрддрдорд╛ рдЬрд╛рд░реА рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рд╣рд╛рдореА рдпреЛ рд╡рд┐рдХрд╛рд╕ рд╡рд┐рдХрд▓реНрдкрд▓рд╛рдИ рдЕрдиреБрдХреВрд▓рдХреЛ рд░реВрдкрдорд╛ рдкрдирд┐ рджреЗрдЦреНрдЫреМрдВ - рд╕рдореБрджрд╛рдпрд▓реЗ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рдпрдХрдмрд╛рдЯ рдкреНрд░рдорд╛рдгрд┐рдд рдЪрд╛рд▓рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫ, рддреЗрд╕реНрд░реЛ-рдкрдХреНрд╖ рдХрдореНрдкрдиреАрдмрд╛рдЯ рд╣реЛрдЗрдиред

PS

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

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

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