рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рдмрдврд╝рддреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рд╣реЗ рд╣рдмрд░!

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

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рдмрдврд╝рддреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

рдкрдврд╝рдиреЗ рдХрд╛ рдЖрдирдВрдж рд▓реЗрдВ!

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

рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░реЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдПрдХ рд╡рд┐рд╢реЗрд╖ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рд╣реБрдИ; рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ 2007 рд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╕реАрдЧреНрд░реБрдкреНрд╕, рдФрд░ 2002 рд╕реЗ - рдирд╛рдорд╕реНрдерд╛рдиред 2008 рдореЗрдВ, рдЬрдм рдпрд╣ рдЙрдкрд▓рдмреНрдз рд╣реБрдЖ, рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рдФрд░ рднреА рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ LXC, рдФрд░ Google рдиреЗ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЖрдВрддрд░рд┐рдХ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рддрдВрддреНрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд┐рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдмреЛрд░реНрдЧ, ╨│╨┤╨╡ ┬л╨▓╤Б╤П ╤А╨░╨▒╨╛╤В╨░ ╨▓╨╡╨┤╨╡╤В╤Б╤П ╨▓ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╨░╤Е┬╗. ╨Ю╤В╤Б╤О╨┤╨░ ╨┐╨╡╤А╨╡╨╜╨╡╤Б╨╡╨╝╤Б╤П ╨▓ 2013, ╨║╨╛╨│╨┤╨░ ╤Б╨╛╤Б╤В╨╛╤П╨╗╤Б╤П ╨┐╨╡╤А╨▓╤Л╨╣ ╤А╨╡╨╗╨╕╨╖ Docker, ╨╕ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╤Л ╨╛╨║╨╛╨╜╤З╨░╤В╨╡╨╗╤М╨╜╨╛ ╨┐╨╡╤А╨╡╤И╨╗╨╕ ╨▓ ╤А╨░╨╖╤А╤П╨┤ ╨┐╨╛╨┐╤Г╨╗╤П╤А╨╜╤Л╤Е ╨╝╨░╤Б╤Б╨╛╨▓╤Л╤Е ╤А╨╡╤И╨╡╨╜╨╕╨╣. ╨Э╨░ ╤В╨╛╤В ╨╝╨╛╨╝╨╡╨╜╤В ╨╛╤Б╨╜╨╛╨▓╨╜╤Л╨╝ ╨╕╨╜╤Б╤В╤А╤Г╨╝╨╡╨╜╤В╨╛╨╝ ╨┤╨╗╤П ╨╛╤А╨║╨╡╤Б╤В╤А╨░╤Ж╨╕╨╕ ╨║╨╛╨╜╤В╨╡╨╣╨╜╨╡╤А╨╛╨▓ ╨▒╤Л╨╗ рдореЗрд╕реЛ, рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡рд╣ рдмреЗрддрд╣рд╛рд╢рд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╣реАрдВ рдерд╛ред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ 2015 рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдЙрдкрдХрд░рдг рдХрдВрдЯреЗрдирд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рдмрди рдЧрдпрд╛ред

рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЗрддрдирд╛ рд▓реЛрдХрдкреНрд░рд┐рдп рдХреНрдпреЛрдВ рд╣реИ, рдЖрдЗрдП рдХреБрдЫ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХрдм рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕ рдмрд╛рдд рдкрд░ рд╕рд╣рдордд рд╣реЛ рдкрд╛рдП рдереЗ рдХрд┐ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдП? рдЖрдк рдРрд╕реЗ рдХрд┐рддрдиреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЬрд╛рдирддреЗ рд╣реИрдВ рдЬреЛ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдЙрдкрд▓рдмреНрдз рдХрд░рд╛рдП рдЧрдП рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдЖрдЬ рдРрд╕реЗ рдХрд┐рддрдиреЗ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рд╢рд╛рд╕рдХ рд╣реИрдВ рдЬреЛ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрддреЗ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ? рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрди рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдЦреЗрдВрдЧреЗред

YAML рдХреЗ рд░реВрдк рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдБрдЪрд╛

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

apiVersion: v1
kind: Pod
metadata:
  name: site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80

рдпрд╣ рджреГрд╢реНрдп DevOps рдпрд╛ SRE рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреИрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦреЗ рдмрд┐рдирд╛ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпрднрд╛рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред

рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рд▓рд╛рднреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • GitOps рдпрд╛ Git рдСрдкрд░реЗрд╢рдВрд╕ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдгред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЖрдкрдХреЛ рд╕рднреА Kubernetes YAML рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ git рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрди рдХрдм рдХрд┐рдпрд╛ рдЧрдпрд╛, рдХрд┐рд╕рдиреЗ рдХрд┐рдпрд╛ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓рд╛ред рдЗрд╕рд╕реЗ рдкреВрд░реЗ рд╕рдВрдЧрдарди рдореЗрдВ рдкрд░рд┐рдЪрд╛рд▓рди рдХреА рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдмрдврд╝рддреА рд╣реИ рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рджреВрд░ рдХрд░рдХреЗ рдкрд░рд┐рдЪрд╛рд▓рди рджрдХреНрд╖рддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдЙрди рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд╣рд╛рдБ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХреА рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА, рдХреЗрд╡рд▓ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рдорд░реНрдЬ рдХрд░рдХреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
  • рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреАред рдЬрдм рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ YAML рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХреНрд▓рд╕реНрдЯрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рдПрдХ рдпрд╛ рджреЛ рдирдВрдмрд░ рдмрджрд▓рдирд╛ рдмреЗрд╣рдж рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЗрд╕рдХреЗ рдкреИрдорд╛рдиреЗ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛрддрд╛ рд╣реИред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдкреЙрдбреНрд╕ рдХреЗ рдХреНрд╖реИрддрд┐рдЬ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд╕рд╛рдиреА рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рдирд┐рдореНрди рдФрд░ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдкреЙрдбреНрд╕ рдХреА рдиреНрдпреВрдирддрдо рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдХрд┐рддрдиреА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдиреЗ рдХреЛрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рддреИрдирд╛рдд рдХрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрдлрд╝рд┐рдХ рдореЗрдВ рдЕрдЪрд╛рдирдХ рд╡реГрджреНрдзрд┐ рдХреЗ рдХрд╛рд░рдг рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖рдорддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдХреНрд╕рд░реЗрдкреНрд▓рд┐рдХрд╛рдЬрд╝ рдХреЛ 10 рд╕реЗ 20 рддрдХ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: myapp
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: myapp-deployment
  minReplicas: 1
  maxReplicas: 20
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

  • рд╕реБрд░рдХреНрд╖рд╛ рдПрд╡рдВ рдкреНрд░рдмрдВрдзрди. рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдХреИрд╕реЗ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП YAML рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреНрд░рдореБрдЦ рд╕реБрд░рдХреНрд╖рд╛ рдЪрд┐рдВрддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрднрд╛рд░ рдЧреИрд░-рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ рд╕рдВрдШрд░реНрд╖, ╨▓╨░╨╗╨╕╨┤╨░╤В╨╛╤А YAML/JSON, ╨┐╨╗╤О╤Б рдУрдкрди рдкреЙрд▓рд┐рд╕реА рдПрдЬреЗрдВрдЯ, рд╕рдВрджрд░реНрдн рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреАрддрд┐ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрджрд░реНрдн рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрднрд╛рд░ рдХрдВрдЯреЗрдирд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХреАрдп рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╕рд░рд▓ рдиреАрддрд┐ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд░реЗрдЧреЛ, рдЗрд╕ рдХрджрд░:

package main

deny[msg] {
  input.kind = "Deployment"
  not input.spec.template.spec.securityContext.runAsNonRoot = true
  msg = "Containers must not run as root"
}

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

рд╡рд┐рд╕реНрддрд╛рд░

рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдмрд╣реБрдд рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдп рд╣реИ рдФрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреИрд╕реЗ рдкреЙрдб, рдкрд░рд┐рдирд┐рдпреЛрдЬрди, StatefulSets, рд░рд╣рд╕реНрдп, ConfigMaps, рд╡рдЧреИрд░рд╣ред рд╕рдЪ рд╣реИ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдбреЗрд╡рд▓рдкрд░ рдлрд╝реЙрд░реНрдо рдореЗрдВ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрди рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ.

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рд╣рдо рдХрд┐рд╕реА рд╕рдВрд╕рд╛рдзрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ CronTab, рддреЛ рдЖрдк рдРрд╕рд╛ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: crontabs.my.org
spec:
  group: my.org
  versions:
    - name: v1
      served: true
      storage: true
      Schema:
        openAPIV3Schema:
          type: object
          properties:
            spec:
              type: object
              properties:
                cronSpec:
                  type: string
                  pattern: '^(d+|*)(/d+)?(s+(d+|*)(/d+)?){4}$'
                replicas:
                  type: integer
                  minimum: 1
                  maximum: 10
  scope: Namespaced
  names:
    plural: crontabs
    singular: crontab
    kind: CronTab
    shortNames:
    - ct

рдмрд╛рдж рдореЗрдВ рд╣рдо рдХреНрд░реЛрдирдЯреИрдм рд╕рдВрд╕рд╛рдзрди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

apiVersion: "my.org/v1"
kind: CronTab
metadata:
  name: my-cron-object
spec:
  cronSpec: "* * * * */5"
  image: my-cron-image
  replicas: 5

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

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

$ operator-sdk new my-operator --repo github.com/myuser/my-operator

рдпрд╣ рдЖрдкрдХреЗ рдСрдкрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рднреА рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ YAML рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рдЧреЛрд▓рд╛рдВрдЧ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

.
|____cmd
| |____manager
| | |____main.go
|____go.mod
|____deploy
| |____role.yaml
| |____role_binding.yaml
| |____service_account.yaml
| |____operator.yaml
|____tools.go
|____go.sum
|____.gitignore
|____version
| |____version.go
|____build
| |____bin
| | |____user_setup
| | |____entrypoint
| |____Dockerfile
|____pkg
| |____apis
| | |____apis.go
| |____controller
| | |____controller.go

рдлрд┐рд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рдЖрд╡рд╢реНрдпрдХ рдПрдкреАрдЖрдИ рдФрд░ рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:

$ operator-sdk add api --api-version=myapp.com/v1alpha1 --kind=MyAppService

$ operator-sdk add controller --api-version=myapp.com/v1alpha1 --kind=MyAppService

рдлрд┐рд░, рдЕрдВрдд рдореЗрдВ, рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХрдВрдЯреЗрдирд░ рдХреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рднреЗрдЬреЗрдВ:

$ operator-sdk build your.container.registry/youruser/myapp-operator

╨Х╤Б╨╗╨╕ ╤А╨░╨╖╤А╨░╨▒╨╛╤В╤З╨╕╨║╤Г ╤В╤А╨╡╨▒╤Г╨╡╤В╤Б╤П ╨╡╤Й╨╡ ╨▒╨╛╨╗╨╡╨╡ ╨┐╨╛╨╗╨╜╤Л╨╣ ╨║╨╛╨╜╤В╤А╨╛╨╗╤М, ╤В╨╛ ╨╝╨╛╨╢╨╜╨╛ ╨╕╨╖╨╝╨╡╨╜╨╕╤В╤М ╤Б╤В╨╡╤А╨╡╨╛╤В╨╕╨┐╨╜╤Л╨╣ ╨║╨╛╨┤ ╨▓ ╤Д╨░╨╣╨╗╨░╤Е ╨╜╨░ Go. ╨Э╨░╨┐╤А╨╕╨╝╨╡╤А, ╤З╤В╨╛╨▒╤Л ╨▓╨╕╨┤╨╛╨╕╨╖╨╝╨╡╨╜╨╕╤В╤М ╤Б╨┐╨╡╤Ж╨╕╤Д╨╕╨║╤Г ╨║╨╛╨╜╤В╤А╨╛╨╗╨╗╨╡╤А╨░, ╨╝╨╛╨╢╨╜╨╛ ╨▓╨╜╨╡╤Б╤В╨╕ ╨╕╨╖╨╝╨╡╨╜╨╡╨╜╨╕╤П ╨▓ ╤Д╨░╨╣╨╗ controller.go.

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

$ kubectl kudo install zookeeper
$ kubectl kudo install kafka

рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрдорд╛рдВрдб рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:

$ kubectl kudo install kafka --instance=my-kafka-name 
            -p ZOOKEEPER_URI=zk-zookeeper-0.zk-hs:2181 
            -p ZOOKEEPER_PATH=/my-path -p BROKER_CPUS=3000m 
            -p BROKER_COUNT=5 -p BROKER_MEM=4096m 
            -p DISK_SIZE=40Gi -p MIN_INSYNC_REPLICAS=3 
            -p NUM_NETWORK_THREADS=10 -p NUM_IO_THREADS=20

рдирд╡рд╛рдЪрд╛рд░реЛрдВ

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

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

рд╕рдореБрджрд╛рдп

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

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

рдХреНрд▓рд╛рдЙрдб рдиреЗрдЯрд┐рд╡ рдлрд╝рд╛рдЙрдВрдбреЗрд╢рди CloudNativeCon/KubeCon рдХреА рднреА рдореЗрдЬрдмрд╛рдиреА рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рджреБрдирд┐рдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдУрдкрди рд╕реЛрд░реНрд╕ рд╕рдореНрдореЗрд▓рди рд╣реИред рдЖрдо рддреМрд░ рдкрд░ рд╕рд╛рд▓ рдореЗрдВ рддреАрди рдмрд╛рд░ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдЙрди рд╣рдЬрд╛рд░реЛрдВ рдкреЗрд╢реЗрд╡рд░реЛрдВ рдХреЛ рдПрдХ рд╕рд╛рде рд▓рд╛рддрд╛ рд╣реИ рдЬреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдФрд░ рдЗрд╕рдХреЗ рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╣рд░ рддреАрди рдорд╣реАрдиреЗ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд╕реАрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

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

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

рдж рдлреНрдпреВрдЪрд░

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

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдХреЗрд╡рд▓ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреА рд╕рддрд╣ рдХреЛ рдЦрдВрдЧрд╛рд▓рд╛ рд╣реИ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рд┐рд░реНрдл рд╣рд┐рдорд╢реИрд▓ рдХрд╛ рд╕рд┐рд░рд╛ рд╣реИред рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рдХрдИ рдЕрдиреНрдп рд╕рдВрд╕рд╛рдзрди, рдХреНрд╖рдорддрд╛рдПрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реИрдВред

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ