рд╕рд┐рддрд╛рд░реЛрдВ рддрдХ рдкрд╣реБрдБрдЪрдирд╛: рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдкреНрд░рдмрдВрдз рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рд╕реНрдЯрд░реАрдВрдЧ рдРрдиреНрд╕рд┐рдмрд▓ рдСрдкрд░реЗрдЯрд░реНрд╕

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



рдХреБрдмреЗрд░рдиреЗрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Ansible рдСрдкрд░реЗрдЯрд░ рдФрд░ k8s рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

FROM quay.io/operator-framework/ansible-operator RUN ansible-galaxy install djzager.hello_world_k8s RUN echo $'--- \n\ - version: v1alpha1\n\ group: examples.djzager.io\n\ kind: HelloWorld\n\ role: /opt/ansible/roles/djzager.hello_world_k8s' > ${HOME}/watches.yaml 

рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ рдХреБрдВрдЬреА


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, k8s Ansible рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред рдпрд╣ рдПрдиреНрд╕рд┐рдмрд▓ 2.6 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдФрд░ рдПрдВрдмрд┐рдмрд▓ рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛, рдФрд░ рд░реЗрдб рд╣реИрдЯ рдУрдкрдирд╢рд┐рдлреНрдЯ рд╕рд╣рд┐рдд рдХрд┐рд╕реА рднреА рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╡рд┐рддрд░рдг рдореЗрдВред рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдФрд░ Red Hat OpenShift рдХреЗ рд▓рд┐рдП рдЧрддрд┐рд╢реАрд▓ рдкрд╛рдпрдерди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Ansible рдмреНрд▓реЙрдЧ рдХрд╛ рдПрдХ рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рдерд╛ред рд╣рдорд╛рд░реА рд░рд╛рдп рдореЗрдВ, K8 рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ Ansible рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЧрд▓рдд рд╣реИред рдСрдкрд░реЗрдЯрд░ рддрдВрддреНрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдСрдкрд░реЗрдЯрд░ рдПрд╕рдбреАрдХреЗ рдХреЛрдбрд╛рдВрддрд░рдг, рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдмрджрд▓реЗ рдореЗрдВ, Ansible рднрд╛рд╖рд╛ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдирд┐рдпрдореЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Ansible Operator рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд╛рдлреА рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдкрд╣рд▓реЗ рд╣рдо рдСрдкрд░реЗрдЯрд░-рдПрд╕рдбреАрдХреЗ рдирдпрд╛ --type = Ansible рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╕реМрдВрдкрддреЗ рд╣реИрдВ, рдлрд┐рд░ рд╣рдо Ansible рдХреЛ рдкреЗрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ рд╣рдо Kubernetes рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░-sdk рдмрд┐рд▓реНрдб рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреНрд╕рд┐рдмрд▓ рдЧреИрд▓реЗрдХреНрд╕реА рдореЗрдВ рдПрдХ рднреВрдорд┐рдХрд╛ рд╣реИ, рдЬреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддреА рд╣реИ, рддреЛ рдЪреАрдЬреЗрдВ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рдиреАрдЪреЗ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░реЗрдВрдЧреЗ:

  1. рдЖрдЗрдП рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Ansible рднреВрдорд┐рдХрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ, рдЬреЛ рд╣рдореЗрдВ k8s Ansible рдореЙрдбреНрдпреВрд▓ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
  2. рд╣рдо рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХреЛ Ansible Galaxy рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗред

рддреЛ, рдЪрд▓рд┐рдП Ansible- рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЕрд╕реЗрдВрдмрд▓ рдЧреИрд▓реЗрдХреНрд╕реА рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рднреВрдорд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдВрд╕рд┐рдмрд▓ рдЧреИрд▓реЗрдХреНрд╕реА рд╕реЗ рдПрдХ рднреВрдорд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдСрдкрд░реЗрдЯрд░ рдХреНрдпреЛрдВ рдмрдирд╛? рдЗрд╕рдХреЗ рджреЛ рдХрд╛рд░рдг рд╣реИрдВ:

  1. рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ ред рдпрджрд┐ рд╣рдордиреЗ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА Ansible рдХреА рднреВрдорд┐рдХрд╛ рдХреЛ рдкрд╣рд▓реЗ рд╣реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ Ansible Galaxy рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рддреЛ Ansible рдСрдкрд░реЗрдЯрд░ рдХреЛ рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИред
  2. рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рд╕реЗ рдЕрд▓рдЧ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдгред рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреБрд▓реНрдмреЗрдиреЗрдЯреНрд╕ рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдЕрдиреНрд╕рд┐рдПрдмрд▓ рдХреА рднреВрдорд┐рдХрд╛ рд╣реЛ, рдФрд░ рдСрдкрд░реЗрдЯрд░ (рдСрдкрд░реЗрд╢рдирд▓) рд▓реЙрдЬрд┐рдХ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЕрдВрджрд░ рд╣реА рд░рд╣реЗред рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдСрдкрд░реЗрд╢рдирд▓ рд▓реЙрдЬрд┐рдХ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ: рдпрд╣ рд╣рд░ рдмрд╛рд░ djzager.hello_world_k8s рднреВрдорд┐рдХрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдк рдПрдХ рдХрд╕реНрдЯрдо HelloWorld рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рддреЗ рдпрд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдпрд╣ рдкреГрдердХреНрдХрд░рдг рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдПрдкреНрд▓реАрдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрдордпрдХрд╛рд░реА рднреВрдорд┐рдХрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рддреНрдпрд╛рдкрди рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдФрд░ рд╣рдо рдСрдкрд░реЗрдЯрд░ рддрд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИрд▓реЛрд╡рд░реНрд▓реНрдб рдХрд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред

рд╣реИрд▓реЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕, рдЕрдиреНрд╕рд┐рдмрд▓ рд╕реЗ рдорд┐рд▓рддреЗ рд╣реИрдВ


рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?


  1. Ansible - рдпрджрд┐ рдЖрдкрдиреЗ Ansible рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ рддреЛ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЧрд╛рдЗрдб рджреЗрдЦреЗрдВред
  2. рдУрдкрдирд╢рдлреНрдЯ (рд╡реИрдХрд▓реНрдкрд┐рдХ) рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдХреНрд▓рд╛рдЗрдВрдЯред рдХреЗрд╡рд▓ рд╕реНрдерд╛рдиреАрдп рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢ рдпрд╣рд╛рдБ рд╣реИрдВ ред

рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, ansible-galaxy рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд░реЛрд▓ рдХрдВрдХрд╛рд▓ рдмрдирд╛рдПрдВ:

 # I like clear names on projects. # In meta/main.yml I will make role_name: hello-world-k8s $ ansible-galaxy init ansible-role-hello-world-k8s 

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

 --- # NOTE: meta.name(space) comes from CR metadata when run with Ansible Operator # deploy/crds has an example CR for reference name: "{{ meta.name | default('hello-world') }}" namespace: "{{ meta.namespace | default('hello-world') }}" image: docker.io/ansibleplaybookbundle/hello-world:latest # To uninstall from the cluster # state: absent state: present # The size of the hello-world deployment size: 1 

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

  1. рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
  2. рдХрдИ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдПрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдореМрдЬреВрдж рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп / main.yml рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

 --- - name: "Get information about the cluster" set_fact: api_groups: "{{ lookup('k8s', cluster_info='api_groups') }}" - name: 'Set hello-world objects state={{ state }}' k8s: state: '{{ state }}' definition: "{{ lookup('template', item.name) | from_yaml }}" when: item.api_exists | default(True) loop: - name: deployment.yml.j2 - name: service.yml.j2 - name: route.yml.j2 api_exists: "{{ True if 'route.openshift.io' in api_groups else False }}" 

рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдХрд╛рд░реНрдп рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕ рдкрдВрдХреНрддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:

 api_exists: "{{ True if 'route.openshift.io' in api_groups else False }}" 

Set_fact рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдореЗрдВ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╕рднреА рдПрдкреАрдЖрдИ рдХреА рдПрдХ рд╕реВрдЪреА рдорд┐рд▓рддреА рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдЪреБрдирд┐рдВрджрд╛ рд░реВрдк рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдПрдкреАрдЖрдИ рд╡рд╣рд╛рдВ рд╣реИ - рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, path.openshift.ioред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, OpenShift рдХреЗ Kubernetes рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ, рд░реВрдЯ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рд╣рдореЗрдВ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рд░реВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ path.openshift.io рд╣реЛрддрд╛ рд╣реИред

рдпрджрд┐ рд╣рдо рдХреБрдЫ API рдХреА рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рди рдХреЗрд╡рд▓ рдЪреБрдирд┐рдВрджрд╛ рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╣рдорд╛рд░реЗ рддреИрдирд╛рддреА рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ OpenShift Dep рддреИрдирд╛рддреАConfig рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Jinja2 рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ apps.openshift.io рдПрдкреАрдЖрдИ рд╣реИред рдпрд╣рд╛рдВ рд╣рдорд╛рд░реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ / рдкрд░рд┐рдирд┐рдпреЛрдЬрди .yml.j2 рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИ:

 --- {% if 'apps.openshift.io' in api_groups %} apiVersion: apps.openshift.io/v1 kind: DeploymentConfig {% else %} apiVersion: apps/v1 kind: Deployment {% endif %} metadata: name: {{ name }} namespace: {{ namespace }} labels: app: {{ name }} service: {{ name }} spec: replicas: {{ size }} {% if 'apps.openshift.io' in api_groups %} selector: app: {{ name }} service: {{ name }} {% else %} selector: matchLabels: app: {{ name }} service: {{ name }} {% endif %} template: metadata: labels: app: {{ name }} service: {{ name }} spec: containers: - image: {{ image }} name: hello-world ports: - containerPort: 8080 protocol: TCP 

рдлрд╝рд╛рдЗрд▓ рдЯреЗрдореНрдкреНрд▓реЗрдЯ / service.yml.j2:

 --- apiVersion: v1 kind: Service metadata: name: {{ name }} namespace: {{ namespace }} labels: app: {{ name }} service: {{ name }} spec: ports: - name: web port: 8080 protocol: TCP targetPort: 8080 selector: app: {{ name }} service: {{ name }} 

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЯреЗрдореНрдкреНрд▓реЗрдЯ / рд░реВрдЯ.yml.j2 рдлрд╝рд╛рдЗрд▓:

 --- apiVersion: route.openshift.io/v1 kind: Route metadata: name: {{ name }} namespace: {{ namespace }} labels: app: {{ name }} service: {{ name }} spec: port: targetPort: web to: kind: Service name: {{ name }} 

рд╣рдордиреЗ рдореЗрдЯрд╛ / main.yml рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

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

рд╣реИрд▓реЛ рдЧреИрд▓реЗрдХреНрд╕реА, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╕реЗ рдорд┐рд▓реЗрдВ


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

GitHub рдкрд░ рдЕрдкрдиреА рднреВрдорд┐рдХрд╛ рдкреЛрд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЬреЛ рдХреБрдЫ рдмрдЪрд╛ рдерд╛ рд╡рд╣ рдерд╛:

  1. GitHub рдкрд░ рд╣рдорд╛рд░реА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдБрдЪ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП Ansible Galaxy рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВред
  2. рд╣рдорд╛рд░реА рднреВрдорд┐рдХрд╛ рдЖрдпрд╛рдд рдХрд░реЗрдВред

рдпрд╣реА рд╣реИ, рдЕрдм рд╣рдорд╛рд░реА рд╣реЗрд▓реНрд▓реЛ_рд╡рд░реНрд▓реНрдб_рдХреЗ 8 рднреВрдорд┐рдХрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рдпрд╣рд╛рдВ рд╕реНрдерд┐рдд рдПрдиреНрд╕рд┐рдмрд▓ рдЧреИрд▓реЗрдХреНрд╕реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ ред

рд╣реЗрд▓реЛ рдЕрдиреНрд╕рд┐рдмрд▓ рдСрдкрд░реЗрдЯрд░, рдореАрдЯ рдЧреИрд▓реЗрдХреНрд╕реА


рдпрджрд┐ рдЖрдк рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рд╣рдорд╛рд░реЗ рдирдорд╕реНрддреЗ рд╡рд░реНрд▓реНрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ GitHub рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ рдХрд┐ рд╣рдордиреЗ рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╡рд╣рд╛рдВ рдЬреЛрдбрд╝реАрдВ, рдЬреЛ рдХрд┐ Ansible-operator, рдЕрд░реНрдерд╛рддреН рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВ:

  1. рд╡реЙрдЪреЗрд╕ рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХрд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ Ansible рднреВрдорд┐рдХрд╛рдУрдВ рдпрд╛ рдкреНрд▓реЗрдмреБрдХ рдореЗрдВ рдореИрдк рдХрд░рддреА рд╣реИред
  2. рд╣рдорд╛рд░реЗ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Dockerfile ред
  3. рд╣рдорд╛рд░реЗ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ Kubernetes рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдкрд░рд┐рдирд┐рдпреЛрдЬрд┐рдд рдХрд░реЗрдВ ред

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

 FROM quay.io/operator-framework/ansible-operator RUN ansible-galaxy install djzager.hello_world_k8s RUN echo $'--- \n\ - version: v1alpha1\n\ group: examples.djzager.io\n\ kind: HelloWorld\n\ role: /opt/ansible/roles/djzager.hello_world_k8s' > ${HOME}/watches.yaml 

рдЕрдм рд╣рдо рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рддреЗ рд╣реИрдВ:

 $ docker build -t hello-world-operator -f Dockerfile . Sending build context to Docker daemon 157.2 kB Step 1/3 : FROM quay.io/operator-framework/ansible-operator latest: Pulling from operator-framework/ansible-operator Digest: sha256:1156066a05fb1e1dd5d4286085518e5ce15acabfff10a8145eef8da088475db3 Status: Downloaded newer image for quay.io/water-hole/ansible-operator:latest ---> 39cc1d19649d Step 2/3 : RUN ansible-galaxy install djzager.hello_world_k8s ---> Running in 83ba8c21f233 - downloading role 'hello_world_k8s', owned by djzager - downloading role from https://github.com/djzager/ansible-role-hello-world-k8s/archive/master.tar.gz - extracting djzager.hello_world_k8s to /opt/ansible/roles/djzager.hello_world_k8s - djzager.hello_world_k8s (master) was installed successfully Removing intermediate container 83ba8c21f233 ---> 2f303b45576c Step 3/3 : RUN echo $'--- \n- version: v1alpha1\n group: examples.djzager.io\n kind: HelloWorld\n role: /opt/ansible/roles/djzager.hello_world_k8s' > ${HOME}/watches.yaml ---> Running in cced495a9cb4 Removing intermediate container cced495a9cb4 ---> 5827bc3c1ca3 Successfully built 5827bc3c1ca3 Successfully tagged hello-world-operator:latest 

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

 apiVersion: examples.djzager.io/v1alpha1 kind: HelloWorld metadata: name: example-helloworld namespace: default spec: size: 3 

рдСрдкрд░реЗрдЯрд░ рд╕реНрдХреЛрдк: рдирд╛рдо рд╕реНрдерд╛рди рдФрд░ рдХреНрд▓рд╕реНрдЯрд░


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

  1. рдСрдкрд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдСрдкрд░реЗрдЯрд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП WATCH_NAMESPACE рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ред рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдХрд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░ рдХреЛ рдмрддрд╛рддреА рд╣реИ
  2. role.yaml
  3. role_binding

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

  1. рднреВрдорд┐рдХрд╛ рдХреЗ рдмрдЬрд╛рдп рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдПрдБред
  2. рдирд╛рдорд╕реНрдерд╛рди рдореЗрдВ рдПрдХ ServiceAccount рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдмрдирд╛рдПрдВ рдЬрд╣рд╛рдВ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
  3. рдПрдХ ClusterRoleBinding рдмрдирд╛рдПрдБ рдЬреЛ рдХрд┐рд╕реА рдХреНрд▓рд╕реНрдЯрд░ рдирд╛рдо рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдирд╛рдорд╕реНрдерд╛рди рд╕реЗ ServiceAccount рдХреЛ рд╕рдВрдмрджреНрдз рдХрд░реЗрдЧрд╛ред
  4. рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд WATCH_NAMESPACE рдкрд░рд┐рд╡реЗрд╢ рдЪрд░ (рдпрд╛рдиреА, "") рдХреЗ рд╕рд╛рде рд╡рд┐рд╡рд░рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВред

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

рд╕реНрдЯрд╛рд░ рдЯреНрд░реЗрдХ


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

  1. рдЖрдк k8s Ansible рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
  2. Ansible Galaxy рдкрд░ Kubernetes рдРрдкреНрд╕ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рднреВрдорд┐рдХрд╛рдПрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред
  3. рдСрдкрд░реЗрдЯрд░ SDK рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдСрдкрд░реЗрдЯрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдиреНрдпреВрдЬрд╝рд▓реЗрдЯрд░ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВред

рд╣рдорд╛рд░реЗ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЬрд╛рдирдмреВрдЭрдХрд░ рдмреЗрд╣рдж рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдФрд░ рднреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИрдВ, рдФрд░ рдпрд╣рд╛рдВ рдХреБрдЫ рд╣реИрдВ:

  1. рдСрдкрд░реЗрдЯрд░ рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ - рд╣рдордиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдРрд╕рд╛ рдХрд░рдиреЗ рдкрд░ рдЬреЛрд░ рдирд╣реАрдВ рджрд┐рдпрд╛ рдХрд┐ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдЖрдВрд╕рд┐рдмрд▓ рднреВрдорд┐рдХрд╛ рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред рд▓реЗрдХрд┐рди рдЕрднреА рднреА рдПрд╕рдбреАрдХреЗ (рдпрд╛рдиреА рдСрдкрд░реЗрдЯрд░-рдПрд╕рдбреАрдХреЗ рдирдП) рдХреЗ рд╕рд╛рде рдЗрд╕ рднреВрдорд┐рдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдЕрдЧрд▓реЗ рдЪрд░рдгреЛрдВ рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред
  2. рд╕рддреНрдпрд╛рдкрди - рд╣рдорд╛рд░реЗ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реАрдЖрд░ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИ: рдПрдмреАрд╕реА, рдЬреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рддреИрдирд╛рддреА рдЪрд░рдг рдореЗрдВ рдПрдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдЪрд░рдг рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ, рдФрд░ рдХрд╛рдо рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд╣реАрдВред
  3. рдЬреАрд╡рди рдЪрдХреНрд░ - рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдпрд╣ рд╡рд╣реА рд╕рдВрд╕реНрдХрд░рдг рдЕрджреНрдпрддрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЬреИрд╕реЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ, рдЬрд╣рд╛рдВ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ, рд╣рдо рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдХрдВрдЯреЗрдирд░ рдХреА рдЫрд╡рд┐ рд╕рдВрдмрдВрдзрд┐рдд рдХрдВрдЯреЗрдирд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдХреЗ рдкреБрд░рд╛рдиреА рд╣реИ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдЪрд▓ рд░рд╣реЗ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
  4. рдкрд░реАрдХреНрд╖рдг - рдЕрдгреБ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд╕рдордп рдЕрдгреБ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрддрд╛ рд╣реИред
  5. рдСрдкрд░реЗрдЯрд░ рдЬреАрд╡рдирдЪрдХреНрд░ рдкреНрд░рдмрдВрдзрдХ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреВрд▓рдХрд┐рдЯ рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рд╣рдорд╛рд░реЗ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
  6. рд╕реНрдерд┐рддрд┐ - рд╣рдо рдЕрдкрдиреЗ рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рд╕реАрдЖрд░рдбреА рдореЗрдВ рд╕реНрдЯреЗрдЯрд╕ рд╕рдм-рд╕реЛрд░реНрд╕ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд╕реНрдЯрдо рд╕рдВрд╕рд╛рдзрди рдореЗрдВ рд╕реНрдЯреЗрдЯрд╕ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП k8s_status рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдРрдиреНрд╕рд┐рдмрд▓ рдСрдкрд░реЗрдЯрд░ рдЗрдореЗрдЬ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред

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


All Articles