เจ•เฉŒเจ‚เจธเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจจเฉ‹เจฎเฉˆเจก เจ•เจฒเฉฑเจธเจŸเจฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจ—เจฟเจŸเจฒเฉˆเจฌ เจจเจพเจฒ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจœเจพเจฃ เจชเจ›เจพเจฃ

เจนเจพเจฒ เจนเฉ€ เจตเจฟเฉฑเจš, เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจฆเฉ€ เจชเฉเจฐเจธเจฟเฉฑเจงเฉ€ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจตเจง เจฐเจนเฉ€ เจนเฉˆ - เจตเฉฑเจง เจคเฉ‹เจ‚ เจตเฉฑเจง เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ‡เจธเจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐ เจฐเจนเฉ‡ เจนเจจ. เจฎเฉˆเจ‚ เจจเฉ‹เจฎเฉˆเจก เจตเจฐเจ—เฉ‡ เจ†เจฐเจ•เฉˆเจธเจŸเจฐเฉ‡เจŸเจฐ เจจเฉ‚เฉฐ เจ›เฉ‚เจนเจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจธเฉ€: เจ‡เจน เจ‰เจนเจจเจพเจ‚ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจฒเจˆ เจธเฉฐเจชเฉ‚เจฐเจจ เจนเฉˆ เจœเฉ‹ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ HashiCorp เจคเฉ‹เจ‚ เจฆเฉ‚เจœเฉ‡ เจนเฉฑเจฒเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจตเจพเจฒเจŸ เจ…เจคเฉ‡ เจ•เฉŒเจ‚เจธเจฒ, เจ…เจคเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจ–เฉเจฆ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจขเจพเจ‚เจšเฉ‡ เจฆเฉ‡ เจฎเจพเจฎเจฒเฉ‡ เจตเจฟเฉฑเจš เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจจเจนเฉ€เจ‚ เจนเจจเฅค เจ‡เจธ เจธเจฎเฉฑเจ—เจฐเฉ€ เจตเจฟเฉฑเจš เจจเฉ‹เจฎเฉˆเจก เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ, เจฆเฉ‹ เจจเฉ‹เจกเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจœเฉ‹เฉœเจจ เจฆเฉ‡ เจจเจพเจฒ-เจจเจพเจฒ เจ—เจฟเจŸเจฒเจฌ เจจเจพเจฒ เจจเฉ‹เจฎเฉˆเจก เจจเฉ‚เฉฐ เจœเฉ‹เฉœเจจ เจฒเจˆ เจจเจฟเจฐเจฆเฉ‡เจธเจผ เจธเจผเจพเจฎเจฒ เจนเฉ‹เจฃเจ—เฉ‡เฅค

เจ•เฉŒเจ‚เจธเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจจเฉ‹เจฎเฉˆเจก เจ•เจฒเฉฑเจธเจŸเจฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจ—เจฟเจŸเจฒเฉˆเจฌ เจจเจพเจฒ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ

เจŸเฉˆเจธเจŸ เจธเจŸเฉˆเจ‚เจก

เจŸเฉˆเจธเจŸ เจฌเฉˆเจ‚เจš เจฌเจพเจฐเฉ‡ เจฅเฉ‹เฉœเจพ เจœเจฟเจนเจพ: เจคเจฟเฉฐเจจ เจตเจฐเจšเฉเจ…เจฒ เจธเจฐเจตเจฐ 2 CPU, 4 RAM, 50 Gb SSD เจฆเฉ€เจ†เจ‚ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพเจตเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจตเจฐเจคเฉ‡ เจœเจพเจ‚เจฆเฉ‡ เจนเจจ, เจ‡เฉฑเจ• เจธเจพเจ‚เจเฉ‡ เจธเจฅเจพเจจเจ• เจจเฉˆเจŸเจตเจฐเจ• เจตเจฟเฉฑเจš เจธเฉฐเจฏเฉเจ•เจค เจนเฉเฉฐเจฆเฉ‡ เจนเจจ. เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจจเจพเจฎ เจ…เจคเฉ‡ IP เจชเจคเฉ‡:

  1. nomad-livelinux-01: 172.30.0.5
  2. nomad-livelinux-02: 172.30.0.10
  3. consul-livelinux-01: 172.30.0.15

Nomad, Consul เจฆเฉ€ เจธเจฅเจพเจชเจจเจพ. เจจเฉ‹เจฎเฉˆเจก เจ•เจฒเฉฑเจธเจŸเจฐ เจฌเจฃเจพเจ‰เจฃเจพ

เจ†เจ‰ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเฉ€เจ. เจนเจพเจฒเจพเจ‚เจ•เจฟ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจธเจงเจพเจฐเจจ เจธเฉ€, เจฎเฉˆเจ‚ เจฒเฉ‡เจ– เจฆเฉ€ เจ‡เจ•เจธเจพเจฐเจคเจพ เจฆเฉ€ เจ–เจผเจพเจคเจฐ เจ‡เจธเจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจพเจ‚เจ—เจพ: เจ‡เจน เจœเจผเจฐเฉ‚เจฐเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจฒเฉ‹เฉœ เจชเฉˆเจฃ 'เจคเฉ‡ เจคเฉเจฐเฉฐเจค เจชเจนเฉเฉฐเจš เจฒเจˆ เจกเจฐเจพเจซเจŸ เจ…เจคเฉ‡ เจจเฉ‹เจŸเจธ เจคเฉ‹เจ‚ เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจธเฉ€เฅค

เจ…เจญเจฟเจ†เจธ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจ…เจธเฉ€เจ‚ เจธเจฟเจงเจพเจ‚เจคเจ• เจนเจฟเฉฑเจธเฉ‡ เจฆเฉ€ เจšเจฐเจšเจพ เจ•เจฐเจพเจ‚เจ—เฉ‡, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจธ เจชเฉœเจพเจ… 'เจคเฉ‡ เจญเจตเจฟเฉฑเจ– เจฆเฉ‡ เจขเจพเจ‚เจšเฉ‡ เจจเฉ‚เฉฐ เจธเจฎเจเจฃเจพ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆเฅค

เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจฆเฉ‹ เจจเฉ‹เจฎเฉˆเจก เจจเฉ‹เจก เจนเจจ เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจœเฉ‹เฉœเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš เจธเจพเจจเฉ‚เฉฐ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจ•เจฒเฉฑเจธเจŸเจฐ เจธเจ•เฉ‡เจฒเจฟเฉฐเจ— เจฆเฉ€ เจตเฉ€ เจฒเฉ‹เฉœ เจชเจตเฉ‡เจ—เฉ€ - เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจธเจพเจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจธเจฒ เจฆเฉ€ เจฒเฉ‹เฉœ เจชเจตเฉ‡เจ—เฉ€เฅค เจ‡เจธ เจŸเฉ‚เจฒ เจฆเฉ‡ เจจเจพเจฒ, เจจเจตเฉ‡เจ‚ เจจเฉ‹เจกเจธ เจจเฉ‚เฉฐ เจ•เจฒเฉฑเจธเจŸเจฐ เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจœเฉ‹เฉœเจจเจพ เจ‡เฉฑเจ• เจฌเจนเฉเจค เจนเฉ€ เจธเจงเจพเจฐเจจ เจ•เฉฐเจฎ เจฌเจฃ เจœเจพเจ‚เจฆเจพ เจนเฉˆ: เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจจเฉ‹เจฎเจก เจจเฉ‹เจก เจ•เฉŒเจ‚เจธเจฒ เจเจœเฉฐเจŸ เจจเจพเจฒ เจœเฉเฉœเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ เจซเจฟเจฐ เจฎเฉŒเจœเฉ‚เจฆเจพ เจจเฉ‹เจฎเจก เจ•เจฒเฉฑเจธเจŸเจฐ เจจเจพเจฒ เจœเฉเฉœเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจฒเจˆ, เจธเจผเฉเจฐเฉ‚ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ•เฉŒเจ‚เจธเจฒ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจพเจ‚เจ—เฉ‡, เจตเฉˆเจฌ เจชเฉˆเจจเจฒ เจฒเจˆ เจฎเฉ‚เจฒ 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/

เจนเฉเจฃ เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจนเฉ‹เจฐ เจธเฉฐเจฐเจšเจจเจพ เจฒเจˆ เจ‡เฉฑเจ• เจคเจฟเจ†เจฐ-เจ•เฉ€เจคเฉ€ เจ•เฉŒเจ‚เจธเจฒ เจฌเจพเจ‡เจจเจฐเฉ€ เจนเฉˆเฅค

Consul เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ, เจธเจพเจจเฉ‚เฉฐ 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

เจ‡เจน เจนเฉเจฃ เจกเฉ€เจฌเฉฑเจ— เจ•เจฐเจจ เจฆเจพ เจ‡เฉฑเจ• เจตเจงเฉ€เจ† เจคเจฐเฉ€เจ•เจพ เจนเฉˆ, เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจคเฉเจธเฉ€เจ‚ เจธเจชเฉฑเจธเจผเจŸ เจ•เจพเจฐเจจเจพเจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เจธ เจตเจฟเจงเฉ€ เจฆเฉ€ เจจเจฟเจฐเฉฐเจคเจฐ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‹เจ—เฉ‡เฅค เจ†เจ‰ เจธเจฟเจธเจŸเจฎเจก เจฆเฉเจ†เจฐเจพ เจ•เฉŒเจ‚เจธเจฒ เจฆเจพ เจชเฉเจฐเจฌเฉฐเจงเจจ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจธเฉ‡เจตเจพ เจซเจพเจˆเจฒ เจฌเจฃเจพเจˆเจ:

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

เจธเจฟเจธเจŸเจฎเจธเฉ€เจŸเฉ€เจเจฒ เจฆเฉเจ†เจฐเจพ เจ•เฉŒเจ‚เจธเจฒ เจฒเจพเจ‚เจš เจ•เจฐเฉ‹:

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 เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจธเจพเจจเฉ‚เฉฐ เจ‡เจธ เจจเฉ‚เฉฐ เจ›เฉฑเจกเจฃเจพ เจชเจเจ—เจพ - เจจเจนเฉ€เจ‚ เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเฉ€ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจ เจจเฉ‚เฉฐ เจจเฉ‹เจฎเฉˆเจก 'เจคเฉ‡ เจคเจพเจ‡เจจเจพเจค เจ•เจฐเจจ เจฆเฉ‡ เจฏเฉ‹เจ— เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเจพเจ‚เจ—เฉ‡เฅค เจฎเฉ‡เจฐเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš, 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 เจฆเฉ‡ เจฎเฉŒเจœเฉ‚เจฆเจพ เจธเฉฐเจธเจ•เจฐเจฃ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจกเจพเจ‰เจจเจฒเฉ‹เจก เจ•เจฐเจจ เจฆเฉ€ เจธเจฟเจซเจพเจฐเจธเจผ เจ•เจฐเจฆเจพ เจนเจพเจ‚.

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";
        }
        
}

เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจฌเจพเจนเจฐเฉ€ เจจเฉˆเฉฑเจŸเจตเจฐเจ• เจฐเจพเจนเฉ€เจ‚ เจตเฉˆเฉฑเจฌ เจชเฉˆเจจเจฒ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค เจ•เจจเฉˆเจ•เจŸ เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจธเจฐเจตเจฐ เจชเฉฐเจจเฉ‡ 'เจคเฉ‡ เจœเจพเจ“:

เจ•เฉŒเจ‚เจธเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจจเฉ‹เจฎเฉˆเจก เจ•เจฒเฉฑเจธเจŸเจฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจ—เจฟเจŸเจฒเฉˆเจฌ เจจเจพเจฒ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ
เจšเจฟเฉฑเจคเจฐ 1. Nomad เจ•เจฒเฉฑเจธเจŸเจฐ เจตเจฟเฉฑเจš เจธเจฐเจตเจฐเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€

เจฆเฉ‹เจตเฉ‡เจ‚ เจธเจฐเจตเจฐ เจธเจซเจฒเจคเจพเจชเฉ‚เจฐเจตเจ• เจชเฉˆเจจเจฒ เจตเจฟเฉฑเจš เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เฉ€เจคเฉ‡ เจ—เจ เจนเจจ, เจ…เจธเฉ€เจ‚ เจจเฉ‹เจฎเจก เจจเฉ‹เจก เจธเจŸเฉ‡เจŸเจธ เจ•เจฎเจพเจ‚เจก เจฆเฉ‡ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ เจตเจฟเฉฑเจš เจ‰เจนเฉ€ เจšเฉ€เจœเจผ เจตเฉ‡เจ–เจพเจ‚เจ—เฉ‡:

เจ•เฉŒเจ‚เจธเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจจเฉ‹เจฎเฉˆเจก เจ•เจฒเฉฑเจธเจŸเจฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจ—เจฟเจŸเจฒเฉˆเจฌ เจจเจพเจฒ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ
เจšเจฟเฉฑเจคเจฐ 2. nomad node status เจ•เจฎเจพเจ‚เจก เจฆเจพ เจ†เจ‰เจŸเจชเฉเฉฑเจŸ

เจ•เฉŒเจ‚เจธเจฒ เจฌเจพเจฐเฉ‡ เจ•เฉ€? เจ†เจ“ เจ‡เฉฑเจ• เจจเจœเจผเจฐ เจฎเจพเจฐเฉ€เจเฅค เจ•เฉŒเจ‚เจธเจฒ เจ•เฉฐเจŸเจฐเฉ‹เจฒ เจชเฉˆเจจเจฒ 'เจคเฉ‡ เจœเจพเจ“, เจจเฉ‹เจกเจธ เจชเฉฐเจจเฉ‡ 'เจคเฉ‡:
เจ•เฉŒเจ‚เจธเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจจเฉ‹เจฎเฉˆเจก เจ•เจฒเฉฑเจธเจŸเจฐ เจธเจฅเจพเจชเจค เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจ—เจฟเจŸเจฒเฉˆเจฌ เจจเจพเจฒ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจจเจพ
เจšเจฟเฉฑเจคเจฐ 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}

เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจธเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจ—เจฟเจŸเจฒเฉˆเจฌ เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจจเฉ‹เจฎเฉˆเจก เจฆเฉŒเฉœเจพเจ• เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจชเจฒเจฌเจง เจคเจธเจตเฉ€เจฐ เจนเฉ‹เจตเฉ‡เจ—เฉ€, เจนเฉเจฃ เจ…เจธเฉ€เจ‚ เจธเจฟเฉฑเจงเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚, เจ‡เฉฑเจ• เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจฌเจฃเจพ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจจเฉ‹เจฎเฉˆเจก เจฆเฉ€ เจจเฉ‹เจฎเฉˆเจก เจœเฉŒเจฌ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค

เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช

เจ†เจ“ 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

เจ‡เฉฑเจฅเฉ‡ เจคเฉˆเจจเจพเจคเฉ€ เจฆเจธเจคเฉ€ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจชเจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจกเจพเจ‡เจฐเฉˆเจ•เจŸเจฐเฉ€ เจฆเฉ‡ เจญเจพเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจฒเจˆ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจตเจฟเฉฑเจš เจฆเฉ‹ เจชเฉœเจพเจ… เจนเฉเฉฐเจฆเฉ‡ เจนเจจ: เจšเจฟเฉฑเจคเจฐ เจ…เจธเฉˆเจ‚เจฌเจฒเฉ€ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจคเฉˆเจจเจพเจคเฉ€ เจจเฉ‹เจฎเฉ‡เจก เจฒเจˆเฅค เจชเจนเจฟเจฒเฉ‡ เจชเฉœเจพเจ… 'เจคเฉ‡, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจกเฉŒเจ•เจฐ เจšเจฟเฉฑเจคเจฐ เจจเฉ‚เฉฐ เจ‡เจ•เฉฑเจ เจพ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจธเจพเจกเฉ€ เจฐเจœเจฟเจธเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจงเฉฑเจ•เจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจฆเฉ‚เจœเฉ‡ เจชเฉœเจพเจ… 'เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจจเฉ‹เจฎเฉˆเจก เจตเจฟเฉฑเจš เจ†เจชเจฃเฉ€ เจจเฉŒเจ•เจฐเฉ€ เจธเจผเฉเจฐเฉ‚ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

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 เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจตเจพเจฒเจŸ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจชเจฐ เจชเจนเจฟเจฒเจพเจ‚, เจ†เจ“ เจตเจพเจฒเจŸ เจตเจฟเฉฑเจš เจจเฉ‹เจฎเฉˆเจก เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ€เจ†เจ‚ เจจเฉ€เจคเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ€เจ; เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ:

# 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
}

เจ‡เจธ เจธเจงเจพเจฐเจจ เจชเจนเฉเฉฐเจš เจจเจพเจฒ, เจคเฉเจธเฉ€เจ‚ เจจเฉ‹เจฎเฉˆเจก เจ•เจฒเฉฑเจธเจŸเจฐ เจจเฉ‚เฉฐ เจ•เฉฐเจŸเฉ‡เจจเจฐเจพเจ‚ เจฆเฉ€ เจกเจฟเจฒเจฟเจตเจฐเฉ€ เจจเฉ‚เฉฐ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ…เจคเฉ‡ เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš เจ‡เจธ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค เจฎเฉˆเจ‚ เจ•เจนเจพเจ‚เจ—เจพ เจ•เจฟ เจ•เฉเจ เจนเฉฑเจฆ เจคเฉฑเจ• เจฎเฉˆเจ‚ เจจเฉ‹เจฎเฉˆเจก เจจเจพเจฒ เจนเจฎเจฆเจฐเจฆเฉ€ เจฐเฉฑเจ–เจฆเจพ เจนเจพเจ‚ - เจ‡เจน เจ›เฉ‹เจŸเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจฒเจˆ เจตเจงเฉ‡เจฐเฉ‡ เจขเฉเจ•เจตเจพเจ‚ เจนเฉˆ เจœเจฟเฉฑเจฅเฉ‡ เจ•เฉเจฌเจฐเจจเฉ‡เจŸเจธ เจตเจพเจงเฉ‚ เจœเจŸเจฟเจฒเจคเจพ เจฆเจพ เจ•เจพเจฐเจจ เจฌเจฃ เจธเจ•เจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจชเฉ‚เจฐเฉ€ เจธเจฎเจฐเฉฑเจฅเจพ เจฆเจพ เจ…เจนเจฟเจธเจพเจธ เจจเจนเฉ€เจ‚ เจ•เจฐเจจเจ—เฉ‡. เจจเจพเจฒ เจนเฉ€, Nomad เจธเจผเฉเจฐเฉ‚เจ†เจค เจ•เจฐเจจ เจตเจพเจฒเจฟเจ†เจ‚ เจฒเจˆ เจธเฉฐเจชเฉ‚เจฐเจจ เจนเฉˆ-เจ‡เจธ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจเจพ เจ…เจคเฉ‡ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เจฐเจจเจพ เจ†เจธเจพเจจ เจนเฉˆเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจ•เฉเจ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ 'เจคเฉ‡ เจŸเฉˆเจธเจŸ เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡, เจฎเฉˆเจจเฉ‚เฉฐ เจ‡เจธเจฆเฉ‡ เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ เจธเฉฐเจธเจ•เจฐเจฃเจพเจ‚ เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจธเจฎเฉฑเจธเจฟเจ† เจ†เจ‰เจ‚เจฆเฉ€ เจนเฉˆ - เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจซเฉฐเจ•เจธเจผเจจ เจ‡เฉฑเจฅเฉ‡ เจจเจนเฉ€เจ‚ เจนเจจ เจœเจพเจ‚ เจ‰เจน เจธเจนเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ•เฉฐเจฎ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡ เจนเจจ. เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจฎเฉ‡เจฐเจพ เจฎเฉฐเจจเจฃเจพ เจนเฉˆ เจ•เจฟ เจจเฉ‹เจฎเฉˆเจก เจตเจฟเจ•เจพเจธ เจ•เจฐเจจเจพ เจœเจพเจฐเฉ€ เจฐเฉฑเจ–เฉ‡เจ—เจพ เจ…เจคเฉ‡ เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš เจ‡เจน เจ‰เจนเจจเจพเจ‚ เจ•เจพเจฐเจœเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‡เจ—เจพ เจœเฉ‹ เจนเจฐ เจ•เจฟเจธเฉ‡ เจจเฉ‚เฉฐ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจนเจจ.

เจฒเฉ‡เจ–เจ•: เจ‡เจฒเจฟเจ† เจเจ‚เจกเจฐเฉ€เจต, เจ…เจฒเฉˆเจ•เจธเฉ€ เจœเจผเจพเจกเจพเจจ เจ…เจคเฉ‡ เจฒเจพเจˆเจต เจฒเฉ€เจจเจ•เจธ เจŸเฉ€เจฎ เจฆเฉเจ†เจฐเจพ เจธเฉฐเจชเจพเจฆเจฟเจค


เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹