рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕: рдПрдХ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ рд╕рд╕реНрддреА рд╡реНрдпрдХреНрддрд┐рдЧрдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдорд╛рдзрд╛рди

рдирдорд╕реНрдХрд╛рд░ рд╕рд╛рдерд┐рдпреЛрдВ!

рдЬрдирд╡рд░реА рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдЦрд┐рд░рдХрд╛рд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдкреБрд╕реНрддрдХ рд╣реИред рдЧреАрдЧреА рд╕реИрдлрд╛рди рджреНрд╡рд╛рд░рд╛ "рдорд╛рд╕реНрдЯрд░реНрдмрд┐рдВрдЧ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ 2 рд╕рдВрд╕реНрдХрд░рдг" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднрд╛рд╖рдг:


рд╣рдордиреЗ рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкрд░ рдПрдХ рдкреБрд╕реНрддрдХ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рд╣рд┐рдореНрдордд рдирд╣реАрдВ рдХреА рдереА, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рд╕рдордп рддрдХрдиреАрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реБрдкрд░ рдирд┐рдЧрдореЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рднрдпрд╛рдирдХ рдХреА рддрд░рд╣ рджрд┐рдЦрддреА рдереАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рд░рд╣реА рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╕рдорд░реНрдерди рдореЗрдВ рд╣рдо рдХрд╛рд▓реЗрдм рдбреЙрдХреНрд╕рд╕реЗ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдмрдбрд╝рд╛ рд▓реЗрдЦ рдкрдврд╝рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдиреЗ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ, рдЧреЛ рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдХрд┐рддрд╛рдм рд▓рд┐рдЦреАред рд╢реНрд░реА рдбреЙрдХреНрд╕реА рдХреЗ рддрд░реНрдХ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рд╣реИрдВ, рдФрд░ рд╣рдо рдЖрд╢рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореИрдВрдиреЗ рдЗрд╕ рд╡рд░реНрд╖ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдЧрд╣рди рдЕрдзреНрдпрдпрди рдкрд░ рдХреБрдЫ рдорд╣реАрдиреЗ рдмрд┐рддрд╛рдП: рдореБрдЭреЗ рдПрдХ рдХрд╛рд░реНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╛рдкрдХ рддрдХрдиреАрдХ рд╣реИ, рдЗрд╕рдореЗрдВ "рд╕рдм рдХреБрдЫ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмреИрдЯрд░реА рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред" рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдмрдбрд╝реЗ рдЙрджреНрдпрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдореБрдарднреЗрдбрд╝ рдХреЗ рд▓рд┐рдП рдмрд░реНрдмрд╛рдж рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдкрд░рд┐рд╖реНрдХреГрдд рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдорд╢реАрдиреЛрдВ рдХреЗ рдмрдбрд╝реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИред рдХрдерд┐рдд рддреМрд░ рдкрд░, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдкрд░рд┐рдЪрд╛рд▓рди рднрд╛рд░ рдЗрддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЫреЛрдЯреЗ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдорд╢реАрди рджрд░реНрдЬрдиреЛрдВ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рддреА рд╣реИ, рдЧреМрд░реИрдпрд╛ рдкрд░ рдПрдХ рддреЛрдк рдлрд╛рдпрд░рд┐рдВрдЧ рд╣реИред
рдореИрдВ рдЦреБрдж рдХреЛ рдЗрд╕рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛрдиреЗ рджреЗрддрд╛ред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреА рдЕрдЪреНрдЫрд╛ рд╣реИ, рдФрд░ рдЖрдЬ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдкрдиреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рд╣рд░ рдорд╣реАрдиреЗ 5 рдбреЙрд▓рд░ рд╕реЗ рдХрдо рдореЗрдВ рдЦрд░реАрдж рд╕рдХрддреЗ рд╣реИрдВред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд░рдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рд╢рдмреНрдж

рдиреАрдЪреЗ рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЕрдкрдиреЗ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреЛ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХреНрдпреЛрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣реИ

рд╣рд╛рдВ, рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреБрдЫ рд╣рдж рддрдХ рдмреЗрдорд╛рдиреА рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд▓рдЧрддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВ рдирд╣реАрдВ? рдЗрд╕ рдкрде рдХреЛ рдЪреБрдирдирд╛, рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдкрд░ рдирд┐рд░реНрдгрдп рд▓реЗрдирд╛ рд╣реЛрдЧрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ:

  1. рдЖрд╡реЗрджрди рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд░реЗрдВ? рдмрд╕ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ rsync рдХрд░реЗрдВ?
  2. рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдпрджрд┐ рдЖрдк рдкрд╛рдпрдерди рдпрд╛ рд░реВрдмреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рдЖрдк рдХреЗрд╡рд▓ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ?
  3. рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреИрд╕реЗ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ? рдмрд╕ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдмрд╛рдЗрдирд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдиреЛрд╣ рдХрд░реЗрдВ? рдпрд╣ рд╢рд╛рдпрдж рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдордб рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛?
  4. рдЬрдм рдЖрдк рд╕рднреА рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЛрдореЗрди рдирд╛рдо рдпрд╛ http рдкрде рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдХрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВрдЧреЗ? (рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЗрд╕рдХреЗ рд▓рд┐рдП haproxy рдпрд╛ nginx рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)
  5. рдорд╛рди рд▓реАрдЬрд┐рдП рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдкрдбреЗрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдлрд┐рд░ рдЖрдк рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдХреИрд╕реЗ рд░реЛрд▓ рдХрд░реЗрдВрдЧреЗ? рд╕реЗрд╡рд╛ рдХреЛ рд░реЛрдХреЗрдВ, рдХреЛрдб рдХреЛ рддреИрдирд╛рдд рдХрд░реЗрдВ, рд╕реЗрд╡рд╛ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░реЗрдВ? рдбрд╛рдЙрдирдЯрд╛рдЗрдо рд╕реЗ рдХреИрд╕реЗ рдмрдЪреЗрдВ?
  6. рдпрджрд┐ рдЖрдк рддреИрдирд╛рддреА рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рдЕрд╡рд╕рд░ рд╣реИрдВ? (рд╕рд╛рдореНрд▓рд┐рдВрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ ... рдпрд╣ рд╕рд░рд▓ рд▓рд┐рдкрд┐ рдЕрдм рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд░рд▓ рдирд╣реАрдВ рд▓рдЧрддреА)
  7. рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реЗрдбрд┐рд╕? рдЗрди рд╕рднреА рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ?

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЗрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд╡реЗ рд╕рднреА рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рд╕реЗ рд╣рд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ; рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХрд┐рддрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЗрд╕ рд╕рдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рди рд╕реЛрдЪреЗрдВ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВред

Kubernetes рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реИ

рдПрдХ рдПрдХрд▓ рд╕рд░реНрд╡рд░ рд╣рдореЗрд╢рд╛ рдХреНрд░реИрд╢ рд╣реЛрдЧрд╛ред рд╣рд╛рдВ, рдпрд╣ рджреБрд░реНрд▓рдн рд╣реИ, рд╢рд╛рдпрдж рд╕рд╛рд▓ рдореЗрдВ рдПрдХ рдмрд╛рд░, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреА рдШрдЯрдирд╛ рдХреЗ рдмрд╛рдж рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд┐рд░рджрд░реНрдж рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ: рдХрд╛рдо рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рдЪ рд╣реИ рдпрджрд┐ рдЖрдкрдиреЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреВрд░реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕реНрд╡рдпрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИред рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдЪрд▓реА рд╕рднреА рдЯреАрдореЛрдВ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ? рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрдпрд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛? рдореБрдЭреЗ рдмреИрд╢реЙрд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджреНрдзрд░рдг рдпрд╛рдж рд╣реИ:
erno: рд╣рдореНрдоред рдХрдВрдкреНрдпреВрдЯрд░ рдЦреЛ рджрд┐рдпрд╛ ... рдЧрдВрднреАрд░рддрд╛ рд╕реЗ, _lost_ред рд╡рд╣ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ, рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╡рд╣ рдЕрдкрд╛рд░реНрдЯрдореЗрдВрдЯ рдореЗрдВ рдХрд╣рд╛рдВ рдЧрдпрд╛ рдерд╛ред
bash.org/?5273
рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореЗрд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдореЗрд░реЗ рд╕рд╛рде рдРрд╕рд╛ рд╣реА рд╣реБрдЖ рд╣реИред рдореБрдЭреЗ рдмрд╕ рд▓рд┐рдВрдХ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рд▓реЗрдХрд┐рди рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреВрд▓ рдЧрдпрд╛ рдХрд┐ рдмреНрд▓реЙрдЧ рдХреЛ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЕрдЪрд╛рдирдХ, рдПрдХ рджрд╕ рдорд┐рдирдЯ рдХрд╛ рдлрд┐рдХреНрд╕ рдХрд╛рдо рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдкреВрд░реЗ рд╕рдкреНрддрд╛рд╣рд╛рдВрдд рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛ред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдХ рд╡рд░реНрдгрдирд╛рддреНрдордХ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╣рдореЗрд╢рд╛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рди рдЪреАрдЬреЛрдВ рдХреЛ, рдХрдм рдФрд░ рдХрд╣рд╛рдВ рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛; рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЗ рддреИрдирд╛рдд рдХрд┐рдП рдЧрдП рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рднреА рдШрдЯрдХ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдорд╛рди рдореЗрдВ, рдиреЛрдб рд╡рд┐рдлрд▓рддрд╛ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЪреВрд▓реНрд╣рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреБрдирд░реНрд╡рд┐рддрд░рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЬрдм рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЬреЛ рд░рд╛рдЬреНрдп рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд╕рд╛рде, рдЖрдк рд╢рд╛рдпрдж рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред

Kubernetes рд╕реАрдЦрдирд╛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рдирд╣реАрдВ рд╣реИ

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдпреВрдирд┐рдХреНрд╕ рдореЙрдбрд▓ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рд╡рд╣ рдЙрди рдлреИрд╕рд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд╣реАрдВ рд╣реИ рдЬреЛ "рд╕рд┐рд░реНрдл рдПрдХ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред" рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рдпрд╣ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдЯреВрд▓ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрджрдд рд╣реИред

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

рдпрд╣ рдХрд╣рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рдХ рдХреА рдпреВрдирд┐рдХреНрд╕ рдореЗрдВ рдкрд░реНрдпрд╛рдкреНрдд рдкреГрд╖реНрдарднреВрдорд┐ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЙрд▓реЗрдЬ рд╕реЗ рд╕реНрдирд╛рддрдХ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╡рд┐рдВрдбреЛрдЬ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ 5 рд╕рд╛рд▓ рддрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рдореИрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рдореЗрд░реА рдкрд╣рд▓реА рдиреМрдХрд░реА рдЬрд╣рд╛рдВ рдореБрдЭреЗ рд▓рд┐рдирдХреНрд╕ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдард┐рди рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдореБрдЭреЗ рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рдирд╣реАрдВ рдкрддрд╛ рд╣реИ; рдореИрдВ рд▓рдЧрднрдЧ рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реВрдВред рдирдП рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╕реАрдЦрдиреЗ рдореЗрдВ рдореБрдЭреЗ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧрд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрд╕ рд╕рдордп рддрдХ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЕрдиреБрднрд╡ рдерд╛), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХрд┐рддрдирд╛ рдиреБрдХрд╕рд╛рди рд╣реБрдЖ рдерд╛ред

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде, рдЖрдк рд╕реНрдХреНрд░реИрдЪ рд╕реЗ рд╕рднреА рдХрд╛рдо рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ, рдЖрдк рд╕рд░реНрд╡рд░ рдХреЗ рдмрд┐рдирд╛ рдПрд╕рдПрд╕рдПрдЪ рдХрдиреЗрдХреНрд╢рди рдХреЗ рднреА рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдкреНрд░рд╛рд╡рдзрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдордб рд╕реАрдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ; рдпрд╣ groupadd рдХреЛ рд╕рдордЭрдиреЗ рдпрд╛ рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: groupadd рдпрд╛ addgroup ; рдЖрдкрдХреЛ ps рдпрд╛, рдИрд╢реНрд╡рд░ рдХреА рдордирд╛рд╣реА, рд╡реНрдпрд░реНрде рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдирд╣реАрдВ рд╕реАрдЦрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рд╕рднреА рдореИрдЯрд░рд┐рдпрд▓ рдЙрдкрдпреЛрдЧреА рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЗрд╕рд╕реЗ рдХреБрдЫ рднреА рдХрд╣реАрдВ рднреА рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ sysadmins рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдореНрдорд╛рди рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдпреВрдирд┐рдХреНрд╕-рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдкрдирд╛ рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреНрд░рд╢рд╛рд╕рди рдХреА рдРрд╕реА рд╕реВрдХреНрд╖реНрдорддрд╛рдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдмрд┐рдирд╛ рдРрд╕реЗ рд╕рднреА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдЙрддреНрдкрд╛рджрдХ рд░реВрдк рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдВ?

рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╣реИ:

 [Unit] Description=The NGINX HTTP and reverse proxy server After=syslog.target network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/run/nginx.pid ExecStartPre=/usr/sbin/nginx -t ExecStart=/usr/sbin/nginx ExecReload=/usr/sbin/nginx -s reload ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target 

рдЗрд╕рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдХрдард┐рди?

 apiVersion: apps/v1 kind: Deployment metadata: name: my-nginx spec: selector: matchLabels: run: my-nginx replicas: 1 template: metadata: labels: run: my-nginx spec: containers: - name: my-nginx image: nginx ports: - containerPort: 80 

рдФрд░ рдпрд╣ рдЕрднреА рднреА рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЕрдЪреНрдЫрд╛ рдорд╛рдорд▓рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рджреВрд░рд╕реНрде рд░реВрдк рд╕реЗ 100% рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд╕рд░реНрд╡рд░ рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: ansible, рдирдордХ, рдорд╣рд╛рд░рд╛рдЬ, рдХрдардкреБрддрд▓реА, рдЖрджрд┐ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдорд╛рд╕реНрдЯрд░ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдмрд╣реБрдд рдХреБрдЫ рд╕реАрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред

Kubernetes рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд

рд╕рд░реНрд╡рд░рд▓реЗрд╕ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреА рд╡рд┐рд╢рд╛рд▓ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреЗ рдпреБрдЧ рдореЗрдВ, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдкреВрд░реНрддрд┐рдХрд░реНрддрд╛рдУрдВ рд╕реЗ рдЕрдкрдиреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИред рдХрдо рд╕реЗ рдХрдо 3 рд▓реЛрдХрдкреНрд░рд┐рдп рдФрд░ рдЖрд╕рд╛рди-рд╕реЗ-рдкреНрд░рдмрдВрдзрд┐рдд рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рджрд╛рддрд╛ (Google, Amazon, Microsoft) рд╣реИрдВ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдХреЗ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЧрд╛рдпрдм рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдХрдИ рдХрдВрдкрдирд┐рдпрд╛рдВ рднреА рд╣реИрдВ рдЬреЛ рдЕрдкрдиреЗ рдХреБрдмреЗрд░рдиреЗрдЯ рд╕рдореВрд╣реЛрдВ рдХрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рдмрдВрдзрди рдХрд░рддреА рд╣реИрдВ, рдФрд░ рд╣рд░ рджрд┐рди рдРрд╕реА рдХрдВрдкрдирд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдИ рдЧреБрдирд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред рдЖрдЬ, рдПрдХ рджрд┐рди рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рд╣реИред
рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕, рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реЛрдиреЗ рдХреЗ рдирд╛рддреЗ, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд, рд╕реНрдерд┐рд░ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ, рдФрд░ рд╕реНрдЯреИрдХрдУрд╡рд░рдлреНрд▓реЛ рдкрд░ рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рдЕрдкрдиреА рдмрдЧ рдФрд░ рддрдХрдиреАрдХреА рдЪреБрдиреМрддрд┐рдпрд╛рдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдЖрдкрдХреЛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ: рджреБрдирд┐рдпрд╛ рдореЗрдВ рдРрд╕реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреМрд╢рд▓ рд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЙрдирдХрд╛ рдХрд╛рдо рдЖрдкрдХреЗ рд▓рд╛рднрд╛рдВрд╢ рд╣реИрдВ; рдЕрдЧрд▓реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдЗрд╕ рддрдХрдиреАрдХ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреБрдмреЗрд░рдиреЗрдд рддрд░рд╛рдЬреВ

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

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рдЧрд▓рдд рдЯреВрд▓ рдЪреБрдирддреЗ рд╣реИрдВ, рддреЛ рд╕рдордп рдХреЗ рд╕рд╛рде рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдХреЛрдиреЗ рдореЗрдВ рд▓реЗ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЪрд╛рдирдХ рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдореБрдЦ рд╢реЗрдл-рд╕рд░реНрд╡рд░ 1000-рд╕рд░реНрд╡рд░ рд▓реЛрдб рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реИ, рдиреАрд▓реА-рд╣рд░реА рддреИрдирд╛рддреА рдЖрдкрдХреЗ рдореЙрдбрд▓ рдореЗрдВ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдФрд░ рдХреИрдкрд┐рд╕реНрдЯреНрд░рд╛рдиреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдореЗрдВ рдШрдВрдЯреЛрдВ рд▓рдЧрддреЗ рд╣реИрдВред рдЬрдм рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪрд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЖрдХрд╛рд░ рддрдХ рдкрд╣реБрдВрдЪ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рдлрд╛рдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рд╢реБрд░реВ рд╣реЛ рдЧрдП рд╣реИрдВред рдпрд╣ рдХрд┐рддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдк рдмреБрдирд┐рдпрд╛рджреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╢рд╛рд╢реНрд╡рдд рдЧрд┐рд▓рд╣рд░реА рдХреЗ рдкрд╣рд┐рдпреЗ рдХреЛ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛?

Kubernetes рдПрдХ SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рддрд░рд╣ рд╣реИред SQL рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рдг рдФрд░ рдХреБрд╢рд▓ рдХреНрд╡реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреЗ рдХрдард┐рди рдкрд╛рдареЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рдж рд╣реИред рд╕рдВрднрд╡рддрдГ, рдЖрдкрдХреЛ рдЙрди рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рджрд╕рд╡реЗрдВ рд╣рд┐рд╕реНрд╕реЗ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА рдЬреЛ рдПрдХ рд╡реИрдз SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИрдВред рддреБрдо рднреА рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрд╛рдВрд╢ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ, SQL рдбреЗрдЯрд╛рдмреЗрд╕ рди рдХреЗрд╡рд▓ рдЖрдкрдХреА рд╕рднреА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛, рдмрд▓реНрдХрд┐ рдирд╛рдЯрдХреАрдп рд░реВрдк рд╕реЗ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдЖрдкрдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдЧрд╛ред SQL рд╕реНрдХреАрдорд╛ рдФрд░ рдЗрдВрдбреЗрдХреНрд╕рд┐рдВрдЧ рдореВрд▓ рдлрд╝рд╛рдЗрд▓-рдЖрдзрд╛рд░рд┐рдд рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореВрд▓ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдкреНрд░рдЪрд▓рд┐рдд рд╣реЛ рдЬрд╛рдПрдВрдЧреА рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрддреНрдкрд╛рдж рд╕рдордп рдХреЗ рд╕рд╛рде рдмрдврд╝рддрд╛ рдФрд░ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди SQL рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд┐рд╕реА рднреА рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд░реАрдлрд╝реИрдХреНрдЯрд░рд┐рдВрдЧ рд╕реЗ рдмрдЪрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

рдХреБрдмреЗрд░рдиреЗрдЯ рднреА рдмрдЪ рдЬрд╛рдПрдВрдЧреЗред рд╢рд╛рдпрдж рдЖрдкрдХрд╛ рдкрдХреНрд╖ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрднреА рдРрд╕реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдирд╣реАрдВ рдмрдврд╝реЗрдЧрд╛ рдЬрд╣рд╛рдБ рдЗрд╕рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдХреЗрд╡рд▓ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдкрд╛рд╕ рдХрд┐рд╕реА рднреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдХреБрд▓ рд╕рднреА рдЙрдкрдХрд░рдг рд╣реИрдВ, рдФрд░ рдЗрд╕ рдЯреВрд▓рдХрд┐рдЯ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рджреМрд░рд╛рди рдЖрдкрдХреЛ рдЬреЛ рдХреМрд╢рд▓ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ рд╡рд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдЕрдореВрд▓реНрдпред

рдЕрдкрдиреА рдЦреБрдж рдХреА рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдПрдВ

рдЗрд╕рд▓рд┐рдП, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЫреЛрдЯреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЙрдЪрд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдЧрд░ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рд░рд▓ рдФрд░ рд╕рд╕реНрддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИрдВред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреНрд░рдмрдВрдзрд┐рдд рдкреНрд░рджрд╛рддрд╛ рд╣реИрдВ рдЬреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдЬрдмрд╛рди рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдорд╛рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реБрдП, рд╕реНрд╡рдпрдВ рджреНрд╡рд╛рд░рд╛ рдкреВрд░реА рдЧрдВрджрдЧреА рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред рдФрд░ рдХреНрд▓рд╛рдЙрдб рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдбрдВрдкрд┐рдВрдЧ рдпреБрджреНрдзреЛрдВ рдиреЗ рдРрд╕реА рд╕реЗрд╡рд╛рдУрдВ рдХреА рд▓рд╛рдЧрдд рдореЗрдВ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдХрдореА рд▓рд╛ рджреА рд╣реИред
рд╣рдо рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ Google (GKE) рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдорд▓реЗ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк Google рдХреЗ рдЕрдиреБрд░реВрдк рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЖрдк Amazon (EKS) рдпрд╛ Microsoft (AKS) рдХреЗ рдСрдлрд╝рд░ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рдЦреБрдж рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:

  • рдбреЛрдореЗрди рдирд╛рдо (~ 10 $ / рд╡рд░реНрд╖, рдбреЛрдореЗрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)
  • Cloudflare DNS рд╣реЛрд╕реНрдЯрд┐рдВрдЧ (рдореБрдлрд╝реНрдд)
  • GKE рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдереНрд░реА-рдиреЛрдб рдХреНрд▓рд╕реНрдЯрд░ (~ $ 5 / рдорд╛рд╣)
  • Google рдХрдВрдЯреЗрдирд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА (GCR) (рдлреНрд░реА) рдореЗрдВ рдПрдХ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди
  • рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд▓рд┐рдП рдХрдИ рдпрдорд▓ рдлрд╛рдЗрд▓реЗрдВ

рдЕрддрд┐рд░рд┐рдХреНрдд рдмрдЪрдд рдХреЗ рд▓рд┐рдП, рд╣рдо Google рдЗрдирдкреБрдЯ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдмрд┐рдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдкрд░ рдПрдХ рдбреЗрдореЙрди рдХреЗ рд░реВрдк рдореЗрдВ рдирдЧрдиреЗрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдСрдкрд░реЗрдЯрд░ рдмрдирд╛рдПрдВрдЧреЗ рдЬреЛ рдХреНрд▓рд╛рдЙрдбрдлрд╝реЗрдпрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдб рдХреЗ рдмрд╛рд╣рд░реА рдЖрдИрдкреА рдкрддреЗ рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░реЗрдЧрд╛ред

Google рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдХрдВрд╕реЛрд▓.рдХреНрд▓рд╛рдЙрдб.рдУрдХ рдбреЙрдЯ рдХреЙрдо рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдЕрдЧрд░ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдЖрдкрдХреЛ рдПрдХ рдмрд┐рд▓рд┐рдВрдЧ рдЦрд╛рддрд╛ рднреА рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдлрд┐рд░, рд╣реИрдордмрд░реНрдЧрд░ рдореЗрдиреВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдПрдВред рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ:

  • рд╕реНрдерд╛рди рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдЬреЛрдирд▓ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
  • рдореИрдВрдиреЗ рдЕрдкрдирд╛ рд╕реНрдерд╛рди рд╣рдореЗрдВ-рд╕реЗрдВрдЯреНрд░рд▓ 1-рдП рдХреЗ рд░реВрдк рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛
  • рдХреБрдмреЗрд░рдиреЗрдЯ рдХрд╛ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдЪреБрдиреЗрдВ
  • рд╕рдмрд╕реЗ рд╕рд╕реНрддрд╛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдХрд╛рд░ (f1-micro) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ 3 рдиреЛрдбреНрд╕ рдХрд╛ рдПрдХ рдкреВрд▓ рдмрдирд╛рдПрдВред
  • рдиреЛрдбреНрд╕ рдХреЗ рдЗрд╕ рдкреВрд▓ рдХреЗ рд▓рд┐рдП, "рдЙрдиреНрдирдд" рд╕реНрдХреНрд░реАрди рдкрд░, рдмреВрдЯ рдбрд┐рд╕реНрдХ рдХрд╛ рдЖрдХрд╛рд░ 10GB рдкрд░ рд╕реЗрдЯ рдХрд░реЗрдВ, рдПрдХреНрд╕рдЯреНрд░реВрдбреЗрдб рдиреЛрдбреНрд╕ (рд╡реЗ рд╕рд╕реНрддреЗ рд╣реИрдВ) рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ, рдСрдЯреЛ-рдЕрдкрдбреЗрдЯ рдФрд░ рдСрдЯреЛ-рдЙрдкрдЪрд╛рд░ рд╕рдХреНрд╖рдо рдХрд░реЗрдВред
  • рдиреЛрдбреНрд╕ рдХреЗ рдкреВрд▓ рдХреЗ рддрд╣рдд рдЖрдкрдХреЛ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓реЗрдВрдЧреЗред рд╣рдо HTTP рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд┐рдВрдЧ (рдЬреАрд╕реАрдкреА рдореЗрдВ рд▓реЛрдб рд╕рдВрддреБрд▓рди рдорд╣рдВрдЧрд╛ рд╣реИ) рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрдЯреИрдХрдбреНрд░рд╛рдЗрд╡рд░ рд╕реЗ рдЬреБрдбрд╝реА рдкреВрд░реА рдЕрд░реНрдерд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЛ рднреА рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╣ рдорд╣рдВрдЧрд╛ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░, рдореЗрд░реЗ рдЕрдиреБрднрд╡ рдореЗрдВ, рдмрд╣реБрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реИ)ред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реВрдЪрдХ рдкреИрдирд▓ рдХреЛ рднреА рдмрдВрдж рдХрд░ рджреЗрдВред

рдЗрди рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд░рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ: рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдПрдВред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд░ рдмрдЪрдд рдХреИрд╕реЗ рдХрд░реЗрдВ:

  • рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╡рд┐рдорд╛рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ: рдореБрдлреНрдд, рдХреНрдпреЛрдВрдХрд┐ Google рд╣реЛрд╕реНрдЯ рдиреЛрдбреНрд╕ рдХреЛ рдЪрд╛рд░реНрдЬ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
  • рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдиреЛрдбреНрд╕: $ 5.04 / рдорд╛рд╣, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, 3 рдорд╛рдЗрдХреНрд░реЛ-рдиреЛрдбреНрд╕ рдореЗрдВ рдЖрдкрдХреА рд▓рд╛рдЧрдд $ 11.65 / рдорд╣реАрдирд╛ рд╣реЛрдЧреА, рдФрд░ рдЙрдиреНрд╣реЗрдВ рднреАрдбрд╝ рд╕реЗ рдмрд╛рд╣рд░ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рдо рдЗрд╕ рджрд░ рдХреЛ $ 7.67 / рдорд╛рд╣ рддрдХ рдХрдо рдХрд░ рджреЗрдВрдЧреЗ, рдФрд░ рд╣рдореЗрд╢рд╛ рдлреНрд░реА - $ 5.04 рдкрд░ред
  • рднрдВрдбрд╛рд░рдг рд▓рд╛рдЧрдд: рдирд┐: рд╢реБрд▓реНрдХред рд╣рдореЗрдВ рдореБрдлреНрдд рдореЗрдВ 30GB рд╕реНрдерд╛рдпреА рдбрд┐рд╕реНрдХ рд╕реНрдерд╛рди рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдКрдкрд░ рд╣рдордиреЗ 10GB рдХрд╛ рдЖрдХрд╛рд░ рдЪреБрдирд╛ред
  • рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд┐рдВрдЧ рдХреА рд▓рд╛рдЧрдд: рдореБрдлреНрдд рдореЗрдВ, рд╣рдордиреЗ HTTP рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд┐рдВрдЧ рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдЗрд╕рдиреЗ рд╣рдореЗрдВ $ 18 / рдорд╣реАрдирд╛ рд▓рд┐рдпрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдкрд░ рд╣рдорд╛рд░реА рд╕реНрд╡рдпрдВ рдХреА HTTP рдкреНрд░реЙрдХреНрд╕реА рдЪрд▓рд╛рдПрдВ рдФрд░ DNS рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдИрдкреА рдкрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВред
  • рдиреЗрдЯрд╡рд░реНрдХ рдЦрд░реНрдЪ: рдирд┐рдГрд╢реБрд▓реНрдХ, рдЬрдм рддрдХ рдЖрдк рдкреНрд░рддрд┐ рдорд╛рд╣ 1GB рдХрд╛ рдЪрдпрди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддрдм рддрдХ рдИрдЧреНрд░реЗрди рдлрд╝рдВрдХреНрд╢рди рдореБрдлреНрдд рд░рд╣рддрд╛ рд╣реИред (рдЕрдЧрд▓рд╛, рд╣рд░ рдЕрдЧрд▓реЗ рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдХреА рдХреАрдордд 8 рд╕реЗрдВрдЯ рд╣реИ)

рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ 3 рдиреЛрдбреНрд╕ рдХрд╛ рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдПрдХрдорд╛рддреНрд░ рдбрд┐рдЬрд┐рдЯрд▓ рдорд╣рд╛рд╕рд╛рдЧрд░ рдорд╢реАрди рдХреЗ рд╕рдорд╛рди рдХреАрдордд рд╣реИред

GKE рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдХреБрдЫ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдирд┐рдпрдореЛрдВ рдХреЛ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рд╕реЗ рд╣рдорд╛рд░реЗ рдореЗрдЬрдмрд╛рдиреЛрдВ рдХреЗ HTTP рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХреЗрдВред рд╣реИрдордмрд░реНрдЧрд░ рдореЗрдиреВ рдореЗрдВ VPC рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдвреВрдВрдвреЗрдВ, рдлрд┐рд░ рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдирд┐рдпрдо рдкрд░ рдЬрд╛рдПрдВ рдФрд░ IP рдкрддрд╛ рд╢реНрд░реЗрдгреА 0.0.0.0/0 рдХреЗ рд╕рд╛рде TCP рдкреЛрд░реНрдЯ 80 рдФрд░ 443 рдХреЗ рд▓рд┐рдП рдирд┐рдпрдо рдЬреЛрдбрд╝реЗрдВред



рдлрд╝рд╛рдпрд░рд╡реЙрд▓ рдирд┐рдпрдо

рд╕реНрдерд╛рдиреАрдп рд╕реЗрдЯрд┐рдВрдЧ

рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдХреНрд▓рд╕реНрдЯрд░ рдЙрдард╛рдпрд╛ рдФрд░ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдФрд░ рдЕрдм рдЗрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВред gcloud рдкрд░ рджрд┐рдП рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реБрдП gcloud рдЯреВрд▓ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдРрд╕рд╛ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:

 gcloud auth login 

рдмреЗрд╢рдХ, рдЖрдкрдХреЛ рдЕрднреА рднреА рдбреЙрдХрдЯрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдЬреАрд╕реАрдЖрд░ рд╕реЗ рдмрд╛рдВрдзрдирд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рдХрдВрдЯреЗрдирд░ рднреЗрдЬ рд╕рдХреЗрдВ:

 gcloud auth configure-docker 

рдЖрдк рдпрд╣рд╛рдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдХреЗ рднреА kubectl рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд░рд▓реАрдХреГрдд:

 gcloud components install kubectl gcloud config set project PROJECT_ID gcloud config set compute/zone COMPUTE_ZONE gcloud container clusters get-credentials CLUSTER_NAME 

рд╡реИрд╕реЗ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдкрд░реА рдХрдерд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдЯреВрд▓рдХрд┐рдЯ рд╡рд┐рдВрдбреЛрдЬ, рдУрдПрд╕рдПрдХреНрд╕ рдпрд╛ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд┐рд╕рдиреЗ рдХрднреА-рдХрднреА рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рддрд╣рдд рдРрд╕реА рдЪреАрдЬреЗрдВ рдХреА рд╣реИрдВ, рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдп рд╣реИред

рд╡реЗрдм рдПрдкреНрд▓реАрдХреЗрд╢рди рдмрд┐рд▓реНрдб

рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХрд┐рд╕реА рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдВрдЯреЗрдирд░ рдЖрдкрдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдореЗрдВ рдПрдХ HTTP рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреЛрд░реНрдЯ рдкрд░ рд╕реБрдирдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдРрд╕реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреНрд░рд┐рд╕реНрдЯрд▓ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред main.cr рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

 # crystal-www-example/main.cr require "http/server" Signal::INT.trap do exit end server = HTTP::Server.new do |context| context.response.content_type = "text/plain" context.response.print "Hello world from crystal-www-example! The time is #{Time.now}" end server.bind_tcp("0.0.0.0", 8080) puts "Listening on http://0.0.0.0:8080" server.listen 

рд╣рдореЗрдВ рдПрдХ рдбреЙрдХрдлрд╛рдЗрд▓ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

 # crystal-www-example/Dockerfile FROM crystallang/crystal:0.26.1 as builder COPY main.cr main.cr RUN crystal build -o /bin/crystal-www-example main.cr --release ENTRYPOINT [ "/bin/crystal-www-example" ] 

рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреМрдбрд╝реЗрдВ:

 docker build -t gcr.io/PROJECT_ID/crystal-www-example:latest . docker run -p 8080:8080 gcr.io/PROJECT_ID/crystal-www-example:latest 

рдФрд░ рдлрд┐рд░ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкрд░ рдЬрд╛рдПрдБ: 8080ред рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ GCR рдореЗрдВ рднреЗрдЬрдХрд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 docker push gcr.io/PROJECT_ID/crystal-www-example:latest 

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ

рдореЗрд░рд╛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдпрд╣рд╛рдБ рд╣реИ ред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрдИ yaml рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреА рд╣реЛрдВрдЧреА рдЬрд╣рд╛рдБ рд╣рдорд╛рд░реА рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдПрдБ рдкреНрд░рд╕реНрддреБрдд рдХреА рдЬрд╛рдПрдБрдЧреА, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП kubectl рд▓рд╛рдЧреВ рдХрд░реЗрдВред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рд╡рд░реНрдгрдирд╛рддреНрдордХ рд╣реИ, рдФрд░ рдпреЗ рд╕рднреА рдпрдорд▓ рдлрд╛рдЗрд▓реЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдмрддрд╛рддреА рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд░рд╛рдЬреНрдп рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рд╡реНрдпрд╛рдкрдХ рдЕрд░реНрде рдореЗрдВ, рдпрд╣реА рд╣рдо рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ:

  • рд╣рдорд╛рд░реЗ рдХреНрд░рд┐рд╕реНрдЯрд▓-www-рдЙрджрд╛рд╣рд░рдг рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдФрд░ рд╕реЗрд╡рд╛ рдмрдирд╛рдПрдБ
  • рдирдЧреАрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдорди рд╕реЗрдЯ (рд╕реЗрд╡рд╛рдПрдВ рд╕реЗрдЯ) рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореИрдк (рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореИрдк) рдмрдирд╛рдПрдВ
  • рд╣рдо DNS рдХреЗ рд▓рд┐рдП Cloudflare рдХреЗ рд╕рд╛рде IP рдиреЛрдбреНрд╕ рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ

рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдкрд╣рд▓реЗ, рдЖрдЗрдП рд╣рдорд╛рд░реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ: (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдЖрдИрдбреА рд╕реЗ PROJECT_ID рдХреЛ рдмрджрд▓рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ)

 # kubernetes-config/crystal-www-example.yaml apiVersion: apps/v1 kind: Deployment metadata: name: crystal-www-example labels: app: crystal-www-example spec: replicas: 1 selector: matchLabels: app: crystal-www-example template: metadata: labels: app: crystal-www-example spec: containers: - name: crystal-www-example image: gcr.io/PROJECT_ID/crystal-www-example:latest ports: - containerPort: 8080 --- kind: Service apiVersion: v1 metadata: name: crystal-www-example spec: selector: app: crystal-www-example ports: - protocol: TCP port: 8080 targetPort: 8080 

рдпрд╣ рдПрдХ рдкрд░рд┐рдирд┐рдпреЛрдЬрди (рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди) рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдПрдХ рдПрдХрд▓ рдХрдВрдЯреЗрдирд░ (рд╣рдорд╛рд░реЗ рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рд╡рд╣рд╛рдВ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ) рдФрд░ рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ( kubernetes-config рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ) kubernetes-config :

 kubectl apply -f 

рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдкрд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 kubectl get pod #     : # crystal-www-example-698bbb44c5-l9hj9 1/1 Running 0 5m 


рд╣рдо рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЙрдХреНрд╕реА рдПрдкреАрдЖрдИ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 kubectl proxy 

рдФрд░ рдлрд┐рд░ рдЬрд╛рдПрдВ: рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ : 8001 / рдПрдкреАрдЖрдИ / v1 / рдирд╛рдорд╕реНрдерд╛рди / рдбрд┐рдлрд╝реЙрд▓реНрдЯ / рд╕реЗрд╡рд╛рдПрдВ / рдХреНрд░рд┐рд╕реНрдЯрд▓-www-рдЙрджрд╛рд╣рд░рдг / рдкреНрд░реЙрдХреНрд╕реА /

NGINX рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди

рдЖрдорддреМрд░ рдкрд░, HTTP рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдХ рдЗрдирдкреБрдЯ рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, Google рдХрд╛ HTTP рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ HTTP рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ (рдпрд╣ рдбрд░рд╛рд╡рдирд╛ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ)ред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбреЗрдорди рд╕реЗрдЯ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореИрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдбреЗрдорди рд╕реЗрдЯ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рд╣рд░ рдиреЛрдб рдкрд░ рдЪрд▓рддрд╛ рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдорд╛рдирдЪрд┐рддреНрд░, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдХ рдЫреЛрдЯреА рдлрд╝рд╛рдЗрд▓ рдЬрд┐рд╕реЗ рд╣рдо рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдорд╛рдЙрдВрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ; рдпрд╣ рдлрд╝рд╛рдЗрд▓ nginx рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧреАред
Yaml рдлрд╝рд╛рдЗрд▓ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

 apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: hostNetwork: true dnsPolicy: ClusterFirstWithHostNet containers: - image: nginx:1.15.3-alpine name: nginx ports: - name: http containerPort: 80 hostPort: 80 volumeMounts: - name: "config" mountPath: "/etc/nginx" volumes: - name: config configMap: name: nginx-conf --- apiVersion: v1 kind: ConfigMap metadata: name: nginx-conf data: nginx.conf: | worker_processes 1; error_log /dev/stdout info; events { worker_connections 10; } http { access_log /dev/stdout; server { listen 80; location / { proxy_pass http://crystal-www-example.default.svc.cluster.local:8080; } } } 

рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдХреИрд╕реЗ nginx рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХрд╛рд░реНрдб рдХреЗ nginx.conf рдлрд╝рд╛рдЗрд▓ рдХреЛ рдорд╛рдЙрдВрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╣рдордиреЗ рджреЛ рдФрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рд╣реИрдВ: hostNetwork: true , рддрд╛рдХрд┐ рдЖрдк рд╣реЛрд╕реНрдЯ рдкреЛрд░реНрдЯ рдХреЛ dnsPolicy: ClusterFirstWithHostNet рд╕рдХреЗрдВ рдФрд░ рдмрд╛рд╣рд░ рд╕реЗ nginx рддрдХ рдкрд╣реБрдВрдЪ dnsPolicy: ClusterFirstWithHostNet рдФрд░ dnsPolicy: ClusterFirstWithHostNet рддрд╛рдХрд┐ рдЖрдк рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рднреАрддрд░ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рдирдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдорд┐рд▓реЗрдЧрд╛ред

рдЗрди рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рдЖрдк рдЕрдкрдиреЗ рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдИрдкреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ nginx рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 kubectl get node -o yaml # look for: # - address: ... # type: ExternalIP 

рдЗрд╕рд▓рд┐рдП рдЕрдм рд╣рдорд╛рд░рд╛ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рд╕реБрд▓рдн рд╣реИред рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдВрджрд░ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред

рдбреАрдПрдирдПрд╕ рдХрдиреЗрдХреНрд╢рди

рд╣рдорд╛рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП 3 A DNS рд░рд┐рдХреЙрд░реНрдб рд╕реЗрдЯ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:



UI Cloudflare рдореЗрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ

рдлрд┐рд░ рдЗрди A рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CNAME рд░рд┐рдХреЙрд░реНрдб рдЬреЛрдбрд╝реЗрдВред (рдЙрджрд╛ред www.example.com CNAME for kubernetes.example.com)ред рдпрд╣ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмреЗрд╣рддрд░ - рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ, рддрд╛рдХрд┐ рдЕрдЧрд░ рд╣рдореЗрдВ рдХрднреА DNS рд░рд┐рдХреЙрд░реНрдб рдореЗрдВ рдиреЛрдбреНрд╕ рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░рдиреЗ рдпрд╛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ, рддреЛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рднреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИред

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

рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рдореБрдЦрдмрд┐рд░ рдмрдирд╛рдпрд╛:

 factory := informers.NewSharedInformerFactory(client, time.Minute) lister := factory.Core().V1().Nodes().Lister() informer := factory.Core().V1().Nodes().Informer() informer.AddEventHandler(cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { resync() }, UpdateFunc: func(oldObj, newObj interface{}) { resync() }, DeleteFunc: func(obj interface{}) { resync() }, }) informer.Run(stop) 

рдЬрдм рднреА рдХреЛрдИ рдиреЛрдб рдмрджрд▓рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдореЗрд░реЗ resync рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рддрдм рдореИрдВ Cloudflare API рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ API рдХреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реВрдВ, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:

 var ips []string for _, node := range nodes { for _, addr := range node.Status.Addresses { if addr.Type == core_v1.NodeExternalIP { ips = append(ips, addr.Address) } } } sort.Strings(ips) for _, ip := range ips { api.CreateDNSRecord(zoneID, cloudflare.DNSRecord{ Type: "A", Name: options.DNSName, Content: ip, TTL: 120, Proxied: false, }) } 

рдлрд┐рд░, рд╣рдорд╛рд░реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде, рд╣рдо рдПрдХ рддреИрдирд╛рддреА рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ:

 apiVersion: apps/v1 kind: Deployment metadata: name: kubernetes-cloudflare-sync labels: app: kubernetes-cloudflare-sync spec: replicas: 1 selector: matchLabels: app: kubernetes-cloudflare-sync template: metadata: labels: app: kubernetes-cloudflare-sync spec: serviceAccountName: kubernetes-cloudflare-sync containers: - name: kubernetes-cloudflare-sync image: gcr.io/PROJECT_ID/kubernetes-cloudflare-sync args: - --dns-name=kubernetes.example.com env: - name: CF_API_KEY valueFrom: secretKeyRef: name: cloudflare key: api-key - name: CF_API_EMAIL valueFrom: secretKeyRef: name: cloudflare key: email 

рд╣рдореЗрдВ cloudflare api рдХреБрдВрдЬреА рдФрд░ рдореЗрд▓рд┐рдВрдЧ рдкрддреЗ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЧреБрдкреНрдд рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

 kubectl create secret generic cloudflare --from-literal=email='EMAIL' --from-literal=api-key='API_KEY' 

рд╣рдореЗрдВ рдПрдХ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рднреА рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ (рдиреЛрдбреНрд╕ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдкреАрдЖрдИ рдкрд░ рд╣рдорд╛рд░реА рддреИрдирд╛рддреА рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛)ред рдкрд╣рд▓рд╛ рд░рди (рд╡рд┐рд╢реЗрд╖рдХрд░ GKE рдХреЗ рд▓рд┐рдП):

 kubectl create clusterrolebinding cluster-admin-binding --clusterrole cluster-admin --user YOUR_EMAIL_ADDRESS_HERE 


рдФрд░ рдлрд┐рд░ рдЖрд╡реЗрджрди рдХрд░реЗрдВ:

 apiVersion: v1 kind: ServiceAccount metadata: name: kubernetes-cloudflare-sync --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: kubernetes-cloudflare-sync rules: - apiGroups: [""] resources: ["nodes"] verbs: ["list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: kubernetes-cloudflare-sync-viewer roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: kubernetes-cloudflare-sync subjects: - kind: ServiceAccount name: kubernetes-cloudflare-sync namespace: default 

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

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

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдмрдбрд╝реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдкреНрд░рдореБрдЦ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдмрдирдирд╛ рддрдп рд╣реИред , Kubernetes , Kubernetes , Kubernetes , Kubernetes .

, Kubernetes : , . тАУ !

Source: https://habr.com/ru/post/hi433192/


All Articles