рдкрд░рд┐рдЪрдп
рд╣рд╛рд▓реИ, Kubernetes рдХреЛ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдЫрд┐рдЯреЛ рдмрдвреНрджреИ рдЧрдПрдХреЛ рдЫ - рдЕрдзрд┐рдХ рд░ рдЕрдзрд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реБ рдпрд╕рд▓рд╛рдИ рд▓рд╛рдЧреВ рдЧрд░реНрджреИ рдЫрдиреНред рдо Nomad рдЬрд╕реНрддреИ рдЕрд░реНрдХреЗрд╕реНрдЯреНрд░реЗрдЯрд░рд▓рд╛рдИ рдЫреБрди рдЪрд╛рд╣рдиреНрдЫреБ: рдпреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдЫ рдЬреБрди рдкрд╣рд┐рд▓реЗ рдиреИ HashiCorp рдмрд╛рдЯ рдЕрдиреНрдп рд╕рдорд╛рдзрд╛рдирд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, Vault рд░ Consul, рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВ рдЖрдлреИрдВрдорд╛ рдкреВрд░реНрд╡рд╛рдзрд╛рд░рдХреЛ рд╣рд┐рд╕рд╛рдмрд▓реЗ рдЬрдЯрд┐рд▓ рдЫреИрдирдиреНред рдпреЛ рд╕рд╛рдордЧреНрд░реАрд▓реЗ Nomad рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрди, рджреБрдИ рдиреЛрдбрд╣рд░реВрд▓рд╛рдИ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрдиреЗ, рд╕рд╛рдереИ Gitlab рд╕рдБрдЧ Nomad рдПрдХреАрдХреГрдд рдЧрд░реНрдиреЗ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред
рдкрд░реАрдХреНрд╖рдг рд╕реНрдЯреНрдпрд╛рдиреНрдб
рдкрд░реАрдХреНрд╖рдг рдмреЗрдиреНрдЪрдХреЛ рдмрд╛рд░реЗрдорд╛ рдереЛрд░реИ: рддреАрди рднрд░реНрдЪреБрдЕрд▓ рд╕рд░реНрднрд░рд╣рд░реВ 2 CPU, 4 RAM, 50 Gb SSD рдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рд╣рд░реВрд╕рдБрдЧ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдПрдХ рд╕рд╛рдЭрд╛ рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рдПрдХреАрдХреГрддред рддрд┐рдиреАрд╣рд░реВрдХреЛ рдирд╛рдо рд░ IP рдареЗрдЧрд╛рдирд╛рд╣рд░реВ:
- nomad-livelinux-01: 172.30.0.5
- nomad-livelinux-02: 172.30.0.10
- consul-livelinux-01: 172.30.0.15
Nomad, Consul рдХреЛ рд╕реНрдерд╛рдкрдирд╛ред рдШреБрдордиреНрддреЗ рдХреНрд▓рд╕реНрдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
рдЖрдзрд╛рд░рднреВрдд рд╕реНрдерд╛рдкрдирд╛ рд╕рдВрдЧ рд╕реБрд░реБ рдЧрд░реМрдВред рдпрджреНрдпрдкрд┐ рд╕реЗрдЯрдЕрдк рд╕рд░рд▓ рдерд┐рдпреЛ, рдо рд▓реЗрдЦрдХреЛ рдЕрдЦрдгреНрдбрддрд╛рдХреЛ рдЦрд╛рддрд┐рд░ рдпрд╕рд▓рд╛рдИ рд╡рд░реНрдгрди рдЧрд░реНрдиреЗрдЫреБ: рдпреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдкрдорд╛ рдбреНрд░рд╛рдлреНрдЯрд╣рд░реВ рд░ рдиреЛрдЯрд╣рд░реВрдмрд╛рдЯ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рдЬрдм рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрджрд╛ рджреНрд░реБрдд рдкрд╣реБрдБрдЪрдХреЛ рд▓рд╛рдЧрд┐ред
рд╣рд╛рдореАрд▓реЗ рдЕрднреНрдпрд╛рд╕ рд╕реБрд░реБ рдЧрд░реНрдиреБ рдЕрдШрд┐, рд╣рд╛рдореА рд╕реИрджреНрдзрд╛рдиреНрддрд┐рдХ рднрд╛рдЧрдорд╛ рдЫрд▓рдлрд▓ рдЧрд░реНрдиреЗрдЫреМрдВ, рдХрд┐рдирднрдиреЗ рдпрд╕ рдЪрд░рдгрдорд╛ рднрд╡рд┐рд╖реНрдпрдХреЛ рд╕рдВрд░рдЪрдирд╛ рдмреБрдЭреНрди рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред
рд╣рд╛рдореАрд╕рдБрдЧ рджреБрдИ рдШреБрдордиреНрддреЗ рдиреЛрдбрд╣рд░реВ рдЫрдиреН рд░ рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдЬреЛрдбреНрди рдЪрд╛рд╣рдиреНрдЫреМрдВ, рд░ рднрд╡рд┐рд╖реНрдпрдорд╛ рд╣рд╛рдореАрд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреНрд▓рд╕реНрдЯрд░ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдкрдирд┐ рдЪрд╛рд╣рд┐рдиреНрдЫ - рдпрд╕рдХрд╛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рдХрдиреНрд╕реБрд▓ рдЪрд╛рд╣рд┐рдиреНрдЫред рдпрд╕ рдЙрдкрдХрд░рдгрдХреЛ рд╕рд╛рде, рдХреНрд▓рд╕реНрдЯрд░рд┐рдВрдЧ рд░ рдирдпрд╛рдБ рдиреЛрдбрд╣рд░реВ рдердкреНрди рдПрдХрджрдо рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╣реБрдиреНрдЫ: рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ Nomad рдиреЛрдб рдХрдиреНрд╕реБрд▓ рдПрдЬреЗрдиреНрдЯрд╕рдБрдЧ рдЬрдбрд╛рди рд╣реБрдиреНрдЫ, рд░ рддреНрдпрд╕рдкрдЫрд┐ рдЕрд╡рд╕реНрдерд┐рдд Nomad рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдЬрдбрд╛рди рд╣реБрдиреНрдЫред рддреНрдпрд╕рдХрд╛рд░рдг, рд╕реБрд░реБрдорд╛ рд╣рд╛рдореА рдХрдиреНрд╕реБрд▓рд░ рд╕рд░реНрднрд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВ, рд╡реЗрдм рдкреНрдпрд╛рдирд▓рдХреЛ рд▓рд╛рдЧрд┐ рдЖрдзрд╛рд░рднреВрдд http рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреЗрдЫреМрдВ (рдпреЛ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд░реВрдкрдорд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдмрд┐рдирд╛ рд╣реЛ рд░ рдмрд╛рд╣реНрдп рдареЗрдЧрд╛рдирд╛рдорд╛ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ), рд╕рд╛рдереИ рдХрдиреНрд╕реБрд▓ рдПрдЬреЗрдиреНрдЯрд╣рд░реВ рдЖрдлреИрдВ Nomad рд╕рд░реНрднрд░рд╣рд░реВрдорд╛, рдЬрд╕ рдкрдЫрд┐ред рд╣рд╛рдореА рдШреБрдордиреНрддреЗрдорд╛ рдорд╛рддреНрд░ рдЕрдЧрд╛рдбрд┐ рдмрдвреНрдиреЗрдЫреМрдВред
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"]
}
рдореБрдЦреНрдп рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдЕрд░реНрдерд▓рд╛рдИ рдЫреБрдЯреНрдЯреИ рд╣реЗрд░реМрдВ:
- рдмреБрдЯрд╕реНрдЯреНрд░реНрдпрд╛рдк: рд╕рддреНрдпред рд╣рд╛рдореА рдирдпрд╛рдБ рдиреЛрдбрд╣рд░реВ рдЬрдбрд╛рди рднрдПрдХрд╛ рдЦрдгреНрдбрдорд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдердкреНрдиреЗ рд╕рдХреНрд╖рдо рдЧрд░реНрдЫреМрдВред рдо рдиреЛрдЯ рдЧрд░реНрдЫреБ рдХрд┐ рд╣рд╛рдореА рдпрд╣рд╛рдБ рдЕрдкреЗрдХреНрд╖рд┐рдд рдиреЛрдбрд╣рд░реВрдХреЛ рд╕рд╣реА рд╕рдВрдЦреНрдпрд╛ рд╕рдВрдХреЗрдд рдЧрд░реНрджреИрдиреМрдВред
- рд╕рд░реНрднрд░: рд╕рддреНрдпред рд╕рд░реНрднрд░ рдореЛрдб рд╕рдХреНрд╖рдо рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпрд╕ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирдорд╛ рдХрдиреНрд╕реБрд▓рд▓реЗ рдорд╛рддреНрд░ рд╕рд░реНрднрд░ рд░ рдорд╛рд╕реНрдЯрд░рдХреЛ рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗрдЫ, Nomad's VM рдЧреНрд░рд╛рд╣рдХрд╣рд░реВ рд╣реБрдиреЗрдЫрдиреНред
- рдбреЗрдЯрд╛рд╕реЗрдЯ: dc1ред рдХреНрд▓рд╕реНрдЯрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рдбреЗрдЯрд╛ рдХреЗрдиреНрджреНрд░рдХреЛ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпреЛ рдЧреНрд░рд╛рд╣рдХ рд░ рд╕рд░реНрднрд░ рджреБрд╡реИ рдорд╛ рд╕рдорд╛рди рд╣реБрдиреБрдкрд░реНрдЫред
- рдЧреБрдкреНрддрд┐рдХрд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН: рддрд┐рдореНрд░реЛ рдХреБрдЮреНрдЬреАред рдХреБрдЮреНрдЬреА, рдЬреБрди рдЕрджреНрд╡рд┐рддреАрдп рд╣реБрдиреБрдкрд░реНрджрдЫ рд░ рд╕рдмреИ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВ рд░ рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рдореЗрд▓ рдЦрд╛рдиреНрдЫред consul keygen рдЖрджреЗрд╢ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЙрддреНрдкрдиреНрдиред
- start_joinред рдпрд╕ рд╕реВрдЪреАрдорд╛ рд╣рд╛рдореА IP рдареЗрдЧрд╛рдирд╛рд╣рд░реВрдХреЛ рд╕реВрдЪреА рд╕рдВрдХреЗрдд рдЧрд░реНрдЫреМрдВ рдЬрд╕рдорд╛ рдЬрдбрд╛рди рдЧрд░рд┐рдиреЗрдЫред рдЕрд╣рд┐рд▓реЗ рд╣рд╛рдореА рдЖрдлреНрдиреЛ рдареЗрдЧрд╛рдирд╛ рдорд╛рддреНрд░ рдЫреЛрдбреНрдЫреМрдВред
рдпрд╕ рдмрд┐рдиреНрджреБрдорд╛ рд╣рд╛рдореА рдХрдорд╛рдгреНрдб рд▓рд╛рдЗрди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрдиреНрд╕реБрд▓ рдЪрд▓рд╛рдЙрди рд╕рдХреНрдЫреМрдВ:
root@consul-livelinux-01:~# /usr/local/bin/consul agent -config-dir /etc/consul.d/bootstrap -ui
рдпреЛ рдЕрд╣рд┐рд▓реЗ рдбрд┐рдмрдЧ рдЧрд░реНрдиреЗ рд░рд╛рдореНрд░реЛ рддрд░рд┐рдХрд╛ рд╣реЛ, рддрдерд╛рдкрд┐, рддрдкрд╛рдЗрдБ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдирд┐рд░рдиреНрддрд░ рдЖрдзрд╛рд░рдорд╛ рдпреЛ рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреБрд╣реБрдиреЗ рдЫреИрдиред systemd рдорд╛рд░реНрдлрдд рдХрдиреНрд╕реБрд▓ рдкреНрд░рдмрдиреНрдз рдЧрд░реНрди рд╕реЗрд╡рд╛ рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ:
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 рд╕реЗрдЯ рдЕрдк рдЧрд░реНрджрд╛, рд╣рд╛рдореАрд▓реЗ рдпрд╕рд▓рд╛рдИ рддреНрдпрд╛рдЧреНрдиреБ рдкрд░реНрдЫ - рдЕрдиреНрдпрдерд╛ рд╣рд╛рдореА Nomad рдорд╛ рд╣рд╛рдореНрд░реЛ рдЖрд╡реЗрджрди рддреИрдирд╛рдд рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреЗрдЫреИрдиреМрдВред рдореЗрд░реЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯрдорд╛, Gitlab рд░ Nomad рджреБрдмреИ рдЧреНрд░реЗ рд╡реЗрдмрдорд╛ рдорд╛рддреНрд░ рдЫрдиреН, рддреНрдпрд╕реИрд▓реЗ рдпрд╣рд╛рдБ рддреНрдпрд╕реНрддреЛ рдХреБрдиреИ рд╕рдорд╕реНрдпрд╛ рдЫреИрдиред
рдмрд╛рдБрдХреА рджреБрдИ рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рд╣рд╛рдореА рдирд┐рдореНрди рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдЕрдиреБрд╕рд╛рд░ рдХрдиреНрд╕реБрд▓ рдПрдЬреЗрдиреНрдЯрд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдЫреМрдВред рд╣рд╛рдореА рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рде рдЪрд░рдгрд╣рд░реВ рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдБрдЫреМрдВ:
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
рд╣рд╛рдореА рд╕рд░реНрднрд░рдорд╛ рдХрдиреНрд╕реБрд▓ рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВред рдЕрдм, рдкреНрд░рдХреНрд╖реЗрдкрдг рдкрдЫрд┐, рд╣рд╛рдореАрд▓реЗ nsul рд╕рджрд╕реНрдпрд╣рд░реВрдорд╛ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░рд┐рдПрдХреЛ рд╕реЗрд╡рд╛ рджреЗрдЦреНрдиреБрдкрд░реНрдЫред рдпрд╕рдХреЛ рдорддрд▓рдм рдпреЛ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдХреНрд▓рд╕реНрдЯрд░рдХреЛ рд░реВрдкрдорд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЬрдбрд╛рди рднрдПрдХреЛ рдЫред рджреЛрд╕реНрд░реЛ рд╕рд░реНрднрд░рдорд╛ рдЙрд╣реА рджреЛрд╣реЛрд░реНрдпрд╛рдЙрдиреБрд╣реЛрд╕реН рд░ рддреНрдпрд╕рдкрдЫрд┐ рд╣рд╛рдореА Nomad рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред
Nomad рдХреЛ рдердк рд╡рд┐рд╕реНрддреГрдд рд╕реНрдерд╛рдкрдирд╛ рдпрд╕рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдорд╛ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рдЫред рддреНрдпрд╣рд╛рдБ рджреБрдИ рдкрд░рдореНрдкрд░рд╛рдЧрдд рд╕реНрдерд╛рдкрдирд╛ рд╡рд┐рдзрд┐рд╣рд░реВ рдЫрдиреН: рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреЗ рд░ рд╕реНрд░реЛрддрдмрд╛рдЯ рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрдиреЗред рдо рдкрд╣рд┐рд▓реЛ рд╡рд┐рдзрд┐ рд░реЛрдЬреНрдЫреБред
рднрдиреНрдиреБ: рдкрд░рд┐рдпреЛрдЬрдирд╛ рдзреЗрд░реИ рдЪрд╛рдБрдбреИ рд╡рд┐рдХрд╛рд╕ рд╣реБрдБрджреИрдЫ, рдирдпрд╛рдБ рдЕрдкрдбреЗрдЯрд╣рд░реВ рдкреНрд░рд╛рдп: рдЬрд╛рд░реА рд╣реБрдиреНрдЫрдиреНред рд╕рд╛рдпрдж рдпреЛ рд▓реЗрдЦ рдкреВрд░рд╛ рднрдПрдкрдЫрд┐ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рд╣реБрдиреЗрдЫред рддрд╕рд░реНрде, рдкрдвреНрдиреБ рдЕрдШрд┐, рдо рдЕрд╣рд┐рд▓реЗ Nomad рдХреЛ рд╣рд╛рд▓рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рдБрдЪ рдЧрд░реНрди рд░ рдпрд╕рд▓рд╛рдИ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫреБред
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 MB рддреМрд▓ рднрдПрдХреЛ Nomad рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВ - рдпрд╕рд▓рд╛рдИ /usr/local/bin рдорд╛ рд╕рд╛рд░реНрдиреБ рдкрд░реНрдЫред
Nomad рдХреЛ рд▓рд╛рдЧрд┐ рдбрд╛рдЯрд╛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ рд░ рдпрд╕рдХреЛ рд╕реЗрд╡рд╛ рдлрд╛рдЗрд▓ рд╕рдореНрдкрд╛рджрди рдЧрд░реМрдВ (рдпреЛ рд╕рдореНрднрд╡рддрдГ рд╕реБрд░реБрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрдиреЗрдЫреИрди):
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.hcl рдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рдордЧреНрд░реА:
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";
}
}
рдЕрдм рд╣рд╛рдореА рдмрд╛рд╣реНрдп рдиреЗрдЯрд╡рд░реНрдХ рдорд╛рд░реНрдлрдд рд╡реЗрдм рдкреНрдпрд╛рдирд▓ рдкрд╣реБрдБрдЪ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рдЬрдбрд╛рди рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рд╕рд░реНрднрд░ рдкреГрд╖реНрдардорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН:
рдЫрд╡рд┐ резред Nomad рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рд╕рд░реНрднрд░рд╣рд░реВрдХреЛ рд╕реВрдЪреА
рджреБрдмреИ рд╕рд░реНрднрд░рд╣рд░реВ рдкреНрдпрд╛рдирд▓рдорд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реБрдиреНрдЫрдиреН, рд╣рд╛рдореА рдШреБрдордиреНрддреЗ рдиреЛрдб рд╕реНрдерд┐рддрд┐ рдЖрджреЗрд╢рдХреЛ рдЖрдЙрдЯрдкреБрдЯрдорд╛ рдПрдЙрдЯреИ рдХреБрд░рд╛ рджреЗрдЦреНрдиреЗрдЫреМрдВ:
рдЫрд╡рд┐ резред рдШреБрдордиреНрддреЗ рдиреЛрдб рд╕реНрдерд┐рддрд┐ рдЖрджреЗрд╢рдХреЛ рдЖрдЙрдЯрдкреБрдЯ
рдХрдиреНрд╕реБрд▓рдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреЗ рд╣реЛ? рд╣реЗрд░реМрдВред рдХрдиреНрд╕реБрд▓ рдХрдиреНрдЯреНрд░реЛрд▓ рдкреНрдпрд╛рдирд▓рдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реН, рдиреЛрдбреНрд╕ рдкреГрд╖реНрдардорд╛:
рдЫрд╡рд┐ резред рдХрдиреНрд╕реБрд▓ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдиреЛрдбрд╣рд░реВрдХреЛ рд╕реВрдЪреА
рдЕрдм рд╣рд╛рдореАрд╕рдБрдЧ рдХрдиреНрд╕реБрд▓рд╕рдБрдЧ рдорд┐рд▓реЗрд░ рдХрд╛рдо рдЧрд░реНрдиреЗ рддрдпрд╛рд░реА рдЧрд░рд┐рдПрдХреЛ рдШреБрдордиреНрддреЗ рдЫред рдЕрдиреНрддрд┐рдо рдЪрд░рдгрдорд╛, рд╣рд╛рдореА рд░рдорд╛рдЗрд▓реЛ рднрд╛рдЧрдорд╛ рдкреБрдЧреНрдиреЗрдЫреМрдВ: рдЧрд┐рдЯрд▓реНрдпрд╛рдмрдмрд╛рдЯ рдиреЛрдорд╛рдбрд╕рдореНрдо рдбрдХрд░ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рдбреЗрд▓рд┐рднрд░реА рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреЗ, рд░ рдпрд╕рдХрд╛ рдЕрдиреНрдп рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВрдХреЛ рдмрд╛рд░реЗрдорд╛ рдкрдирд┐ рдХреБрд░рд╛ рдЧрд░реНрджреИред
Gitlab рдзрд╛рд╡рдХ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИ
Nomad рдорд╛ рдбрдХрд░ рдЫрд╡рд┐рд╣рд░реВ рддреИрдирд╛рдд рдЧрд░реНрди, рд╣рд╛рдореА рднрд┐рддреНрд░ Nomad рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓рдХреЛ рд╕рд╛рде рдПрдХ рдЕрд▓рдЧ рдзрд╛рд╡рдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗрдЫреМрдВ (рдпрд╣рд╛рдБ, рд╡реИрд╕реЗ, рд╣рд╛рдореА Hashicorp рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдХреЛ рдЕрд░реНрдХреЛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдиреЛрдЯ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ - рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдкрдорд╛ рддрд┐рдиреАрд╣рд░реВ рдПрдХрд▓ рдмрд╛рдЗрдирд░реА рдлрд╛рдЗрд▓ рд╣реБрдиреН)ред рдпрд╕рд▓рд╛рдИ рд░рдирд░ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдЕрдкрд▓реЛрдб рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реАрдХреЛ рд╕рд╛рде рдпрд╕рдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдбрдХрд░рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реМрдВ:
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}
рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рд╣рд╛рдореАрд╕рдБрдЧ рдЧрд┐рдЯрд▓реНрдпрд╛рдм рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рдШреБрдордиреНрддреЗ рдзрд╛рд╡рдХрдХреЛ рдЫрд╡рд┐ рдЙрдкрд▓рдмреНрдз рд╣реБрдиреЗрдЫ, рдЕрдм рд╣рд╛рдореА рд╕рд┐рдзреИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рднрдгреНрдбрд╛рд░рдорд╛ рдЬрд╛рди рд╕рдХреНрдЫреМрдВ, рдкрд╛рдЗрдкрд▓рд╛рдЗрди рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд░ Nomad рдХреЛ рдШреБрдордиреНрддреЗ рдХрд╛рдо рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред
рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрдЕрдк
Nomad рдХреЛ рд▓рд╛рдЧреА рдХрд╛рдо рдХреЛ рдлрд╛рдЗрд▓ рд╕рдВрдЧ рд╕реБрд░реБ рдЧрд░реМрдВред рдпрд╕ рд▓реЗрдЦрдорд╛ рдореЗрд░реЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХрджрдо рдЖрджрд┐рдо рд╣реБрдиреЗрдЫ: рдпреЛ рдПрдХ рдХрд╛рд░реНрдп рд╕рдорд╛рд╡реЗрд╢ рд╣реБрдиреЗрдЫред .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
рдпрд╣рд╛рдБ рддреИрдирд╛рддреА рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рд╣реБрдиреНрдЫ, рддрд░ рддрдкрд╛рдЗрдБ рдпрд╕рд▓рд╛рдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдХреЛ рд╕рд╛рдордЧреНрд░реА рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрди рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдкрд╛рдЗрдкрд▓рд╛рдЗрдирдорд╛ рджреБрдИ рдЪрд░рдгрд╣рд░реВ рд╣реБрдиреНрдЫрдиреН: рдЫрд╡рд┐ рдЕрд╕реЗрдВрдмрд▓реА рд░ рдШреБрдордиреНрддреЗрдорд╛ рдпрд╕рдХреЛ рддреИрдирд╛рддреАред рдкрд╣рд┐рд▓реЛ рдЪрд░рдгрдорд╛, рд╣рд╛рдореА рдПрдХ рдбрдХрд░ рдЫрд╡рд┐ рдЬрдореНрдорд╛ рдЧрд░реНрдЫреМрдВ рд░ рдпрд╕рд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рд░рдЬрд┐рд╕реНрдЯреНрд░реАрдорд╛ рдзрдХреЗрд▓реНрдЫреМрдВ, рд░ рджреЛрд╕реНрд░реЛрдорд╛ рд╣рд╛рдореА Nomad рдорд╛ рд╣рд╛рдореНрд░реЛ рдХрд╛рдо рд╕реБрд░реБ рдЧрд░реНрдЫреМрдВред
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" {}
}
}
}
}
}
рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рдорд╕рдБрдЧ рдПрдХ рдирд┐рдЬреА рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдЫ рд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдПрдХ рдбрдХрд░ рдЫрд╡рд┐ рддрд╛рдиреНрди рдореИрд▓реЗ рдпрд╕рдорд╛ рд▓рдЧ рдЗрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпрд╕ рдорд╛рдорд▓рд╛ рдорд╛ рд╕рдмреИ рднрдиреНрджрд╛ рд░рд╛рдореНрд░реЛ рд╕рдорд╛рдзрд╛рди рднрд▓реНрдЯ рдорд╛ рд▓рдЧрдЗрди рд░ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрди рд░ рддреНрдпрд╕рдкрдЫрд┐ Nomad рд╕рдВрдЧ рдПрдХреАрдХреГрдд рдЫред Nomad рдиреЗрдЯрд┐рднрд▓реЗ рднрд▓реНрдЯрд▓рд╛рдИ рд╕рдорд░реНрдерди рдЧрд░реНрджрдЫред рддрд░ рдкрд╣рд┐рд▓реЗ, рднреЛрд▓реНрдЯрдорд╛ Nomad рдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рдиреАрддрд┐рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реМрдВ; рддрд┐рдиреАрд╣рд░реВ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ:
# 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
рдЕрдм рд╣рд╛рдореА Vault рд╕рдБрдЧ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред рд╕рдЮреНрдЪрд╛рд▓рдирдХреЛ рд╕рд┐рджреНрдзрд╛рдиреНрдд рд╕рд░рд▓ рдЫ: рд╣рд╛рдореА Nomad рдХрд╛рд░реНрдпрдорд╛ рдПрдЙрдЯрд╛ рдлрд╛рдЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдЫреМрдВ рдЬрд╕рд▓реЗ рдЪрд░рд╣рд░реВрдХреЛ рдорд╛рдирд╣рд░реВ рднрдгреНрдбрд╛рд░ рдЧрд░реНрдиреЗрдЫ, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐:
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
}
рдпреЛ рд╕рд░рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдгрдХреЛ рд╕рд╛рде, рддрдкрд╛рдИрдВ рдШреБрдордиреНрддреЗ рдХреНрд▓рд╕реНрдЯрд░рдорд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдХреЛ рдбреЗрд▓рд┐рднрд░реА рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ рднрд╡рд┐рд╖реНрдпрдорд╛ рдпрд╕рдХреЛ рд╕рд╛рде рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдо рднрдиреНрдЫреБ рдХрд┐ рдХреЗрд╣рд┐ рд╣рдж рд╕рдореНрдо рдо Nomad рд╕рдБрдЧ рд╕рд╣рд╛рдиреБрднреВрддрд┐ рд░рд╛рдЦреНрдЫреБ - рдпреЛ рд╕рд╛рдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реБ рдХреЛ рд▓рд╛рдЧреА рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рдЫ рдЬрд╣рд╛рдБ Kubernetes рд▓реЗ рдердк рдЬрдЯрд┐рд▓рддрд╛ рдирд┐рдореНрддреНрдпрд╛рдЙрди рд╕рдХреНрдЫ рд░ рдпрд╕рдХреЛ рдкреВрд░реНрдг рдХреНрд╖рдорддрд╛ рдорд╣рд╕реБрд╕ рдЧрд░реНрджреИрдиред рд╕рд╛рдереИ, Nomad рд╢реБрд░реБрд╡рд╛рддрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдЙрдкрдпреБрдХреНрдд рдЫ - рдпреЛ рд╕реНрдерд╛рдкрдирд╛ рд░ рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫред рдпрджреНрдпрдкрд┐, рдХреЗрд╣реА рдкрд░рд┐рдпреЛрдЬрдирд╛рд╣рд░реВрдорд╛ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрджрд╛, рдореИрд▓реЗ рдпрд╕рдХреЛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рд╕рдВрд╕реНрдХрд░рдгрд╣рд░реВрдорд╛ рд╕рдорд╕реНрдпрд╛рдХреЛ рд╕рд╛рдордирд╛ рдЧрд░реНрдЫреБ - рдзреЗрд░реИ рдЖрдзрд╛рд░рднреВрдд рдХрд╛рд░реНрдпрд╣рд░реВ рддреНрдпрд╣рд╛рдБ рдЫреИрдирдиреН рд╡рд╛ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╕рд╣реА рд░реВрдкрдорд╛ рдХрд╛рдо рдЧрд░реНрджреИрдирдиреНред рдпрджреНрдпрдкрд┐, рдо рд╡рд┐рд╢реНрд╡рд╛рд╕ рдЧрд░реНрдЫреБ рдХрд┐ Nomad рд╡рд┐рдХрд╛рд╕ рдЬрд╛рд░реА рд░рд╣рдиреЗрдЫ рд░ рднрд╡рд┐рд╖реНрдпрдорд╛ рдпрд╕рд▓реЗ рд╕рдмреИрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдиреЗ рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫред
рд▓реЗрдЦрдХ: рдЗрд▓реНрдпрд╛ рдПрдиреНрдбреНрд░реАрдн, рдПрд▓реЗрдХреНрд╕реА рдЭрд╛рджрд╛рди рд░ рд▓рд╛рдЗрдн рд▓рд┐рдирдХреНрд╕ рдЯреЛрд▓реА рджреНрд╡рд╛рд░рд╛ рд╕рдореНрдкрд╛рджрди
рд╕реНрд░реЛрдд: www.habr.com