Yandex.Cloud рд╕рд╛рдареА Kubernetes рдордзреНрдпреЗ CSI рдбреНрд░рд╛рдЗрд╡реНрд╣рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдЖрдордЪрд╛ рдЕрдиреБрднрд╡

Yandex.Cloud рд╕рд╛рдареА Kubernetes рдордзреНрдпреЗ CSI рдбреНрд░рд╛рдЗрд╡реНрд╣рд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдЖрдордЪрд╛ рдЕрдиреБрднрд╡

рдЖрдореНтАНрд╣рд╛рд▓рд╛ рд╣реЗ рдЬрд╛рд╣реАрд░ рдХрд░рддрд╛рдирд╛ рдЖрдирдВрдж рд╣реЛрдд рдЖрд╣реЗ рдХреА рдлреНрд▓реЕрдВрдЯ рдХреБрдмреЗрд░реНрдиреЗрдЯреНрд╕рд╕рд╛рдареА рдореБрдХреНрдд рд╕реНрд░реЛрдд рд╕рд╛рдзрдирд╛рдВрдордзреНтАНрдпреЗ рдЖрдкрд▓реЗ рдпреЛрдЧрджрд╛рди рд╡рд╛рдврд╡рдд рдЖрд╣реЗ. CSI рдбреНрд░рд╛рдЗрд╡реНрд╣рд░рдЪреА рдЕрд▓реНрдлрд╛ рдЖрд╡реГрддреНрддреА (рдХрдВрдЯреЗрдирд░ рд╕реНрдЯреЛрд░реЗрдЬ рдЗрдВрдЯрд░рдлреЗрд╕) Yandex.Cloud рд╕рд╛рдареА.

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

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

рд╣реЗ рдХрд╛?

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

рдбреЗрдХрд╣рд╛рдКрд╕ рд╡рд╛рдкрд░рдгрд╛рд▒реНрдпрд╛ рдХреНрд▓рд╕реНрдЯрд░реНрд╕рдордзреНрдпреЗ рдСрдкрд░реЗрд╢рдирд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реЗ рд╕рд░реНрд╡ рдШрдЯрдХ рдЕрд╕рддрд╛рдд: рдмреЕрд▓рдиреНрд╕рд░, рд╕реЛрдпреАрд╕реНрдХрд░ рдЪрд╛рд░реНрдЯрд╕рд╣ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ, рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЖрдгрд┐ рдЕреЕрд▓рд░реНрдЯреНрд╕, рд╕рд░реНрд╡ рдбреЕрд╢рдмреЛрд░реНрдбреНрд╕рдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдмрд╛рд╣реНрдп рдкреНрд░рджрд╛рддреНрдпрд╛рдВрджреНрд╡рд╛рд░реЗ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЗ. рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рд╕реЛрд▓реНрдпреВрд╢рдирдордзреНрдпреЗ рдЕрд╕реЗ "рдкрдВрдк рдЕрдк" рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдд рдХрд╛рд╣реА рдЕрд░реНрде рдирд╛рд╣реА, рдХрд╛рд░рдг рд╣реЗ рдПрдХрддрд░ рдЕрд╢рдХреНрдп рдЖрд╣реЗ рдХрд┐рдВрд╡рд╛ рдЕрд░реНрдзреЗ рдШрдЯрдХ рдЕрдХреНрд╖рдо рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрд▓.

NB: рд╣рд╛ рдЖрдордЪрд╛ рдЕрдиреБрднрд╡ рдЖрд╣реЗ рдЖрдгрд┐ рддреЛ рдЕрдЧрджреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрд╣реЗ. рдЖрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреНрд░рдХрд╛рд░реЗ рдЕрд╕реЗ рд╕реБрдЪрд╡рдд рдирд╛рд╣реА рдХреА рдкреНрд░рддреНрдпреЗрдХрд╛рдиреЗ рддрдпрд╛рд░-рддрдпрд╛рд░ рдЙрдкрд╛рдп рд╡рд╛рдкрд░рдгреНрдпрд╛рдРрд╡рдЬреА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░реНрд╕ рд╕реНрд╡рддрдГрд╣реВрди рддреИрдирд╛рдд рдХрд░рд╛рд╡реЗрдд. рддрд╕реЗ, рдЖрдореНрд╣рд╛рд▓рд╛ Yandex рд╡рд░реВрди Kubernetes рдСрдкрд░реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдХреЛрдгрддрд╛рд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрднрд╡ рдирд╛рд╣реА рдЖрдгрд┐ рдЖрдореНрд╣реА рдпрд╛ рд▓реЗрдЦрд╛рдд рдпрд╛ рд╕реЗрд╡реЗрдЪреЗ рдХреЛрдгрддреЗрд╣реА рдореВрд▓реНрдпрд╛рдВрдХрди рджреЗрдгрд╛рд░ рдирд╛рд╣реА.

рддреЗ рдХрд╛рдп рдЖрдгрд┐ рдХреЛрдгрд╛рд╕рд╛рдареА рдЖрд╣реЗ?

рддрд░, рдЖрдореНрд╣реА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдордзреАрд▓ рд╕реНрдЯреЛрд░реЗрдЬрдЪреНрдпрд╛ рдЖрдзреБрдирд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рдмрджреНрджрд▓ рдЖрдзреАрдЪ рдмреЛрд▓рд▓реЛ рдЖрд╣реЛрдд: CSI рдХрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ? ╨╕ рд╕рдорд╛рдЬ рдХрд╕рд╛ рдЖрд▓рд╛ рдпрд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдирд╛рдХрдбреЗ.

рд╕рдзреНрдпрд╛, рдмрд░реНтАНрдпрд╛рдЪ рдореЛрдареНрдпрд╛ рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддреНрдпрд╛рдВрдиреА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдХреНрд▓рд╛рдЙрдб рдбрд┐рд╕реНрдХрдЪрд╛ рд╡рд╛рдкрд░ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдордзреНрдпреЗ рдкрд░реНрд╕рд┐рд╕реНрдЯрдВрдЯ рд╡реНрд╣реЙрд▓реНрдпреВрдо рдореНрд╣рдгреВрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдбреНрд░рд╛рдпрд╡реНрд╣рд░реНрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗрдд. рдЬрд░ рдкреБрд░рд╡рдард╛рджрд╛рд░рд╛рдХрдбреЗ рдЕрд╕рд╛ рдбреНрд░рд╛рдпрд╡реНрд╣рд░ рдирд╕реЗрд▓, рдкрд░рдВрддреБ рд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЗ API рджреНрд╡рд╛рд░реЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реА рдЧреЗрд▓реА рдЕрд╕рддреАрд▓, рддрд░ рдбреНрд░рд╛рдпрд╡реНрд╣рд░ рд╕реНрд╡рддрдГ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдкрд╛рд╕реВрди рдХрд╛рд╣реАрд╣реА рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдд рдирд╛рд╣реА. Yandex.Cloud рд╕рд╣ рдЕрд╕реЗрдЪ рдШрдбрд▓реЗ.

рдЖрдореНрд╣реА рд╡рд┐рдХрд╛рд╕рд╛рдЪрд╛ рдЖрдзрд╛рд░ рдШреЗрддрд▓рд╛ DigitalOcean рдХреНрд▓рд╛рдЙрдбрд╕рд╛рдареА CSI рдбреНрд░рд╛рдЗрд╡реНрд╣рд░ рдЖрдгрд┐ рдХрдбреВрди рдХрд╛рд╣реА рдХрд▓реНрдкрдирд╛ GCP рд╕рд╛рдареА рдбреНрд░рд╛рдпрд╡реНрд╣рд░реНрд╕, рдпрд╛ рдХреНрд▓рд╛рдЙрдбреНрд╕рдЪреНрдпрд╛ API (Google рдЖрдгрд┐ Yandex) рд╕рд╣ рдкрд░рд╕реНрдкрд░рд╕рдВрд╡рд╛рджрд╛рдд рдЕрдиреЗрдХ рд╕рдорд╛рдирддрд╛ рдЖрд╣реЗрдд. рд╡рд┐рд╢реЗрд╖рддрдГ, API рдЖрдгрд┐ рдЬреАрд╕реАрдкреА, рдЖрдгрд┐ y рдпрд╛рдВрдбреЗрдХреНрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░рдд рдХрд░рд╛ 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 рдХреЙрд▓рд▓рд╛ рдкреНрд░рддрд┐рд╕рд╛рдж рджреЗрддреЗ. рдирд╡реАрдирддрдо рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдд рдЖрд╣реЗрдд рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд╕рдореБрджрд╛рдпрд╛рджреНрд╡рд╛рд░реЗ.

рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд (CSI рдкреНрд▓рдЧрдЗрди), рдбрд┐рд╕реНрдХ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪреЗ рдСрдкрд░реЗрд╢рди рдЕрд╕реЗ рджрд┐рд╕рддреЗ:

  1. рдЖрдореНрд╣рд╛рд▓рд╛ gRPC рдХреЙрд▓ рдпреЗрддреЛ ControllerExpandVolume;
  2. рдЖрдореНрд╣реА API рдордзреНрдпреЗ рдбрд┐рд╕реНрдХ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реАрдд рдЖрд╣реЛрдд, рдкрд░рдВрддреБ рдЖрдореНрд╣рд╛рд▓рд╛ рдСрдкрд░реЗрд╢рди рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЕрд╢рдХреНрдпрддреЗрдмрджреНрджрд▓ рддреНрд░реБрдЯреА рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реА рдХрд╛рд░рдг рдбрд┐рд╕реНрдХ рдорд╛рдЙрдВрдЯ рдХреЗрд▓реА рдЖрд╣реЗ;
  3. рдЖрдореНрд╣реА рдбрд┐рд╕реНрдХ рдЖрдпрдбреЗрдВрдЯрд┐рдлрд╛рдпрд░ рдирдХрд╛рд╢рд╛рдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЛ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдбрд┐рд╕реНрдХ рдЕрд╕рддрд╛рдд рдЬреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдв рдСрдкрд░реЗрд╢рди рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЦрд╛рд▓реА, рд╕рдВрдХреНрд╖рд┐рдкреНрддрддреЗрд╕рд╛рдареА, рдЖрдореНрд╣реА рдпрд╛ рдирдХрд╛рд╢рд╛рд▓рд╛ рдЕрд╕реЗ рдореНрд╣рдгреВ volumeResizeRequired;
  4. рдбрд┐рд╕реНрдХ рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓рд╛ рдкреЙрдб рдореЕрдиреНрдпреБрдЕрд▓реА рдХрд╛рдврд╛. Kubernetes рддреЗ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░реЗрд▓. рдЬреЗрдгреЗрдХрд░реВрди рдбрд┐рд╕реНрдХрд▓рд╛ рдорд╛рдЙрдВрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрд│ рдирд╕реЗрд▓ (ControllerPublishVolume) рдорд╛рдЙрдВрдЯ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддрд╛рдирд╛ рд╡рд╛рдвреАрд╡ рдСрдкрд░реЗрд╢рди рдкреВрд░реНрдг рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рдЖрдореНрд╣реА рджрд┐рд▓реЗрд▓реА рдбрд┐рд╕реНрдХ рдЕрдЬреВрдирд╣реА рдЖрд╣реЗ рдХреА рдирд╛рд╣реА рд╣реЗ рддрдкрд╛рд╕рддреЛ volumeResizeRequired рдЖрдгрд┐ рддреНрд░реБрдЯреА рдкрд░рдд рдХрд░рд╛;
  5. CSI рдбреНрд░рд╛рдпрд╡реНрд╣рд░ рд░рд┐рд╕рд╛рдЗрдЬ рдСрдкрд░реЗрд╢рди рдкреБрдиреНрд╣рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЛ. рдСрдкрд░реЗрд╢рди рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛рд╕, рдирдВрддрд░ рдбрд┐рд╕реНрдХ рдХрд╛рдврд╛ volumeResizeRequired;
  6. рдХрд╛рд░рдг рдкрд╛рд╕реВрди рдбрд┐рд╕реНрдХ рдЖрдпрдбреА рдЧрд╣рд╛рд│ рдЖрд╣реЗ 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 рд╕рд░реНрд╡реНрд╣рд░ рдЖрдгрд┐ рдХреБрдмреЗрд▓реЗрдЯрд╕рд╛рдареА;
  • рд╕рдорд╛рд╡рд┐рд╖реНрдЯ --feature-gates=VolumeSnapshotDataSource=true,KubeletPluginsWatcher=true,CSINodeInfo=true,CSIDriverRegistry=true API рд╕рд░реНрд╡реНрд╣рд░ рдЖрдгрд┐ рдХреБрдмреЗрд▓реЗрдЯрд╕рд╛рдареА;
  • рдорд╛рдЙрдВрдЯ рдкреНрд░рд╕рд╛рд░ (рдорд╛рдЙрдВрдЯ рдкреНрд░рд╕рд╛рд░) рдХреНрд▓рд╕реНрдЯрд░рд╡рд░ рд╕рдХреНрд╖рдо рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдбреЙрдХрд░ рд╡рд╛рдкрд░рддрд╛рдирд╛, рд╕рд╛рдорд╛рдпрд┐рдХ рдорд╛рдЙрдВрдЯреНрд╕рдирд╛ рдкрд░рд╡рд╛рдирдЧреА рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдорди рдХреЙрдиреНрдлрд┐рдЧрд░ рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ.

рд╕реНрдерд╛рдкрдиреЗрд╕рд╛рдареА рд╕рд░реНрд╡ рдЖрд╡рд╢реНрдпрдХ рдкрд╛рд╡рд▓реЗ рд╕реНрд╡рддрдГ README рдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ. рдЗрдиреНрд╕реНрдЯреЙрд▓реЗрд╢рдирдордзреНрдпреЗ рдореЕрдирд┐рдлреЗрд╕реНрдЯрдордзреВрди рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдордзреНрдпреЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ.

рдбреНрд░рд╛рдпрд╡реНрд╣рд░рдиреЗ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдкреБрдвреАрд▓ рдЧреЛрд╖реНрдЯреАрдВрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓:

  • рдореЕрдирд┐рдлреЗрд╕реНрдЯрдордзреНрдпреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЕрднрд┐рдЬреНрдЮрд╛рдкрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рд╛ (folder-id) Yandex.Cloud (рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдкрд╣рд╛);
  • Yandex.Cloud API рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрдгреНрдпрд╛рд╕рд╛рдареА, CSI рдбреНрд░рд╛рдпрд╡реНрд╣рд░ рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рд╡рд╛рдкрд░рддреЛ. рдореЕрдирд┐рдлреЗрд╕реНрдЯрдордзреНрдпреЗ, рд╕рд┐рдХреНрд░реЗрдЯ рдкрд╛рд╕ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЕрдзрд┐рдХреГрдд рдХрд│рд╛ рд╕реЗрд╡рд╛ рдЦрд╛рддреНрдпрд╛рддреВрди. рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рдордзреНрдпреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ, рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХрд╕реЗ рддрдпрд╛рд░ рдХрд░рд╛рд╡реЗ рдЖрдгрд┐ рдХреА рдорд┐рд│рд╡рд╛.

рдПрдХрдВрджрд░реАрдд - рд╣реЗ рдХрд░реВрди рдкрд╣рд╛, рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрднрд┐рдкреНрд░рд╛рдп рдорд┐рд│рд╛рд▓реНрдпрд╛рдиреЗ рдЖрдирдВрдж рд╣реЛрдИрд▓ рдЖрдгрд┐ рдирд╡реАрди рдореБрджреНрджреЗрддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╛рд╣реА рд╕рдорд╕реНрдпрд╛ рдЖрд▓реНрдпрд╛рд╕!

рдкреБрдвреАрд▓ рд╕рдорд░реНрдерди

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

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

PS

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

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

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