TL; рдб
- рдХрдиреНрдЯреЗрдирд░ рд░ рдорд╛рдЗрдХреНрд░реЛ рд╕рд░реНрднрд┐рд╕реЗрд╕рд╣рд░реВрдХреЛ рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рд▓рдЧрд╣рд░реВ рд░ рдкреНрд░рд╛рдердорд┐рдХ рдореЗрдЯреНрд░рд┐рдХрд╣рд░реВ рдкрд░реНрдпрд╛рдкреНрдд рдЫреИрдирдиреНред
- рдЫрд┐рдЯреЛ рд░рд┐рдХрднрд░реА рд░ рдмрдвреНрджреЛ рд▓рдЪрд┐рд▓реЛрдкрдирдХреЛ рд▓рд╛рдЧрд┐, рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрд▓реЗ рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрди рд╕рд┐рджреНрдзрд╛рдиреНрдд (HOP) рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрдкрд░реНрдЫред
- рдЖрд╡реЗрджрди рд╕реНрддрд░рдорд╛, NOP рд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдЫ: рдЙрдЪрд┐рдд рд▓рдЧрд┐рдЩ, рдирдЬрд┐рдХрдХреЛ рдирд┐рдЧрд░рд╛рдиреА, тАЛтАЛрд╕реЗрдирд┐рдЯреА рдЬрд╛рдБрдЪ, рд░ рдкреНрд░рджрд░реНрд╢рди/рд╕рдВрдХреНрд░рдордг рдЯреНрд░реЗрд╕рд┐рдЩред
- NOR рдХреЛ рддрддреНрд╡рдХреЛ рд░реВрдкрдорд╛ рдЪреЗрдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН рддрдпрд╛рд░реА рдЬрд╛рдБрдЪ ╨╕ рдЬреАрд╡рдиреНрддрддрд╛ рдЬрд╛рдБрдЪ Kubernetesред
рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╣реЛ?
рдорд┐рд╢рди-рдорд╣рддреНрд╡рдкреВрд░реНрдг рд░ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрд▓рдмреНрдз рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдбрд┐рдЬрд╛рдЗрди рдЧрд░реНрджрд╛, рддреНрд░реБрдЯрд┐ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдЬрд╕реНрддрд╛ рдкрдХреНрд╖рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕реЛрдЪреНрдиреБ рдзреЗрд░реИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред рдпрджрд┐ рдпреЛ рдЕрд╕рдлрд▓рддрд╛рдмрд╛рдЯ рдЫрд┐рдЯреНрдЯреИ рдирд┐рдХреЛ рд╣реБрдиреНрдЫ рднрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓рд╛рдИ рджреЛрд╖ рд╕рд╣рдирд╢реАрд▓ рдорд╛рдирд┐рдиреНрдЫред рдПрдЙрдЯрд╛ рд╕рд╛рдорд╛рдиреНрдп рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрднрд┐рд╕реЗрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ - рдЬрд╣рд╛рдБ рдкреНрд░рддреНрдпреЗрдХ рдХрдореНрдкреЛрдиреЗрдиреНрдЯрд▓рд╛рдИ рдЫреБрдЯреНрдЯреИ рдХрдиреНрдЯреЗрдирд░рдорд╛ рд░рд╛рдЦрд┐рдПрдХреЛ рд╣реБрдиреНрдЫред рд░ рддрдкрд╛рдИрдБрд▓реЗ рдХреНрд▓рд╕реНрдЯрд░ рдбрд┐рдЬрд╛рдЗрди рдЧрд░реНрджрд╛ k8s рдорд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрддреНрдпрдзрд┐рдХ рдЙрдкрд▓рдмреНрдз рдЫ рднрдиреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди, рддрдкрд╛рдИрдБрд▓реЗ рдирд┐рд╢реНрдЪрд┐рдд рдврд╛рдБрдЪрд╛рд╣рд░реВ рдкрдЫреНрдпрд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддреА рдордзреНрдпреЗ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╣реЛред рдпрд╕рд▓реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрджрдЫ рдХрд┐ рдХрд╕рд░реА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ k8s рд▓рд╛рдИ рдпреЛ рд╕реНрд╡рд╕реНрде рдЫ рднрдиреЗрд░ рд╕рдЮреНрдЪрд╛рд░ рдЧрд░реНрдЫред рдпреЛ рдкреЛрдб рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ рдХрд┐ рдЫреИрди рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдЬрд╛рдирдХрд╛рд░реА рдорд╛рддреНрд░ рд╣реЛрдЗрди, рддрд░ рдпрд╕рд▓реЗ рдХрд╕рд░реА рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫ рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рдиреНрдЫ рднрдиреНрдиреЗ рдмрд╛рд░реЗ рдкрдирд┐ рд╣реЛред рдХреБрдмреЗрд░рдиреЗрдЯрд▓рд╛рдИ рдкреЛрдбрдХреЛ рд╕реНрд╡рд╛рд╕реНрдереНрдпрдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрддрд┐ рдзреЗрд░реИ рдерд╛рд╣рд╛ рдЫ, рдЯреНрд░рд╛рдлрд┐рдХ рд░рд╛рдЙрдЯрд┐рдВрдЧ рд░ рд▓реЛрдб рдмреНрдпрд╛рд▓реЗрдиреНрд╕рд┐рдЩрдХреЛ рдмрд╛рд░реЗрдорд╛ рддреНрдпрддрд┐ рдиреИ рд╕реНрдорд╛рд░реНрдЯ рдирд┐рд░реНрдгрдпрд╣рд░реВ рд▓рд┐рдиреНрдЫред рдпрд╕реИрд▓реЗ, рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрди рд╕рд┐рджреНрдзрд╛рдиреНрддрд▓реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓рд╛рдИ рд╕рдордпрдореИ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рдЬрд╡рд╛рдл рджрд┐рди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред
рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрди рд╕рд┐рджреНрдзрд╛рдиреНрдд (HOP)
рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрдирдХреЛ рд╕рд┐рджреНрдзрд╛рдиреНрдд рдПрдХ рд╣реЛ
рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдХреНрд▓рд╛рдЙрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ рдорд╛рдирдХ I/O рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВ STDERR рд░ STDOUT рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдпрд╕рдХреЛ рдореБрдЦреНрдп рдШрдЯрдирд╛рд╣рд░реВ рд▓рдЧ рдЧрд░реНрджрдЫред рдЕрд░реНрдХреЛ рд╕рд╣рд╛рдпрдХ рд╕реЗрд╡рд╛ рдЖрдЙрдБрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рдлрд╛рдЗрд▓рдмрд┐рдЯ, рд▓рдЧрд╕реНрдЯреНрдпрд╛рд╢ рд╡рд╛ рдлреНрд▓реБрдПрдиреНрдЯ, рдХреЗрдиреНрджреНрд░реАрдХреГрдд рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐ рдкреНрд░реЛрдореЗрдерд┐рдпрд╕) рд░ рд▓рдЧ рд╕рдЩреНрдХрд▓рди рдкреНрд░рдгрд╛рд▓реА (ELK рд╕рдлреНрдЯрд╡реЗрдпрд░ рд╕реБрдЗрдЯ) рдорд╛ рд▓рдЧрд╣рд░реВ рдбреЗрд▓рд┐рднрд░ рдЧрд░реНрдиреЗред рддрд▓рдХреЛ рд░реЗрдЦрд╛рдЪрд┐рддреНрд░рд▓реЗ рд╣реЗрд▓реНрде рдЯреЗрд╕реНрдЯ рдврд╛рдБрдЪрд╛ рд░ рдЙрдЪреНрдЪ рдЕрд╡рд▓реЛрдХрди рд╕рд┐рджреНрдзрд╛рдиреНрдд рдЕрдиреБрд╕рд╛рд░ рдХреНрд▓рд╛рдЙрдб рдПрдкреНрд▓рд┐рдХреЗрд╕рдирд▓реЗ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рднрдиреЗрд░ рджреЗрдЦрд╛рдЙрдБрдЫред
Kubernetes рдорд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪ рдврд╛рдБрдЪрд╛ рдХрд╕рд░реА рд▓рд╛рдЧреВ рдЧрд░реНрдиреЗ?
рдмрд╛рдХрд╕ рдмрд╛рд╣рд┐рд░, k8s рд▓реЗ рдирд┐рдпрдиреНрддреНрд░рдХрд╣рд░реВ рдордзреНрдпреЗ рдПрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреЛрдбрд╣рд░реВрдХреЛ рд╕реНрдерд┐рддрд┐ рдирд┐рдЧрд░рд╛рдиреА рдЧрд░реНрджрдЫ (
рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, k8s рдЧрд░реНрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬрд╛рдБрдЪред рдпрд╕ рдкреНрд░рдХрд╛рд░рдХреЛ рдкреНрд░рдорд╛рдгреАрдХрд░рдгрдорд╛, рдХреБрдмреЗрд▓реЗрдЯрд▓реЗ рдХрдиреНрдЯреЗрдирд░рдорд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдЕрд╡рд╕реНрдерд╛ рдирд┐рд░рдиреНрддрд░ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫред рдПрдХрдЪреЛрдЯрд┐ рдЙрд╕рд▓реЗ рдмреБрдЭреНрдпреЛ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░реЛрдХрд┐рдПрдХреЛ рдЫ, рдЙрд╕рд▓реЗ рдпрд╕рд▓рд╛рдИ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫред рдпрджрд┐ рддреНрд░реБрдЯрд┐рд▓рд╛рдИ рдХреЗрд╡рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдкреБрди: рд╕реБрд░реБ рдЧрд░реЗрд░ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреБрдиреИ рддреНрд░реБрдЯрд┐рдорд╛ рдмрдиреНрдж рдЧрд░реНрди рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рд╣реЛ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪ рддрдкрд╛рдИрдВрд▓реЗ NOP рд░ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдкрд░реАрдХреНрд╖рдг рдврд╛рдБрдЪрд╛ рдкрд╛рд▓рдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдХреЗрд╡рд▓ рджреБ:рдЦрдХреЛ рдХреБрд░рд╛ рдпреЛ рд╣реЛ рдХрд┐ рд╕рдмреИ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдкреБрди: рд╕реБрд░реБ рдЧрд░реЗрд░ рд╣рдЯрд╛рдЗрдБрджреИрдиред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, k8s рд▓реЗ рдкреЛрдбрд╕рдБрдЧ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдкрд╣рд┐рдЪрд╛рди рдЧрд░реНрди реи рдЧрд╣рд┐рд░реЛ рддрд░рд┐рдХрд╛рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ:
LivenessProbe
рдпрд╕ рд╕рдордпрдорд╛ рдЬреАрд╡рдиреНрддрддрд╛ рдЬрд╛рдБрдЪ kubelet рд▓реЗ 3 рдкреНрд░рдХрд╛рд░рдХрд╛ рдЬрд╛рдБрдЪрд╣рд░реВ рдЧрд░реНрджрдЫ: рдкреЛрдб рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рдЫ рдХрд┐ рдЫреИрди рднрдиреЗрд░ рдорд╛рддреНрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрджреИрди, рддрд░ рдпреЛ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд░ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдкрдорд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджрд┐рди рддрдпрд╛рд░ рдЫ рдХрд┐ рдЫреИрди рднрдиреЗрд░ рдкрдирд┐ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрджрдЫ:
- рдкреЛрдбрдорд╛ HTTP рдЕрдиреБрд░реЛрдз рд╕реЗрдЯ рдЕрдк рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдорд╛ 200 рджреЗрдЦрд┐ 399 рд╕рдореНрдордХреЛ рджрд╛рдпрд░рд╛рдорд╛ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛрдб рд╣реБрдиреБрдкрд░реНрдЫред рдпрд╕рд░реА, рдХреЛрдб 5xx рд░ 4xx рд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рднрдП рддрд╛рдкрдирд┐ рдкреЛрдбрдорд╛ рд╕рдорд╕реНрдпрд╛ рднрдЗрд░рд╣реЗрдХреЛ рд╕рдВрдХреЗрдд рдЧрд░реНрдЫред
- рдЧреИрд░-HTTP рд╕реЗрд╡рд╛рд╣рд░реВрд╕рдБрдЧ рдкреЛрдбрд╣рд░реВ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдореЗрд▓ рд╕рд░реНрднрд░), рддрдкрд╛рдИрдВрд▓реЗ TCP рдЬрдбрд╛рди рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
- рдкреЛрдб (рдЖрдиреНрддрд░рд┐рдХ) рдХреЛ рд▓рд╛рдЧреА рдПрдХ рдордирдорд╛рдиреА рдЖрджреЗрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрджрд┐ рдЖрджреЗрд╢ рдкреВрд░рд╛ рдЧрд░реНрдиреЗ рдХреЛрдб реж рдЫ рднрдиреЗ рдЬрд╛рдБрдЪ рд╕рдлрд▓ рдорд╛рдирд┐рдиреНрдЫред
рдпреЛ рдХрд╕рд░реА рдХрд╛рдо рдЧрд░реНрдЫ рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред рдЕрд░реНрдХреЛ рдкреЛрдб рдкрд░рд┐рднрд╛рд╖рд╛рдорд╛ рдПрдХ NodeJS рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рдорд╛рд╡реЗрд╢ рдЫ рдЬрд╕рд▓реЗ HTTP рдЕрдиреБрд░реЛрдзрд╣рд░реВрдорд╛ 500 рддреНрд░реБрдЯрд┐ рдлреНрдпрд╛рдБрдХреНрдЫред рдпрд╕реНрддреЛ рддреНрд░реБрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрд╛ рдХрдиреНрдЯреЗрдирд░ рдкреБрди: рд╕реБрд░реБ рднрдПрдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди, рд╣рд╛рдореА livenessProbe рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ:
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
)ред рдЕрд░реНрдХреЛ livenessProbe рд▓реЗ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдЫ initialDelaySeconds
, рдЬрд╕рд▓реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХрд╛рд░реНрдпрд▓рд╛рдИ рд╕реЗрдХреЗрдиреНрдбрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдкрд░реНрдЦрди рдирд┐рд░реНрджреЗрд╢рди рджрд┐рдиреНрдЫред рдврд┐рд▓рд╛рдЗ рдЖрд╡рд╢реНрдпрдХ рдЫ рдХрд┐рдирднрдиреЗ рдХрдиреНрдЯреЗрдирд░ рд╕реБрд░реБ рдЧрд░реНрди рд╕рдордп рдЪрд╛рд╣рд┐рдиреНрдЫ, рд░ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрджрд╛ рдпреЛ рдХреЗрд╣рд┐ рд╕рдордпрдХреЛ рд▓рд╛рдЧрд┐ рдЕрдиреБрдкрд▓рдмреНрдз рд╣реБрдиреЗрдЫред
рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдпреЛ рд╕реЗрдЯрд┐рдЩ рд▓рд╛рдЧреВ рдЧрд░реНрди, рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН:
kubectl apply -f pod.yaml
рдХреЗрд╣рд┐ рд╕реЗрдХреЗрдиреНрдб рдкрдЫрд┐, рддрдкрд╛рдЗрдБ рдирд┐рдореНрди рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкреЛрдбрдХреЛ рд╕рд╛рдордЧреНрд░реА рдЬрд╛рдБрдЪ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:
kubectl describe pods node500
рдЖрдЙрдЯрдкреБрдЯрдХреЛ рдЕрдиреНрддреНрдпрдорд╛, рдлреЗрд▓рд╛ рдкрд╛рд░реНрдиреБрд╣реЛрд╕реН
рддрдкрд╛рдИрд▓реЗ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, livenessProbe рд▓реЗ HTTP GET рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рд░рдореНрдн рдЧрд░реНтАНрдпреЛ, рдХрдиреНрдЯреЗрдирд░рд▓реЗ рддреНрд░реБрдЯрд┐ 500 тАЛтАЛрдЙрддреНрдкрдиреНрди рдЧрд░реНтАНрдпреЛ (рдЬреБрди рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ), рд░ рдХреБрдмреЗрд▓реЗрдЯрд▓реЗ рдпрд╕рд▓рд╛рдИ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНтАНрдпреЛред
рдпрджрд┐ рддрдкрд╛рдИрдВ NideJS рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╕рд░реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рднрдиреЗрд░ рд╕реЛрдЪреНрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рдпрд╣рд╛рдБ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХреЛ app.js рд░ Dockerfile рдЫ:
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')
})
рдбрдХрд░рдлрд╛рдЗрд▓
FROM node
COPY app.js /
EXPOSE 3000
ENTRYPOINT [ "node","/app.js" ]
рдпреЛ рдиреЛрдЯ рдЧрд░реНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫ: livenessProbe рд▓реЗ рдХрдиреНрдЯреЗрдирд░рд▓рд╛рдИ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫ рдпрджрд┐ рдпреЛ рдЕрд╕рдлрд▓ рднрдпреЛ рднрдиреЗред рдпрджрд┐ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрджрд╛ рдХрдиреНрдЯреЗрдирд░ рдЪрд▓реНрдирдмрд╛рдЯ рд░реЛрдХреНрдиреЗ рддреНрд░реБрдЯрд┐рд▓рд╛рдИ рд╕рдЪреНрдпрд╛рдЙрдБрджреИрди рднрдиреЗ, рдХреБрдмреЗрд▓реЗрдЯрд▓реЗ рд╕рдорд╕реНрдпрд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдХрд╛рд░реНрдп рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫреИрдиред
рддрдпрд╛рд░реА рдЬрд╛рдБрдЪ
ReadinessProbe рд▓реЗ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХрд╛рд░реНрдпрд╣рд░реВ рдмрд╛рд╣реЗрдХ livenessProbes (GET рдЕрдиреБрд░реЛрдзрд╣рд░реВ, TCP рд╕рдВрдЪрд╛рд░ рд░ рдЖрджреЗрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди) рдЬрд╕реНрддреИ рдХрд╛рдо рдЧрд░реНрджрдЫред рдХрдиреНрдЯреЗрдирд░ рдЬрд╕рдорд╛ рд╡рд┐рдлрд▓рддрд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдЗрдПрдХреЛ рдЫ рдкреБрди: рд╕реБрд░реБ рдЧрд░рд┐рдПрдХреЛ рдЫреИрди, рддрд░ рдЖрдЧрдорди рдЯреНрд░рд╛рдлрд┐рдХрдмрд╛рдЯ рдЕрд▓рдЧ рдЧрд░рд┐рдПрдХреЛ рдЫред рдХрд▓реНрдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рдПрдЙрдЯрд╛ рдХрдиреНрдЯреЗрдирд░рд▓реЗ рдзреЗрд░реИ рдЧрдгрдирд╛рд╣рд░реВ рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫ рд╡рд╛ рдзреЗрд░реИ рднрд╛рд░рдорд╛ рдЫ, рдЬрд╕рд▓реЗ рдЧрд░реНрджрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рдмрдвреНрджреИрдЫред LivenessProbe рдХреЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЙрдкрд▓рдмреНрдзрддрд╛ рдЬрд╛рдБрдЪ рдЯреНрд░рд┐рдЧрд░ рд╣реБрдиреНрдЫ (рдЯрд╛рдЗрдордЖрдЙрдЯ рд╕реЗрдХреЗрдиреНрдб рдЬрд╛рдБрдЪ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдорд╛рд░реНрдлрдд), рдЬрд╕ рдкрдЫрд┐ рдХреБрдмреЗрд▓реЗрдЯрд▓реЗ рдХрдиреНрдЯреЗрдирд░ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрджрдЫред рдЬрдм рд╕реБрд░реБ рд╣реБрдиреНрдЫ, рдХрдиреНрдЯреЗрдирд░рд▓реЗ рд╕рдВрд╕рд╛рдзрди-рдЧрд╣рди рдХрд╛рд░реНрдпрд╣рд░реВ рдЧрд░реНрди рдерд╛рд▓реНрдЫ рд░ рдкреБрди: рд╕реБрд░реБ рд╣реБрдиреНрдЫред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЧрддрд┐ рдЪрд╛рд╣рд┐рдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдпреЛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╣реБрди рд╕рдХреНрдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рд╕рдбрдХрдорд╛ рдХрд╛рд░ рд╕рд░реНрднрд░рдмрд╛рдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдЦрд┐рд░рд╣реЗрдХреЛ рдЫ, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдврд┐рд▓реЛ рднрдПрдХреЛ рдЫ - рд░ рдХрд╛рд░ рджреБрд░реНрдШрдЯрдирд╛рдорд╛ рд╣реБрдиреНрдЫред
рдПрдЙрдЯрд╛ 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 рд╕реЗрдХреЗрдиреНрдб рдирд╛рдШреНрдпреЛред рдмрд░реБ, рдЙрдирд▓реЗ рдЕрдиреБрд░реЛрдз рд░рджреНрдж рдЧрд░реЗред рдЖрдЧрдорди рд╕рдВрдЪрд╛рд░рд╣рд░реВ рдЕрдиреНрдп, рдХрд╛рдо рдЧрд░реНрдиреЗ рдкреЛрдбрд╣рд░реВрдорд╛ рдкреБрди: рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЧрд░рд┐рдиреНрдЫред
рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рдЕрдм рдкреЛрдб рдЕрдлрд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдЫ, kubectl рд▓реЗ рдпрд╕рд▓рд╛рдИ рдлреЗрд░рд┐ рдЕрдиреБрд░реЛрдз рдЧрд░реНрджрдЫ: GET рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдЕрдм рдврд┐рд▓реЛ рд╣реБрдБрджреИрдиред
рддреБрд▓рдирд╛рдХреЛ рд▓рд╛рдЧрд┐, рддрд▓ рдкрд░рд┐рдорд╛рд░реНрдЬрд┐рдд app.js рдлрд╛рдЗрд▓ рдЫ:
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) рд▓рд╛рдИ рдкрдЫреНрдпрд╛рдЙрдБрдЫред
Kubernetes рд▓реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ 2 рдкреНрд░рдХрд╛рд░рдХрд╛ рд╕реНрд╡рд╛рд╕реНрдереНрдп рдЬрд╛рдБрдЪрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ: ReadinessProbe рд░ livenessProbeред рджреБрдмреИрд▓реЗ рдПрдЙрдЯреИ рдкреНрд░рдХрд╛рд░рдХрд╛ рдЪреЗрдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫрдиреН (HTTP GET рдЕрдиреБрд░реЛрдзрд╣рд░реВ, TCP рд╕рдВрдЪрд╛рд░ рд░ рдЖрджреЗрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди)ред рдкреЛрдбрд╣рд░реВрдорд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рдЬрд╡рд╛рдлрдорд╛ рдЙрдиреАрд╣рд░реВрд▓реЗ рдХреЗ рдирд┐рд░реНрдгрдпрд╣рд░реВ рдЧрд░реНрдЫрдиреН рднрдиреНрдиреЗ рдХреБрд░рд╛рдорд╛ рддрд┐рдиреАрд╣рд░реВ рднрд┐рдиреНрди рд╣реБрдиреНрдЫрдиреНред livenessProbe рд▓реЗ рддреНрд░реБрдЯрд┐ рдлреЗрд░рд┐ рдирд╣реЛрд╕реН рднрдиреНрдиреЗ рдЖрд╢рд╛рдорд╛ рдХрдиреНрдЯреЗрдирд░ рдкреБрди: рд╕реБрд░реБ рдЧрд░реНрдЫ, рд░ ReadinessProbe рд▓реЗ рд╕рдорд╕реНрдпрд╛рдХреЛ рдХрд╛рд░рдг рд╕рдорд╛рдзрд╛рди рдирднрдПрд╕рдореНрдо рдкреЛрдбрд▓рд╛рдИ рдЖрдЧрдорди рдЯреНрд░рд╛рдлрд┐рдХрдмрд╛рдЯ рдЕрд▓рдЧ рдЧрд░реНрдЫред
рдЙрдЪрд┐рдд рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдбрд┐рдЬрд╛рдЗрдирдорд╛ рджреБрд╡реИ рдкреНрд░рдХрд╛рд░рдХрд╛ рдЬрд╛рдБрдЪрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреБрдкрд░реНрдЫ рд░ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдкрд░реНрдпрд╛рдкреНрдд рдбреЗрдЯрд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░реЗрдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБрдкрд░реНрджрдЫ, рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рдЬрдм рдЕрдкрд╡рд╛рдж рдлреНрдпрд╛рдБрдХрд┐рдПрдХреЛ рдЫред рдпрд╕рд▓реЗ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рд╕реНрд╡рд╛рд╕реНрдереНрдп рдореЗрдЯреНрд░рд┐рдХреНрд╕рдХреЛ рд╕рд╛рде рдЕрдиреБрдЧрдорди рдкреНрд░рдгрд╛рд▓реА (рдкреНрд░реЛрдореЗрдерд┐рдпрд╕) рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗ рдЖрд╡рд╢реНрдпрдХ API рдЕрдиреНрддреНрдп рдмрд┐рдиреНрджреБрд╣рд░реВ рдкрдирд┐ рджреЗрдЦрд╛рдЙрдиреБрдкрд░реНрджрдЫред
рд╕реНрд░реЛрдд: www.habr.com