เช•เซ‹เชจเซเชธเซเชฏเซเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชจเซ‹เชฎเชพเชก เช•เซเชฒเชธเซเชŸเชฐ เชธเซ‡เชŸ เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌ เชธเชพเชฅเซ‡ เชธเช‚เช•เชฒเชจ เช•เชฐเชตเซเช‚

เชชเชฐเชฟเชšเชฏ

เชคเชพเชœเซ‡เชคเชฐเชฎเชพเช‚, เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธเชจเซ€ เชฒเซ‹เช•เชชเซเชฐเชฟเชฏเชคเชพ เชเชกเชชเชฅเซ€ เชตเชงเซ€ เชฐเชนเซ€ เช›เซ‡ - เชตเชงเซ เช…เชจเซ‡ เชตเชงเซ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เชคเซ‡เชจเซ‹ เช…เชฎเชฒ เช•เชฐเซ€ เชฐเชนเซเชฏเชพ เช›เซ‡. เชนเซเช‚ เชจเซ‹เชฎเชพเชก เชœเซ‡เชตเชพ เช“เชฐเซเช•เซ‡เชธเซเชŸเซเชฐเซ‡เชŸเชฐเชจเซ‡ เชธเซเชชเชฐเซเชถ เช•เชฐเชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชนเชคเซ‹: เชคเซ‡ เชเชตเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เชฎเชพเชŸเซ‡ เชฏเซ‹เช—เซเชฏ เช›เซ‡ เชœเซ‡ เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ HashiCorp เชจเชพ เช…เชจเซเชฏ เช‰เช•เซ‡เชฒเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, Vault เช…เชจเซ‡ Consul, เช…เชจเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเซเชธ เชชเซ‹เชคเซ‡ เชˆเชจเซเชซเซเชฐเชพเชธเซเชŸเซเชฐเช•เซเชšเชฐเชจเซ€ เชฆเซเชฐเชทเซเชŸเชฟเช เชœเชŸเชฟเชฒ เชจเชฅเซ€. เช† เชธเชพเชฎเช—เซเชฐเซ€เชฎเชพเช‚ เชจเซ‹เชฎเชก เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเชตเชพ, เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชฌเซ‡ เชจเซ‹เชกเชจเซ‡ เชœเซ‹เชกเชตเชพ เชคเซ‡เชฎเชœ เช—เชฟเชŸเชฒเซ‡เชฌ เชธเชพเชฅเซ‡ เชจเซ‹เชฎเชพเชกเชจเซ‡ เชเช•เซ€เช•เซƒเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซ‚เชšเชจเชพเช“ เชนเชถเซ‡.

เช•เซ‹เชจเซเชธเซเชฏเซเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชจเซ‹เชฎเชพเชก เช•เซเชฒเชธเซเชŸเชฐ เชธเซ‡เชŸ เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌ เชธเชพเชฅเซ‡ เชธเช‚เช•เชฒเชจ เช•เชฐเชตเซเช‚

เชŸเซ‡เชธเซเชŸ เชฌเซ‡เชจเซเชš

เชŸเซ‡เชธเซเชŸ เชฌเซ‡เช‚เชš เชตเชฟเชถเซ‡ เชฅเซ‹เชกเซเช‚: เชคเซเชฐเชฃ เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชธเชฐเซเชตเชฐเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— 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

เชจเซ‹เชฎเชก, เช•เซ‹เชจเซเชธเซเชฏเซเชฒเชจเซ€ เชธเซเชฅเชพเชชเชจเชพ. เชจเซ‹เชฎเชก เช•เซเชฒเชธเซเชŸเชฐ เชฌเชจเชพเชตเชตเซเช‚

เชšเชพเชฒเซ‹ เชฎเซ‚เชณเชญเซ‚เชค เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจเชฅเซ€ เชชเซเชฐเชพเชฐเช‚เชญ เช•เชฐเซ€เช. เชธเซ‡เชŸเช…เชช เชธเชฐเชณ เชนเซ‹เชตเชพ เช›เชคเชพเช‚, เชนเซเช‚ เชฒเซ‡เช–เชจเซ€ เช…เช–เช‚เชกเชฟเชคเชคเชพ เช–เชพเชคเชฐ เชคเซ‡เชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ€เชถ: เชœเซเชฏเชพเชฐเซ‡ เชœเชฐเซ‚เชฐ เชชเชกเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชเชกเชชเซ€ เชเช•เซเชธเซ‡เชธ เชฎเชพเชŸเซ‡ เชคเซ‡ เช†เชตเชถเซเชฏเช•เชชเชฃเซ‡ เชกเซเชฐเชพเชซเซเชŸเซเชธ เช…เชจเซ‡ เชจเซ‹เช‚เชงเซ‹เชฎเชพเช‚เชฅเซ€ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซเช‚ เชนเชคเซเช‚.

เช†เชชเชฃเซ‡ เชชเซเชฐเซ‡เช•เซเชŸเชฟเชธ เชถเชฐเซ‚ เช•เชฐเซ€เช เชคเซ‡ เชชเชนเซ‡เชฒเชพเช‚, เช…เชฎเซ‡ เชธเซˆเชฆเซเชงเชพเช‚เชคเชฟเช• เชญเชพเช—เชจเซ€ เชšเชฐเซเชšเชพ เช•เชฐเซ€เชถเซเช‚, เช•เชพเชฐเชฃ เช•เซ‡ เช† เชคเชฌเช•เซเช•เซ‡ เชญเชพเชตเชฟ เชฎเชพเชณเช–เซเช‚ เชธเชฎเชœเชตเซเช‚ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เช›เซ‡.

เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เชฌเซ‡ เชจเซ‹เชฎเซ‡เชก เชจเซ‹เชกเซเชธ เช›เซ‡ เช…เชจเซ‡ เช…เชฎเซ‡ เชคเซ‡เชฎเชจเซ‡ เชเช• เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชœเซ‹เชกเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช, เช…เชจเซ‡ เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚ เช…เชฎเชจเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เซเชฒเชธเซเชŸเชฐ เชธเซเช•เซ‡เชฒเชฟเช‚เช—เชจเซ€ เชชเชฃ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡ - เช† เชฎเชพเชŸเซ‡ เช…เชฎเชจเซ‡ เช•เซ‹เชจเซเชธเชฒเชจเซ€ เชœเชฐเซ‚เชฐ เชชเชกเชถเซ‡. เช† เชŸเซ‚เชฒ เชตเชกเซ‡, เชจเชตเชพ เชจเซ‹เชกเซเชธเชจเซ‡ เช•เซเชฒเชธเซเชŸเชฐ เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เช‰เชฎเซ‡เชฐเชตเซเช‚ เช เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช•เชพเชฐเซเชฏ เชฌเชจเซ€ เชœเชพเชฏ เช›เซ‡: เชฌเชจเชพเชตเซ‡เชฒ เชจเซ‹เชฎเซ‡เชก เชจเซ‹เชก เช•เซ‹เชจเซเชธเชฒ เชเชœเชจเซเชŸ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏ เช›เซ‡, เช…เชจเซ‡ เชชเช›เซ€ เชนเชพเชฒเชจเชพ เชจเซ‹เชฎเชก เช•เซเชฒเชธเซเชŸเชฐ เชธเชพเชฅเซ‡ เชœเซ‹เชกเชพเชฏ เช›เซ‡. เชคเซ‡เชฅเซ€, เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เช…เชฎเซ‡ เช•เซ‹เชจเซเชธเซเชฏเซเชฒ เชธเชฐเซเชตเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เชถเซเช‚, เชตเซ‡เชฌ เชชเซ‡เชจเชฒ เชฎเชพเชŸเซ‡ เชฎเซ‚เชณเชญเซ‚เชค 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"]
}

เชšเชพเชฒเซ‹ เชฎเซเช–เซเชฏ เชจเชฟเชฐเซเชฆเซ‡เชถเซ‹ เช…เชจเซ‡ เชคเซ‡เชฎเชจเชพ เช…เชฐเซเชฅเซ‹เชจเซ‡ เช…เชฒเช—เชฅเซ€ เชœเซ‹เชˆเช:

  • เชฌเซเชŸเชธเซเชŸเซเชฐเซ‡เชช: เชธเชพเชšเซเช‚. เชœเซ‹ เชจเชตเชพ เชจเซ‹เชกเซเชธ เชœเซ‹เชกเชพเชฏเซ‡เชฒเชพ เชนเซ‹เชฏ เชคเซ‹ เช…เชฎเซ‡ เช†เชชเซ‹เช†เชช เช‰เชฎเซ‡เชฐเชฃเชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเซ€เช เช›เซ€เช. เชนเซเช‚ เชจเซ‹เช‚เชงเซเช‚ เช›เซเช‚ เช•เซ‡ เช…เชฎเซ‡ เช…เชนเซ€เช‚ เช…เชชเซ‡เช•เซเชทเชฟเชค เช—เชพเช‚เช เซ‹เชจเซ€ เชšเซ‹เช•เซเช•เชธ เชธเช‚เช–เซเชฏเชพ เชธเซ‚เชšเชตเชคเชพ เชจเชฅเซ€.
  • เชธเชฐเซเชตเชฐ: เชธเชพเชšเซเช‚. เชธเชฐเซเชตเชฐ เชฎเซ‹เชกเชจเซ‡ เชธเช•เซเชทเชฎ เช•เชฐเซ‹. เช† เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจ เชชเชฐ เช•เชจเซเชธเซเชฏเซเชฒ เช† เช•เซเชทเชฃเซ‡ เชเช•เชฎเชพเชคเซเชฐ เชธเชฐเซเชตเชฐ เช…เชจเซ‡ เชฎเชพเชธเซเชŸเชฐ เชคเชฐเซ€เช•เซ‡ เช•เชพเชฎ เช•เชฐเชถเซ‡, เชจเซ‹เชฎเชพเชกเชจเชพ VM เช•เซเชฒเชพเชฏเชจเซเชŸ เชนเชถเซ‡.
  • เชฎเชพเชนเซ€เชคเซ€ เชฎเชฅเช•: dc1. เช•เซเชฒเชธเซเชŸเชฐ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชกเซ‡เชŸเชพ เชธเซ‡เชจเซเชŸเชฐเชจเซเช‚ เชจเชพเชฎ เชธเซเชชเชทเซเชŸ เช•เชฐเซ‹. เชคเซ‡ เช•เซเชฒเชพเชฏเช‚เชŸ เช…เชจเซ‡ เชธเชฐเซเชตเชฐ เชฌเช‚เชจเซ‡ เชชเชฐ เชธเชฎเชพเชจ เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช.
  • เชเชจเซเช•เซเชฐเชฟเชชเซเชŸ: เชคเชฎเชพเชฐเซ€-เช•เซ€. เช•เซ€, เชœเซ‡ เช…เชจเชจเซเชฏ เชนเซ‹เชตเซ€ เชœเซ‹เชˆเช เช…เชจเซ‡ เชฌเชงเชพ เช•เซเชฒเชพเชฏเช‚เชŸ เช…เชจเซ‡ เชธเชฐเซเชตเชฐเซเชธ เชชเชฐ เชฎเซ‡เชณ เช–เชพเชคเซ€ เชนเซ‹เชตเซ€ เชœเซ‹เชˆเช. เช•เซ‹เชจเซเชธเชฒ เช•เซ€เชœเซ‡เชจ เช†เชฆเซ‡เชถเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡เชฒ.
  • เชถเชฐเซ‚เช†เชค_เชœเซ‹เช‡เชจ. เช† เชธเซ‚เชšเชฟเชฎเชพเช‚ เช…เชฎเซ‡ 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

เชธเชฟเชธเซเชŸเชฎเชธเซ€เชŸเซ€เชเชฒ เชฆเซเชตเชพเชฐเชพ เช•เซ‹เชจเซเชธเซเชฏเซเชฒ เชฒเซ‹เช‚เชš เช•เชฐเซ‹:

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 เชฌเช‚เชจเซ‡ เชซเช•เซเชค เช—เซเชฐเซ‡ เชตเซ‡เชฌ เชชเชฐ เช›เซ‡, เชคเซ‡เชฅเซ€ เช…เชนเซ€เช‚ เช†เชตเซ€ เช•เซ‹เชˆ เชธเชฎเชธเซเชฏเชพ เชจเชฅเซ€.

เชฌเชพเช•เซ€เชจเชพ เชฌเซ‡ เชธเชฐเซเชตเชฐ เชชเชฐ เช…เชฎเซ‡ เชจเซ€เชšเซ‡เชจเซ€ เชธเซ‚เชšเชจเชพเช“ เช…เชจเซเชธเชพเชฐ เช•เซ‹เชจเซเชธเซเชฏเซเชฒ เชเชœเชจเซเชŸเซเชธ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เช เช›เซ€เช. เช…เชฎเซ‡ เชฌเชพเชˆเชจเชฐเซ€ เชซเชพเช‡เชฒ เชธเชพเชฅเซ‡ เชชเช—เชฒเชพเช‚เช“เชจเซเช‚ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เช•เชฐเซ€เช เช›เซ€เช:

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 เชธเชญเซเชฏเซ‹เชฎเชพเช‚ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชฟเชค เชธเซ‡เชตเชพ เชœเซ‹เชตเซ€ เชœเซ‹เชˆเช. เช†เชจเซ‹ เช…เชฐเซเชฅ เช เชฅเชถเซ‡ เช•เซ‡ เชคเซ‡ เช•เซเชฒเชธเซเชŸเชฐ เชธเชพเชฅเซ‡ เช•เซเชฒเชพเชฏเชจเซเชŸ เชคเชฐเซ€เช•เซ‡ เชธเชซเชณเชคเชพเชชเซ‚เชฐเซเชตเช• เช•เชจเซ‡เช•เซเชŸ เชฅเชฏเซเช‚ เช›เซ‡. เชฌเซ€เชœเชพ เชธเชฐเซเชตเชฐ เชชเชฐ เชคเซ‡ เชœ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชจ เช•เชฐเซ‹ เช…เชจเซ‡ เชคเซ‡ เชชเช›เซ€ เช†เชชเชฃเซ‡ เชจเซ‹เชฎเชกเชจเซ‡ เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช…เชจเซ‡ เช—เซ‹เช เชตเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช.

เชจเซ‹เชฎเชพเชกเชจเซ€ เชตเชงเซ เชตเชฟเช—เชคเชตเชพเชฐ เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชคเซ‡เชจเชพ เชธเชคเซเชคเชพเชตเชพเชฐ เชฆเชธเซเชคเชพเชตเซ‡เชœเซ‹เชฎเชพเช‚ เชตเชฐเซเชฃเชตเซ‡เชฒ เช›เซ‡. เชฌเซ‡ เชชเชฐเช‚เชชเชฐเชพเช—เชค เช‡เชจเซเชธเซเชŸเซ‹เชฒเซ‡เชถเชจ เชชเชฆเซเชงเชคเชฟเช“ เช›เซ‡: เชฌเชพเชˆเชจเชฐเซ€ เชซเชพเช‡เชฒ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเซ€ เช…เชจเซ‡ เชธเซเชคเซเชฐเซ‹เชคเชฎเชพเช‚เชฅเซ€ เช•เชฎเซเชชเชพเช‡เชฒ เช•เชฐเชตเซ€. เชนเซเช‚ เชชเซเชฐเชฅเชฎ เชชเชฆเซเชงเชคเชฟ เชชเชธเช‚เชฆ เช•เชฐเซ€เชถ.

เชจเซ‹เช‚เชงเชฃเซ€: เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เช–เซ‚เชฌ เชœ เชเชกเชชเชฅเซ€ เชตเชฟเช•เชพเชธ เช•เชฐเซ€ เชฐเชนเซเชฏเซ‹ เช›เซ‡, เชจเชตเชพ เช…เชชเชกเซ‡เชŸเซเชธ เชตเชพเชฐเช‚เชตเชพเชฐ เชชเซเชฐเช•เชพเชถเชฟเชค เชฅเชพเชฏ เช›เซ‡. เช•เชฆเชพเชš เช† เชฒเซ‡เช– เชชเซ‚เชฐเซ‹ เชฅเชพเชฏ เชคเซเชฏเชพเช‚ เชธเซเชงเซ€เชฎเชพเช‚ เชจเชตเซเช‚ เชธเช‚เชธเซเช•เชฐเชฃ เชฌเชนเชพเชฐ เชชเชพเชกเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เชคเซ‡เชฅเซ€, เชตเชพเช‚เชšเชคเชพ เชชเชนเซ‡เชฒเชพ, เชนเซเช‚ เช† เช•เซเชทเชฃเซ‡ เชจเซ‹เชฎเชพเชกเชจเชพ เชตเชฐเซเชคเชฎเชพเชจ เชธเช‚เชธเซเช•เชฐเชฃเชจเซ‡ เชคเชชเชพเชธเชตเชพเชจเซ€ เช…เชจเซ‡ เชคเซ‡เชจเซ‡ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเซเช‚ เช›เซเช‚.

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 เชตเชœเชจเชจเซ€ เชจเซ‹เชฎเซ‡เชก เชฌเชพเชˆเชจเชฐเซ€ เชซเชพเชˆเชฒ เชชเซเชฐเชพเชชเซเชค เชฅเชถเซ‡ - เชคเซ‡เชจเซ‡ /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.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. เชจเซ‹เชฎเซ‡เชก เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เชธเชฐเซเชตเชฐเซ‹เชจเซ€ เชธเซ‚เชšเชฟ

เชฌเช‚เชจเซ‡ เชธเชฐเซเชตเชฐ เชธเชซเชณเชคเชพเชชเซ‚เชฐเซเชตเช• เชชเซ‡เชจเชฒเชฎเชพเช‚ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เชฅเชพเชฏ เช›เซ‡, เช†เชชเชฃเซ‡ เชจเซ‹เชฎเซ‡เชก เชจเซ‹เชก เชธเซเชŸเซ‡เชŸเชธ เช†เชฆเซ‡เชถเชจเชพ เช†เช‰เชŸเชชเซเชŸเชฎเชพเช‚ เชธเชฎเชพเชจ เชตเชธเซเชคเซ เชœเซ‹เชถเซเช‚:

เช•เซ‹เชจเซเชธเซเชฏเซเชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชจเซ‹เชฎเชพเชก เช•เซเชฒเชธเซเชŸเชฐ เชธเซ‡เชŸ เช•เชฐเชตเซเช‚ เช…เชจเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌ เชธเชพเชฅเซ‡ เชธเช‚เช•เชฒเชจ เช•เชฐเชตเซเช‚
เช›เชฌเซ€ 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}

เชชเชฐเชฟเชฃเชพเชฎเซ‡, เช…เชฎเชพเชฐเซ€ เชชเชพเชธเซ‡ เช—เชฟเชŸเชฒเซ‡เชฌ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€เชฎเชพเช‚ เชจเซ‹เชฎเชพเชก เชฐเชจเชฐเชจเซ€ เชเช• เช‰เชชเชฒเชฌเซเชง เช›เชฌเซ€ เชนเชถเซ‡, เชนเชตเซ‡ เช…เชฎเซ‡ เชธเซ€เชงเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚ เชœเชˆ เชถเช•เซ€เช เช›เซ€เช, เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชฌเชจเชพเชตเซ€ เชถเช•เซ€เช เช›เซ€เช เช…เชจเซ‡ เชจเซ‹เชฎเชพเชกเชจเซ€ เชจเซ‹เชฎเชพเชก เชœเซ‹เชฌเชจเซ‡ เช—เซ‹เช เชตเซ€ เชถเช•เซ€เช เช›เซ€เช.

เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชธเซ‡เชŸเช…เชช

เชšเชพเชฒเซ‹ เชจเซ‹เชฎเชพเชก เชฎเชพเชŸเซ‡เชจเซ€ เชจเซ‹เช•เชฐเซ€เชจเซ€ เชซเชพเช‡เชฒเชฅเซ€ เชถเชฐเซ‚เช†เชค เช•เชฐเซ€เช. เช† เชฒเซ‡เช–เชฎเชพเช‚ เชฎเชพเชฐเซ‹ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชคเชฆเซเชฆเชจ เช†เชฆเชฟเชฎ เชนเชถเซ‡: เชคเซ‡เชฎเชพเช‚ เชเช• เช•เชพเชฐเซเชฏ เชนเชถเซ‡. .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

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹