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

рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рддрдм рд╣реБрдИ, рдЬрдм рдЧреБрдЪреНрдЫреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди, рдЫреЛрдЯреЗ-рдЫреЛрдЯреЗ рдХрд╛рд░реНрдп рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд▓рдЧреЗ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрди рд╕рднреА рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд░рд▓ рдмреИрд╢ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреА рдорджрдж рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдЧреЛрд▓рдВрдЧ рдореЗрдВ рдмреЗрд╣рддрд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдРрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг-рд╕реНрддрд░реАрдп рдСрдкрд░реЗрдЯрд░ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдирд┐рд╡реЗрд╢ рдХрд░рдирд╛ рдЕрдХреНрд╖рдо рд╣реЛрдЧрд╛ред
15 рдорд┐рдирдЯ рдореЗрдВ рдСрдкрд░реЗрдЯрд░
рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдХреИрд╕реЗ рдорджрдж рдХрд░реЗрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрдЧрд╛: рдбреЙрдХ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд╣рд╕реНрдп рдХреА рдирдХрд▓ рдХрд░рдирд╛ред
рдкреЙрдбреНрд╕ рдЬреЛ рдирд┐рдЬреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рд╕реЗ рдЫрд╡рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдкреНрд░рдХрдЯ рдореЗрдВ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд░рд╣рд╕реНрдп рдХрд╛ рд▓рд┐рдВрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд░рд╣рд╕реНрдп рдкреЙрдбреНрд╕ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдЧрддрд┐рд╢реАрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдХрдИ рдирд╛рдо рд╕реНрдерд╛рди рд╣реЛрдВрдЧреЗред рдФрд░ рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди 2-3 рднреА рдирд╣реАрдВ рд╣реИрдВ ... рд░рд╣рд╕реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реЛ рдЬрд╛рддреА рд╣реИред рдФрд░ рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рдмрд╛рдд: рдореИрдВ рд╕рдордп-рд╕рдордп рдкрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдмрджрд▓рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдирддреАрдЬрддрди, рдПрдХ рд╕рдорд╛рдзрд╛рди рдХреЗ рд░реВрдк рдореЗрдВ
рдореИрдиреБрдЕрд▓ рд╕рдВрдЪрд╛рд▓рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкреНрд░рднрд╛рд╡реА рд╣реИрдВ - рдЖрдкрдХреЛ рд░рд╣рд╕реНрдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдФрд░ рдЕрджреНрдпрддрди рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрд╕рд╛рди рд╕реНрд╡рдЪрд╛рд▓рди
рд╣рдо рдПрдХ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рд╣рд░ рдПрди рд╕реЗрдХрдВрдб рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЪрд▓рддреА рд╣реИ рдФрд░ рдПрдХ рдЧреБрдкреНрдд рдХреЗ рд▓рд┐рдП рдирд╛рдо рд╕реНрдерд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИ, рдФрд░ рдпрджрд┐ рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдХреНрд░реЛрди рдореЗрдВ рдПрдХ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ - рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдгред рдирдХрд╛рд░рд╛рддреНрдордХ рдкрдХреНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЗ рдмреАрдЪ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдПрдХ рдирдпрд╛ рдирд╛рдо рд╕реНрдерд╛рди рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдЧреБрдкреНрдд рдХреЗ рдмрд┐рдирд╛ рд░рд╣реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдкреЙрдбреНрд╕ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрдВрдЧреАред
рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рд╕реНрд╡рдЪрд╛рд▓рди
рд╣рдорд╛рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреНрд▓рд╛рд╕рд┐рдХ рдХреНрд░реЛрди рд▓реЙрдиреНрдЪ рдХреЛ рдЗрд╡реЗрдВрдЯ рдирд╛рдо рд╕реНрдерд╛рди рдкрд░ рд▓реЙрдиреНрдЪ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд░рд╣рд╕реНрдп рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВред рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЛ рд╣реБрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
--config
рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рд╣реБрдХ рд╢реЗрд▓ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЙрд╕рдХреЗ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдХрд┐рди рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо
onKubernetesEvent
рдЙрдкрдпреЛрдЧ
onKubernetesEvent
:
рдпрд╣ рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд╣реИ рдХрд┐ рд╣рдо рдкреНрд░рдХрд╛рд░
namespace
рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ (
add
) рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
рдЕрдм рдЖрдкрдХреЛ рдЙрд╕ рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдШрдЯрдирд╛ рд╣реЛрдиреЗ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдкрд░рд┐рдгрд╛рдо рдПрдХ рдЫреЛрдЯреА, рд╕реБрдВрджрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИред рдЗрд╕реЗ "рдкреБрдирд░реНрдЬреАрд╡рд┐рдд" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рдЪрд░рдг рдмрдиреЗ рд╣реБрдП рд╣реИрдВ: рдЫрд╡рд┐ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдФрд░ рдЗрд╕реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЪрд▓рд╛рдирд╛ред
рд╣реБрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд╡рд┐ рддреИрдпрд╛рд░ рдХрд░рдирд╛
рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
kubectl
рдФрд░
kubectl
jq
ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЫрд╡рд┐ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪреАрдЬреЗрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП: рд╣рдорд╛рд░рд╛ рд╣реБрдХ, рдПрдХ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдЬреЛ рдШрдЯрдирд╛рдУрдВ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░реЗрдЧрд╛ рдФрд░ рд╣реБрдХ рдХреЛ рдЪрд▓рд╛рдПрдЧрд╛, рд╕рд╛рде рд╣реА рд╣реБрдХ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдХрдорд╛рдВрдб (рдХреБрдмреНрд▓реЗрдЯ рдФрд░ рдЬрдХ)ред
Hub.docker.com рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рддреИрдпрд╛рд░ рдЫрд╡рд┐ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░, рдХреБрдмреЗрдХрдЯреЗрд▓ рдФрд░ jq рдкреИрдХ рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрд╣ рдПрдХ рд╕рд╛рдзрд╛рд░рдг
Dockerfile
рд╕рд╛рде рд╣реБрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:
$ cat Dockerfile FROM flant/shell-operator:v1.0.0-beta.1-alpine3.9 ADD namespace-hook.sh /hooks $ docker build -t registry.example.com/my-operator:v1 . $ docker push registry.example.com/my-operator:v1
рдХреНрд▓рд╕реНрдЯрд░ рд▓реЙрдиреНрдЪ
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдЖрдЗрдП рд╣реБрдХ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕ рдмрд╛рд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдХреМрди рд╕реЗ рдХрд╛рд░реНрдп рдФрд░ рдХрд┐рди рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рд╣реЛрддреЗ рд╣реИрдВ:
- рдирд╛рдо рд╕реНрдерд╛рди рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рджрд╕реНрдп
- рдЬрд╣рд╛рдБ рдпрд╣ рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдЙрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдПрдХ рд░рд╣рд╕реНрдп рдмрдирд╛рддрд╛ рд╣реИред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЬрд┐рд╕ рдкреЙрдб рдореЗрдВ рд╣рдорд╛рд░реА рдЫрд╡рд┐ рд▓реЙрдиреНрдЪ рдХреА рдЬрд╛рдПрдЧреА, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ ServiceAccount рдмрдирд╛рдХрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреБрдорддрд┐ рдХреНрд▓рд╕реНрдЯрд░рд╕реНрдЯрд░ рдФрд░ рдХреНрд▓рд╕реНрдЯрд░рд░реЛрд▓рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХреНрд▓рд╕реНрдЯрд░ рднрд░ рд╕реЗ рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред
YAML рдореЗрдВ рдЕрдВрддрд┐рдо рд╡рд┐рд╡рд░рдг рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
--- apiVersion: v1 kind: ServiceAccount metadata: name: monitor-namespaces-acc --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRole metadata: name: monitor-namespaces rules: - apiGroups: [""] resources: ["namespaces"] verbs: ["get", "watch", "list"] - apiGroups: [""] resources: ["secrets"] verbs: ["get", "list", "create", "patch"] --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: monitor-namespaces roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: monitor-namespaces subjects: - kind: ServiceAccount name: monitor-namespaces-acc namespace: example-monitor-namespaces
рдЖрдк рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓ рдХреА рдЧрдИ рдЫрд╡рд┐ рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: my-operator spec: template: spec: containers: - name: my-operator image: registry.example.com/my-operator:v1 serviceAccountName: monitor-namespaces-acc
рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд▓рдЧ рдирд╛рдорд╕реНрдерд╛рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдирд┐рд░реНрдорд┐рдд рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ:
$ kubectl create ns example-monitor-namespaces $ kubectl -n example-monitor-namespaces apply -f rbac.yaml $ kubectl -n example-monitor-namespaces apply -f deployment.yaml
рдпрд╣ рд╕рдм рд╣реИ: рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рд╢реБрд░реВ рд╣реЛрдЧрд╛, рдиреЗрдорд╕реНрдкреЗрд╕ рдирд┐рд░реНрдорд╛рдг рдШрдЯрдирд╛рдУрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдЧрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рд╣реБрдХ рд╢реБрд░реВ рдХрд░реЗрдЧрд╛ред

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

рдЫрд╛рдирдиреЗ
рдЯреНрд░реИрдХрд┐рдВрдЧ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░
рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдореЗрдВ рдкреНрд░рддрд┐рдХреГрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди, рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓реЗрдмрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ред
рдЬрдм рдХреЛрдИ рдШрдЯрдирд╛ рдЖрддреА рд╣реИ, рддреЛ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ JSON рдкреНрд░рдХрдЯ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕ JSON рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд░реБрдЪрд┐ рдХреЗ рдЧреБрдгреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╣реБрдХ
рддрднреА рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рд╡реЗ рдмрджрд▓рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
jqFilter
рдлрд╝реАрд▓реНрдб
jqFilter
рдХреА
jqFilter
, рдЬрд╣рд╛рдВ рдЖрдкрдХреЛ JSON рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ JSON рдореЗрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд▓реЗрдмрд▓ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
metadata
рдлрд╝реАрд▓реНрдб рд╕реЗ
labels
рдлрд╝реАрд▓реНрдб рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд┐рдиреНрдпрд╛рд╕ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
cat <<EOF { "onKubernetesEvent": [ { "kind": "deployment", "event":["update"], "jqFilter": ".metadata.labels" } ]} EOF
JqFilter рдореЗрдВ рдпрд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рддреИрдирд╛рддреА рдХреЗ рд▓рдВрдмреЗ JSON рдХреЛ рд▓реЗрдмрд▓ рдХреЗ рд╕рд╛рде рд▓рдШреБ JSON рдореЗрдВ рдкреНрд░рдХрдЯ рдХрд░рддреА рд╣реИ:

рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдХреЗрд╡рд▓ рдПрдХ рд╣реБрдХ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧрд╛ рдЬрдм рдпрд╣ рдЫреЛрдЯрд╛ JSON рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдЕрдиреНрдп рдЧреБрдгреЛрдВ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╣реБрдХ рд▓реЙрдиреНрдЪ рд╕рдВрджрд░реНрдн
рд╣реБрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЖрдкрдХреЛ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реЗ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП 2 рд╡рд┐рдХрд▓реНрдк рдФрд░ 2 рд╢реЗрдбреНрдпреВрд▓:
{"onKubernetesEvent":[ {"name":"OnCreatePod", "kind": "pod", "event":["add"] }, {"name":"OnModifiedNamespace", "kind": "namespace", "event":["update"], "jqFilter": ".metadata.labels" } ], "schedule": [ { "name":"every 10 min", "crontab":"0 */10 * * * *" }, {"name":"on Mondays at 12:10", "crontab": "0 10 12 * * 1" ]}
рдПрдХ рдЫреЛрдЯрд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░: рд╣рд╛рдВ, рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдХреЙрдиреНрдЯреИрдм-рд╕реНрдЯрд╛рдЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВредрд╣реБрдХ рдХреНрдпреЛрдВ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдПрдХ рдЕрд╕реНрдерд╛рдпреА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ
BINDING_CONTEXT_TYPE
рдЪрд░ рдореЗрдВ
BINDING_CONTEXT_TYPE
рддрдХ рд▓реЗ
BINDING_CONTEXT_TYPE
рд╣реИред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реБрдХ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдХрд╛ JSON рд╡рд┐рд╡рд░рдг рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рд░ 10 рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рд╣реБрдХ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдЧрд╛:
[{ "binding": "every 10 min"}]
... рдФрд░ рд╕реЛрдорд╡рд╛рд░ рдХреЛ рдпрд╣ рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрдЧрд╛:
[{ "binding": "every 10 min"}, { "binding": "on Mondays at 12:10"}]
onKubernetesEvent
рд╕реЗ рдЕрдзрд┐рдХ JSON рдлрд╛рдпрд░рд┐рдВрдЧ рд╣реЛрдЧреА рдЗрд╕рдореЗрдВ рд╡рд╕реНрддреБ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╢рд╛рдорд┐рд▓ рд╣реИ:
[ { "binding": "onCreatePod", "resourceEvent": "add", "resourceKind": "pod", "resourceName": "foo", "resourceNamespace": "bar" } ]
рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЙрдирдХреЗ рдирд╛рдореЛрдВ рд╕реЗ рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ -
рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред Jq рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рд╕реЛрд░реНрд╕рдиреЗрдо рдлрд╝реАрд▓реНрдб рд╕реЗ рд░рд┐рд╕реЛрд░реНрд╕ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реБрдХ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬреЛ рд░рд╣рд╕реНрдпреЛрдВ рдХреА рдирдХрд▓ рдХрд░рддрд╛ рд╣реИ:
jq -r '.[0].resourceName' $BINDING_CONTEXT_PATH
рдЗрд╕реА рддрд░рд╣, рдЖрдк рд╢реЗрд╖ рдлрд╝реАрд▓реНрдб рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реИ?
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ
, / рдЙрджрд╛рд╣рд░рдг рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ , рд╣реБрдХ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬреЛ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЕрдкрдиреЗ рд╣реБрдХ рд▓рд┐рдЦрддреЗ рд╕рдордп, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░реЛрдореЗрдерд┐рдпрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореИрдЯреНрд░рд┐рдХреНрд╕ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИ - рдЙрдкрд▓рдмреНрдз рдореИрдЯреНрд░рд┐рдХреНрд╕
рдореЗрдЯреНрд░рд┐рдХреНрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЧреЛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдУрдкрди рд╕реЛрд░реНрд╕-рд▓рд╛рдЗрд╕реЗрдВрд╕ (рдЕрдкрд╛рдЪреЗ 2.0) рдХреЗ рддрд╣рдд рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо
GitHub рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд┐рд╕реА рднреА рдорджрдж рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд╣реЛрдВрдЧреЗ: рддрд╛рд░рд╛рдВрдХрди, рдореБрджреНрджреЗ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред
рдЧреЛрдкрдиреАрдпрддрд╛ рдХрд╛ рдкрд░реНрджрд╛ рдЦреЛрд▓рддреЗ рд╣реБрдП, рд╣рдо рдпрд╣ рднреА рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рд╢реЗрд▓-рдСрдкрд░реЗрдЯрд░ рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрдХ
рдЫреЛрдЯрд╛ рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЬреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдРрдб-рдСрди рдХреЛ рдЕрджреНрдпрддрд┐рдд рд░рдЦ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдордиреЗ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдорд╡рд╛рд░ рдХреЛ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдореЗрдВ рд╣рд╛рдИрд▓рд╛рдб ++ 2019 рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ
рдмрд╛рдд рдХреА - рдЗрд╕ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рд╡реАрдбрд┐рдпреЛ рдФрд░ рдкреНрд░рддрд┐рд▓реЗрдЦ рдЬрд▓реНрдж рд╣реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рдХреЛ рдЦреЛрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ: рдПрдбрдСрди-рдСрдкрд░реЗрдЯрд░ рдФрд░ рд╣реБрдХ рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рд╣рдорд╛рд░рд╛ рд╕рдВрдЧреНрд░рд╣ред рд╡реИрд╕реЗ, рдПрдбрдСрди-рдСрдкрд░реЗрдЯрд░
GitHub рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рдЙрдкрд▓рдмреНрдз рд╣реИ , рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рд▓реЗрдЦрди рдЕрднреА рднреА рд░рд╛рд╕реНрддреЗ рдореЗрдВ рд╣реИред рдореЙрдбреНрдпреВрд▓ рд╕рдВрдЧреНрд░рд╣ рдХреА рд░рд┐рд╣рд╛рдИ рдХреА рдпреЛрдЬрдирд╛ рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ рд╣реИред
рджреЗрдЦрддреЗ рд░рд╣реЛ!
рдкреБрдирд╢реНрдЪ
рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рднреА рдкрдврд╝реЗрдВ: