рдХреБрдмреЗрд░рдиреЗрдЯ рдХреЗ рд╕рд╛рде рдирдВрдЧреЗ рдзрд╛рддреБ рдкрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╣рд╛ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рднрд╛рдЧ рез/рей

рднрд╛рдЧ 2/3 рдпрд╣рд╛рдБ
рднрд╛рдЧ 3/3 рдпрд╣рд╛рдБ


рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдФрд░ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдЖрдВрддрд░рд┐рдХ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред


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


0. рдкрд░рд┐рдЪрдп


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



1. рдкрд░рд┐рдЪрдп


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


рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рд╣рд╛ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ: рд▓реЛрдХрдкреНрд░рд┐рдп рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕-рдж-рд╣рд╛рд░реНрдб- рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрдард┐рди рдФрд░ рдЧрд╣рд░рд╛рдИ рд╕реЗ рд░рд╛рд╕реНрддрд╛, рдпрд╛ рдХреБрдмреЗрджрдо рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░рд▓ рддрд░реАрдХрд╛ред


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


рд╕реНрдЯрдб рдФрд░ рдПрдХреНрд╕рдЯрд░реНрдирд▓ рд╡рд▓реНрдб рдЯреЛрдкреЛрд▓реЙрдЬреА рдХреЗ рд╕рд╛рде, рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдмреЗрджрдо рдкреНрд░рд▓реЗрдЦрди рджреЛ рдмреБрдирд┐рдпрд╛рджреА рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдореИрдВ HA рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдХреЗ рдХрд╛рд░рдг рдмрд╛рд╣рд░реА etcd рдиреЛрдбреНрд╕ рдХреЗ рд╕рд╛рде рджреВрд╕рд░рд╛ рд░рд╛рд╕реНрддрд╛ рдЪреБрдиреВрдВрдЧрд╛ред


рдЗрд╕ рдорд╛рд░реНрдЧ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреБрдмреЗрджрдо рдкреНрд░рд▓реЗрдЦрди рд╕реЗ рдПрдХ рдЪрд┐рддреНрд░ рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



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


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


рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЗрд╕ рдХреНрд▓рд╕реНрдЯрд░ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрд┐рдд kubectl рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЫреЛрдЯрд╛ рд╕рд░реНрд╡рд░ рдЬреЛрдбрд╝реЗрдВ рдпрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд▓рд┐рдирдХреНрд╕ рдбреЗрд╕реНрдХрдЯреЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЖрд░реЗрдЦ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:



2. рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ


рдЖрдкрдХреЛ рдиреНрдпреВрдирддрдо рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рджреЛ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдорд╛рд╕реНрдЯрд░ рдиреЛрдбреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА: рдХреБрдмреЗрджрдо рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ 2 рд╕реАрдкреАрдпреВ рдФрд░ 2 рдЬреАрдмреА рд░реИрдоред рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рд░реНрд╡рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдЙрди рдкрд░ рдЕрдкрдиреА рд╕рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЪрд▓рд╛рдПрдВрдЧреЗред рдФрд░ Etcd + LB рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ CPU рдФрд░ рдХрдо рд╕реЗ рдХрдо 2 GB RAM рд╡рд╛рд▓реЗ рд╕рд░реНрд╡рд░ рднреА рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред


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


рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ:


  • рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдХреЗ рд▓рд┐рдП 2 рдкреНрд░реЛрд╕реЗрд╕рд░ 2 рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ 2 рдЬреАрдмреА рд░реИрдо рдХреЗ рд╕рд╛рде
  • рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП 4 рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ 4-8 рдЬреАрдмреА рд░реИрдо рдХреЗ рд╕рд╛рде 3 рд╕рд░реНрд╡рд░
  • 2 рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд╕рд╛рде 3 рдкреНрд░реЛрд╕реЗрд╕рд░ рдФрд░ 2 рдЬреАрдмреА рд░реИрдо рдХреЗ рд▓рд┐рдП Etcd рдФрд░ HAProxy
  • 192.168.0.0/24 - рд╕рдмрдиреЗрдЯред

192.168.0.1 - HAProxy рдХрд╛ рд╡рд░реНрдЪреБрдЕрд▓ IP рдкрддрд╛, 192.168.0.2 - Etcd рдХреЗ 4 рдореБрдЦреНрдп IP рдкрддреЗ рдФрд░ HAProxy рдиреЛрдбреНрд╕, 192.168.0.5 - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдХреЗ 6 рдореБрдЦреНрдп IP рдкрддреЗ, 192.168.0.7 - рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдиреЛрдбреНрд╕ рдХреЗ 9 рдореБрдЦреНрдп рдЖрдИрдкреА рдкрддреЗред ред


рдбреЗрдмрд┐рдпрди 9 рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рднреА рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реИред


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

3. HAProxy рдФрд░ рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред


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


рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рд╛рд░реНрдЯрдмреАрдЯ рдХреЗ рд╕рд╛рде HAProxy рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ (192.168.0.23 рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ):


etcd1# apt-get update && apt-get upgrade && apt-get install -y haproxy etcd2# apt-get update && apt-get upgrade && apt-get install -y haproxy 

рдореВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдмрдирд╛рдПрдБ:


 etcd1# mv /etc/haproxy/haproxy.cfg{,.back} etcd1# vi /etc/haproxy/haproxy.cfg etcd2# mv /etc/haproxy/haproxy.cfg{,.back} etcd2# vi /etc/haproxy/haproxy.cfg 

рджреЛрдиреЛрдВ HAProxy рдХреЗ рд▓рд┐рдП рдпреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗрдВ:


 global user haproxy group haproxy defaults mode http log global retries 2 timeout connect 3000ms timeout server 5000ms timeout client 5000ms frontend kubernetes bind 192.168.0.1:6443 option tcplog mode tcp default_backend kubernetes-master-nodes backend kubernetes-master-nodes mode tcp balance roundrobin option tcp-check server k8s-master-0 192.168.0.5:6443 check fall 3 rise 2 server k8s-master-1 192.168.0.6:6443 check fall 3 rise 2 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ HAProxy рд╕реЗрд╡рд╛рдПрдВ IP рдкрддрд╛ - 192.168.0.1 рд╕рд╛рдЭрд╛ рдХрд░рддреА рд╣реИрдВред рдпрд╣ рд╡рд░реНрдЪреБрдЕрд▓ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдереЛрдбрд╝рд╛ рдЪрд╛рд▓рд╛рдХ рд╣реЛрдВрдЧреЗ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЧреИрд░-рд╕реНрдерд╛рдиреАрдп рдЖрдИрдкреА рдкрддреЗ рдкрд░ рдмрд╛рдЗрдВрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП net.ipv4.ip_nonlocal_bind рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВрдЧреЗред


рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ /etc/sysctl.conf рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ :


 etcd1# vi /etc/sysctl.conf net.ipv4.ip_nonlocal_bind=1 etcd2# vi /etc/sysctl.conf net.ipv4.ip_nonlocal_bind=1 

рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рдЪрд▓рд╛рдПрдБ:


 sysctl -p 

рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ HAProxy рдЪрд▓рд╛рдПрдВ:


 etcd1# systemctl start haproxy etcd2# systemctl start haproxy 

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ HAProxy рдЪрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╡рд░реНрдЪреБрдЕрд▓ рдЖрдИрдкреА рдПрдбреНрд░реЗрд╕ рд╕реБрди рд░рд╣рд╛ рд╣реИ:


 etcd1# netstat -ntlp tcp 0 0 192.168.0.1:6443 0.0.0.0:* LISTEN 2833/haproxy etcd2# netstat -ntlp tcp 0 0 192.168.0.1:6443 0.0.0.0:* LISTEN 2833/haproxy 

рдЕрдЪреНрдЫрд╛ рд╣реИ! рдЕрдм рд╣рд╛рд░реНрдЯрдмреАрдЯ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ рдФрд░ рдЗрд╕ рд╡рд░реНрдЪреБрдЕрд▓ рдЖрдИрдкреА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред


 etcd1# apt-get -y install heartbeat && systemctl enable heartbeat etcd2# apt-get -y install heartbeat && systemctl enable heartbeat 

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


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдлрд╝рд╛рдЗрд▓ /etc/ha.d/authkeys рдмрдирд╛рдПрдВ , рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рд╛рд░реНрдЯрдмреАрдЯ рдЖрдкрд╕реА рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдлрд╝рд╛рдЗрд▓ рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╕рдорд╛рди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:


 # echo -n securepass | md5sum bb77d0d3b3f239fa5db73bdf27b8d29a etcd1# vi /etc/ha.d/authkeys auth 1 1 md5 bb77d0d3b3f239fa5db73bdf27b8d29a etcd2# vi /etc/ha.d/authkeys auth 1 1 md5 bb77d0d3b3f239fa5db73bdf27b8d29a 

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдХреЗрд╡рд▓ рд░реВрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:


 etcd1# chmod 600 /etc/ha.d/authkeys etcd2# chmod 600 /etc/ha.d/authkeys 

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


/Etc/ha.d/ha.cf рдмрдирд╛рдПрдВ:


etcd1


 etcd1# vi /etc/ha.d/ha.cf # keepalive: how many seconds between heartbeats # keepalive 2 # # deadtime: seconds-to-declare-host-dead # deadtime 10 # # What UDP port to use for udp or ppp-udp communication? # udpport 694 bcast ens18 mcast ens18 225.0.0.1 694 1 0 ucast ens18 192.168.0.3 # What interfaces to heartbeat over? udp ens18 # # Facility to use for syslog()/logger (alternative to log/debugfile) # logfacility local0 # # Tell what machines are in the cluster # node nodename ... -- must match uname -n node etcd1_hostname node etcd2_hostname 

etcd2


 etcd2# vi /etc/ha.d/ha.cf # keepalive: how many seconds between heartbeats # keepalive 2 # # deadtime: seconds-to-declare-host-dead # deadtime 10 # # What UDP port to use for udp or ppp-udp communication? # udpport 694 bcast ens18 mcast ens18 225.0.0.1 694 1 0 ucast ens18 192.168.0.2 # What interfaces to heartbeat over? udp ens18 # # Facility to use for syslog()/logger (alternative to vlog/debugfile) # logfacility local0 # # Tell what machines are in the cluster # node nodename ... -- must match uname -n node etcd1_hostname node etcd2_hostname 

рдЗрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП "рдиреЛрдб" рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рджреЛрдиреЛрдВ Etcd рд╕рд░реНрд╡рд░ рдкрд░ uname -n рдЪрд▓рд╛рдХрд░ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдкрдиреЗ рдиреЗрдЯрд╡рд░реНрдХ рдХрд╛рд░реНрдб рдХреЗ рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд 18 рдХреЗ рдмрдЬрд╛рдп рдХрд░реЗрдВред


рдЕрдВрдд рдореЗрдВ, рдЖрдкрдХреЛ рдЗрди рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ /etc/ha.d/haresource рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреА рд╣реЛрдЧреАред рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдлрд╝рд╛рдЗрд▓ рд╕рдорд╛рди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рд╣рдо рдЕрдкрдирд╛ рд╕рд╛рдорд╛рдиреНрдп IP рдкрддрд╛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдиреЛрдб рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рд╕реНрдЯрд░ рд╣реИ:


 etcd1# vi /etc/ha.d/haresources etcd1_hostname 192.168.0.1 etcd2# vi /etc/ha.d/haresources etcd1_hostname 192.168.0.1 

рдЬрдм рд╕рдм рдХреБрдЫ рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджреЛрдиреЛрдВ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╣рд╛рд░реНрдЯрдмреАрдЯ рд╕реЗрд╡рд╛рдПрдВ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдордиреЗ рдЗрд╕ рдШреЛрд╖рд┐рдд рд╡рд░реНрдЪреБрдЕрд▓ рдЖрдИрдкреА рдХреЛ etcd1 рдиреЛрдб рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИ :


 etcd1# systemctl restart heartbeat etcd2# systemctl restart heartbeat etcd1# ip a ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 192.168.0.2/24 brd 192.168.0.255 scope global ens18 valid_lft forever preferred_lft forever inet 192.168.0.1/24 brd 192.168.0.255 scope global secondary 

рдЖрдк рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ HAProxy 192.168.0.1 6443 рдкрд░ nc рдЪрд▓рд╛рдХрд░ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдЖрдкрдиреЗ рд╕рдордп рд╕рдорд╛рдкреНрдд рдХрд░ рд▓рд┐рдпрд╛ рд╣реЛрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ Kubernetes API рдЕрднреА рддрдХ рд╕рд░реНрд╡рд░ рдХреА рддрд░рдл рдирд╣реАрдВ рд╕реБрди рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ HAProxy рдФрд░ рд╣рд╛рд░реНрдЯрдмреАрдЯ рдХреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


 # nc -v 192.168.0.1 6443 Connection to 93.158.95.90 6443 port [tcp/*] succeeded! 

4. рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдиреЛрдбреНрд╕ рддреИрдпрд╛рд░ рдХрд░рдирд╛


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


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

рд╕рднреА рдиреЛрдбреНрд╕ рдкрд░ рдбреЙрдХрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:


 Update the apt package index # apt-get update Install packages to allow apt to use a repository over HTTPS # apt-get -y install \ apt-transport-https \ ca-certificates \ curl \ gnupg2 \ software-properties-common Add Docker's official GPG key # curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add - Add docker apt repository # apt-add-repository \ "deb [arch=amd64] https://download.docker.com/linux/debian \ $(lsb_release -cs) \ stable" Install docker-ce. # apt-get update && apt-get -y install docker-ce Check docker version # docker -v Docker version 18.09.0, build 4d60db4 

рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рднреА рдиреЛрдбреНрд╕ рдкрд░ рдХреБрдмреЗрд░рдиреЗрдЯ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:


  • kubeadm : рдХреНрд▓рд╕реНрдЯрд░ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдбред
  • kubelet : рдПрдХ рдШрдЯрдХ рдЬреЛ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рднреА рдХрдВрдкреНрдпреВрдЯрд░реЛрдВ рдкрд░ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдЪреВрд▓реНрд╣рд╛ рдФрд░ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдЬреИрд╕реА рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИред
  • kubectl : рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
  • kubectl - at will; рдореИрдВ рдЕрдХреНрд╕рд░ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреБрдмреЗрд░рдиреЗрдЯ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рднреА рдиреЛрдбреНрд╕ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВред

 # curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - Add the Google repository # cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF Update and install packages # apt-get update && apt-get install -y kubelet kubeadm kubectl Hold back packages # apt-mark hold kubelet kubeadm kubectl Check kubeadm version # kubeadm version kubeadm version: &version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.1", GitCommit:"eec55b9dsfdfgdfgfgdfgdfgdf365bdd920", GitTreeState:"clean", BuildDate:"2018-12-13T10:36:44Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"} 

рдХреБрдмреЗрджрдо рдФрд░ рдЕрдиреНрдп рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╕реНрд╡реИрдк рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред


 # swapoff -a # sed -i '/ swap / s/^/#/' /etc/fstab 

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


5. HA Etcd рдХреНрд▓рд╕реНрдЯрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


рдЗрд╕рд▓рд┐рдП, рддреИрдпрд╛рд░реА рдкреВрд░реА рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдХреБрдмреЗрд░рдиреЗрдЯ рд╕рдореВрд╣ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВрдЧреЗред рдкрд╣рд▓реА рдИрдВрдЯ HA Etcd рдХреНрд▓рд╕реНрдЯрд░ рд╣реЛрдЧреА, рдЬрд┐рд╕реЗ kubeadm рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рднреА etc рдиреЛрдбреНрд╕ 2379 рдФрд░ 2380 рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ scp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рдмреАрдЪ ssh рдПрдХреНрд╕реЗрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЪрд▓реЛ рдкрд╣рд▓реЗ etcd рдиреЛрдб рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЕрдиреНрдп рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рддреЗ рд╣реИрдВред


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


 etcd-nodes# cat << EOF > /etc/systemd/system/kubelet.service.d/20-etcd-service-manager.conf [Service] ExecStart= ExecStart=/usr/bin/kubelet --address=127.0.0.1 --pod-manifest-path=/etc/kubernetes/manifests --allow-privileged=true Restart=always EOF etcd-nodes# systemctl daemon-reload etcd-nodes# systemctl restart kubelet 

рдлрд┐рд░ рд╣рдо ssh рдкрд░ рдкрд╣рд▓реЗ рд╡рдЧреИрд░рд╣ рдиреЛрдб рдкрд░ рдЬрд╛рдпреЗрдВрдЧреЗ - рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░рддреНрдпреЗрдХ рд╡рдЧреИрд░ рдиреЛрдб рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреБрдмреЗрджрдо рд╡рд┐рдиреНрдпрд╛рд╕ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ , рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрдкреА рдХрд░реЗрдВрдЧреЗред


 # Export all our etcd nodes IP's as variables etcd1# export HOST0=192.168.0.2 etcd1# export HOST1=192.168.0.3 etcd1# export HOST2=192.168.0.4 # Create temp directories to store files for all nodes etcd1# mkdir -p /tmp/${HOST0}/ /tmp/${HOST1}/ /tmp/${HOST2}/ etcd1# ETCDHOSTS=(${HOST0} ${HOST1} ${HOST2}) etcd1# NAMES=("infra0" "infra1" "infra2") etcd1# for i in "${!ETCDHOSTS[@]}"; do HOST=${ETCDHOSTS[$i]} NAME=${NAMES[$i]} cat << EOF > /tmp/${HOST}/kubeadmcfg.yaml apiVersion: "kubeadm.k8s.io/v1beta1" kind: ClusterConfiguration etcd: local: serverCertSANs: - "${HOST}" peerCertSANs: - "${HOST}" extraArgs: initial-cluster: ${NAMES[0]}=https://${ETCDHOSTS[0]}:2380,${NAMES[1]}=https://${ETCDHOSTS[1]}:2380,${NAMES[2]}=https://${ETCDHOSTS[2]}:2380 initial-cluster-state: new name: ${NAME} listen-peer-urls: https://${HOST}:2380 listen-client-urls: https://${HOST}:2379 advertise-client-urls: https://${HOST}:2379 initial-advertise-peer-urls: https://${HOST}:2380 EOF done 

рдЕрдм рдХреБрдмреЗрджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрдЦреНрдп рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдмрдирд╛рдПрдВ


 etcd1# kubeadm init phase certs etcd-ca 

рдпрд╣ рдХрдорд╛рдВрдб / etc / kubernetes / pki / etcd / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рджреЛ ca.crt рдФрд░ ca.key рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдПрдЧрд╛ ред


 etcd1# ls /etc/kubernetes/pki/etcd/ ca.crt ca.key 

рдЕрдм рд╣рдо рд╕рднреА рд╡рдЧреИрд░рд╣ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рддреИрдпрд╛рд░ рдХрд░реЗрдВрдЧреЗ:


 ### Create certificates for the etcd3 node etcd1# kubeadm init phase certs etcd-server --config=/tmp/${HOST2}/kubeadmcfg.yaml etcd1# kubeadm init phase certs etcd-peer --config=/tmp/${HOST2}/kubeadmcfg.yaml etcd1# kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST2}/kubeadmcfg.yaml etcd1# kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST2}/kubeadmcfg.yaml etcd1# cp -R /etc/kubernetes/pki /tmp/${HOST2}/ ### cleanup non-reusable certificates etcd1# find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -delete ### Create certificates for the etcd2 node etcd1# kubeadm init phase certs etcd-server --config=/tmp/${HOST1}/kubeadmcfg.yaml etcd1# kubeadm init phase certs etcd-peer --config=/tmp/${HOST1}/kubeadmcfg.yaml etcd1# kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST1}/kubeadmcfg.yaml etcd1# kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST1}/kubeadmcfg.yaml etcd1# cp -R /etc/kubernetes/pki /tmp/${HOST1}/ ### cleanup non-reusable certificates again etcd1# find /etc/kubernetes/pki -not -name ca.crt -not -name ca.key -type f -delete ### Create certificates for the this local node etcd1# kubeadm init phase certs etcd-server --config=/tmp/${HOST0}/kubeadmcfg.yaml etcd1 #kubeadm init phase certs etcd-peer --config=/tmp/${HOST0}/kubeadmcfg.yaml etcd1# kubeadm init phase certs etcd-healthcheck-client --config=/tmp/${HOST0}/kubeadmcfg.yaml etcd1# kubeadm init phase certs apiserver-etcd-client --config=/tmp/${HOST0}/kubeadmcfg.yaml # No need to move the certs because they are for this node # clean up certs that should not be copied off this host etcd1# find /tmp/${HOST2} -name ca.key -type f -delete etcd1# find /tmp/${HOST1} -name ca.key -type f -delete 

рдлрд┐рд░ kubeadm рдХреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдиреЛрдбреНрд╕ etcd2 рдФрд░ etcd3 рдкрд░ рдХреЙрдкреА рдХрд░реЗрдВ ред


рдкрд╣рд▓реЗ etcd1 рдкрд░ ssh рдХреАрдЬрд╝ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдмрдирд╛рдПрдБ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрд╛рдЧ рдХреЛ etcd2 рдФрд░ 3 рдиреЛрдбреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рднреА рдХрдорд╛рдВрдб рдХреЛ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдУрд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рднреА рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИред

 etcd1# scp -r /tmp/${HOST1}/* ${HOST1}: etcd1# scp -r /tmp/${HOST2}/* ${HOST2}: ### login to the etcd2 or run this command remotely by ssh etcd2# cd /root etcd2# mv pki /etc/kubernetes/ ### login to the etcd3 or run this command remotely by ssh etcd3# cd /root etcd3# mv pki /etc/kubernetes/ 

Etcd рдХреНрд▓рд╕реНрдЯрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рднреА рдиреЛрдбреНрд╕ рдкрд░ рдлрд╛рдЗрд▓реЗрдВ рдореМрдЬреВрдж рд╣реИрдВ:


Etcd1 рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА:


 /tmp/192.168.0.2 тФФтФАтФА kubeadmcfg.yaml --- /etc/kubernetes/pki тФЬтФАтФА apiserver-etcd-client.crt тФЬтФАтФА apiserver-etcd-client.key тФФтФАтФА etcd тФЬтФАтФА ca.crt тФЬтФАтФА ca.key тФЬтФАтФА healthcheck-client.crt тФЬтФАтФА healthcheck-client.key тФЬтФАтФА peer.crt тФЬтФАтФА peer.key тФЬтФАтФА server.crt тФФтФАтФА server.key 

Etcd2 рдиреЛрдб рдХреЗ рд▓рд┐рдП , рдпрд╣ рд╣реИ:


 /root тФФтФАтФА kubeadmcfg.yaml --- /etc/kubernetes/pki тФЬтФАтФА apiserver-etcd-client.crt тФЬтФАтФА apiserver-etcd-client.key тФФтФАтФА etcd тФЬтФАтФА ca.crt тФЬтФАтФА healthcheck-client.crt тФЬтФАтФА healthcheck-client.key тФЬтФАтФА peer.crt тФЬтФАтФА peer.key тФЬтФАтФА server.crt тФФтФАтФА server.key 

рдФрд░ рдЕрдВрддрд┐рдо рдиреЛрдб etcd3 рд╣реИ :


 /root тФФтФАтФА kubeadmcfg.yaml --- /etc/kubernetes/pki тФЬтФАтФА apiserver-etcd-client.crt тФЬтФАтФА apiserver-etcd-client.key тФФтФАтФА etcd тФЬтФАтФА ca.crt тФЬтФАтФА healthcheck-client.crt тФЬтФАтФА healthcheck-client.key тФЬтФАтФА peer.crt тФЬтФАтФА peer.key тФЬтФАтФА server.crt тФФтФАтФА server.key 

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


 etcd1# kubeadm init phase etcd local --config=/tmp/192.168.0.2/kubeadmcfg.yaml etcd1# kubeadm init phase etcd local --config=/root/kubeadmcfg.yaml etcd1# kubeadm init phase etcd local --config=/root/kubeadmcfg.yaml 

рдЕрдм рдХреНрд▓рд╕реНрдЯрд░ etcd - рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдФрд░ рд╕реНрд╡рд╕реНрде рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХреЛ etcd1 рдиреЛрдб рдкрд░ рдЪрд▓рд╛рдХрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ:


 etcd1# docker run --rm -it \ --net host \ -v /etc/kubernetes:/etc/kubernetes quay.io/coreos/etcd:v3.2.24 etcdctl \ --cert-file /etc/kubernetes/pki/etcd/peer.crt \ --key-file /etc/kubernetes/pki/etcd/peer.key \ --ca-file /etc/kubernetes/pki/etcd/ca.crt \ --endpoints https://192.168.0.2:2379 cluster-health ### status output member 37245675bd09ddf3 is healthy: got healthy result from https://192.168.0.3:2379 member 532d748291f0be51 is healthy: got healthy result from https://192.168.0.4:2379 member 59c53f494c20e8eb is healthy: got healthy result from https://192.168.0.2:2379 cluster is healthy 

рдХреЙрд░реНрдб рдХреНрд▓рд╕реНрдЯрд░ рдмрдврд╝ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВред


6. рдорд╛рд╕реНрдЯрд░ рдФрд░ рдХрд╛рдо рдиреЛрдбреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛


рд╣рдорд╛рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рдорд╛рд╕реНрдЯрд░ рдиреЛрдбреНрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ - рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд╣рд▓реЗ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рд╕реЗ рдкрд╣рд▓реЗ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ:


 etcd1# scp /etc/kubernetes/pki/etcd/ca.crt 192.168.0.5: etcd1# scp /etc/kubernetes/pki/apiserver-etcd-client.crt 192.168.0.5: etcd1# scp /etc/kubernetes/pki/apiserver-etcd-client.key 192.168.0.5: 

рдлрд┐рд░ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдорд╛рд╕реНрдЯрд░ 1 рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХреБрдмреЗрджрдо-config.yaml рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:


 master1# cd /root && vi kubeadm-config.yaml apiVersion: kubeadm.k8s.io/v1beta1 kind: ClusterConfiguration kubernetesVersion: stable apiServer: certSANs: - "192.168.0.1" controlPlaneEndpoint: "192.168.0.1:6443" etcd: external: endpoints: - https://192.168.0.2:2379 - https://192.168.0.3:2379 - https://192.168.0.4:2379 caFile: /etc/kubernetes/pki/etcd/ca.crt certFile: /etc/kubernetes/pki/apiserver-etcd-client.crt keyFile: /etc/kubernetes/pki/apiserver-etcd-client.key 

рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдХреБрдВрдЬреА рдХреЛ рдЙрдЪрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреБрдВрдЬреА рдкрд░ рд▓реЗ рдЬрд╛рдПрдВред


 master1# mkdir -p /etc/kubernetes/pki/etcd/ master1# cp /root/ca.crt /etc/kubernetes/pki/etcd/ master1# cp /root/apiserver-etcd-client.crt /etc/kubernetes/pki/ master1# cp /root/apiserver-etcd-client.key /etc/kubernetes/pki/ 

рдкрд╣рд▓рд╛ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд░реЗрдВ:


 master1# kubeadm init --config kubeadm-config.yaml 

рдпрджрд┐ рд╕рднреА рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреВрд░реЗ рд╣реЛ рдЧрдП рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦреЗрдВрдЧреЗ:


 You can now join any number of machines by running the following on each node as root: kubeadm join 192.168.0.1:6443 --token aasuvd.kw8m18m5fy2ot387 --discovery-token-ca-cert-hash sha256:dcbaeed8d1478291add0294553b6b90b453780e546d06162c71d515b494177a6 

рдЗрд╕ kubeadm initialization рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдХрд┐рд╕реА рднреА рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ, рд╣рдо рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЗрд╕ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдЬрдм рд╣рдо рджреВрд╕рд░реЗ рдорд╛рд╕реНрдЯрд░ рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдбреНрд╕ рдХреЛ рд╣рдорд╛рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдВрдЧреЗред


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


рдкрд╣рд▓реЗ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдкрд░ рдмреБрдирд╛рдИ рдиреЗрдЯрд╡рд░реНрдХ рдкреНрд▓рдЧрдЗрди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛:


 master1# kubectl --kubeconfig /etc/kubernetes/admin.conf apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')" The connection to the server localhost:8080 was refused - did you specify the right host or port? serviceaccount/weave-net created clusterrole.rbac.authorization.k8s.io/weave-net created clusterrolebinding.rbac.authorization.k8s.io/weave-net created role.rbac.authorization.k8s.io/weave-net created rolebinding.rbac.authorization.k8s.io/weave-net created daemonset.extensions/weave-net created 

рдПрдХ рдХреНрд╖рдг рд░реБрдХреЗрдВ, рдФрд░ рдлрд┐рд░ рдирд┐рдореНрди рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдШрдЯрдХ рдЪреВрд▓реНрд╣рд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ:


 master1# kubectl --kubeconfig /etc/kubernetes/admin.conf get pod -n kube-system -w NAME READY STATUS RESTARTS AGE coredns-86c58d9df4-d7qfw 1/1 Running 0 6m25s coredns-86c58d9df4-xj98p 1/1 Running 0 6m25s kube-apiserver-master1 1/1 Running 0 5m22s kube-controller-manager-master1 1/1 Running 0 5m41s kube-proxy-8ncqw 1/1 Running 0 6m25s kube-scheduler-master1 1/1 Running 0 5m25s weave-net-lvwrp 2/2 Running 0 78s 

  • рдкрд╣рд▓реЗ рдиреЛрдб рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХреЗ рдмрд╛рдж рд╣реА рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдорд╛рди рдХреЗ рдирдП рдиреЛрдбреНрд╕ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИред

рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрд░реЗрдВ:


 master1# kubectl --kubeconfig /etc/kubernetes/admin.conf get nodes NAME STATUS ROLES AGE VERSION master1 Ready master 11m v1.13.1 

рд╡рд╛рд╣! рдкрд╣рд▓рд╛ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдЧреБрд▓рд╛рдмред рдЕрдм рдпрд╣ рддреИрдпрд╛рд░ рд╣реИ, рдФрд░ рд╣рдо рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗ - рд╣рдо рдПрдХ рджреВрд╕рд░реЗ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдФрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдбреНрд╕ рдХреЛ рдЬреЛрдбрд╝реЗрдВрдЧреЗред
рджреВрд╕рд░рд╛ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рд╕реНрдЯрд░ 1 рдкрд░ рдПрдХ ssh рдХреБрдВрдЬреА рдмрдирд╛рдПрдВ рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рднрд╛рдЧ рдХреЛ рдорд╛рд╕реНрдЯрд░ 2 рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ ред рдПрдХ рдкрд░реАрдХреНрд╖рдг рд▓реЙрдЧрд┐рди рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рдкрд╣рд▓реЗ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рд╕реЗ рджреВрд╕рд░реЗ рддрдХ рдХреБрдЫ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ:


 master1# scp /etc/kubernetes/pki/ca.crt 192.168.0.6: master1# scp /etc/kubernetes/pki/ca.key 192.168.0.6: master1# scp /etc/kubernetes/pki/sa.key 192.168.0.6: master1# scp /etc/kubernetes/pki/sa.pub 192.168.0.6: master1# scp /etc/kubernetes/pki/front-proxy-ca.crt @192.168.0.6: master1# scp /etc/kubernetes/pki/front-proxy-ca.key @192.168.0.6: master1# scp /etc/kubernetes/pki/apiserver-etcd-client.crt @192.168.0.6: master1# scp /etc/kubernetes/pki/apiserver-etcd-client.key @192.168.0.6: master1# scp /etc/kubernetes/pki/etcd/ca.crt 192.168.0.6:etcd-ca.crt master1# scp /etc/kubernetes/admin.conf 192.168.0.6: ### Check that files was copied well master2# ls /root admin.conf ca.crt ca.key etcd-ca.crt front-proxy-ca.crt front-proxy-ca.key sa.key sa.pub 

рджреВрд╕рд░реЗ рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдкрд░, рдкрд╣рд▓реЗ рд╕реЗ рдХреЙрдкреА рдХрд┐рдП рдЧрдП рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдФрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рдЙрдЪрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдВ:


 master2# mkdir -p /etc/kubernetes/pki/etcd mv /root/ca.crt /etc/kubernetes/pki/ mv /root/ca.key /etc/kubernetes/pki/ mv /root/sa.pub /etc/kubernetes/pki/ mv /root/sa.key /etc/kubernetes/pki/ mv /root/apiserver-etcd-client.crt /etc/kubernetes/pki/ mv /root/apiserver-etcd-client.key /etc/kubernetes/pki/ mv /root/front-proxy-ca.crt /etc/kubernetes/pki/ mv /root/front-proxy-ca.key /etc/kubernetes/pki/ mv /root/etcd-ca.crt /etc/kubernetes/pki/etcd/ca.crt mv /root/admin.conf /etc/kubernetes/admin.conf 

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


рдорд╛рд╕реНрдЯрд░ рдиреЛрдб рдорд╛рд╕реНрдЯрд░ 2 рдЪрд▓рд╛рдПрдБ:


 master2# kubeadm join 192.168.0.1:6443 --token aasuvd.kw8m18m5fy2ot387 --discovery-token-ca-cert-hash sha256:dcbaeed8d1478291add0294553b6b90b453780e546d06162c71d515b494177a6 --experimental-control-plane 

  • рдЖрдкрдХреЛ --experimental-control-plane рдлреНрд▓реИрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрд╣ рдПрдХ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд▓рдЧреНрдирдХ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдзреНрд╡рдЬ рдХреЗ рдмрд┐рдирд╛, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдиреЛрдб рдмрд╕ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред

рдереЛрдбрд╝рд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдиреЛрдб рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдирдИ рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ:


 master1# kubectl --kubeconfig /etc/kubernetes/admin.conf get nodes NAME STATUS ROLES AGE VERSION master1 Ready master 32m v1.13.1 master2 Ready master 46s v1.13.1 

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


 master1# kubectl тАФ kubeconfig /etc/kubernetes/admin.conf get pod -n kube-system -w NAME READY STATUS RESTARTS AGE coredns-86c58d9df4-d7qfw 1/1 Running 0 46m coredns-86c58d9df4-xj98p 1/1 Running 0 46m kube-apiserver-master1 1/1 Running 0 45m kube-apiserver-master2 1/1 Running 0 15m kube-controller-manager-master1 1/1 Running 0 45m kube-controller-manager-master2 1/1 Running 0 15m kube-proxy-8ncqw 1/1 Running 0 46m kube-proxy-px5dt 1/1 Running 0 15m kube-scheduler-master1 1/1 Running 0 45m kube-scheduler-master2 1/1 Running 0 15m weave-net-ksvxz 2/2 Running 1 15m weave-net-lvwrp 2/2 Running 0 41m 

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


рдХрд╛рдо рдХрд░ рд░рд╣реЗ рдиреЛрдбреНрд╕ рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ kubeadm рдХреЛ --experimental-control-plane рдлреНрд▓реИрдЧ рдХреЗ рдмрд┐рдирд╛ рдХрдорд╛рдВрдб рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВред


 worker1-3# kubeadm join 192.168.0.1:6443 --token aasuvd.kw8m18m5fy2ot387 --discovery-token-ca-cert-hash sha256:dcbaeed8d1478291add0294553b6b90b453780e546d06162c71d515b494177a6 

рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд┐рддрд┐ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЬрд╛рдВрдЪреЗрдВ:


 master1# kubectl --kubeconfig /etc/kubernetes/admin.conf get nodes NAME STATUS ROLES AGE VERSION master1 Ready master 1h30m v1.13.1 master2 Ready master 1h59m v1.13.1 worker1 Ready <none> 1h8m v1.13.1 worker2 Ready <none> 1h8m v1.13.1 worker3 Ready <none> 1h7m v1.13.1 

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


7. рджреВрд░рд╕реНрде рдХреНрд▓рд╕реНрдЯрд░ рдкреНрд░рдмрдВрдзрди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛


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


рдЗрд╕ рд╕рд░реНрд╡рд░ рдореЗрдВ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ рдФрд░ рдЪрд▓рд╛рдПрдВ:


 Add the Google repository key control# curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - Add the Google repository control# cat <<EOF >/etc/apt/sources.list.d/kubernetes.list deb https://apt.kubernetes.io/ kubernetes-xenial main EOF Update and install kubectl control# apt-get update && apt-get install -y kubectl In your user home dir create control# mkdir ~/.kube Take the Kubernetes admin.conf from the master1 node control# scp 192.168.0.5:/etc/kubernetes/admin.conf ~/.kube/config Check that we can send commands to our cluster control# kubectl get nodes NAME STATUS ROLES AGE VERSION master1 Ready master 6h58m v1.13.1 master2 Ready master 6h27m v1.13.1 worker1 Ready <none> 5h36m v1.13.1 worker2 Ready <none> 5h36m v1.13.1 worker3 Ready <none> 5h36m v1.13.1 

рдареАрдХ рд╣реИ, рдЕрдм рд╣рдорд╛рд░реЗ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛рдПрдВ рдФрд░ рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред


 control# kubectl create deployment nginx --image=nginx deployment.apps/nginx created control# kubectl get pods NAME READY STATUS RESTARTS AGE nginx-5c7588df-6pvgr 1/1 Running 0 52s 

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


рд▓реЗрдЦ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рд╕рднреА рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдбреНрд╕ рдкрд░ GlusterFS рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ, рд╣рдорд╛рд░реЗ рдХреБрдмреЗрд░рдиреЗрдЯ рдХреНрд▓рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдВрддрд░рд┐рдХ рд▓реЛрдб рдмреИрд▓реЗрдВрд╕рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ, рдФрд░ рдХреБрдЫ рддрдирд╛рд╡ рдкрд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ, рдХреБрдЫ рдиреЛрдбреНрд╕ рдХреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╕реНрдЯрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдХреЗ рдЖрдВрддрд░рд┐рдХ рднрдВрдбрд╛рд░рдг рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗред


рдЕрдВрддрднрд╛рд╖рдг


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


рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд╕реМрднрд╛рдЧреНрдп рд╣реИ

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


All Articles