рдиреНрдпреВрдирддрдо рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕

рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рд╢реБрд░реБрдЖрдд рдХреА рдкреВрд░реНрд╡ рд╕рдВрдзреНрдпрд╛ рдкрд░ рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ "DevOps рдЕрднреНрдпрд╛рд╕ рдФрд░ рдЙрдкрдХрд░рдг".

рдиреНрдпреВрдирддрдо рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕

рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╕рдВрднрд╡рддрдГ рдЖрдкрдиреЗ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╕реБрдирд╛ рд╣реЛрдЧрд╛ (рдФрд░ рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдЖрдк рдпрд╣рд╛рдВ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪреЗ?) рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ "рдФрджреНрдпреЛрдЧрд┐рдХ-рдЧреНрд░реЗрдб рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдСрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрд╢рди"? рдпрд╛ "рдХреНрд▓рд╛рдЙрдб-рдиреЗрдЯрд┐рд╡ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо"? рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдХреНрдпрд╛ рдЕрд░реНрде рд╣реИ?

рд╕рдЪ рдХрд╣реВрдБ рддреЛ, рдореИрдВ 100% рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдБред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрджрд░реВрдиреА рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдЬрд╛рдирд╛ рдФрд░ рджреЗрдЦрдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЕрдореВрд░реНрддрддрд╛ рдХреА рдХрдИ рдкрд░рддреЛрдВ рдХреЗ рддрд╣рдд рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рддреЛ рдХреЗрд╡рд▓ рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдиреНрдпреВрдирддрдо "рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреНрд▓рд╕реНрдЯрд░" рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред (рдпрд╣ рдЗрд╕рд╕реЗ рдХрд╣реАрдВ рдЕрдзрд┐рдХ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдж рд╣рд╛рд░реНрдб рд╡реЗ.)

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдмреБрдирд┐рдпрд╛рджреА рдЬреНрдЮрд╛рди рд╣реИред рдпрд╣рд╛рдВ рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдХреЗрд╡рд▓ рд╢реЛрдз/рд╕реАрдЦрдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЗрд╕рдореЗрдВ рд╕реЗ рдХреБрдЫ рднреА рдЙрддреНрдкрд╛рджрди рдореЗрдВ рди рд▓рдЧрд╛рдПрдВ!

╨Ю╨▒╨╖╨╛╤А

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

рдиреНрдпреВрдирддрдо рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕

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

  • рдХреНрдпреВрдмрд▓реЗрдЯ
  • рдХреНрдпреВрдм-рдПрдкрд┐рд╕рд░реНрд╡рд░ (рдЬреЛ рдЖрджрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ - рдЗрд╕рдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕)
  • рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдбреЙрдХрд░)

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд╣рддрд╛ рд╣реИ (рд░реВрд╕реА., рдЕрдВрдЧреНрд░реЗрдЬреА.). рд╕рд░реНрд╡рдкреНрд░рдердо рдХреНрдпреВрдмрд▓реЗрдЯ:

рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдкрд░ рдПрдХ рдПрдЬреЗрдВрдЯ рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрдВрдЯреЗрдирд░ рдкреЙрдб рдореЗрдВ рдЪрд▓ рд░рд╣реЗ рд╣реИрдВред

рдХрд╛рдлреА рд╕рд░рд▓ рд▓рдЧрддрд╛ рд╣реИ. рдХрд┐рд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо (рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо)?

рдХрдВрдЯреЗрдирд░ рд░рдирдЯрд╛рдЗрдо рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реИ рдЬрд┐рд╕реЗ рдХрдВрдЯреЗрдирд░ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

╨Ш рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░?

рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рдШрдЯрдХ рд╣реИ рдЬреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдкреАрдЖрдИ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рдХрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рд╣реИ

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

рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ

  • рд░реВрдЯ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд╕рд╛рде рд▓рд┐рдирдХреНрд╕ рд╡рд░реНрдЪреБрдЕрд▓ рдпрд╛ рднреМрддрд┐рдХ рдорд╢реАрди (рдореИрдВ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рдЙрдмрдВрдЯреВ 18.04 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред
  • рдФрд░ рдпрд╣ рд╕рдм рд╣реИ!

рдмреЛрд░рд┐рдВрдЧ рд╕реНрдерд╛рдкрдирд╛

рд╣рдореЗрдВ рдЬрд┐рд╕ рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдЙрд╕ рдкрд░ рдбреЙрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред (рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдирд╣реАрдВ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдбреЙрдХрд░ рдФрд░ рдХрдВрдЯреЗрдирд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ; рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рд╣реИ рдЕрджреНрднреБрдд рд▓реЗрдЦ). рдЖрдЗрдП рдмрд╕ рдЗрд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ apt:

$ sudo apt install docker.io
$ sudo systemctl start docker

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдорд╛рд░реЗ "рдХреНрд▓рд╕реНрдЯрд░" рдХреЗ рдЖрд░рдВрднрд┐рдХ рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ kubelet, рдЪреВрдВрдХрд┐ рдЕрдиреНрдп рд╕рд░реНрд╡рд░ рдШрдЯрдХреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ kubelet. рд╣рдорд╛рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдЪрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдЙрд╕рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ kubectl.

$ curl -L https://dl.k8s.io/v1.18.5/kubernetes-server-linux-amd64.tar.gz > server.tar.gz
$ tar xzvf server.tar.gz
$ cp kubernetes/server/bin/kubelet .
$ cp kubernetes/server/bin/kubectl .
$ ./kubelet --version
Kubernetes v1.18.5

рдЕрдЧрд░ рд╣рдо рд╕рд┐рд░реНрдл рджреМрдбрд╝реЗрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ kubelet?

$ ./kubelet
F0609 04:03:29.105194    4583 server.go:254] mkdir /var/lib/kubelet: permission denied

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

$ ./kubelet -h
<╤Б╨╗╨╕╤И╨║╨╛╨╝ ╨╝╨╜╨╛╨│╨╛ ╤Б╤В╤А╨╛╨║, ╤З╤В╨╛╨▒╤Л ╤А╨░╨╖╨╝╨╡╤Б╤В╨╕╤В╤М ╨╖╨┤╨╡╤Б╤М>
$ ./kubelet -h | wc -l
284

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

--pod-manifest-path string

рд╕реНрдЯреИрдЯрд┐рдХ рдкреЙрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЛрдВ рд╡рд╛рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдкрде, рдпрд╛ рд╕реНрдЯреИрдЯрд┐рдХ рдкреЙрдбреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрдеред рдбреЙрдЯреНрд╕ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред (рдЕрд╕реНрд╡реАрдХреГрдд: рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдХреНрдпреВрдмрд▓реЗрдЯ рдХреЛ --config рд╡рд┐рдХрд▓реНрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ Kubernetes.io/docs/tasks/administer-cluster/kubelet-config-file .)

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рд╣рдо рд╕реНрдЯреИрдЯрд┐рдХ рдкреЙрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЪрд▓рд╛рдПрдВрдЧреЗ kubelet:

$ mkdir pods
$ sudo ./kubelet --pod-manifest-path=pods

рдлрд┐рд░, рджреВрд╕рд░реЗ рдЯрд░реНрдорд┐рдирд▓/tmux рд╡рд┐рдВрдбреЛ/рдЬреЛ рднреА рд╣реЛ, рд╣рдо рдПрдХ рдкреЙрдб рдореЗрдирд┐рдлреЗрд╕реНрдЯ рдмрдирд╛рдПрдВрдЧреЗ:

$ cat <<EOF > pods/hello.yaml
apiVersion: v1
kind: Pod
metadata:
  name: hello
spec:
  containers:
  - image: busybox
    name: hello
    command: ["echo", "hello world!"]
EOF

kubelet рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИ! рдЖрдЗрдП рдбреЙрдХрд░ рдХреЛ рджреЗрдЦреЗрдВ:

$ sudo docker ps -a
CONTAINER ID        IMAGE                  COMMAND                 CREATED             STATUS                      PORTS               NAMES
8c8a35e26663        busybox                "echo 'hello world!'"   36 seconds ago      Exited (0) 36 seconds ago                       k8s_hello_hello-mink8s_default_ab61ef0307c6e0dee2ab05dc1ff94812_4
68f670c3c85f        k8s.gcr.io/pause:3.2   "/pause"                2 minutes ago       Up 2 minutes                                    k8s_POD_hello-mink8s_default_ab61ef0307c6e0dee2ab05dc1ff94812_0
$ sudo docker logs k8s_hello_hello-mink8s_default_ab61ef0307c6e0dee2ab05dc1ff94812_4
hello world!

kubelet рдореИрдВрдиреЗ рдкреЙрдб рдореЗрдирд┐рдлреЗрд╕реНрдЯ рдкрдврд╝рд╛ рдФрд░ рдбреЙрдХрд░ рдХреЛ рд╣рдорд╛рд░реЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреБрдЫ рдХрдВрдЯреЗрдирд░ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛ред (рдпрджрд┐ рдЖрдк "рдкреЙрдЬрд╝" рдХрдВрдЯреЗрдирд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдПрдХ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╣реИрдХ рд╣реИ - рджреЗрдЦреЗрдВ рдпрд╣ рдмреНрд▓реЙрдЧ.) рдХреНрдпреВрдмрд▓реЗрдЯ рд╣рдорд╛рд░реЗ рдХрдВрдЯреЗрдирд░ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧрд╛ busybox рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдФрд░ рд╕реНрдЯреЗрдЯрд┐рдХ рдкреЙрдб рд╣рдЯрд╛рдП рдЬрд╛рдиреЗ рддрдХ рдЗрд╕реЗ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рддрдХ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдЧрд╛ред

рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдмрдзрд╛рдИ рджреАрдЬрд┐рдП. рд╣рдо рдЯрд░реНрдорд┐рдирд▓ рдкрд░ рдЯреЗрдХреНрд╕реНрдЯ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд╕рдмрд╕реЗ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд▓реЗрдХрд░ рдЖрдП рд╣реИрдВ!

рдкреНрд░рдХреНрд╖реЗрдкрдг рдЖрджрд┐

рд╣рдорд╛рд░рд╛ рдЕрдВрддрд┐рдо рд▓рдХреНрд╖реНрдп рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдкреАрдЖрдИ рдХреЛ рдЪрд▓рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдкрд╣рд▓реЗ рдЪрд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдЗрддреНрдпрд╛рджрд┐. рдЖрдЗрдП рдЗрд╕рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкреЙрдбреНрд╕ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд░рдЦрдХрд░ рдПрдХ рдиреНрдпреВрдирддрдо рдЖрджрд┐ рдХреНрд▓рд╕реНрдЯрд░ рд╢реБрд░реВ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, pods/etcd.yaml):

apiVersion: v1
kind: Pod
metadata:
  name: etcd
  namespace: kube-system
spec:
  containers:
  - name: etcd
    command:
    - etcd
    - --data-dir=/var/lib/etcd
    image: k8s.gcr.io/etcd:3.4.3-0
    volumeMounts:
    - mountPath: /var/lib/etcd
      name: etcd-data
  hostNetwork: true
  volumes:
  - hostPath:
      path: /var/lib/etcd
      type: DirectoryOrCreate
    name: etcd-data

рдпрджрд┐ рдЖрдкрдиреЗ рдХрднреА рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЗрди YAML рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЖрдк рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗред рдпрд╣рд╛рдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдХреЗрд╡рд▓ рджреЛ рдмрд┐рдВрджреБ рд╣реИрдВ:

рд╣рдордиреЗ рд╣реЛрд╕реНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдорд╛рдЙрдВрдЯ рдХрд┐рдпрд╛ рд╣реИ /var/lib/etcd рдкреЙрдб рдореЗрдВ рддрд╛рдХрд┐ рдЖрджрд┐ рдбреЗрдЯрд╛ рдкреБрдирд░рд╛рд░рдВрдн рдХреЗ рдмрд╛рдж рд╕рдВрд░рдХреНрд╖рд┐рдд рд░рд╣реЗ (рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдкреЙрдб рдкреБрдирд░рд╛рд░рдВрдн рд╣реЛрдиреЗ рдкрд░ рд╣рд░ рдмрд╛рд░ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд┐рддрд┐ рдорд┐рдЯрд╛ рджреА рдЬрд╛рдПрдЧреА, рдЬреЛ рдиреНрдпреВрдирддрдо рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рднреА рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред

рд╣рдордиреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ hostNetwork: true. рдпрд╣ рд╕реЗрдЯрд┐рдВрдЧ, рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд░реВрдк рд╕реЗ, рдкреЙрдб рдХреЗ рдЖрдВрддрд░рд┐рдХ рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдмрдЬрд╛рдп рд╣реЛрд╕реНрдЯ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрджрд┐ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреА рд╣реИ (рдЗрд╕рд╕реЗ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЖрджрд┐ рдХреНрд▓рд╕реНрдЯрд░ рдвреВрдВрдврдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛)ред

рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдЬрд╛рдВрдЪ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЖрджрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдХреЛ рдбрд┐рд╕реНрдХ рдкрд░ рд╕рд╣реЗрдЬ рд░рд╣рд╛ рд╣реИ:

$ curl localhost:2379/version
{"etcdserver":"3.4.3","etcdcluster":"3.4.0"}
$ sudo tree /var/lib/etcd/
/var/lib/etcd/
тФФтФАтФА member
    тФЬтФАтФА snap
    тФВ   тФФтФАтФА db
    тФФтФАтФА wal
        тФЬтФАтФА 0.tmp
        тФФтФАтФА 0000000000000000-0000000000000000.wal

рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдирд╛

Kubernetes API рд╕рд░реНрд╡рд░ рдЪрд▓рд╛рдирд╛ рдФрд░ рднреА рдЖрд╕рд╛рди рд╣реИред рдПрдХрдорд╛рддреНрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдЬрд┐рд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рд╣реИ --etcd-servers, рд╡рд╣реА рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЖрдк рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ:

apiVersion: v1
kind: Pod
metadata:
  name: kube-apiserver
  namespace: kube-system
spec:
  containers:
  - name: kube-apiserver
    command:
    - kube-apiserver
    - --etcd-servers=http://127.0.0.1:2379
    image: k8s.gcr.io/kube-apiserver:v1.18.5
  hostNetwork: true

рдЗрд╕ YAML рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд░рдЦреЗрдВ pods, рдФрд░ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рд╕реЗ рдЬрд╛рдВрдЪ рдХреА рдЬрд╛ рд░рд╣реА рд╣реИ curl рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдкреАрдЖрдИ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЦреБрд▓реА рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рдкреЛрд░реНрдЯ 8080 рдкрд░ рд╕реБрди рд░рд╣рд╛ рд╣реИ - рдХрд┐рд╕реА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ!

$ curl localhost:8080/healthz
ok
$ curl localhost:8080/api/v1/pods
{
  "kind": "PodList",
  "apiVersion": "v1",
  "metadata": {
    "selfLink": "/api/v1/pods",
    "resourceVersion": "59"
  },
  "items": []
}

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

рдФрд░, рд╕реБрдЦрдж рдЖрд╢реНрдЪрд░реНрдп, рдХреБрдмреЗрдХреНрдЯрд▓ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!

$ ./kubectl version
Client Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.5", GitCommit:"e6503f8d8f769ace2f338794c914a96fc335df0f", GitTreeState:"clean", BuildDate:"2020-06-26T03:47:41Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"18", GitVersion:"v1.18.5", GitCommit:"e6503f8d8f769ace2f338794c914a96fc335df0f", GitTreeState:"clean", BuildDate:"2020-06-26T03:39:24Z", GoVersion:"go1.13.9", Compiler:"gc", Platform:"linux/amd64"}
$ ./kubectl get pod
No resources found in default namespace.

рд╕рдорд╕реНрдпрд╛

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдереЛрдбрд╝рд╛ рдЧрд╣рд░рд╛рдИ рд╕реЗ рджреЗрдЦреЗрдВ, рддреЛ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рд░рд╣рд╛ рд╣реИ:

$ ./kubectl get pod -n kube-system
No resources found in kube-system namespace.

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

$ ./kubectl get nodes
No resources found in default namespace.

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

--kubeconfig string

рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдкрде kubeconfig, рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рд╕реЗ рдХреИрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЙрдкрд▓рдмреНрдзрддрд╛ --kubeconfig рдПрдкреАрдЖрдИ рд╕рд░реНрд╡рд░ рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ, рдирд╣реАрдВ --kubeconfig рдСрдлрд╝рд▓рд╛рдЗрди рдореЛрдб рд╕рдХреНрд╖рдо рдХрд░рддрд╛ рд╣реИ.

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

apiVersion: v1
kind: Config
clusters:
- cluster:
    server: http://127.0.0.1:8080
  name: mink8s
contexts:
- context:
    cluster: mink8s
  name: mink8s
current-context: mink8s

рдЗрд╕реЗ рдЗрд╕ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ kubeconfig.yaml, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдорд╛рд░ рдбрд╛рд▓реЛ kubelet рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ:

$ sudo ./kubelet --pod-manifest-path=pods --kubeconfig=kubeconfig.yaml

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

рдХреБрдЫ рд╣реА рдорд┐рдирдЯреЛрдВ рдореЗрдВ kubectl рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рдкреЙрдбреНрд╕ рдФрд░ рдиреЛрдбреНрд╕ рджрд┐рдЦрд╛рдиреЗ рдЪрд╛рд╣рд┐рдП:

$ ./kubectl get pods -A
NAMESPACE     NAME                    READY   STATUS             RESTARTS   AGE
default       hello-mink8s            0/1     CrashLoopBackOff   261        21h
kube-system   etcd-mink8s             1/1     Running            0          21h
kube-system   kube-apiserver-mink8s   1/1     Running            0          21h
$ ./kubectl get nodes -owide
NAME     STATUS   ROLES    AGE   VERSION   INTERNAL-IP    EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION       CONTAINER-RUNTIME
mink8s   Ready    <none>   21h   v1.18.5   10.70.10.228   <none>        Ubuntu 18.04.4 LTS   4.15.0-109-generic   docker://19.3.6

рдЖрдЗрдП рдЗрд╕ рдмрд╛рд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреБрдж рдХреЛ рдмрдзрд╛рдИ рджреЗрдВ (рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЦреБрдж рдХреЛ рдмрдзрд╛рдИ рджреЗ рджреА рд╣реИ) - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдиреНрдпреВрдирддрдо рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ "рдХреНрд▓рд╕реНрдЯрд░" рд╣реИ рдЬреЛ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рд╣реИ!

рд╣рдо рдиреАрдЪреЗ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ

рдЕрдм рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдПрдкреАрдЖрдИ рдХреНрдпрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рдЖрдЗрдП nginx рдкреЙрдб рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx

рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:

$ ./kubectl apply -f nginx.yaml
Error from server (Forbidden): error when creating "nginx.yaml": pods "nginx" is
forbidden: error looking up service account default/default: serviceaccount
"default" not found
$ ./kubectl get serviceaccounts
No resources found in default namespace.

рдпрд╣рд╛рдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдХрд┐рддрдирд╛ рдЕрдзреВрд░рд╛ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдХреЛрдИ рд╣рд┐рд╕рд╛рдм-рдХрд┐рддрд╛рдм рдирд╣реАрдВ рд╣реИред рдЖрдЗрдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╕реЗрд╡рд╛ рдЦрд╛рддрд╛ рдмрдирд╛рдХрд░ рдкреБрдирдГ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:

$ cat <<EOS | ./kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: default
EOS
serviceaccount/default created
$ ./kubectl apply -f nginx.yaml
Error from server (ServerTimeout): error when creating "nginx.yaml": No API
token found for service account "default", retry after the token is
automatically created and added to the service account

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

рд╣рдо рд╡рд┐рдХрд▓реНрдк рд╕реЗрдЯ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд┐рдкрдЯ рд╕рдХрддреЗ рд╣реИрдВ automountServiceAccountToken рд╕реЗрд╡рд╛ рдЦрд╛рддреЗ рдХреЗ рд▓рд┐рдП (рдЪреВрдБрдХрд┐ рд╣рдореЗрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛):

$ cat <<EOS | ./kubectl apply -f -
apiVersion: v1
kind: ServiceAccount
metadata:
  name: default
  namespace: default
automountServiceAccountToken: false
EOS
serviceaccount/default configured
$ ./kubectl apply -f nginx.yaml
pod/nginx created
$ ./kubectl get pods
NAME    READY   STATUS    RESTARTS   AGE
nginx   0/1     Pending   0          13m

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

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ рдкреЙрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрдпреВрд▓рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдореИрдирд┐рдлрд╝реЗрд╕реНрдЯ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдиреЛрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ nodeName:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
spec:
  containers:
  - image: nginx
    name: nginx
  nodeName: mink8s

(рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ mink8s рдиреЛрдб рдХреЗ рдирд╛рдо рдкрд░ред) рд╣рдЯрд╛рдиреЗ рдФрд░ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ nginx рд╢реБрд░реВ рд╣реЛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдЖрдИрдкреА рдкрддреЗ рдХреЛ рд╕реБрди рд░рд╣рд╛ рд╣реИ:

$ ./kubectl delete pod nginx
pod "nginx" deleted
$ ./kubectl apply -f nginx.yaml
pod/nginx created
$ ./kubectl get pods -owide
NAME    READY   STATUS    RESTARTS   AGE   IP           NODE     NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          30s   172.17.0.2   mink8s   <none>           <none>
$ curl -s 172.17.0.2 | head -4
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

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

$ cat <<EOS | ./kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: curl
spec:
  containers:
  - image: curlimages/curl
    name: curl
    command: ["curl", "172.17.0.2"]
  nodeName: mink8s
EOS
pod/curl created
$ ./kubectl logs curl | head -6
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>

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

рд╕рдлрд▓рддрд╛!

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

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

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

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

рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рдореЗрдВ рдХреНрдпрд╛ рдорд┐рд▓рд╛? рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдПрдкреАрдЖрдИ, рдЕрдкрдиреЗ рдЖрдк рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдордВрдЪ рд╣реИ рдХрдВрдЯреЗрдирд░ рд╕реНрд╡рдЪрд╛рд▓рди. рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдирд┐рдпрдВрддреНрд░рдХреЛрдВ рдФрд░ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рдо рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрд╕рдВрдЧрдд рд╡рд╛рддрд╛рд╡рд░рдг рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдореБрдлрд╝реНрдд рд╡реЗрдмрд┐рдирд╛рд░ рдореЗрдВ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЬрд╛рдиреЗрдВред

рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВ:

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

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