"DevOps рдХреЛ рд▓рд╛рдЧреА Kubernetes" рдмреБрдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН

"DevOps рдХреЛ рд▓рд╛рдЧреА Kubernetes" рдмреБрдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдирдорд╕реНрддреЗ рдЦрдмрд░рдмрд╛рд╕реАрд╣рд░реБ ! Kubernetes рдЖрдзреБрдирд┐рдХ рдХреНрд▓рд╛рдЙрдб рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкреНрд░рдореБрдЦ рддрддреНрд╡рд╣рд░реБ рдордзреНрдпреЗ рдПрдХ рд╣реЛред рдпреЛ рдкреНрд░рд╡рд┐рдзрд┐рд▓реЗ рдХрдиреНрдЯреЗрдирд░ рднрд░реНрдЪреБрдЕрд▓рд╛рдЗрдЬреЗрд╕рдирдорд╛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛, рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рд░ рд▓рдЪрд┐рд▓реЛрдкрди рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред John Arundel рд░ Justin Domingus Kubernetes рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдордХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реНрдЫрдиреН рд░ рджреИрдирд┐рдХ рд╕рдорд╕реНрдпрд╛рд╣рд░реВрдХреЛ рд╕рд┐рджреНрдз рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдкреНрд░рд╕реНрддреБрдд рдЧрд░реНрдЫрдиреНред рдЪрд░рдгрдмрджреНрдз рд░реВрдкрдорд╛, рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреИ рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрд┐рдн рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдирд┐рд░реНрдорд╛рдг рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫ рд░ рдпрд╕рд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрди рдкреВрд░реНрд╡рд╛рдзрд╛рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реБрдиреЗрдЫ, рд╡рд┐рдХрд╛рд╕ рд╡рд╛рддрд╛рд╡рд░рдг рд░ рдирд┐рд░рдиреНрддрд░ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреБрд╣реЛрд╕реН рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрдлреНрдиреЛ рдЕрд░реНрдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдХрд╛рдо рдЧрд░реНрджрд╛ рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫред

тАв рдЖрдзрд╛рд░рднреВрдд рдХреБрд░рд╛рд╣рд░реВрдмрд╛рдЯ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рд░ рдХреБрдмреЗрд░рдиреЗрдЯрд╣рд░реВрд╕рдБрдЧ рд╕реБрд░реБ рдЧрд░реНрдиреБрд╣реЛрд╕реН: рд╡рд┐рд╖рдп рд╕рд┐рдХреНрди рдХреБрдиреИ рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрднрд╡ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджреИрдиред тАв рддрдкрд╛рдИрдВрдХреЛ рдЖрдлреНрдиреИ рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН рд╡рд╛ Amazon, Google, рдЗрддреНрдпрд╛рджрд┐рдмрд╛рдЯ рд╡реНрдпрд╡рд╕реНрдерд┐рдд Kubernetes рд╕реЗрд╡рд╛ рдЫрдиреМрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред тАв рдХрдиреНрдЯреЗрдирд░ рдЬреАрд╡рдирдЪрдХреНрд░ рд░ рд╕реНрд░реЛрдд рдЦрдкрдд рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди Kubernetes рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реНред тАв рд▓рд╛рдЧрдд, рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди, рд▓рдЪрд┐рд▓реЛрдкрди, рд╢рдХреНрддрд┐ рд░ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреАрдХреЛ рдЖрдзрд╛рд░рдорд╛ рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВрд▓рд╛рдИ рдЕрдкреНрдЯрд┐рдорд╛рдЗрдЬ рдЧрд░реНрдиреБрд╣реЛрд╕реНред тАв рддрдкрд╛рдИрдВрдХрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрди, рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЙрддреНрддрдо рдЙрдкрдХрд░рдгрд╣рд░реВ рд╕рд┐рдХреНрдиреБрд╣реЛрд╕реНред тАв рд╕реБрд░рдХреНрд╖рд╛ рд░ рдирд┐рдпрдиреНрддреНрд░рдг рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди рд╡рд░реНрддрдорд╛рди рдЙрджреНрдпреЛрдЧ рдЕрднреНрдпрд╛рд╕рд╣рд░реВрдХреЛ рд▓рд╛рдн рдЙрдард╛рдЙрдиреБрд╣реЛрд╕реНред тАв рд╡рд┐рдХрд╛рд╕ рдЯреЛрд▓реАрд╣рд░реВрд▓реЗ рдердк рд▓рдЪрд┐рд▓реЛ, рдЫрд┐рдЯреЛ рд░ рдкреНрд░рднрд╛рд╡рдХрд╛рд░реА рд░реВрдкрдорд╛ рдХрд╛рд░реНрдп рдЧрд░реНрди рд╕рдХреВрдиреН рднрдиреНрдирд╛рдХрд╛ рдЦрд╛рддрд┐рд░ рддрдкрд╛рдИрдВрдХреЛ рдХрдореНрдкрдиреАрднрд░ DevOps рд╕рд┐рджреНрдзрд╛рдиреНрддрд╣рд░реВ рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдкреБрд╕реНрддрдХ рдХрд╕рдХреЛ рд▓рд╛рдЧрд┐ рд╣реЛ?

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

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

рдХрд┐рддрд╛рдмрд▓реЗ рдХрд╕реНрддрд╛ рдкреНрд░рд╢реНрдирд╣рд░реВрдХреЛ рдЬрд╡рд╛рдл рджрд┐рдиреНрдЫ?

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

  • "рддрдкрд╛рдИрд▓реЗ рдпрд╕ рдкреНрд░рд╡рд┐рдзрд┐рдорд╛ рдХрд┐рди рд╕рдордп рдмрд┐рддрд╛рдЙрдиреБ рдкрд░реНрдЫ рднрдиреНрдиреЗрдорд╛ рдо рдЪрд╛рд╕реЛ рд░рд╛рдЦреНрдЫреБред рдпрд╕рд▓реЗ рдорд▓рд╛рдИ рд░ рдореЗрд░реЛ рдЯреЛрд▓реАрд▓рд╛рдИ рдХрд╕реНрддрд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рдорджреНрджрдд рдЧрд░реНрдиреЗрдЫ?"
  • "рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЪрд╛рдЦрд▓рд╛рдЧреНрджреЛ рджреЗрдЦрд┐рдиреНрдЫ, рддрд░ рдкреНрд░рд╡реЗрд╢рдХреЛ рд▓рд╛рдЧрд┐ рдПрдХрджрдо рдЙрдЪреНрдЪ рдмрд╛рдзрд╛ рдЫред рд╕рд╛рдзрд╛рд░рдг рдЙрджрд╛рд╣рд░рдг рддрдпрд╛рд░ рдЧрд░реНрди рдЧрд╛рд╣реНрд░реЛ рдЫреИрди, рддрд░ рдердк рдкреНрд░рд╢рд╛рд╕рди рд░ рдбрд┐рдмрдЧрд┐рдЩ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рдЫред рд╣рд╛рдореА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрд╕рд╛рд░рдорд╛ рдорд╛рдирд┐рд╕рд╣рд░реВрд▓реЗ Kubernetes рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВ рдХрд╕рд░реА рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрдЫрдиреН рд░ рд╣рд╛рдореАрд▓реЗ рд╕рд╛рдордирд╛ рдЧрд░реНрди рд╕рдХреНрдиреЗ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдмрд╛рд░реЗ рднрд░рдкрд░реНрджреЛ рд╕рд▓реНрд▓рд╛рд╣ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреМрдВред"
  • "рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕рд▓реНрд▓рд╛рд╣ рдЙрдкрдпреЛрдЧреА рд╣реБрдиреЗрдЫред Kubernetes рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдорд▓реЗ рдирдпрд╛рдБ рдЯреЛрд▓реАрд╣рд░реВрд▓рд╛рдИ рдЫрдиреМрдЯ рдЧрд░реНрди рдзреЗрд░реИ рд╡рд┐рдХрд▓реНрдкрд╣рд░реВ рджрд┐рдиреНрдЫред рдЬрдм рддреНрдпрд╣рд╛рдБ рдПрдЙрдЯреИ рдХреБрд░рд╛ рдЧрд░реНрди рдзреЗрд░реИ рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреН, рддрдкрд╛рдЗрдБ рдХрд╕рд░реА рдерд╛рд╣рд╛ рдкрд╛рдЙрдиреБрд╣реБрдиреЗрдЫ рдХрд┐ рдХреБрди рд░рд╛рдореНрд░реЛ рд╣реЛ? рдХрд╕рд░реА рдЫрдиреМрдЯ рдЧрд░реНрдиреЗ?

рд░ рд╕рд╛рдпрдж рд╕рдмреИ рдкреНрд░рд╢реНрдирд╣рд░реВ рдордзреНрдпреЗ рд╕рдмреИрднрдиреНрджрд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг:

  • "рдореЗрд░реЛ рдХрдореНрдкрдиреАрд▓рд╛рдИ рдмрд╛рдзрд╛ рдкреБрд░реНтАНрдпрд╛рдЙрди рдмрд┐рдирд╛ рдо рдХрд╕рд░реА рдХреБрдмреЗрд░рдиреЗрдЯрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреБ?"

рдЕрдВрд╢ред рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд░ рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрд╣рд░реВ

Kubernetes рдЕрдиреБрдкреНрд░рдпреЛрдЧрдХреЛ рддрд░реНрдХрд▓рд╛рдИ рдпрд╕рдХреЛ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдмрд╛рдЯ рдЕрд▓рдЧ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ (рдЕрд░реНрдерд╛рдд, рд╕рдордпрд╕рдБрдЧреИ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрди рд╕рдХреНрдиреЗ рдХреБрдиреИ рдкрдирд┐ рдорд╛рди рд╡рд╛ рд╕реЗрдЯрд┐рдЩрд╣рд░реВрдмрд╛рдЯ) рдзреЗрд░реИ рдЙрдкрдпреЛрдЧреА рдЫред рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдорд╛рдирд╣рд░реВрдорд╛ рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рд╡рд╛рддрд╛рд╡рд░рдг-рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реЗрдЯрд┐рдЩрд╣рд░реВ, рддреЗрд╕реНрд░реЛ-рдкрдХреНрд╖ рд╕реЗрд╡рд╛ DNS рдареЗрдЧрд╛рдирд╛рд╣рд░реВ, рд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рдорд╛рдгрд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреНрдЫрдиреНред

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

Kubernetes рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдзреЗрд░реИ рдлрд░рдХ рддрд░рд┐рдХрд╛рд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫред рдкрд╣рд┐рд▓реЗ, рддрдкрд╛рдИрдВрд▓реЗ рдкреЛрдб рд░реНрдпрд╛рдкрд░ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рдирдорд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╡рд╛рддрд╛рд╡рд░рдгреАрдп рдЪрд░рд╣рд░реВ рдорд╛рд░реНрдлрдд рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рдорд╛рдирд╣рд░реВ рдкрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ (рдкреГрд╖реНрда резрепреи рдорд╛ "рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░" рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН)ред рджреЛрд╕реНрд░реЛ, рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдбрд╛рдЯрд╛ рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдк рд░ рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХреБрдмреЗрд░рдиреЗрдЯрдорд╛ рд╕реАрдзрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рдпрд╕ рдЕрдзреНрдпрд╛рдпрдорд╛, рд╣рд╛рдореА рдпреА рд╡рд╕реНрддреБрд╣рд░реВ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рдЕрдиреНрд╡реЗрд╖рдг рдЧрд░реНрдЫреМрдВ рд░ рдбреЗрдореЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдХреЗрд╣реА рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдгрд╣рд░реВ рд╣реЗрд░реНрдЫреМрдВред

рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдБрджрд╛ рдкреЛрдб рд╢реЗрд▓рд╣рд░реВ рдЕрджреНрдпрд╛рд╡рдзрд┐рдХ рдЧрд░реНрджреИ

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

checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
       | sha256sum }}

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

Kubernetes рдорд╛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбрд╛рдЯрд╛

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

рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛, Kubernetes рд▓реЗ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рдбрд┐рдЬрд╛рдЗрди рдЧрд░рд┐рдПрдХреЛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░рдХреЛ рд╡рд╕реНрддреБ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ: рдЧреЛрдкреНрдпред рдЕрд░реНрдХреЛ, рдпреЛ рд╡рд╕реНрддреБ рд╣рд╛рдореНрд░реЛ рдбреЗрдореЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрдорд╛ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ рднрдиреНрдиреЗ рдЙрджрд╛рд╣рд░рдг рд╣реЗрд░реМрдВред

рд╕реБрд░реБ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдЧреБрдкреНрдд рд╡рд╕реНрддреБрдХреЛ рд▓рд╛рдЧрд┐ Kubernetes manifest рдорд╛ рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН (рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН hello-secret-env/k8s/secret.yaml):

apiVersion: v1
kind: Secret
metadata:
    name: demo-secret
stringData:
    magicWord: xyzzy

рдпрд╕ рдЙрджрд╛рд╣рд░рдгрдорд╛, MagicWord рдирд┐рдЬреА рдХреБрдЮреНрдЬреА xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)) рд╣реЛред xyzzy рд╢рдмреНрдж рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛ рдХрдореНрдкреНрдпреБрдЯрд░рдХреЛ рд╕рдВрд╕рд╛рд░рдорд╛ рдзреЗрд░реИ рдЙрдкрдпреЛрдЧреА рдЫред рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдк рдЬрд╕реНрддреИ, рддрдкрд╛рдИрдВрд▓реЗ рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрдорд╛ рдмрд╣реБ рдХреБрдЮреНрдЬреА рд░ рдорд╛рдирд╣рд░реВ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрд╣рд╛рдБ, рд╕рд░рд▓рддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдХреЗрд╡рд▓ рдПрдХ рдкреНрд░рдореБрдЦ-рдорд╛рди рдЬреЛрдбреА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред

рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрд╣рд░реВ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░рдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ

рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдк рдЬрд╕реНрддреИ, рдЧреЛрдкреНрдп рд╡рд╕реНрддреБ рдХрдиреНрдЯреЗрдирд░рдорд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рд╡рд╛ рдпрд╕рдХреЛ рдбрд┐рд╕реНрдХрдорд╛ рдлрд╛рдЗрд▓рдХреЛ рд░реВрдкрдорд╛ рдЙрдкрд▓рдмреНрдз рдЧрд░рд╛рдЙрди рд╕рдХрд┐рдиреНрдЫред рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореА Secret рдмрд╛рдЯ рдорд╛рдирдорд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдЪрд░ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреЗрдЫреМрдВ:

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-env
          ports:
             - containerPort: 8888
          env:
             - name: GREETING
               valueFrom:
               secretKeyRef:
                  name: demo-secret
                  key: magicWord

manifests рд▓рд╛рдЧреВ рдЧрд░реНрди рдбреЗрдореЛ рднрдгреНрдбрд╛рд░рдорд╛ рдирд┐рдореНрди рдЖрджреЗрд╢ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН:

kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" created

рдкрд╣рд┐рд▓реЗ рдЬрд╕реНрддреИ, рддрдкрд╛рдИрдХреЛ рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдирддрд┐рдЬрд╛ рд╣реЗрд░реНрди рд╕реНрдерд╛рдиреАрдп рдкреЛрд░реНрдЯрд▓рд╛рдИ рдбрд┐рдкреНрд▓реЛрдЗрдореЗрдиреНрдЯрдорд╛ рдлрд░реНрд╡рд╛рд░реНрдб рдЧрд░реНрдиреБрд╣реЛрд╕реН:

kubectl port-forward deploy/demo 9999:8888
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888

рдареЗрдЧрд╛рдирд╛ рдЦреЛрд▓реНрджрд╛ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ:9999/ рддрдкрд╛рдИрдВрд▓реЗ рдирд┐рдореНрди рджреЗрдЦреНрдиреБрдкрд░реНрдЫ:

The magic word is "xyzzy"

рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрд╣рд░реВ рд▓реЗрдЦреНрджреИ

рдпрд╕ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореА рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрд▓рд╛рдИ рдХрдиреНрдЯреЗрдирд░рдорд╛ рдлрд╛рдЗрд▓рдХреЛ рд░реВрдкрдорд╛ рд╕рдВрд▓рдЧреНрди рдЧрд░реНрдиреЗрдЫреМрдВред рдХреЛрдб рдбреЗрдореЛ рднрдгреНрдбрд╛рд░рдХреЛ hello-secret-file рдлреЛрд▓реНрдбрд░рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдЫред

рдлрд╛рдЗрд▓рдХреЛ рд░реВрдкрдорд╛ рдЧреЛрдкреНрдп рдЬрдбрд╛рди рдЧрд░реНрди, рд╣рд╛рдореА рдирд┐рдореНрди рддреИрдирд╛рддреА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ:

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-file
          ports:
              - containerPort: 8888
          volumeMounts:
              - name: demo-secret-volume
                mountPath: "/secrets/"
                readOnly: true
   volumes:
      - name: demo-secret-volume
        secret:
           secretName: demo-secret

рдЙрдкрдЦрдгреНрдбрдорд╛ рдЬрд╕реНрддреИ "рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдк рд╡рд╕реНрддреБрд╣рд░реВрдмрд╛рдЯ рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рди рдлрд╛рдЗрд▓рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ" p рдорд╛ред 240, рд╣рд╛рдореА рднреЛрд▓реНрдпреБрдо рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ (рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдбреЗрдореЛ-рд╕реЗрдХреНрд░реЗрдЯ-рднреЛрд▓реНрдпреБрдо) рд░ рдпрд╕рд▓рд╛рдИ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рдирдХреЛ рднреЛрд▓реНрдпреБрдордорд╛рдЙрдиреНрдЯ рдЦрдгреНрдбрдорд╛ рдХрдиреНрдЯреЗрдирд░рдорд╛ рдорд╛рдЙрдиреНрдЯ рдЧрд░реНрдЫреМрдВред mountPath рдлрд┐рд▓реНрдб /secrets рд╣реЛ, рддреНрдпрд╕реИрд▓реЗ Kubernetes рд▓реЗ рдпрд╕ рдлреЛрд▓реНрдбрд░рдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдХреБрдЮреНрдЬреА/рдорд╛рди рдЬреЛрдбреАрдХреЛ рд▓рд╛рдЧрд┐ рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрдорд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдПрдЙрдЯрд╛ рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫред

рд╣рд╛рдореНрд░реЛ рдЙрджрд╛рд╣рд░рдгрдорд╛, рд╣рд╛рдореАрд▓реЗ magicWord рднрдирд┐рдиреЗ рдПрдЙрдЯрд╛ рдорд╛рддреНрд░ рдХреБрдЮреНрдЬреА-рдорд╛рди рдЬреЛрдбреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧрд░реНрдпреМрдВ, рддреНрдпрд╕реИрд▓реЗ manifest рд▓реЗ рдХрдиреНрдЯреЗрдирд░рдорд╛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛рдХреЛ рд╕рд╛рде рдПрдХрд▓ рдкрдвреНрди-рдорд╛рддреНрд░ рдлрд╛рдЗрд▓ /secrets/magicWord рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫред

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЕрдШрд┐рд▓реНрд▓реЛ рдЙрджрд╛рд╣рд░рдгрдХреЛ рд░реВрдкрдорд╛ рдпреЛ рдореНрдпрд╛рдирд┐рдлреЗрд╕реНрдЯ рд▓рд╛рдЧреВ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рддрдкрд╛рдИрдВрд▓реЗ рдЙрд╣реА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрдкрд░реНрдЫ:

The magic word is "xyzzy"

рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрд╣рд░реВ рдкрдвреНрджреИ

рдЕрдШрд┐рд▓реНрд▓реЛ рдЦрдгреНрдбрдорд╛, рд╣рд╛рдореАрд▓реЗ рдХрдиреНрдлрд┐рдЧрдореНрдпрд╛рдкрдХреЛ рд╕рд╛рдордЧреНрд░реАрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрди kubectl describe рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдпреМрдВред рдХреЗ рдЧреЛрдкреНрдп рд╕рдВрдЧ рдкрдирд┐ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ?

kubectl describe secret/demo-secret
Name:          demo-secret

Namespace:      default
Labels:             <none>
Annotations:
Type:               Opaque

Data
====
magicWord: 5   bytes

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

рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбрд╛рдЯрд╛рдХреЛ рдПрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ YAML рд╕рдВрд╕реНрдХрд░рдг рд╣реЗрд░реНрди, kubectl get рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
   magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaque

base64

eHl6enk= рдХреЗ рд╣реЛ, рд╣рд╛рдореНрд░реЛ рдореВрд▓ рдореВрд▓реНрдп рднрдиреНрджрд╛ рдкреВрд░реНрдгрддрдпрд╛ рдлрд░рдХ? рдпреЛ рд╡рд╛рд╕реНрддрд╡рдорд╛ рдПрдХ рдЧреЛрдкреНрдп рд╡рд╕реНрддреБ рд╣реЛ, рдЖрдзрд╛рд░ 64 рдПрдиреНрдХреЛрдбрд┐рдЩ рдорд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ред Base64 рдЕрдХреНрд╖рд░рд╣рд░реВрдХреЛ рд╕реНрдЯреНрд░рд┐рдЩрдХреЛ рд░реВрдкрдорд╛ рдордирдорд╛рдиреА рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдЗрдиреНрдХреЛрдбрд┐рдЩ рдЧрд░реНрдиреЗ рдпреЛрдЬрдирд╛ рд╣реЛред

рдХрд┐рдирдХреА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдмрд╛рдЗрдирд░реА рд╣реБрди рд╕рдХреНрдЫ рд░ рдЖрдЙрдЯрдкреБрдЯ рдирд╣реБрди рд╕рдХреНрдЫ (рдЬрд╕реНрддреИ TLS рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдЮреНрдЬреАрдХреЛ рдорд╛рдорд▓рд╛ рд╣реЛ), рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрд╣рд░реВ рд╕рдзреИрдВ base64 рдврд╛рдБрдЪрд╛рдорд╛ рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдиреНрдЫред

рдкрд╛рда beHl6enk= рд╣рд╛рдореНрд░реЛ рдЧреЛрдкреНрдп рд╢рдмреНрдж xyzzy рдХреЛ base64 рдПрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛред рддрдкрд╛рдИрдВрд▓реЗ рдЯрд░реНрдорд┐рдирд▓рдорд╛ base64 тАФdecode рдЖрджреЗрд╢ рдЪрд▓рд╛рдПрд░ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

echo "eHl6enk=" | base64 --decode
xyzzy

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

рдпрджрд┐ рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдХреЗрд╣рд┐ рдкрд╛рда (рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдпрд╕рд▓рд╛рдИ рдЧреЛрдкреНрдпрдорд╛ рд░рд╛рдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐) рдЖрдзрд╛рд░ 64 рдПрдиреНрдХреЛрдб рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рднрдиреЗ, рддрд░реНрдХ рдмрд┐рдирд╛ base64 рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

echo xyzzy | base64
eHl6enkK

рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрд╣рд░реВ рдкрд╣реБрдБрдЪ рдЧрд░реНрджреИ

рдХрд╕рд▓реЗ рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрд╣рд░реВ рдкрдвреНрди рд░ рд╕рдореНрдкрд╛рджрди рдЧрд░реНрди рд╕рдХреНрдЫ? рдпреЛ RBAC рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫ, рдкрд╣реБрдБрдЪ рдирд┐рдпрдиреНрддреНрд░рдг рд╕рдВрдпрдиреНрддреНрд░ (рд╣рд╛рдореА рдкреГрд╖реНрда 258 рдорд╛ "рднреВрдорд┐рдХрд╛рдорд╛ рдЖрдзрд╛рд░рд┐рдд рдкрд╣реБрдБрдЪ рдирд┐рдпрдиреНрддреНрд░рдгрдХреЛ рдкрд░рд┐рдЪрдп" рдЙрдкрдЦрдгреНрдбрдорд╛ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫреМрдВ)ред рдпрджрд┐ рддрдкрд╛рдЗрдБ RBAC рдирднрдПрдХреЛ рд╡рд╛ рд╕рдХреНрд╖рдо рдирднрдПрдХреЛ рдХреНрд▓рд╕реНрдЯрд░ рдЪрд▓рд╛рдЙрдБрджреИ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБрдХрд╛ рд╕рдмреИ рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрд╣рд░реВ рдХреБрдиреИ рдкрдирд┐ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд░ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдорд╛ рдЙрдкрд▓рдмреНрдз рдЫрдиреН (рд╣рд╛рдореА рдкрдЫрд┐ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдЧрд░реНрдиреЗрдЫреМрдВ рдХрд┐ рддрдкрд╛рдЗрдБрд╕рдБрдЧ RBAC рдмрд┐рдирд╛ рдХреБрдиреИ рдЙрддреНрдкрд╛рджрди рдХреНрд▓рд╕реНрдЯрд░рд╣рд░реВ рд╣реБрдиреБ рд╣реБрдБрджреИрди)ред

рдирд┐рд╖реНрдХреНрд░рд┐рдп рдбрд╛рдЯрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рд▓реЗ рдпрд╕рдХреЛ рд╕рдмреИ рдЬрд╛рдирдХрд╛рд░реА рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдиреЗ etcd рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдкрд╣реБрдБрдЪ рднрдПрдХрд╛рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреЗ рд╣реБрдиреНрдЫ? рдХреЗ рддрд┐рдиреАрд╣рд░реВрд▓реЗ API рдорд╛рд░реНрдлрдд рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрд╣рд░реВ рдкрдвреНрди рдЕрдиреБрдорддрд┐ рдмрд┐рдирд╛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбрд╛рдЯрд╛ рдкрдвреНрди рд╕рдХреНрдЫрдиреН?

рд╕рдВрд╕реНрдХрд░рдг 1.7 рджреЗрдЦрд┐, Kubernetes рдирд┐рд╖реНрдХреНрд░рд┐рдп рдбреЗрдЯрд╛ рдЗрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рд╣реЛ рдХрд┐ etcd рднрд┐рддреНрд░рдХреЛ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЬрд╛рдирдХрд╛рд░реА рдбрд┐рд╕реНрдХрдорд╛ рдЗрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рднрдгреНрдбрд╛рд░рдг рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рдкреНрд░рддреНрдпрдХреНрд╖ рдкрд╣реБрдБрдЪ рднрдПрдХрд╛рд╣рд░реВрд▓реЗ рдкрдирд┐ рдкрдвреНрди рд╕рдХреНрджреИрдирдиреНред рдпрд╕рд▓рд╛рдИ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдЧрд░реНрди, рддрдкрд╛рдЗрдБрд▓рд╛рдИ рдХреБрдмреЗрд░рдиреЗрдЯ рдПрдкреАрдЖрдИ рд╕рд░реНрднрд░рдорд╛ рдорд╛рддреНрд░ рднрдПрдХреЛ рдХреБрдЮреНрдЬреА рдЪрд╛рд╣рд┐рдиреНрдЫред рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рдХреНрд▓рд╕реНрдЯрд░рдорд╛, рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЧреБрдкреНрддрд┐рдХрд░рдг рд╕рдХреНрд╖рдо рд╣реБрдиреБрдкрд░реНрдЫред

рддрдкрд╛рдИрдВ рдЬрд╛рдБрдЪ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдпрджрд┐ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЗрдиреНрдХреНрд░рд┐рдкреНрд╕рдирд▓реЗ рддрдкрд╛рдИрдВрдХреЛ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдпрд╕ рддрд░рд┐рдХрд╛рд▓реЗ рдХрд╛рдо рдЧрд░реНрджрдЫ:

kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
        --experimental-encryption-provider-config=...

рдпрджрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ-рдЗрдиреНрдХреНрд░рд┐рдкреНрд╢рди-рдкреНрд░рджрд╛рдпрдХ-рдХрдиреНрдлрд┐рдЧрд┐рдЩ рдлреНрд▓реНрдпрд╛рдЧ рджреЗрдЦреНрдиреБрднрдПрди рднрдиреЗ, рдирд┐рд╖реНрдХреНрд░рд┐рдп рдЗрдиреНрдХреНрд░рд┐рдкреНрд╕рди рд╕рдХреНрд╖рдо рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред Google Kubernetes рдЗрдиреНрдЬрд┐рди рд╡рд╛ рдЕрдиреНрдп Kubernetes рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕реЗрд╡рд╛рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрд╛, рддрдкрд╛рдИрдВрдХреЛ рдбреЗрдЯрд╛ рдлрд░рдХ рд╕рдВрдпрдиреНрддреНрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЗрдиреНрдХреНрд░рд┐рдкреНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ, рддреНрдпрд╕реИрд▓реЗ рдЭрдгреНрдбрд╛ рдЙрдкрд╕реНрдерд┐рдд рд╣реБрдиреЗрдЫреИрдиред etcd рд╕рд╛рдордЧреНрд░реА рдЗрдиреНрдХреНрд░рд┐рдкреНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫ рдХрд┐ рдЫреИрди рднрдиреЗрд░ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЖрдлреНрдиреЛ Kubernetes рд╡рд┐рдХреНрд░реЗрддрд╛рд╕рдБрдЧ рдЬрд╛рдБрдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдЧреЛрдкреНрдп рдбрд╛рдЯрд╛ рднрдгреНрдбрд╛рд░рдг

рддреНрдпрд╣рд╛рдБ рдХреЗрд╣реА Kubernetes рд╕реНрд░реЛрддрд╣рд░реВ рдЫрдиреН рдЬреБрди рдХреНрд▓рд╕реНрдЯрд░рдмрд╛рдЯ рдХрд╣рд┐рд▓реНрдпреИ рд╣рдЯрд╛рдЙрдиреБ рд╣реБрдБрджреИрди, рдЬрд╕реНрддреИ рдЕрддрд┐ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЧреЛрдкреНрдп рд╡рд╕реНрддреБрд╣рд░реВред рд╣реЗрд▓реНрдо рдкреНрд░рдмрдиреНрдзрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдПрдиреЛрдЯреЗрд╕рди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рддрдкрд╛рдИрдВрд▓реЗ рд╕реНрд░реЛрддрд▓рд╛рдИ рдореЗрдЯрд╛рдЙрдирдмрд╛рдЯ рдЬреЛрдЧрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ:

kind: Secret
metadata:
    annotations:
        "helm.sh/resource-policy": keep

рдЧреЛрдкреНрдп рд╡рд╕реНрддреБ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд░рдгрдиреАрддрд┐рд╣рд░реВ

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

рддрдкрд╛рдИрдВрд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдиреНрддреНрд░рдгрдорд╛ рд░рд╣реЗрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рдЧреЛрдкреНрдп рдЬрд╛рдирдХрд╛рд░реА рдХрд╣рд┐рд▓реНрдпреИ рд░рд╛рдЦреНрдиреБ рд╣реБрдБрджреИрдиред рддрдкрд╛рдИрдВ рдЖрдлреНрдиреЛ Kubernetes рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рд▓рд╛рдЧреВ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рдХрд╕рд░реА рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ?

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

  • рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбрд╛рдЯрд╛ рдХрд╣рд╛рдБ рднрдгреНрдбрд╛рд░рдг рдЧрд░реНрдиреБрдкрд░реНрдЫ рддрд╛рдХрд┐ рдпреЛ рдЕрддреНрдпрдзрд┐рдХ рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп рд╣реЛрд╕реН?
  • рддрдкрд╛рдИрдВрдХреЛ рд╕рдХреНрд░рд┐рдп рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдХрд╕рд░реА рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбрд╛рдЯрд╛ рдкрд╣реБрдБрдЪрдпреЛрдЧреНрдп рдмрдирд╛рдЙрдиреЗ?
  • рдЬрдм рддрдкрд╛рдЗрдБ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╡рд╛ рд╕рдореНрдкрд╛рджрди рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рддрдкрд╛рдЗрдБрдХреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрд▓рд╛рдИ рдХреЗ рд╣реБрдиреБрдкрд░реНрджрдЫ?

рд▓реЗрдЦрдХрд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛

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

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

┬╗ рдкреБрд╕реНрддрдХрдХреЛ рдмрд╛рд░реЗрдорд╛ рдердк рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдпрд╣рд╛рдБ рдкрд╛рдЙрди рд╕рдХрд┐рдиреНрдЫ рдкреНрд░рдХрд╛рд╢рдХрдХреЛ тАЛтАЛрд╡реЗрдмрд╕рд╛рдЗрдЯ
┬╗ рд╕рд╛рдордЧреНрд░реАрдХреЛ рддрд╛рд▓рд┐рдХрд╛
┬╗ рдЕрдВрд╢

Khabrozhiteley рдХреЛ рд▓рд╛рдЧрд┐ рдХреБрдкрди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ 25% рдЫреБрдЯ - рдХреБрдмрд░реНрдиреЗрдЯреНрд╕

рдкреБрд╕реНрддрдХрдХреЛ рдкреЗрдкрд░ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рднреБрдХреНрддрд╛рдиреА рдЧрд░реЗрдкрдЫрд┐, рдПрдХ рдЗрд▓реЗрдХреНрдЯреНрд░реЛрдирд┐рдХ рдкреБрд╕реНрддрдХ рдЗ-рдореЗрд▓ рдорд╛рд░реНрдлрдд рдкрдард╛рдЗрдиреЗрдЫред

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

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