αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Nomad cluster αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž»αž„αžŸαŸŠαž»αž› αž“αž·αž„αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™ Gitlab

αžŸαŸαž…αž€αŸ’αžαžΈαžŽαŸ‚αž“αžΆαŸ†

αžαŸ’αž˜αžΈαŸ—αž“αŸαŸ‡ αž”αŸ’αžšαž‡αžΆαž”αŸ’αžšαž·αž™αž—αžΆαž–αžšαž”αžŸαŸ‹ Kubernetes αž€αŸ†αž–αž»αž„αžαŸ‚αž€αžΎαž“αž‘αžΎαž„αž™αŸ‰αžΆαž„αž†αžΆαž”αŸ‹αžšαž αŸαžŸ αž‚αž˜αŸ’αžšαŸ„αž„αž€αžΆαž“αŸ‹αžαŸ‚αž…αŸ’αžšαžΎαž“αž€αŸ†αž–αž»αž„αž’αž“αž»αžœαžαŸ’αžαžœαžΆαŸ” αžαŸ’αž‰αž»αŸ†αž…αž„αŸ‹αž”αŸ‰αŸ‡αž’αŸ’αž“αž€αžŸαŸ†αžŠαŸ‚αž„αžŠαžΌαž…αž‡αžΆ NomadαŸ– αžœαžΆαž›αŸ’αž’αž₯αžαžαŸ’αž…αŸ„αŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ‚αž›αž”αŸ’αžšαžΎαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžšαž½αž…αž αžΎαž™αž–αžΈ HashiCorp αž§αž‘αžΆαž αžšαžŽαŸ Vault αž“αž·αž„ Consul αž αžΎαž™αž‚αž˜αŸ’αžšαŸ„αž„αžαŸ’αž›αž½αž“αž―αž„αž˜αž·αž“αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž‘αžΆαž€αŸ‹αž‘αž„αž“αžΉαž„αž αŸαžŠαŸ’αž‹αžΆαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž‘αŸαŸ” αžŸαž˜αŸ’αž—αžΆαžšαŸˆαž“αŸαŸ‡αž“αžΉαž„αž˜αžΆαž“αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžŠαŸ†αž‘αžΎαž„ Nomad αžŠαŸ„αž™αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαžαŸ’αž“αžΆαŸ†αž„αž–αžΈαžšαž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜ αž€αŸαžŠαžΌαž…αž‡αžΆαž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž› Nomad αž‡αžΆαž˜αž½αž™ Gitlab αŸ”

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Nomad cluster αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž»αž„αžŸαŸŠαž»αž› αž“αž·αž„αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™ Gitlab

αžˆαžšαžŸαžΆαž€αž›αŸ’αž”αž„

αž”αž“αŸ’αžαž·αž…αž’αŸ†αž–αžΈαž€αŸ…αž’αžΈαžŸαžΆαž€αž›αŸ’αž”αž„αŸ– αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž“αž·αž˜αŸ’αž˜αž·αžαž…αŸ†αž“αž½αž“αž”αžΈαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž›αž€αŸ’αžαžŽαŸˆαž“αŸƒαžŸαŸŠαžΈαž—αžΈαž™αžΌ 2, 4 RAM, 50 Gb SSD, αžšαž½αž”αžšαž½αž˜αž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„αž”αžŽαŸ’αžαžΆαž‰αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‘αžΌαž‘αŸ…αž˜αž½αž™αŸ” αžˆαŸ’αž˜αŸ„αŸ‡ αž“αž·αž„αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“ IP αžšαž”αžŸαŸ‹αž–αž½αž€αž‚αŸαŸ–

  1. nomad-livelinux-01: 172.30.0.5
  2. nomad-livelinux-02: 172.30.0.10
  3. αž€αž»αž„αžŸαŸŠαž»αž›-livelinux-01: 172.30.0.15

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Nomad, Consul αŸ” αž€αžΆαžšαž”αž„αŸ’αž€αžΎαžαž€αŸ’αžšαž»αž˜ Nomad

αž…αžΌαžšαž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αŸ” αž‘αŸ„αŸ‡αž”αžΈαž‡αžΆαž€αžΆαžšαžšαŸ€αž”αž…αŸ†αž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŸαžΆαž˜αž‰αŸ’αž‰αž€αŸαžŠαŸ„αž™ αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž–αžŽαŸŒαž“αžΆαž’αŸ†αž–αžΈαžœαžΆαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž—αžΆαž–αžŸαž»αž…αžšαž·αžαž“αŸƒαž’αžαŸ’αžαž”αž‘αŸ– αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αž™αŸ‰αžΆαž„αžŸαŸ†αžαžΆαž“αŸ‹αž–αžΈαžŸαŸαž…αž€αŸ’αžαžΈαž–αŸ’αžšαžΆαž„ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αž…αŸ†αžŽαžΆαŸ†αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž€αžΆαžšαž…αžΌαž›αž”αŸ’αžšαžΎαžšαž αŸαžŸαž“αŸ…αž–αŸαž›αž…αžΆαŸ†αž”αžΆαž…αŸ‹αŸ”

αž˜αž»αž“αž–αŸαž›αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž’αž“αž»αžœαžαŸ’αž αž™αžΎαž„αž“αžΉαž„αž–αž·αž—αžΆαž€αŸ’αžŸαžΆαž•αŸ’αž“αŸ‚αž€αž‘αŸ’αžšαžΉαžŸαŸ’αžαžΈ αž–αžΈαž–αŸ’αžšαŸ„αŸ‡αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸαŸ‡ αžœαžΆαž˜αžΆαž“αžŸαžΆαžšαŸˆαžŸαŸ†αžαžΆαž“αŸ‹αžŽαžΆαžŸαŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž™αž›αŸ‹αžŠαžΉαž„αž’αŸ†αž–αžΈαžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž“αžΆαž–αŸαž›αž’αž“αžΆαž‚αžαŸ”

αž™αžΎαž„αž˜αžΆαž“αžαŸ’αž“αžΆαŸ†αž„αž–αžΈαžš αž αžΎαž™αž™αžΎαž„αž…αž„αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž–αž½αž€αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αž˜αž½αž™ αž αžΎαž™αž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αž αž™αžΎαž„αž€αŸαž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αžΆαžšαž’αŸ’αžœαžΎαž˜αžΆαžαŸ’αžšαžŠαŸ’αž‹αžΆαž“αž…αž„αŸ’αž€αŸ„αž˜αžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž·αž•αž„αžŠαŸ‚αžš - αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž‰αŸ’αž αžΆαž“αŸαŸ‡ αž™αžΎαž„αž“αžΉαž„αžαŸ’αžšαžΌαžœαž€αžΆαžšαž€αž»αž„αžŸαŸŠαž»αž›αŸ” αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž§αž”αž€αžšαžŽαŸαž“αŸαŸ‡ αž€αžΆαžšαžŠαžΆαž€αŸ‹αž…αž„αŸ’αž€αŸ„αž˜ αž“αž·αž„αž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αž“αžΆαŸ†αž„αžαŸ’αž˜αžΈαž€αŸ’αž›αžΆαž™αž‡αžΆαž€αž·αž…αŸ’αž…αž€αžΆαžšαžŠαŸαžŸαžΆαž˜αž‰αŸ’αž‰αž”αŸ†αž•αž»αžαŸ– αžαŸ’αž“αžΆαŸ†αž„ Nomad αžŠαŸ‚αž›αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž€αž»αž„αžŸαŸŠαž»αž› αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž—αŸ’αž‡αžΆαž”αŸ‹αž‘αŸ…αž…αž„αŸ’αž€αŸ„αž˜ Nomad αžŠαŸ‚αž›αž˜αžΆαž“αžŸαŸ’αžšαžΆαž”αŸ‹αŸ” αžŠαžΌαž…αŸ’αž“αŸαŸ‡αž“αŸ…αžŠαžΎαž˜αžŠαŸ†αž”αžΌαž„ αž™αžΎαž„αž“αžΉαž„αžŠαŸ†αž‘αžΎαž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž€αž»αž„αžŸαŸŠαž»αž› αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž http αž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αž“αŸ’αž‘αŸ‡αž”αžŽαŸ’αžαžΆαž‰ (αžœαžΆαž‚αŸ’αž˜αžΆαž“αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžαžΆαž˜αž›αŸ†αž“αžΆαŸ†αžŠαžΎαž˜ αž αžΎαž™αž’αžΆαž…αž…αžΌαž›αž”αŸ’αžšαžΎαž”αžΆαž“αžαžΆαž˜αž’αžΆαžŸαž™αžŠαŸ’αž‹αžΆαž“αžαžΆαž„αž€αŸ’αžšαŸ…) αž€αŸαžŠαžΌαž…αž‡αžΆαž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžšαž€αž»αž„αžŸαŸŠαž»αž›αžαŸ’αž›αž½αž“αž―αž„αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ Nomad αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡ αž™αžΎαž„αž“αžΉαž„αž”αž“αŸ’αžαž‘αŸ… 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

ថត bootstrap αž“αžΉαž„αž˜αžΆαž“αž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ 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"]
}

αžŸαžΌαž˜αž€αŸ’αžšαž‘αŸαž€αž˜αžΎαž›αž€αžΆαžšαžŽαŸ‚αž“αžΆαŸ†αžŸαŸ†αžαžΆαž“αŸ‹αŸ— αž“αž·αž„αž’αžαŸ’αžαž“αŸαž™αžšαž”αžŸαŸ‹αžœαžΆαžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆαŸ–

  • bootstrapαŸ– αž–αž·αžαŸ” αž™αžΎαž„αž”αžΎαž€αž€αžΆαžšαž”αž“αŸ’αžαŸ‚αž˜αžαŸ’αž“αžΆαŸ†αž„αžαŸ’αž˜αžΈαžŠαŸ„αž™αžŸαŸ’αžœαŸαž™αž”αŸ’αžšαžœαžαŸ’αžαž· αž”αŸ’αžšαžŸαž·αž“αž”αžΎαž–αž½αž€αžœαžΆαžαŸ’αžšαžΌαžœαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αŸ” αžαŸ’αž‰αž»αŸ†αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αžαžΆαž™αžΎαž„αž˜αž·αž“αž…αž„αŸ’αž’αž»αž›αž”αž„αŸ’αž αžΆαž‰αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž“αžΌαžœαž…αŸ†αž“αž½αž“αž–αž·αžαž”αŸ’αžšαžΆαž€αžŠαž“αŸƒαžαŸ’αž“αžΆαŸ†αž„αžŠαŸ‚αž›αžšαŸ†αž–αžΉαž„αž‘αž»αž€αž“αŸ„αŸ‡αž‘αŸαŸ”
  • αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž”αž˜αŸ’αžšαžΎαŸ– αž–αž·αžαŸ” αž”αžΎαž€αžšαž”αŸ€αž”αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ” αž€αž»αž„αžŸαŸŠαž»αž›αž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αžαž“αŸαŸ‡αž”αž…αŸ’αž…αž»αž”αŸ’αž”αž“αŸ’αž“αž“αžΉαž„αžŠαžΎαžšαžαž½αž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸ αž“αž·αž„αž˜αŸαžαŸ‚αž˜αž½αž™αž‚αžαŸ‹ VM αžšαž”αžŸαŸ‹ Nomad αž“αžΉαž„αž€αŸ’αž›αžΆαž™αž‡αžΆαž’αžαž·αžαž·αž‡αž“αŸ”
  • αž˜αž‡αŸ’αžˆαž˜αžŽαŸ’αžŒαž›β€‹αž‘αž·αž“αŸ’αž“αž“αŸαž™αŸ– dc1 αŸ” αž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžˆαŸ’αž˜αŸ„αŸ‡αž˜αž‡αŸ’αžˆαž˜αžŽαŸ’αžŒαž›αž‘αž·αž“αŸ’αž“αž“αŸαž™αžŠαžΎαž˜αŸ’αž”αžΈαž”αž„αŸ’αž€αžΎαžαž…αž„αŸ’αž€αŸ„αž˜αŸ” αžœαžΆαžαŸ’αžšαžΌαžœαžαŸ‚αžŠαžΌαž…αž‚αŸ’αž“αžΆαž”αŸαŸ‡αž”αž·αž‘αž‘αžΆαŸ†αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαŸ”
  • αž’αŸŠαž·αž“αž‚αŸ’αžšαžΈαž”αŸ– αž€αžΌαž“αžŸαŸ„αžšαž”αžŸαŸ‹αž’αŸ’αž“αž€αŸ” αž‚αž“αŸ’αž›αžΉαŸ‡αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαžαŸ‚αž˜αžΆαž“αžαŸ‚αž˜αž½αž™αž‚αžαŸ‹ αž“αž·αž„αžαŸ’αžšαžΌαžœαž‚αŸ’αž“αžΆαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœ αž“αž·αž„αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‘αžΆαŸ†αž„αž’αžŸαŸ‹αŸ” αž”αž„αŸ’αž€αžΎαžαžŠαŸ„αž™αž”αŸ’αžšαžΎαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαž€αž»αž„αžŸαŸŠαž»αž› 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 αŸ” αž“αŸαŸ‡αž“αžΉαž„αž˜αžΆαž“αž“αŸαž™αžαžΆαžœαžΆαž”αžΆαž“αž—αŸ’αž‡αžΆαž”αŸ‹αžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αž‘αŸ… cluster αž‡αžΆαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž—αŸ’αž‰αŸ€αžœαŸ” αž’αŸ’αžœαžΎαž˜αŸ’αžαž„αž‘αŸ€αžαžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž›αžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‘αžΈαž–αžΈαžš αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž“αŸ„αŸ‡αž™αžΎαž„αž’αžΆαž…αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ 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

αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž–αžΈαž€αžΆαžšαžœαŸαž…αžαŸ’αž…αž”αŸ‹ αž™αžΎαž„αž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž―αž€αžŸαžΆαžšαž‚αŸ„αž›αž–αžΈαžš Nomad αžŠαŸ‚αž›αž˜αžΆαž“αž‘αž˜αŸ’αž„αž“αŸ‹ 65 MB - αžœαžΆαžαŸ’αžšαžΌαžœαžαŸ‚αž•αŸ’αž›αžΆαžŸαŸ‹αž‘αžΈαž‘αŸ… /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

αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž™αžΎαž„αž˜αž·αž“αž”αŸ’αžšαž‰αžΆαž”αŸ‹αž”αŸ’αžšαž‰αžΆαž›αŸ‹αž€αŸ’αž“αž»αž„αž€αžΆαžšαž”αžΎαž€αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš nomad αž‘αŸ - αž™αžΎαž„αž˜αž·αž“αž‘αžΆαž“αŸ‹αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž―αž€αžŸαžΆαžšαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹αžœαžΆαž“αŸ…αž‘αžΎαž™αŸ–

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 αŸ”

αžšαžΏαž„αž…αž»αž„αž€αŸ’αžšαŸ„αž™αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž“αŸαŸ‡αž‚αžΊαž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’ Nginx αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž”αŸ’αžšαžΌαž€αžŸαŸŠαžΈ αž“αž·αž„αžŠαŸ†αž‘αžΎαž„αž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαž http αŸ” αžαŸ’αž›αžΉαž˜αžŸαžΆαžšαž“αŸƒαž―αž€αžŸαžΆαžš 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 cluster αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž»αž„αžŸαŸŠαž»αž› αž“αž·αž„αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™ Gitlab
αžšαžΌαž”αž—αžΆαž– ៑. αž”αž‰αŸ’αž‡αžΈαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜ Nomad

αž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž˜αŸαž‘αžΆαŸ†αž„αž–αžΈαžšαžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰αžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™αž“αŸ…αž€αŸ’αž“αž»αž„αž”αž“αŸ’αž‘αŸ‡ αž™αžΎαž„αž“αžΉαž„αžƒαžΎαž‰αžšαžΏαž„αžŠαžΌαž…αž‚αŸ’αž“αžΆαž“αŸ…αž€αŸ’αž“αž»αž„αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž– nomad nomad:

αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Nomad cluster αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž»αž„αžŸαŸŠαž»αž› αž“αž·αž„αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™ Gitlab
αžšαžΌαž”αž—αžΆαž– ៑. αž›αž‘αŸ’αž’αž•αž›αž“αŸƒαž–αžΆαž€αŸ’αž™αž”αž‰αŸ’αž‡αžΆαžŸαŸ’αžαžΆαž“αž—αžΆαž–αžαŸ’αž“αžΆαŸ†αž„ nomad

αž…αž»αŸ‡αž€αž»αž„αžŸαŸŠαž»αž›αžœαž·αž‰? αžαŸ„αŸ‡αž˜αžΎαž›αŸ” αž…αžΌαž›αž‘αŸ…αž€αžΆαž“αŸ‹αž•αŸ’αž‘αžΆαŸ†αž„αž”αž‰αŸ’αž‡αžΆαž€αž»αž„αžŸαŸŠαž»αž›αž‘αŸ…αž€αžΆαž“αŸ‹αž‘αŸ†αž–αŸαžšαžαŸ’αž“αžΆαŸ†αž„αŸ–
αž€αžΆαžšαžŠαŸ†αž‘αžΎαž„ Nomad cluster αžŠαŸ„αž™αž”αŸ’αžšαžΎαž€αž»αž„αžŸαŸŠαž»αž› αž“αž·αž„αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™ Gitlab
αžšαžΌαž”αž—αžΆαž– ៑. αž”αž‰αŸ’αž‡αžΈαžαŸ’αž“αžΆαŸ†αž„αž“αŸ…αž€αŸ’αž“αž»αž„αž…αž„αŸ’αž€αŸ„αž˜αž€αž»αž„αžŸαŸŠαž»αž›

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αž™αžΎαž„αž˜αžΆαž“ Nomad αžŠαŸ‚αž›αžαŸ’αžšαŸ€αž˜αžšαž½αž…αž‡αžΆαžŸαŸ’αžšαŸαž… αžŠαŸ‚αž›αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αž€αž»αž„αžŸαŸŠαž»αž›αŸ” αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž…αž»αž„αž€αŸ’αžšαŸ„αž™ αž™αžΎαž„αž“αžΉαž„αž‘αŸ…αžŠαž›αŸ‹αž•αŸ’αž“αŸ‚αž€αžŠαŸαžšαžΈαž€αžšαžΆαž™αŸ– αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαžŠαžΉαž€αž‡αž‰αŸ’αž‡αžΌαž“ Docker containers αž–αžΈ Gitlab αž‘αŸ…αž€αžΆαž“αŸ‹ Nomad αž αžΎαž™αž€αŸαž“αž·αž™αžΆαž™αž’αŸ†αž–αžΈαž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž”αŸ’αž›αŸ‚αž€αž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžšαž”αžŸαŸ‹αžœαžΆαž•αž„αžŠαŸ‚αžšαŸ”

αž”αž„αŸ’αž€αžΎαž Gitlab Runner

αžŠαžΎαž˜αŸ’αž”αžΈαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αžšαžΌαž”αž—αžΆαž– docker αž‘αŸ… Nomad αž™αžΎαž„αž“αžΉαž„αž”αŸ’αžšαžΎαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαžšαžαŸ‹αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αžŠαŸ‚αž›αž˜αžΆαž“αž―αž€αžŸαžΆαžšαž‚αŸ„αž›αž–αžΈαžš Nomad αž“αŸ…αžαžΆαž„αž€αŸ’αž“αž»αž„ (αžŠαŸ„αž™αžœαž·αž’αžΈαž“αŸαŸ‡ αž™αžΎαž„αž’αžΆαž…αž€αžαŸ‹αžŸαž˜αŸ’αž‚αžΆαž›αŸ‹αž›αž€αŸ’αžαžŽαŸˆαž–αž·αžŸαŸαžŸαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαž“αŸƒαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Hashicorp - αžŠαžΆαž…αŸ‹αžŠαŸ„αž™αž‘αŸ‚αž€αž–αžΈαž‚αŸ’αž“αžΆαžœαžΆαž‡αžΆαž―αž€αžŸαžΆαžšαž‚αŸ„αž›αž–αžΈαžšαžαŸ‚αž˜αž½αž™) αŸ” αž”αž„αŸ’αž αŸ„αŸ‡αžœαžΆαž‘αŸ…αž€αŸ’αž“αž»αž„αž”αž‰αŸ’αž‡αžΈαžˆαŸ’αž˜αŸ„αŸ‡αž’αŸ’αž“αž€αžšαžαŸ‹αŸ” αžαŸ„αŸ‡αž”αž„αŸ’αž€αžΎαž Dockerfile αžŸαžΆαž˜αž‰αŸ’αž‰αž˜αž½αž™αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžœαžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž˜αžΆαžαž·αž€αžΆαžŠαžΌαž…αžαžΆαž„αž€αŸ’αžšαŸ„αž˜αŸ–


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 runner αžŠαŸ‚αž›αž’αžΆαž…αžšαž€αž”αžΆαž“αž“αŸ…αž€αŸ’αž“αž»αž„ Gitlab Registry αž₯αž‘αžΌαžœαž“αŸαŸ‡αž™αžΎαž„αž’αžΆαž…αž‘αŸ…αž€αžΆαž“αŸ‹αžƒαŸ’αž›αžΆαŸ†αž„αž‚αž˜αŸ’αžšαŸ„αž„αžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹ αž”αž„αŸ’αž€αžΎαž Pipeline αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αž€αžΆαžšαž„αžΆαžš Nomad αžšαž”αžŸαŸ‹ 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

αž“αŸ…αž‘αžΈαž“αŸαŸ‡αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™αžŠαŸƒ αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž’αŸ’αž“αž€αž’αžΆαž…αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžœαžΆαžŠαžΎαž˜αŸ’αž”αžΈαž•αŸ’αž›αžΆαžŸαŸ‹αž”αŸ’αžαžΌαžšαž˜αžΆαžαž·αž€αžΆαž“αŸƒαžαžαž‚αž˜αŸ’αžšαŸ„αž„αŸ” αž”αŸ†αž–αž„αŸ‹αž”αž„αŸ’αž αžΌαžšαž”αŸ’αžšαŸαž„αž˜αžΆαž“αž–αžΈαžšαžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αŸ– αž€αžΆαžšαž•αŸ’αž‚αž»αŸ†αžšαžΌαž”αž—αžΆαž– αž“αž·αž„αž€αžΆαžšαžŠαžΆαž€αŸ‹αž–αž„αŸ’αžšαžΆαž™αžœαžΆαž‘αŸ…αž˜αž“αž»αžŸαŸ’αžŸαŸ” αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αžŠαŸ†αž”αžΌαž„ αž™αžΎαž„αž”αŸ’αžšαž˜αžΌαž›αž•αŸ’αžαž»αŸ†αžšαžΌαž”αž—αžΆαž– docker αž αžΎαž™αžšαž»αž‰αžœαžΆαž…αžΌαž›αž‘αŸ…αž€αŸ’αž“αž»αž„ Registry αžšαž”αžŸαŸ‹αž™αžΎαž„ αž αžΎαž™αž“αŸ…αžŠαŸ†αžŽαžΆαž€αŸ‹αž€αžΆαž›αž‘αžΈαž–αžΈαžš αž™αžΎαž„αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž€αžΆαžšαž„αžΆαžšαžšαž”αžŸαŸ‹αž™αžΎαž„αž“αŸ… 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" {}
                }
            }
        }
    }
}

αžŸαžΌαž˜αž…αŸ†αžŽαžΆαŸ†αžαžΆ αžαŸ’αž‰αž»αŸ†αž˜αžΆαž“ Registry αž―αž€αž‡αž“αž˜αž½αž™ αž αžΎαž™αžŠαžΎαž˜αŸ’αž”αžΈαž‘αžΆαž‰αž™αž€αžšαžΌαž”αž—αžΆαž– docker αžŠαŸ„αž™αž‡αŸ„αž‚αž‡αŸαž™ αžαŸ’αž‰αž»αŸ†αžαŸ’αžšαžΌαžœαž…αžΌαž›αž‘αŸ…αžœαžΆαŸ” αžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αžŠαŸαž›αŸ’αž’αž”αŸ†αž•αž»αžαž€αŸ’αž“αž»αž„αž€αžšαžŽαžΈαž“αŸαŸ‡αž‚αžΊαž”αž‰αŸ’αž…αžΌαž›αž€αžΆαžšαž…αžΌαž› αž“αž·αž„αž–αžΆαž€αŸ’αž™αžŸαž˜αŸ’αž„αžΆαžαŸ‹αž‘αŸ…αž€αŸ’αž“αž»αž„ Vault αž αžΎαž™αž”αž“αŸ’αž‘αžΆαž”αŸ‹αž˜αž€αž”αž‰αŸ’αž…αžΌαž›αžœαžΆαž‡αžΆαž˜αž½αž™ Nomad αŸ” Nomad αž˜αžΆαž“αžŠαžΎαž˜αž€αŸ†αžŽαžΎαžαž‚αžΆαŸ†αž‘αŸ’αžš Vault αŸ” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž‡αžΆαžŠαŸ†αž”αžΌαž„ αž…αžΌαžšαž™αžΎαž„αžŠαŸ†αž‘αžΎαž„αž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž…αžΆαŸ†αž”αžΆαž…αŸ‹αžŸαž˜αŸ’αžšαžΆαž”αŸ‹ Nomad αž“αŸ…αž€αŸ’αž“αž»αž„ Vault αžαŸ’αž›αž½αž“αžœαžΆ αž–αž½αž€αž‚αŸαž’αžΆαž…αž‘αžΆαž‰αž™αž€αž”αžΆαž“αŸ–

# 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

αž₯αž‘αžΌαžœαž“αŸαŸ‡ αžŠαŸ„αž™αž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‚αŸ„αž›αž€αžΆαžšαžŽαŸαž…αžΆαŸ†αž”αžΆαž…αŸ‹ αž™αžΎαž„αž“αžΉαž„αž”αž“αŸ’αžαŸ‚αž˜αž€αžΆαžšαžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαž˜αž½αž™ Vault αž“αŸ…αž€αŸ’αž“αž»αž„αž”αŸ’αž›αž»αž€αž€αž·αž…αŸ’αž…αž€αžΆαžšαž€αŸ’αž“αž»αž„αž―αž€αžŸαžΆαžš job.nomadαŸ–

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

αžαŸ’αž‰αž»αŸ†αž”αŸ’αžšαžΎαž€αžΆαžšαž’αž“αž»αž‰αŸ’αž‰αžΆαžαžŠαŸ„αž™αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹ αž αžΎαž™αž…αž»αŸ‡αžˆαŸ’αž˜αŸ„αŸ‡αžœαžΆαžŠαŸ„αž™αž•αŸ’αž‘αžΆαž›αŸ‹αž“αŸ…αž‘αžΈαž“αŸαŸ‡ αžœαžΆαž€αŸαž˜αžΆαž“αž‡αž˜αŸ’αžšαžΎαžŸαž“αŸƒαž€αžΆαžšαž”αž‰αŸ’αž‡αžΆαž€αŸ‹αžŸαž‰αŸ’αž‰αžΆαžŸαž˜αŸ’αž„αžΆαžαŸ‹αž‡αžΆαž’αžαŸαžšαž“αŸ…αž–αŸαž›αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αž—αŸ’αž“αžΆαž€αŸ‹αž„αžΆαžš nomadαŸ–

$ 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 αž αžΎαž™αž’αŸ’αžœαžΎαž€αžΆαžšαž‡αžΆαž˜αž½αž™αžœαžΆαž“αžΆαž–αŸαž›αž’αž“αžΆαž‚αžαŸ” αžαŸ’αž‰αž»αŸ†αž“αžΉαž„αž“αž·αž™αžΆαž™αžαžΆαž€αŸ’αž“αž»αž„αž€αž˜αŸ’αžšαž·αžαžŽαžΆαž˜αž½αž™αžŠαŸ‚αž›αžαŸ’αž‰αž»αŸ†αž’αžΆαžŽαž·αž Nomad - αžœαžΆαž€αžΆαž“αŸ‹αžαŸ‚αžŸαž˜αžŸαŸ’αžšαž”αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž‚αž˜αŸ’αžšαŸ„αž„αžαžΌαž…αŸ—αžŠαŸ‚αž› Kubernetes αž’αžΆαž…αž”αž„αŸ’αž€αž±αŸ’αž™αž˜αžΆαž“αž—αžΆαž–αžŸαŸ’αž˜αž»αž‚αžŸαŸ’αž˜αžΆαž‰αž”αž“αŸ’αžαŸ‚αž˜ αž αžΎαž™αž“αžΉαž„αž˜αž·αž“αžŠαžΉαž„αž–αžΈαžŸαž€αŸ’αžαžΆαž“αž»αž–αž›αž–αŸαž‰αž›αŸαž‰αžšαž”αžŸαŸ‹αžœαžΆαŸ” αž›αžΎαžŸαž–αžΈαž“αŸαŸ‡ Nomad αž‚αžΊαž›αŸ’αž’αž₯αžαžαŸ’αž…αŸ„αŸ‡αžŸαž˜αŸ’αžšαžΆαž”αŸ‹αž’αŸ’αž“αž€αž…αžΆαž”αŸ‹αž•αŸ’αžαžΎαž˜αžŠαŸ†αž”αžΌαž„ αž„αžΆαž™αžŸαŸ’αžšαž½αž›αžŠαŸ†αž‘αžΎαž„ αž“αž·αž„αž€αŸ†αžŽαžαŸ‹αžšαž…αž“αžΆαžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αž“αŸ…αž–αŸαž›αžŸαžΆαž€αž›αŸ’αž”αž„αž›αžΎαž‚αž˜αŸ’αžšαŸ„αž„αž˜αž½αž™αž…αŸ†αž“αž½αž“ αžαŸ’αž‰αž»αŸ†αž‡αž½αž”αž”αŸ’αžšαž‘αŸ‡αž”αž‰αŸ’αž αžΆαž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αŸ†αžŽαŸ‚αžŠαŸ†αž”αžΌαž„αžšαž”αžŸαŸ‹αžœαžΆ - αž˜αž»αžαž„αžΆαžšαž‡αžΆαž˜αžΌαž›αžŠαŸ’αž‹αžΆαž“αž‡αžΆαž…αŸ’αžšαžΎαž“αž˜αž·αž“αž˜αžΆαž“αž“αŸ…αž‘αžΈαž“αŸ„αŸ‡ αž¬αžœαžΆαž˜αž·αž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αžšαžΉαž˜αžαŸ’αžšαžΌαžœαŸ” αž‘αŸ„αŸ‡αž‡αžΆαž™αŸ‰αžΆαž„αžŽαžΆαž€αŸαžŠαŸ„αž™ αžαŸ’αž‰αž»αŸ†αž‡αžΏαž‡αžΆαž€αŸ‹αžαžΆ Nomad αž“αžΉαž„αž”αž“αŸ’αžαž’αž—αž·αžœαžŒαŸ’αž αž αžΎαž™αž“αŸ…αž–αŸαž›αž’αž“αžΆαž‚αž αžœαžΆαž“αžΉαž„αž‘αž‘αž½αž›αž”αžΆαž“αž“αžΌαžœαž˜αž»αžαž„αžΆαžšαžŠαŸ‚αž›αž˜αž“αž»αžŸαŸ’αžŸαž‚αŸ’αžšαž”αŸ‹αž‚αŸ’αž“αžΆαžαŸ’αžšαžΌαžœαž€αžΆαžšαŸ”

αž’αŸ’αž“αž€αž“αž·αž–αž“αŸ’αž’αŸ– Ilya Andreev αž€αŸ‚αžŸαž˜αŸ’αžšαž½αž›αžŠαŸ„αž™ Alexey Zhadan αž“αž·αž„αž€αŸ’αžšαž»αž˜ Live Linux


αž”αŸ’αžšαž—αž–: www.habr.com

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹