TL, рдбреЙ
- рдХрдВрдЯреЗрдирд░реЛрдВ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреА рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрди рдХреНрд╖рдорддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЙрдЧ рдФрд░ рдкреНрд░рд╛рдердорд┐рдХ рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред
- рддреЗрдЬреА рд╕реЗ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдФрд░ рдмрдврд╝реА рд╣реБрдИ рд▓рдЪреАрд▓рд╛рдкрди рдХреЗ рд▓рд┐рдП, рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрди рд╕рд┐рджреНрдзрд╛рдВрдд (рдПрдЪрдУрдкреА) рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рдЖрд╡реЗрджрди рд╕реНрддрд░ рдкрд░, рдПрдирдУрдкреА рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ: рдЙрдЪрд┐рдд рд▓реЙрдЧрд┐рдВрдЧ, рдХрд░реАрдмреА рдирд┐рдЧрд░рд╛рдиреА, тАЛтАЛрд╡рд┐рд╡реЗрдХ рдЬрд╛рдВрдЪ рдФрд░ рдкреНрд░рджрд░реНрд╢рди/рд╕рдВрдХреНрд░рдордг рдЕрдиреБрд░реЗрдЦрдгред
- NOR рдХреЗ рдПрдХ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреЗрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рддрддреНрдкрд░рддрд╛ рдЬрд╛рдВрдЪ ╨╕ рдЬреАрд╡рдВрддрддрд╛ рдЬрд╛рдВрдЪ Kubernetesред
рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреНрдпрд╛ рд╣реИ?
рдорд┐рд╢рди-рдорд╣рддреНрд╡рдкреВрд░реНрдг рдФрд░ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрд▓рдмреНрдз рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдЬреИрд╕реЗ рдкрд╣рд▓реВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рджреЛрд╖-рд╕рд╣рд┐рд╖реНрдгреБ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рд╡рд╣ рд╡рд┐рдлрд▓рддрд╛ рд╕реЗ рд╢реАрдШреНрд░рддрд╛ рд╕реЗ рдЙрдмрд░ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд▓рд╛рдЙрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ - рдЬрд╣рд╛рдВ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЬрдм рдЖрдк рдХреНрд▓рд╕реНрдЯрд░ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВ рддреЛ k8s рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЖрдкрдХреЛ рдХреБрдЫ рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИред рдпрд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди k8s рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд╡рд╕реНрде рд╣реИред рдпрд╣ рди рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реИ рдХрд┐ рдкреЙрдб рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдирдХрд╛ рдЬрд╡рд╛рдм рдХреИрд╕реЗ рджреЗрддрд╛ рд╣реИред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреЙрдб рдХреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рдЬрд╛рдирддрд╛ рд╣реИ, рд╡рд╣ рдЯреНрд░реИрдлрд╝рд┐рдХ рд░реВрдЯрд┐рдВрдЧ рдФрд░ рд▓реЛрдб рд╕рдВрддреБрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрддрдиреЗ рд╣реА рдмреЗрд╣рддрд░ рдирд┐рд░реНрдгрдп рд▓реЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрди рд╕рд┐рджреНрдзрд╛рдВрдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдордп рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрди рд╕рд┐рджреНрдзрд╛рдВрдд (HOP)
рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрди рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ
рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреНрд▓рд╛рдЙрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдорд╛рдирдХ I/O рд╕реНрдЯреНрд░реАрдо STDERR рдФрд░ STDOUT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдореБрдЦреНрдп рдИрд╡реЗрдВрдЯ рд▓реЙрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж рдПрдХ рд╕рд╣рд╛рдпрдХ рд╕реЗрд╡рд╛ рдЖрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓рдмреАрдЯ, рд▓реЙрдЧрд╕реНрдЯреИрд╢ рдпрд╛ рдлреНрд▓реБрдПрдВрдЯ, рдПрдХ рдХреЗрдВрджреНрд░реАрдХреГрдд рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдореЗрдерд┐рдпрд╕) рдФрд░ рдПрдХ рд▓реЙрдЧ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдгрд╛рд▓реА (рдИрдПрд▓рдХреЗ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╕реВрдЯ) рдореЗрдВ рд▓реЙрдЧ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЪрд┐рддреНрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЙрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрд░реАрдХреНрд╖рдг рдкреИрдЯрд░реНрди рдФрд░ рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрди рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдкреИрдЯрд░реНрди рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░реЗрдВ?
рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, k8s рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЙрдбреНрд╕ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддрд╛ рд╣реИ (
рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, k8s рдХрд░рддрд╛ рд╣реИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдБрдЪ. рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рддреНрдпрд╛рдкрди рдореЗрдВ, рдХреНрдпреВрдмрд▓реЗрдЯ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рд▓рдЧрд╛рддрд╛рд░ рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдмрд╛рд░ рдЬрдм рд╡рд╣ рд╕рдордЭ рдЬрд╛рдПрдЧрд╛ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░реБрдХ рдЧрдИ рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред рдпрджрд┐ рддреНрд░реБрдЯрд┐ рдХреЛ рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдХреЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдХрд┐рд╕реА рднреА рддреНрд░реБрдЯрд┐ рдкрд░ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдПрдирдУрдкреА рдФрд░ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрд░реАрдХреНрд╖рдг рдкреИрдЯрд░реНрди рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдПрдХрдорд╛рддреНрд░ рдЕрдлрд╝рд╕реЛрд╕ рдХреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рд╕реЗ рд╕рднреА рддреНрд░реБрдЯрд┐рдпрд╛рдБ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, k8s рдкреЙрдб рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рдЧрд╣рд░реЗ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
рдЬреАрд╡рдВрддрддрд╛ рдЬрд╛рдВрдЪ
рдХреЗ рджреМрд░рд╛рди рдЬреАрд╡рдВрддрддрд╛ рдЬрд╛рдВрдЪ рдХреНрдпреВрдмрд▓реЗрдЯ 3 рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ: рди рдХреЗрд╡рд▓ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреЙрдб рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ:
- рдкреЙрдб рдХреЗ рд▓рд┐рдП рдПрдХ HTTP рдЕрдиреБрд░реЛрдз рд╕реЗрдЯ рдХрд░реЗрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ 200 рд╕реЗ 399 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рдПрдХ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХреЛрдб 5xx рдФрд░ 4xx рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдкреЙрдб рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рднрд▓реЗ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓ рд░рд╣реА рд╣реЛред
- рдЧреИрд░-HTTP рд╕реЗрд╡рд╛рдУрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреЛрд╕реНрдЯрдлрд╝рд┐рдХреНрд╕ рдореЗрд▓ рд╕рд░реНрд╡рд░) рдХреЗ рд╕рд╛рде рдкреЙрдбреНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдЯреАрд╕реАрдкреА рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
- рдкреЙрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдордирдорд╛рдирд╛ рдЖрджреЗрд╢ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ)ред рдпрджрд┐ рдХрдорд╛рдВрдб рдкреВрд░реНрдгрддрд╛ рдХреЛрдб 0 рд╣реИ рддреЛ рдЪреЗрдХ рд╕рдлрд▓ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг. рдЕрдЧрд▓реА рдкреЙрдб рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ NodeJS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ 500 рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдРрд╕реА рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ рдХрдВрдЯреЗрдирд░ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдо рд▓рд╛рдЗрд╡рдиреЗрд╕рдкреНрд░реЛрдм рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
apiVersion: v1
kind: Pod
metadata:
name: node500
spec:
containers:
- image: magalix/node500
name: node500
ports:
- containerPort: 3000
protocol: TCP
livenessProbe:
httpGet:
path: /
port: 3000
initialDelaySeconds: 5
рдпрд╣ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдкреЙрдб рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ .spec.containers.livenessProbe
. рдкреИрд░рд╛рдореАрдЯрд░ httpGet
рдЙрд╕ рдкрде рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ HTTP GET рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдпрд╣ рд╣реИ)ред /
, рд▓реЗрдХрд┐рди рдпреБрджреНрдз рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ /api/v1/status
). рдПрдХ рдЕрдиреНрдп рд▓рд╛рдЗрд╡рдиреЗрд╕рдкреНрд░реЛрдм рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ initialDelaySeconds
, рдЬреЛ рд╕рддреНрдпрд╛рдкрди рдСрдкрд░реЗрд╢рди рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реЗрдХрдВрдб рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд▓рдВрдм рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХрдВрдЯреЗрдирд░ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдкрд░ рдпрд╣ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрд▓рдмреНрдз рд░рд╣реЗрдЧрд╛ред
рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
kubectl apply -f pod.yaml
рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж, рдЖрдк рдирд┐рдореНрди рдЖрджреЗрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреЙрдб рдХреА рд╕рд╛рдордЧреНрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
kubectl describe pods node500
рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ, рдЦреЛрдЬреЗрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓рд╛рдЗрд╡рдиреЗрд╕рдкреНрд░реЛрдм рдиреЗ рдПрдХ HTTP GET рдЕрдиреБрд░реЛрдз рд╢реБрд░реВ рдХрд┐рдпрд╛, рдХрдВрдЯреЗрдирд░ рдиреЗ рдПрдХ рддреНрд░реБрдЯрд┐ 500 тАЛтАЛрдЙрддреНрдкрдиреНрди рдХреА (рдЬреЛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛), рдФрд░ рдХреНрдпреВрдмрд▓реЗрдЯ рдиреЗ рдЗрд╕реЗ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд┐рдпрд╛ред
рдпрджрд┐ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ NideJS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреИрд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпрд╣рд╛рдВ рдРрдк.рдЬреЗрдПрд╕ рдФрд░ рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
app.js
var http = require('http');
var server = http.createServer(function(req, res) {
res.writeHead(500, { "Content-type": "text/plain" });
res.end("We have run into an errorn");
});
server.listen(3000, function() {
console.log('Server is running at 3000')
})
Dockerfile
FROM node
COPY app.js /
EXPOSE 3000
ENTRYPOINT [ "node","/app.js" ]
рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ: рдпрджрд┐ рдХрдВрдЯреЗрдирд░ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд▓рд╛рдЗрд╡рдиреЗрд╕рдкреНрд░реЛрдм рдХреЗрд╡рд▓ рдХрдВрдЯреЗрдирд░ рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдкреБрдирд░рд╛рд░рдВрдн рдЙрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрдВрдЯреЗрдирд░ рдХреЛ рдЪрд▓рдиреЗ рд╕реЗ рд░реЛрдХ рд░рд╣реА рд╣реИ, рддреЛ рдХреНрдпреВрдмрд▓реЗрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рддрддреНрдкрд░рддрд╛ рдЬрд╛рдВрдЪ
рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рд░реЗрдбреАрдиреЗрд╕рдкреНрд░реЛрдм рд▓рд╛рдЗрд╡рдиреЗрд╕рдкреНрд░реЛрдм (рдЬреАрдИрдЯреА рдЕрдиреБрд░реЛрдз, рдЯреАрд╕реАрдкреА рд╕рдВрдЪрд╛рд░ рдФрд░ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрди) рдХреЗ рд╕рдорд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЬрд┐рд╕ рдХрдВрдЯреЗрдирд░ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдЙрд╕реЗ рдкреБрдирдГ рдкреНрд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рд╕реЗ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдХрдВрдЯреЗрдирд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдмрд╣реБрдд рд╕рд╛рд░реА рдЧрдгрдирд╛рдПрдБ рдХрд░ рд░рд╣рд╛ рд╣реИ рдпрд╛ рднрд╛рд░реА рднрд╛рд░ рдХреЗ рдиреАрдЪреЗ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдмрдврд╝ рд░рд╣рд╛ рд╣реИред рд▓рд╛рдЗрд╡рдиреЗрд╕рдкреНрд░реЛрдм рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрдкрд▓рдмреНрдзрддрд╛ рдЬрд╛рдВрдЪ рдЯреНрд░рд┐рдЧрд░ рдХреА рдЬрд╛рддреА рд╣реИ (рдЯрд╛рдЗрдордЖрдЙрдЯрд╕реЗрдХрдВрдб рдЪреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ), рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдХреНрдпреВрдмрд▓реЗрдЯ рдХрдВрдЯреЗрдирд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред рдкреНрд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдкрд░, рдХрдВрдЯреЗрдирд░ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдХрд╛рд░реНрдп рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рд╕реЗ рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЧрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдбрд╝рдХ рдкрд░ рдПрдХ рдХрд╛рд░ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реА рд╣реИ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рджреЗрд░реА рд╣реЛ рд░рд╣реА рд╣реИ - рдФрд░ рдХрд╛рд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдЖрдЗрдП рдПрдХ redinessProbe рдкрд░рд┐рднрд╛рд╖рд╛ рд▓рд┐рдЦреЗрдВ рдЬреЛ GET рдЕрдиреБрд░реЛрдз рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдХреЛ рджреЛ рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╕реЗрдЯ рдХрд░реЗрдЧреА, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди 5 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж GET рдЕрдиреБрд░реЛрдз рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдЧрд╛ред pod.yaml рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдП:
apiVersion: v1
kind: Pod
metadata:
name: nodedelayed
spec:
containers:
- image: afakharany/node_delayed
name: nodedelayed
ports:
- containerPort: 3000
protocol: TCP
readinessProbe:
httpGet:
path: /
port: 3000
timeoutSeconds: 2
рдЖрдЗрдП kubectl рдХреЗ рд╕рд╛рде рдПрдХ рдкреЙрдб рддреИрдирд╛рдд рдХрд░реЗрдВ:
kubectl apply -f pod.yaml
рдЖрдЗрдП рдХреБрдЫ рд╕реЗрдХрдВрдб рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рджреЗрдЦреЗрдВ рдХрд┐ рд░реЗрдбреАрдиреЗрд╕рдкреНрд░реЛрдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
kubectl describe pods nodedelayed
рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреБрдЫ рдШрдЯрдирд╛рдПрдБ рд╕рдорд╛рди рд╣реИрдВ
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЪреЗрдХ рд╕рдордп 2 рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдиреЗ рдкрд░ рдХреБрдмреЗрдХреНрдЯрд▓ рдиреЗ рдкреЙрдб рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрдиреБрд░реЛрдз рд░рджреНрдж рдХрд░ рджрд┐рдпрд╛ред рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдЪрд╛рд░ рдХреЛ рдЕрдиреНрдп, рдХрд╛рд░реНрдпрд╢реАрд▓ рдкреЙрдбреНрд╕ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЕрдм рдЬрдм рдкреЙрдб рдСрдлрд▓реЛрдб рд╣реЛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдХреБрдмреЗрдХреНрдЯрд▓ рд░реВрдЯ рдлрд┐рд░ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ: GET рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЕрдм рджреЗрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдиреАрдЪреЗ рд╕рдВрд╢реЛрдзрд┐рдд рдРрдк.рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓ рд╣реИ:
var http = require('http');
var server = http.createServer(function(req, res) {
const sleep = (milliseconds) => {
return new Promise(resolve => setTimeout(resolve, milliseconds))
}
sleep(5000).then(() => {
res.writeHead(200, { "Content-type": "text/plain" });
res.end("Hellon");
})
});
server.listen(3000, function() {
console.log('Server is running at 3000')
})
TL, рдбреЙ
рдХреНрд▓рд╛рдЙрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЖрдЧрдорди рд╕реЗ рдкрд╣рд▓реЗ, рд▓реЙрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреА рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рд╕рд╛рдзрди рдереЗред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЛрдИ рд╕реБрдзрд╛рд░рд╛рддреНрдордХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рд╕рд╛рдзрди рдирд╣реАрдВ рдерд╛ред рд▓реЙрдЧ рдЖрдЬ рднреА рдЙрдкрдпреЛрдЧреА рд╣реИрдВ; рдЖрдкрд╛рддрдХрд╛рд▓реАрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдФрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рд▓реЙрдЧ рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред [рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рдм рдореЛрдирд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреНрд▓рд╛рдЙрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдмрд┐рдирд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛, рд▓реЗрдХрд┐рди k8s рдХреЗ рд╕рд╛рде рдпрд╣ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ :) - рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдиреЛрдЯред ]
рдЖрдЬ, рд╕реБрдзрд╛рд░ рд▓рдЧрднрдЧ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЛ рдЕрдм рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕ рдирд╣реАрдВ рд╣реЛрдирд╛ рдкрдбрд╝реЗрдЧрд╛ред рдирд╣реАрдВ, рдЙрдиреНрд╣реЗрдВ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрдЫрддрд╛рдЫ рдХрд░рдиреЗ рдФрд░ рдореВрд▓реНрдпрд╡рд╛рди рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рд╡реЗ рддреБрд░рдВрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗ рд╕рдХреЗрдВред рдЗрд╕реЗ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрди рд╕рд┐рджреНрдзрд╛рдВрдд (HOP) рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 2 рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ: рд░реЗрдбреАрдиреЗрд╕рдкреНрд░реЛрдм рдФрд░ рд▓рд╛рдЗрд╡рдиреЗрд╕рдкреНрд░реЛрдмред рджреЛрдиреЛрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪреЗрдХ (HTTP GET рдЕрдиреБрд░реЛрдз, рдЯреАрд╕реАрдкреА рд╕рдВрдЪрд╛рд░ рдФрд░ рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрди) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдкреЙрдбреНрд╕ рдореЗрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рд╡реЗ рдЬреЛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рднрд┐рдиреНрдирддрд╛ рд╣реЛрддреА рд╣реИред рд▓рд╛рдЗрд╡рдиреЗрд╕рдкреНрд░реЛрдм рдЗрд╕ рдЙрдореНрдореАрдж рдореЗрдВ рдХрдВрдЯреЗрдирд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐ рджреЛрдмрд╛рд░рд╛ рдирд╣реАрдВ рд╣реЛрдЧреА, рдФрд░ рд░реЗрдбреАрдиреЗрд╕рдкреНрд░реЛрдм рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдХрд╛рд░рдг рд╣рд▓ рд╣реЛрдиреЗ рддрдХ рдкреЙрдб рдХреЛ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рд╕реЗ рдЕрд▓рдЧ рдХрд░ рджреЗрддрд╛ рд╣реИред
рдЙрдЪрд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбрд┐рдЬрд╝рд╛рдЗрди рдореЗрдВ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╡реЗ рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рдПрдХрддреНрд░ рдХрд░реЗрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рд╣реЛред рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рднреА рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрд╡рд╛рд╕реНрдереНрдп рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА (рдкреНрд░реЛрдореЗрдерд┐рдпрд╕) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рд╕реНрд░реЛрдд: www.habr.com