рдХреЙрдиреНрд╕рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреБрдордВрддреВ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд░рдирд╛

рдкрд░рд┐рдЪрдп

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

рдХреЙрдиреНрд╕рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреБрдордВрддреВ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд░рдирд╛

рдкрд░реАрдХреНрд╖рдг рд╕реНрдЯреИрдВрдб

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

  1. рдЦрд╛рдирд╛рдмрджреЛрд╢-рд▓рд┐рд╡рд▓рд┐рдирдХреНрд╕-01: 172.30.0.5
  2. рдЦрд╛рдирд╛рдмрджреЛрд╢-рд▓рд┐рд╡рд▓рд┐рдирдХреНрд╕-02: 172.30.0.10
  3. рдХреМрдВрд╕рд▓-рд▓рд┐рд╡рд▓рд┐рдирдХреНрд╕-01: 172.30.0.15

рдЦрд╛рдирд╛рдмрджреЛрд╢, рдХреМрдВрд╕рд▓ рдХреА рд╕реНрдерд╛рдкрдирд╛. рдШреБрдордВрддреВ рдХреНрд▓рд╕реНрдЯрд░ рдмрдирд╛рдирд╛

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

рдЕрднреНрдпрд╛рд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рднрд╛рдЧ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рднрд╡рд┐рд╖реНрдп рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

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

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

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

root@consul-livelinux-01:~# wget https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_linux_amd64.zip
root@consul-livelinux-01:~# unzip consul_1.5.0_linux_amd64.zip
root@consul-livelinux-01:~# mv consul /usr/local/bin/

рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдЧреЗ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХреЙрдиреНрд╕рд▓ рдмрд╛рдЗрдирд░реА рд╣реИред

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

root@consul-livelinux-01:~# consul keygen

рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ /etc/consul.d/ рдмрдирд╛рддреЗ рд╣реБрдП, рдХреЙрдиреНрд╕рд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ:

/etc/consul.d/
тФЬтФАтФА bootstrap
тФВ   тФФтФАтФА config.json

рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ config.json рд╣реЛрдЧреА - рдЗрд╕рдореЗрдВ рд╣рдо рдХреЙрдиреНрд╕рд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА:

{
"bootstrap": true,
"server": true,
"datacenter": "dc1",
"data_dir": "/var/consul",
"encrypt": "your-key",
"log_level": "INFO",
"enable_syslog": true,
"start_join": ["172.30.0.15"]
}

рдЖрдЗрдП рдореБрдЦреНрдп рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рдЙрдирдХреЗ рдЕрд░реНрдереЛрдВ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рджреЗрдЦреЗрдВ:

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

рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╣рдо рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрд╕рд▓ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

root@consul-livelinux-01:~# /usr/local/bin/consul agent -config-dir /etc/consul.d/bootstrap -ui

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

root@consul-livelinux-01:~# nano /etc/systemd/system/consul.service

consul.service рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА:

[Unit]
Description=Consul Startup process
After=network.target
 
[Service]
Type=simple
ExecStart=/bin/bash -c '/usr/local/bin/consul agent -config-dir /etc/consul.d/bootstrap -ui' 
TimeoutStartSec=0
 
[Install]
WantedBy=default.target

Systemctl рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреМрдВрд╕рд▓ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:

root@consul-livelinux-01:~# systemctl start consul

рдЖрдЗрдП рдЬрд╛рдВрдЪреЗрдВ: рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдЪрд▓рдиреА рдЪрд╛рд╣рд┐рдП, рдФрд░ рдХреЙрдиреНрд╕рд▓ рд╕рджрд╕реНрдпреЛрдВ рдХреЗ рдЖрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдХреЗ рд╣рдореЗрдВ рдЕрдкрдирд╛ рд╕рд░реНрд╡рд░ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

root@consul-livelinux:/etc/consul.d# consul members
consul-livelinux    172.30.0.15:8301  alive   server  1.5.0  2         dc1  <all>

рдЕрдЧрд▓рд╛ рдЪрд░рдг: Nginx рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдкреНрд░реЙрдХреНрд╕реАрдЗрдВрдЧ рдФрд░ http рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ред рд╣рдо рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ nginx рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ /etc/nginx/sites-enabled рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ consul.conf рдмрдирд╛рддреЗ рд╣реИрдВ:

upstream consul-auth {
    server localhost:8500;
}

server {

    server_name consul.doman.name;
    
    location / {
      proxy_pass http://consul-auth;
      proxy_set_header Host $host;
      auth_basic_user_file /etc/nginx/.htpasswd;
      auth_basic "Password-protected Area";
    }
}

рдПрдХ .htpasswd рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдмрдирд╛рдирд╛ рди рднреВрд▓реЗрдВред рдпрд╣ рдЖрдЗрдЯрдо рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рд╡реЗрдм рдкреИрдирд▓ рд╣рдорд╛рд░реЗ рдбреЛрдореЗрди рдХреЛ рдЬрд╛рдирдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рди рд╣реЛред рд╣рд╛рд▓рд╛рдБрдХрд┐, Gitlab рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдЗрд╕реЗ рдЫреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ - рдЕрдиреНрдпрдерд╛ рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдШреБрдордВрддреВ рдореЗрдВ рддреИрдирд╛рдд рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред рдореЗрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ, рдЧрд┐рдЯрд▓реИрдм рдФрд░ рдиреЛрдореИрдб рджреЛрдиреЛрдВ рдХреЗрд╡рд▓ рдЧреНрд░реЗ рд╡реЗрдм рдкрд░ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдРрд╕реА рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рд╢реЗрд╖ рджреЛ рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЙрдиреНрд╕рд▓ рдПрдЬреЗрдВрдЯ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЪрд░рдгреЛрдВ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ:

root@nomad-livelinux-01:~# wget https://releases.hashicorp.com/consul/1.5.0/consul_1.5.0_linux_amd64.zip
root@nomad-livelinux-01:~# unzip consul_1.5.0_linux_amd64.zip
root@nomad-livelinux-01:~# mv consul /usr/local/bin/

рдкрд┐рдЫрд▓реЗ рд╕рд░реНрд╡рд░ рдХреЗ рдЕрдиреБрд░реВрдк, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ /etc/consul.d рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рддреЗ рд╣реИрдВ:

/etc/consul.d/
тФЬтФАтФА client
тФВ   тФФтФАтФА config.json

config.json рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА:

{
    "datacenter": "dc1",
    "data_dir": "/opt/consul",
    "log_level": "DEBUG",
    "node_name": "nomad-livelinux-01",
    "server": false,
    "encrypt": "your-private-key",
    "domain": "livelinux",
    "addresses": {
      "dns": "127.0.0.1",
      "https": "0.0.0.0",
      "grpc": "127.0.0.1",
      "http": "127.0.0.1"
    },
    "bind_addr": "172.30.0.5", # ╨╗╨╛╨║╨░╨╗╤М╨╜╤Л╨╣ ╨░╨┤╤А╨╡╤Б ╨▓╨╝
    "start_join": ["172.30.0.15"], # ╤Г╨┤╨░╨╗╨╡╨╜╨╜╤Л╨╣ ╨░╨┤╤А╨╡╤Б ╨║╨╛╨╜╤Б╤Г╨╗ ╤Б╨╡╤А╨▓╨╡╤А╨░
    "ports": {
      "dns": 53
     }

рдкрд░рд┐рд╡рд░реНрддрди рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рд╕реЗрд╡рд╛ рдлрд╝рд╛рдЗрд▓, рдЙрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ:

/etc/systemd/system/consul.service:

[Unit]
Description="HashiCorp Consul - A service mesh solution"
Documentation=https://www.consul.io/
Requires=network-online.target
After=network-online.target

[Service]
User=root
Group=root
ExecStart=/usr/local/bin/consul agent -config-dir=/etc/consul.d/client
ExecReload=/usr/local/bin/consul reload
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target

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

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

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

root@nomad-livelinux-01:~# wget https://releases.hashicorp.com/nomad/0.9.1/nomad_0.9.1_linux_amd64.zip
root@nomad-livelinux-01:~# unzip nomad_0.9.1_linux_amd64.zip
root@nomad-livelinux-01:~# mv nomad /usr/local/bin/
root@nomad-livelinux-01:~# nomad -autocomplete-install
root@nomad-livelinux-01:~# complete -C /usr/local/bin/nomad nomad
root@nomad-livelinux-01:~# mkdir /etc/nomad.d

рдЕрдирдкреИрдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ 65 рдПрдордмреА рд╡рдЬрди рд╡рд╛рд▓реА рдПрдХ рдШреБрдордВрддреВ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреА - рдЗрд╕реЗ /usr/local/bin рдореЗрдВ рд▓реЗ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ред

рдЖрдЗрдП рдШреБрдордВрддреВ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреЗрдЯрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕рдХреА рд╕реЗрд╡рд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (рд╕рдВрднрд╡рддрдГ рдпрд╣ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛрдЧреА):

root@nomad-livelinux-01:~# mkdir --parents /opt/nomad
root@nomad-livelinux-01:~# nano /etc/systemd/system/nomad.service

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╡рд╣рд╛рдВ рдЪрд┐рдкрдХрд╛рдПрдБ:

[Unit]
Description=Nomad
Documentation=https://nomadproject.io/docs/
Wants=network-online.target
After=network-online.target

[Service]
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/nomad agent -config /etc/nomad.d
KillMode=process
KillSignal=SIGINT
LimitNOFILE=infinity
LimitNPROC=infinity
Restart=on-failure
RestartSec=2
StartLimitBurst=3
StartLimitIntervalSec=10
TasksMax=infinity

[Install]
WantedBy=multi-user.target

рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╣рдореЗрдВ рдиреЛрдореИрдб рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЬрд▓реНрджреА рдирд╣реАрдВ рд╣реИ - рд╣рдордиреЗ рдЕрднреА рддрдХ рдЗрд╕рдХреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рдмрдирд╛рдИ рд╣реИ:

root@nomad-livelinux-01:~# mkdir --parents /etc/nomad.d
root@nomad-livelinux-01:~# chmod 700 /etc/nomad.d
root@nomad-livelinux-01:~# nano /etc/nomad.d/nomad.hcl
root@nomad-livelinux-01:~# nano /etc/nomad.d/server.hcl

рдЕрдВрддрд┐рдо рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА:

/etc/nomad.d/
тФЬтФАтФА nomad.hcl
тФФтФАтФА server.hcl

nomad.hcl рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

datacenter = "dc1"
data_dir = "/opt/nomad"

рд╕рд░реНрд╡рд░.рдПрдЪрд╕реАрдПрд▓ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА:

server {
  enabled = true
  bootstrap_expect = 1
}

consul {
  address             = "127.0.0.1:8500"
  server_service_name = "nomad"
  client_service_name = "nomad-client"
  auto_advertise      = true
  server_auto_join    = true
  client_auto_join    = true
}

bind_addr = "127.0.0.1" 

advertise {
  http = "172.30.0.5"
}

client {
  enabled = true
}

рджреВрд╕рд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рдмрджрд▓рдирд╛ рди рднреВрд▓реЗрдВ - рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ http рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдорд╛рди рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ред

рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдЖрдЦрд┐рд░реА рдЪреАрдЬрд╝ рдкреНрд░реЙрдХреНрд╕реАрдЗрдВрдЧ рдФрд░ http рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП Nginx рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╣реИред nomad.conf рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА:

upstream nomad-auth {
        server 172.30.0.5:4646;
}

server {

        server_name nomad.domain.name;
        
        location / {
	        proxy_pass http://nomad-auth;
	        proxy_set_header Host $host;
	        auth_basic_user_file /etc/nginx/.htpasswd;
		   auth_basic "Password-protected Area";
        }
        
}

рдЕрдм рд╣рдо рдмрд╛рд╣рд░реА рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡реЗрдм рдкреИрдирд▓ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдкреЗрдЬ рдкрд░ рдЬрд╛рдПрдВ:

рдХреЙрдиреНрд╕рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреБрдордВрддреВ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд░рдирд╛
рдЫрд╡рд┐ 1ред рдШреБрдордВрддреВ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рд╕рд░реНрд╡рд░реЛрдВ рдХреА рд╕реВрдЪреА

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

рдХреЙрдиреНрд╕рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреБрдордВрддреВ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд░рдирд╛
рдЫрд╡рд┐ 2ред рдШреБрдордВрддреВ рдиреЛрдб рд╕реНрдерд┐рддрд┐ рдХрдорд╛рдВрдб рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ

рдХреМрдВрд╕рд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЖрдЗрдпреЗ рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ. рдХреЙрдиреНрд╕рд▓ рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓ рдкрд░ рдЬрд╛рдПрдВ, рдиреЛрдбреНрд╕ рдкреЗрдЬ рдкрд░:
рдХреЙрдиреНрд╕рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдШреБрдордВрддреВ рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЧрд┐рдЯрд▓реИрдм рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд░рдирд╛
рдЫрд╡рд┐ 3ред рдХреЙрдиреНрд╕рд▓ рдХреНрд▓рд╕реНрдЯрд░ рдореЗрдВ рдиреЛрдбреНрд╕ рдХреА рд╕реВрдЪреА

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

рдЧрд┐рдЯрд▓реИрдм рд░рдирд░ рдмрдирд╛рдирд╛

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


FROM alpine:3.9
RUN apk add --update --no-cache libc6-compat gettext
COPY nomad /usr/local/bin/nomad

рдЙрд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣рдо .gitlab-ci.yml рдмрдирд╛рддреЗ рд╣реИрдВ:

variables:
  DOCKER_IMAGE: nomad/nomad-deploy
  DOCKER_REGISTRY: registry.domain.name
 

stages:
  - build

build:
  stage: build
  image: ${DOCKER_REGISTRY}/nomad/alpine:3
  script:
    - tag=${DOCKER_REGISTRY}/${DOCKER_IMAGE}:latest
    - docker build --pull -t ${tag} -f Dockerfile .
    - docker push ${tag}

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Gitlab рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рдШреБрдордВрддреВ рдзрд╛рд╡рдХ рдХреА рдПрдХ рдЙрдкрд▓рдмреНрдз рдЫрд╡рд┐ рд╣реЛрдЧреА, рдЕрдм рд╣рдо рд╕реАрдзреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдШреБрдордВрддреВ рдХреА рдШреБрдордВрддреВ рдиреМрдХрд░реА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрдЕрдк

рдЖрдЗрдП рдЦрд╛рдирд╛рдмрджреЛрд╢ рдХреЗ рд▓рд┐рдП рдиреМрдХрд░реА рдХреА рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВред рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдореЗрд░рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛рдлреА рдЖрджрд┐рдо рд╣реЛрдЧрд╛: рдЗрд╕рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдп рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред .gitlab-ci рдХреА рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реЛрдЧреА:

variables:
  NOMAD_ADDR: http://nomad.address.service:4646
  DOCKER_REGISTRY: registry.domain.name
  DOCKER_IMAGE: example/project

stages:
  - build
  - deploy

build:
  stage: build
  image: ${DOCKER_REGISTRY}/nomad-runner/alpine:3
  script:
    - tag=${DOCKER_REGISTRY}/${DOCKER_IMAGE}:${CI_COMMIT_SHORT_SHA}
    - docker build --pull -t ${tag} -f Dockerfile .
    - docker push ${tag}


deploy:
  stage: deploy
  image: registry.example.com/nomad/nomad-runner:latest
  script:
    - envsubst '${CI_COMMIT_SHORT_SHA}' < project.nomad > job.nomad
    - cat job.nomad
    - nomad validate job.nomad
    - nomad plan job.nomad || if [ $? -eq 255 ]; then exit 255; else echo "success"; fi
    - nomad run job.nomad
  environment:
    name: production
  allow_failure: false
  when: manual

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

job "monitoring-status" {
    datacenters = ["dc1"]
    migrate {
        max_parallel = 3
        health_check = "checks"
        min_healthy_time = "15s"
        healthy_deadline = "5m"
    }

    group "zhadan.ltd" {
        count = 1
        update {
            max_parallel      = 1
            min_healthy_time  = "30s"
            healthy_deadline  = "5m"
            progress_deadline = "10m"
            auto_revert       = true
        }
        task "service-monitoring" {
            driver = "docker"

            config {
                image = "registry.domain.name/example/project:${CI_COMMIT_SHORT_SHA}"
                force_pull = true
                auth {
                    username = "gitlab_user"
                    password = "gitlab_password"
                }
                port_map {
                    http = 8000
                }
            }
            resources {
                network {
                    port "http" {}
                }
            }
        }
    }
}

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

# Download the policy and token role
$ curl https://nomadproject.io/data/vault/nomad-server-policy.hcl -O -s -L
$ curl https://nomadproject.io/data/vault/nomad-cluster-role.json -O -s -L

# Write the policy to Vault
$ vault policy write nomad-server nomad-server-policy.hcl

# Create the token role with Vault
$ vault write /auth/token/roles/nomad-cluster @nomad-cluster-role.json

рдЕрдм, рдЖрд╡рд╢реНрдпрдХ рдиреАрддрд┐рдпрд╛рдВ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо job.nomad рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЯрд╛рд╕реНрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рд╡реЙрд▓реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ:

vault {
  enabled = true
  address = "https://vault.domain.name:8200"
  token = "token"
}

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

$ VAULT_TOKEN=<token> nomad agent -config /path/to/config

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

template {
                data = <<EOH
{{with secret "secrets/pipeline-keys"}}
REGISTRY_LOGIN="{{ .Data.REGISTRY_LOGIN }}"
REGISTRY_PASSWORD="{{ .Data.REGISTRY_LOGIN }}{{ end }}"

EOH
    destination = "secrets/service-name.env"
    env = true
}

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

рд▓реЗрдЦрдХ: рдЗрд▓реНрдпрд╛ рдПрдВрдбреНрд░реАрд╡, рдПрд▓реЗрдХреНрд╕реА рдЬрд╝рджрд╛рди рдФрд░ рд▓рд╛рдЗрд╡ рд▓рд┐рдирдХреНрд╕ рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкрд╛рджрд┐рдд


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

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