рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреНрдпрд╛ рд╡рд╛рдврддреНрдпрд╛ рд▓реЛрдХрдкреНрд░рд┐рдпрддреЗрдмрджреНрджрд▓

рдЕрд╣реЛ рд╣рд╛рдмреНрд░!

рдЙрдиреНрд╣рд╛рд│реНрдпрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА, рдЖрдореНрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдард╡рдг рдХрд░реВрди рджреЗрдК рдЗрдЪреНрдЫрд┐рддреЛ рдХреА рдЖрдореНрд╣реА рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдХрд╛рдо рдХрд░рдгреЗ рд╕реБрд░реВ рдареЗрд╡рддреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЖрдгрд┐ рдЬреВрдирдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рддреАрд▓ рдШрдбрд╛рдореЛрдбреАрдВрдЪреА рд╕реНрдерд┐рддреА рджрд░реНрд╢рд╡рд┐рдгрд╛рд░рд╛ рдПрдХ рд▓реЗрдЦ рд╕реНрдЯреЕрдХрдУрд╡реНрд╣рд░рдлреНрд▓реЛрдордзреВрди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдгреНрдпрд╛рдЪрд╛ рдирд┐рд░реНрдгрдп рдШреЗрддрд▓рд╛.

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреНрдпрд╛ рд╡рд╛рдврддреНрдпрд╛ рд▓реЛрдХрдкреНрд░рд┐рдпрддреЗрдмрджреНрджрд▓

рд╡рд╛рдЪрди рдЖрдирдВрдж рдШреНрдпрд╛!

рд╣рд╛ рд▓реЗрдЦ рд▓рд┐рд╣рд┐рддрд╛рдирд╛, рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреЗ рд╡рдп рдЕрдВрджрд╛рдЬреЗ рдЖрд╣реЗ. рд╕рд╣рд╛ рд╡рд░реНрд╖рд╛рдВрдЪрд╛, рдЖрдгрд┐ рдЧреЗрд▓реНрдпрд╛ рджреЛрди рд╡рд░реНрд╖рд╛рдВрдд рддреНрдпрд╛рдЪреА рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдЗрддрдХреА рд╡рд╛рдврд▓реА рдЖрд╣реЗ рдХреА рддреА рд╕рд╛рддрддреНрдпрд╛рдиреЗ рдХреНрд░рдорд╡рд╛рд░реАрдд рдЖрд╣реЗ рд╕рд░реНрд╡рд╛рдд рдЖрд╡рдбрддреЗ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдХреБрдмрд░рдиреЗрдЯреЗрд╕ рдпрд╛ рд╡рд░реНрд╖реА рддрд┐рд╕рд▒реНрдпрд╛ рдХреНрд░рдорд╛рдВрдХрд╛рд╡рд░ рдЖрд╣реЗ. рд░реАрдХреЕрдк рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА: Kubernetes рд╣реЗ рдХрдВрдЯреЗрдирд░реАрдХреГрдд рд╡рд░реНрдХрд▓реЛрдбреНрд╕ рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдбрд┐рдЭрд╛рдЗрди рдХреЗрд▓реЗрд▓реЗ рдкреНрд▓реЕрдЯрдлреЙрд░реНрдо рдЖрд╣реЗ.

рд▓рд┐рдирдХреНрд╕рдордзреАрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрд▓рдЧ рдареЗрд╡рдгреНрдпрд╛рд╕рд╛рдареА рдХрдВрдЯреЗрдирд░рдЪреА рд╕реБрд░реБрд╡рд╛рдд рд╡рд┐рд╢реЗрд╖ рд░рдЪрдирд╛ рдореНрд╣рдгреВрди рдЭрд╛рд▓реА; 2007 рдкрд╛рд╕реВрди рдХрдВрдЯреЗрдирд░ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗрдд cgroups, рдЖрдгрд┐ 2002 рдкрд╛рд╕реВрди - рдиреЗрдорд╕реНрдкреЗрд╕реЗрд╕. 2008 рдордзреНрдпреЗ рдЬреЗрд╡реНрд╣рд╛ рддреЗ рдЙрдкрд▓рдмреНрдз рдЭрд╛рд▓реЗ рддреЗрд╡реНрд╣рд╛ рдХрдВрдЯреЗрдирд░рдЪреА рд░рдЪрдирд╛ рдЖрдгрдЦреА рдЪрд╛рдВрдЧрд▓реА рдЭрд╛рд▓реА рдПрд▓рдПрдХреНрд╕рд╕реА, рдЖрдгрд┐ Google рдиреЗ рд╕реНрд╡рддрдГрдЪреА рдЕрдВрддрд░реНрдЧрдд рдХреЙрд░реНрдкреЛрд░реЗрдЯ рдпрдВрддреНрд░рдгрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реА рдмреЛрд░реНрдЧ, рдЬреЗрдереЗ "рд╕рд░реНрд╡ рдХрд╛рдо рдХрдВрдЯреЗрдирд░рдордзреНрдпреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ." рдпреЗрдереВрди рдЖрдореНрд╣реА 2013 рдкрд░реНрдпрдВрдд рдлрд╛рд╕реНрдЯ рдлреЙрд░рд╡рд░реНрдб рдХреЗрд▓реЗ, рдЬреЗрд╡реНрд╣рд╛ рдбреЙрдХрд░рдЪреЗ рдкрд╣рд┐рд▓реЗ рдкреНрд░рдХрд╛рд╢рди рдЭрд╛рд▓реЗ рдЖрдгрд┐ рдХрдВрдЯреЗрдирд░ рд╢реЗрд╡рдЯреА рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдорд╛рд╕ рд╕реЛрд▓реНрдпреВрд╢рди рдмрдирд▓реЗ. рддреНрдпрд╛ рд╡реЗрд│реА рдХрдВрдЯреЗрдирд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рдирдЪреЗ рдореБрдЦреНрдп рд╕рд╛рдзрди рд╣реЛрддреЗ рдореЗрд╕реЛрд╕, рдЬрд░реА рддреЛ рдЕрддреНрдпрдВрдд рд▓реЛрдХрдкреНрд░рд┐рдп рдирд╡реНрд╣рддрд╛. Kubernetes рдкреНрд░рдердо 2015 рдордзреНрдпреЗ рд░рд┐рд▓реАрдЭ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реЗ рд╣реЛрддреЗ, рддреНрдпрд╛рдирдВрддрд░ рд╣реЗ рд╕рд╛рдзрди рдХрдВрдЯреЗрдирд░ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рдирдЪреНрдпрд╛ рдХреНрд╖реЗрддреНрд░рд╛рдд рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдирдХ рдмрдирд▓реЗ.

рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЗрддрдХреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдХрд╛ рдЖрд╣реЗ рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЪрд▓рд╛ рдХрд╛рд╣реА рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рджреЗрдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛. рдЙрддреНрдкрд╛рджрдирд╛рд╕рд╛рдареА рдНрдкреНрд▓рд┐рдХреЗрд╢рдиреНрд╕ рдХрд╕реЗ рдЙрдкрдпреЛрдЬрд┐рдд рдХрд░рд╛рдпрдЪреЗ рдпрд╛рд╡рд░ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рд╡реЗрд│реА рд╡рд┐рдХрд╛рд╕рдХ рдХрдзреА рд╕рд╣рдордд рдЭрд╛рд▓реЗ рд╣реЛрддреЗ? рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд┐рддреА рдбреЗрд╡реНрд╣рд▓рдкрд░ рдорд╛рд╣рд┐рдд рдЖрд╣реЗрдд рдЬреЗ рд╕рд╛рдзрдиреЗ рд╡рд╛рдкрд░рддрд╛рдд рдХрд╛рд░рдг рддреЗ рдмреЙрдХреНрд╕рдЪреНрдпрд╛ рдмрд╛рд╣реЗрд░ рджрд┐рд▓реЗ рдЬрд╛рддрд╛рдд? рдЖрдЬ рдХрд┐рддреА рдХреНрд▓рд╛рдЙрдб рдкреНрд░рд╢рд╛рд╕рдХ рдЖрд╣реЗрдд рдЬреНрдпрд╛рдВрдирд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рд╣реЗ рд╕рдордЬрдд рдирд╛рд╣реА? рдпрд╛ рдкреНрд░рд╢реНрдирд╛рдВрдЪреА рдЙрддреНрддрд░реЗ рдЖрдкрдг рдпрд╛ рд▓реЗрдЦрд╛рдд рдкрд╛рд╣реВ.

YAML рдореНрд╣рдгреВрди рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛

рдХрдардкреБрддрд│реА рдЖрдгрд┐ рд╢реЗрдлрдкрд╛рд╕реВрди рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕рдкрд░реНрдпрдВрдд рдЧреЗрд▓реЗрд▓реНрдпрд╛ рдЬрдЧрд╛рдд, рд╕рд░реНрд╡рд╛рдд рдореЛрдард╛ рдмрджрд▓ рдореНрд╣рдгрдЬреЗ тАЬрдХреЛрдб рдореНрд╣рдгреВрди рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛тАЭ рд╡рд░реВрди тАЬрдбреЗрдЯрд╛ рдореНрд╣рдгреВрди рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛тАЭ - рд╡рд┐рд╢реЗрд╖рдд: YAML рдкреНрд░рдорд╛рдгреЗ. рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдордзреАрд▓ рд╕рд░реНрд╡ рд╕рдВрд╕рд╛рдзрдиреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреЙрдбреНрд╕, рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди, рдЙрдкрдпреЛрдЬрд┐рдд рдЙрджрд╛рд╣рд░рдгреЗ, рд╡реНрд╣реЙрд▓реНрдпреВрдо рдЗрддреНрдпрд╛рджреАрдВрдЪрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЖрд╣реЗ, YAML рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕рд╣рдЬрдкрдгреЗ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде:

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

рдпрд╛ рджреГрд╢реНрдпрд╛рдореБрд│реЗ DevOps рдХрд┐рдВрд╡рд╛ SRE рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХрд╛рдВрдирд╛ Python рдХрд┐рдВрд╡рд╛ Javascript рд╕рд╛рд░рдЦреНрдпрд╛ рднрд╛рд╖рд╛рдВрдордзреНрдпреЗ рдХреЛрдб рди рд▓рд┐рд╣рд┐рддрд╛ рддреНрдпрд╛рдВрдЪреЗ рд╡рд░реНрдХрд▓реЛрдб рдкреВрд░реНрдгрдкрдгреЗ рд╡реНрдпрдХреНрдд рдХрд░рдгреЗ рд╕реЛрдкреЗ рд╣реЛрддреЗ.

рдбреЗрдЯрд╛ рдореНрд╣рдгреВрди рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЗрддрд░ рдлрд╛рдпрджреНрдпрд╛рдВрдордзреНрдпреЗ рд╣реЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЖрд╣реЗ:

  • GitOps рдХрд┐рдВрд╡рд╛ Git рдСрдкрд░реЗрд╢рдиреНрд╕ рдЖрд╡реГрддреНрддреА рдирд┐рдпрдВрддреНрд░рдг. рд╣рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрди рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡ Kubernetes YAML рдлрд╛рдЗрд▓реНрд╕ git рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдЬрдордзреНрдпреЗ рдареЗрд╡рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ, рдЬреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣реА рдмрджрд▓ рдХреЗрд╡реНрд╣рд╛ рдЭрд╛рд▓рд╛, рдХреЛрдгреА рдХреЗрд▓рд╛ рдЖрдгрд┐ рдиреЗрдордХрд╛ рдХрд╛рдп рдмрджрд▓ рдЭрд╛рд▓рд╛ рдпрд╛рдЪрд╛ рдорд╛рдЧреЛрд╡рд╛ рдШреЗрдК рд╢рдХрддрд╛. рдпрд╛рдореБрд│реЗ рд╕рдВрдкреВрд░реНрдг рд╕рдВрд╕реНрдереЗрддреАрд▓ рдСрдкрд░реЗрд╢рдиреНрд╕рдЪреА рдкрд╛рд░рджрд░реНрд╢рдХрддрд╛ рд╡рд╛рдврддреЗ рдЖрдгрд┐ рд╕рдВрджрд┐рдЧреНрдзрддрд╛ рджреВрд░ рдХрд░реВрди рдСрдкрд░реЗрд╢рдирд▓ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реБрдзрд╛рд░рддреЗ, рд╡рд┐рд╢реЗрд╖рдд: рдЬрд┐рдереЗ рдХрд░реНрдордЪрд╛рд▒реНрдпрд╛рдВрдиреА рддреНрдпрд╛рдВрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрд╕рд╛рдзрдиреЗ рд╢реЛрдзрд▓реА рдкрд╛рд╣рд┐рдЬреЗрдд. рддреНрдпрд╛рдЪ рд╡реЗрд│реА, рдлрдХреНрдд рдкреБрд▓ рд╡рд┐рдирдВрддреА рд╡рд┐рд▓реАрди рдХрд░реВрди рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдордзреНрдпреЗ рдЖрдкреЛрдЖрдк рдмрджрд▓ рдХрд░рдгреЗ рд╕реЛрдкреЗ рд╣реЛрддреЗ.
  • рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА. рдЬреЗрд╡реНрд╣рд╛ рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪреА YAML рдореНрд╣рдгреВрди рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗрд▓реА рдЬрд╛рддреЗ, рддреЗрд╡реНрд╣рд╛ рдХреНрд▓рд╕реНрдЯрд░ рдСрдкрд░реЗрдЯрд░рд╕рд╛рдареА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд░рд┐рд╕реЛрд░реНрд╕рдордзреНрдпреЗ рдПрдХ рдХрд┐рдВрд╡рд╛ рджреЛрди рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓рдгреЗ рдЕрддреНрдпрдВрдд рд╕реЛрдкреЗ рд╣реЛрддреЗ, рдЬреНрдпрд╛рдореБрд│реЗ рддреЗ рдХрд╕реЗ рд╕реНрдХреЗрд▓ рд╣реЛрддреЗ рддреЗ рдмрджрд▓рддреЗ. рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдкреЙрдбреНрд╕рдЪреНрдпрд╛ рдХреНрд╖реИрддрд┐рдЬ рдСрдЯреЛрд╕реНрдХреЗрд▓рд┐рдВрдЧрд╕рд╛рдареА рдПрдХ рдпрдВрддреНрд░рдгрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ, рдЬреНрдпрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрдореА рдЖрдгрд┐ рдЙрдЪреНрдЪ рд╕реНрддрд░рд╛рд╡рд░реАрд▓ рд░рд╣рджрд╛рд░реА рд╣рд╛рддрд╛рд│рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреИрдирд╛рддреА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирдордзреНрдпреЗ рдХрд┐рдорд╛рди рдЖрдгрд┐ рдХрдорд╛рд▓ рдХрд┐рддреА рдкреЙрдбреНрд╕ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗрдд рд╣реЗ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬрд░ рддреБрдореНрд╣реА рдПрдЦрд╛рджреЗ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЙрдкрдпреЛрдЬрд┐рдд рдХреЗрд▓реЗ рдЕрд╕реЗрд▓ рдЬреНрдпрд╛рд╕рд╛рдареА рд░рд╣рджрд╛рд░реАрдордзреНрдпреЗ рдЕрдЪрд╛рдирдХ рд╡рд╛рдв рдЭрд╛рд▓реНрдпрд╛рдореБрд│реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреНрд╖рдорддреЗрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓, рддрд░ maxReplicas 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

  • рд╕реБрд░рдХреНрд╖рд╛ рдЖрдгрд┐ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди. Kubernetes рдордзреНрдпреЗ рдЧреЛрд╖реНрдЯреА рдХрд╢рд╛ рддреИрдирд╛рдд рдХреЗрд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдпрд╛рдЪреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА 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"
}

  • рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддреНрдпрд╛рд╕рд╣ рдПрдХрддреНрд░реАрдХрд░рдгрд╛рд╕рд╛рдареА рдкрд░реНрдпрд╛рдп. рдЖрдЬрдЪреНрдпрд╛ рдЙрдЪреНрдЪ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рддреАрд▓ рд╕рд░реНрд╡рд╛рдд рд▓рдХреНрд╖рдгреАрдп рдЯреНрд░реЗрдВрдб рдореНрд╣рдгрдЬреЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддреНрдпрд╛рдВрд╡рд░ рд╡рд░реНрдХрд▓реЛрдб рдЪрд╛рд▓рд╡рдгреЗ. рдШрдЯрдХ рд╡рд╛рдкрд░рдгреЗ рдХреНрд▓рд╛рдЙрдб-рдкреНрд░рджрд╛рддрд╛ Kubernetes рдХреЛрдгрддреНрдпрд╛рд╣реА рдХреНрд▓рд╕реНрдЯрд░рд▓рд╛ рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддреНрдпрд╛рд╕рд╣ рд╕рдорд╛рдХрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ рдЬреНрдпрд╛рд╡рд░ рддреЗ рдЪрд╛рд▓рддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬрд░ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ AWS рд╡рд░ Kubernetes рдордзреНрдпреЗ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд╛рд▓рд╡рддреЛ рдЖрдгрд┐ рддреЛ рдНрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдЦрд╛рджреНрдпрд╛ рд╕реЗрд╡реЗрджреНрд╡рд╛рд░реЗ рдЙрдШрдб рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рдХреНрд▓рд╛рдЙрдб рдкреНрд░рджрд╛рддрд╛ рдЖрдкреЛрдЖрдк рд╕реЗрд╡рд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдд рдорджрдд рдХрд░рддреЛ LoadBalancerрдЬреЗ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд▓реЛрдб рдмреЕрд▓рдиреНрд╕рд░ рдкреНрд░рджрд╛рди рдХрд░реЗрд▓ рдНрдореЗрдЭреЙрди рд▓рд╡рдЪрд┐рдХ рд▓реЛрдб рдмреЕрд▓реЗрдВрд╕рд░рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдкреЙрдбреНрд╕рд╡рд░ рд░рд╣рджрд╛рд░реА рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА.

рд╡рд┐рд╕реНрддрд╛рд░рдХреНрд╖рдорддрд╛

Kubernetes рдЦреВрдк рд╡рд┐рд╕реНрддрд╛рд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдЖрд╣реЗ рдЖрдгрд┐ рд╡рд┐рдХрд╕рдХрд╛рдВрдирд╛ рддреЗ рдЖрд╡рдбрддреЗ. рдЙрдкрд▓рдмреНрдз рд╕рдВрд╕рд╛рдзрдирд╛рдВрдЪрд╛ рдПрдХ рд╕рдВрдЪ рдЖрд╣реЗ рдЬрд╕реЗ рдХреА рд╢реЗрдВрдЧрд╛, рдЙрдкрдпреЛрдЬрди, 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

Kubernetes рдордзреАрд▓ рд╡рд┐рд╕реНрддрд╛рд░рдХреНрд╖рдорддреЗрдЪрд╛ рджреБрд╕рд░рд╛ рдкрд░реНрдпрд╛рдп рдореНрд╣рдгрдЬреЗ рд╡рд┐рдХрд╕рдХ рд╕реНрд╡рддрдГрдЪреА рд╡рд┐рдзрд╛рдиреЗ рд▓рд┐рд╣реВ рд╢рдХрддреЛ. рдСрдкрд░реЗрдЯрд░ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░рдордзреАрд▓ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд╣реЗ рдЬреА "рдирд┐рдпрдВрддреНрд░рдг рд╕рд░реНрдХрд┐рдЯ" рдСрдкрд░реЗрдЯрд░рдЪреНрдпрд╛ рдорджрддреАрдиреЗ, рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ API рд╕реЛрдмрдд рдорд╛рд╣рд┐рддреАрдЪреА рджреЗрд╡рд╛рдгрдШреЗрд╡рд╛рдг рдХрд░реВрди CRDs (рдХрд╕реНрдЯрдо рд░рд┐рд╕реЛрд░реНрд╕ рдбреЗрдлрд┐рдирд┐рд╢рди) рдЪреЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрди рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░реВ рд╢рдХрддреЛ.

рд╕рдореБрджрд╛рдпрд╛рдордзреНрдпреЗ рдЕрд╢реА рдЕрдиреЗрдХ рд╕рд╛рдзрдиреЗ рдЖрд╣реЗрдд рдЬреА рд╡рд┐рдХрд╛рд╕рдХрд╛рдВрдирд╛ рддреНрдпрд╛рдВрдЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдСрдкрд░реЗрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгреЗ рд╕реЛрдкреЗ рдХрд░рддрд╛рдд. рддреНрдпрд╛рдкреИрдХреА - рдСрдкрд░реЗрдЯрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдСрдкрд░реЗрдЯрд░ SDK. рд╣рд╛ SDK рдПрдХ рдкрд╛рдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЛ рдЬреНрдпрд╛рдордзреВрди рд╡рд┐рдХрд╕рдХ рддреНрд╡рд░реАрдд рдСрдкрд░реЗрдЯрд░ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕ рд╕реБрд░рд╡рд╛рдд рдХрд░реВ рд╢рдХрддреЛ. рд╕рдордЬрд╛ рддреБрдореНрд╣реА рдХрдорд╛рдВрдб рд▓рд╛рдЗрдирд╡рд░реВрди рдпрд╛рд╕рд╛рд░рдЦреЗ рдХрд╛рд╣реАрддрд░реА рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддрд╛:

$ 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

рдордЧ рдЖрдкрдг рдЖрд╡рд╢реНрдпрдХ API рдЖрдгрд┐ рдирд┐рдпрдВрддреНрд░рдХ рдЬреЛрдбреВ рд╢рдХрддрд╛, рдЬрд╕реЗ рдХреА:

$ 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 рдлрд╛рдпрд▓реА рд╡рд╛рдкрд░реВрди рд╡рд┐рдзрд╛рдиреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, Apache Kafka рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░ рдЕрдВрджрд╛рдЬреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓ рддреНрдпрд╛рдореБрд│реЗ. рддреНрдпрд╛рд╕рд╣, рддреБрдореНрд╣реА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдлрдХреНрдд рджреЛрди рдХрдорд╛рдВрдбрд╕рд╣ рдХрд╛рдлреНрдХрд╛ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реВ рд╢рдХрддрд╛:

$ 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

рдирд╛рд╡рд┐рдиреНрдп

рдЧреЗрд▓реНрдпрд╛ рдХрд╛рд╣реА рд╡рд░реНрд╖рд╛рдВрдордзреНрдпреЗ, рджрд░ рдХрд╛рд╣реА рдорд╣рд┐рдиреНрдпрд╛рдВрдиреА рдкреНрд░рдореБрдЦ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд░рд┐рд▓реАрдЭ рдпреЗрдд рдЖрд╣реЗрдд - рдореНрд╣рдгрдЬреЗрдЪ рд╡рд░реНрд╖рд╛рд▓рд╛ рддреАрди рддреЗ рдЪрд╛рд░ рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЭ. рддреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рдордзреНрдпреЗ рд╕рд╛рджрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдХрдореА рд╣реЛрдд рдирд╛рд╣реА. рд╢рд┐рд╡рд╛рдп, рдпрд╛ рдХрдареАрдг рдХрд╛рд│рд╛рддрд╣реА рдЧрддреА рдХрдореА рд╣реЛрдгреНрдпрд╛рдЪреА рдЪрд┐рдиреНрд╣реЗ рдирд╛рд╣реАрдд - рдЖрддрд╛ рдХрд╛рдп рдкрд░рд┐рд╕реНрдерд┐рддреА рдЖрд╣реЗ рддреЗ рдкрд╣рд╛ Github рд╡рд░ Kubernetes рдкреНрд░рдХрд▓реНрдк рдХреНрд░рд┐рдпрд╛рдХрд▓рд╛рдк.

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

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

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

рд╡рд┐рд╡рд┐рдз рд╕рдореБрджрд╛рдп рджреЗрдЦреАрд▓ рдЖрд╣реЗрдд SIG (рд╡рд┐рд╢реЗрд╖ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЧрдЯ) рдкреНрд░рдХрд▓реНрдк рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдд рдЕрд╕рддрд╛рдирд╛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреНрдпрд╛ рд╡рд┐рд╡рд┐рдз рдХреНрд╖реЗрддреНрд░рд╛рдВрд╡рд░ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХреЗрд▓реЗ. рд╣реЗ рдЧрдЯ рд╕рддрдд рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдЬреЛрдбрдд рдЖрд╣реЗрдд, рдЬреНрдпрд╛рдореБрд│реЗ Kubernetes рд╕рд╣ рдХрд╛рдо рдХрд░рдгреЗ рдЕрдзрд┐рдХ рд╕реЛрдпреАрд╕реНрдХрд░ рдЖрдгрд┐ рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ.

рдХреНрд▓рд╛рдЙрдб рдиреЗрдЯрд┐рд╡реНрд╣ рдлрд╛рдЙрдВрдбреЗрд╢рди CloudNativeCon/KubeCon рдЪреЗ рдЖрдпреЛрдЬрди рджреЗрдЦреАрд▓ рдХрд░рддреЗ, рдЬреЗ рд▓реЗрдЦрдирд╛рдЪреНрдпрд╛ рд╡реЗрд│реА рдЬрдЧрд╛рддреАрд▓ рд╕рд░реНрд╡рд╛рдд рдореЛрдареА рдореБрдХреНрдд рд╕реНрд░реЛрдд рдкрд░рд┐рд╖рдж рдЖрд╣реЗ. рд╕рд╛рдорд╛рдиреНрдпрдд: рд╡рд░реНрд╖рд╛рддреВрди рддреАрди рд╡реЗрд│рд╛ рдЖрдпреЛрдЬрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ, рддреЗ рд╣рдЬрд╛рд░реЛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХрд╛рдВрдирд╛ рдПрдХрддреНрд░ рдЖрдгрддреЗ рдЬреНрдпрд╛рдВрдирд╛ рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рд╕реБрдзрд╛рд░рд╛рдпрдЪреА рдЖрд╣реЗ, рддрд╕реЗрдЪ рджрд░ рддреАрди рдорд╣рд┐рдиреНрдпрд╛рдВрдиреА рджрд┐рд╕рдгрд╛рд░реА рдирд╡реАрди рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рд╢рд┐рдХрд╛рдпрдЪреА рдЖрд╣реЗрдд.

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

рд╢реЗрд╡рдЯреА, рдорд╛рдЭрд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЖрд╣реЗ рдХреА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕ рд╣реЗ рд╕рдВрдкреВрд░реНрдг рд╕рдореБрджрд╛рдпрд╛рдЪреНрдпрд╛ рдЬрд╛рдгреАрд╡рдкреВрд░реНрд╡рдХ рдкреНрд░рдпрддреНрдирд╛рдВрд╢рд┐рд╡рд╛рдп рддрд┐рддрдХреЗ рдпрд╢рд╕реНрд╡реА рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА, рдЬрд┐рдереЗ рд▓реЛрдХ рдПрдХрддреНрд░ рд░рд╛рд╣рддрд╛рдд рдкрд░рдВрддреБ рддреНрдпрд╛рдЪ рд╡реЗрд│реА рдирд╡реАрди рд▓реЛрдХрд╛рдВрдЪреЗ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддрд╛рдд.

рднрд╡рд┐рд╖реНрдп

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

рдпрд╛ рд▓реЗрдЦрд╛рдд, рдЖрдореНрд╣реА рдХреБрдмрд░реНрдиреЗрдЯреНрд╕рдЪреНрдпрд╛ рд╕рджреНрдп рд╕реНрдерд┐рддреАрдЪрд╛ рдлрдХреНрдд рдкреГрд╖реНрдарднрд╛рдЧ рд╕реНрдХреНрд░реЕрдЪ рдХреЗрд▓рд╛ рдЖрд╣реЗтАФрдЦрд░реЗрддрд░, рддреЗ рдлрдХреНрдд рд╣рд┐рдордЦрдВрдбрд╛рдЪреЗ рдЯреЛрдХ рдЖрд╣реЗ. Kubernetes рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рдВрдХрдбреЗ рдЗрддрд░ рдЕрдиреЗрдХ рд╕рдВрд╕рд╛рдзрдиреЗ, рдХреНрд╖рдорддрд╛ рдЖрдгрд┐ рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЖрд╣реЗрдд.

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛