ืืงืืื
ืืขืฆืื ืก, ืื ืคึผืึธืคึผืืืึทืจืืืขื ืคืื Kubernetes ืืื ืจืึทืคึผืึทืืื ืืจืึธืืื ื - ืืขืจ ืืื ืืขืจ ืคึผืจืึทืืืฉืขืงืก ืืืคึผืืึทืืขื ืื ื ืขืก. ืืื ืืึธื ืืขืืืึธืื ืึธื ืจืืจื ืึทื ืึธืจืงืขืกืืจืึทืืึธืจ ืืื Nomad: ืขืก ืืื ืืื ืฅ ืคึฟืึทืจ ืคึผืจืึทืืืฉืขืงืก ืืืึธืก ื ืืฆื ืฉืืื ืื ืืขืจืข ืกืึทืืืฉืึทื ื ืคืื HashiCorp, ืืืฉื, Vault ืืื Consul, ืืื ืื ืคึผืจืึทืืืฉืขืงืก ืืื ืืขื ืขื ื ืืฉื ืงืึธืืคึผืืืฆืืจื ืืื ืืขืจืืื ืขื ืคืื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ. ืืขืจ ืืึทืืขืจืืึทื ืืืขื ืึทื ืืืึทืืื ืืื ืกืืจืืงืฆืืขืก ืคึฟืึทืจ ืื ืกืืึธืืื ื ื ืึธืืึทื, ืงืึทืืืืื ืื ื ืฆืืืื ื ืึธืืื ืืื ืึท ืงื ืืื, ืืื ืื ืืึทืืจืืืืื ื ื ืึธืืึทื ืืื ืืืืืึทื.
ืืขืกื ืฉืืืื
ื ืืืกื ืืืขืื ืื ืคึผืจืึธืืข ืืึทื ืง: ืืจืื ืืืืจืืืึทื ืกืขืจืืืขืจืก ืืขื ืขื ืืขื ืืฆื ืืื ืื ืงืขืจืึทืงืืขืจืืกืืืงืก ืคืื 2 ืงืคึผื, 4 ืืึทืจืึทื, 50 ืื ืกืกื, ืคึฟืึทืจืืืื ืืงืืข ืืื ืึท ืคึผืจืึธืกื ืืืืข ื ืขืฅ. ืืืืขืจ ื ืขืืขื ืืื IP ืึทืืจืขืกืขืก:
- nomad-livelinux-01: ืงืกื ืืืงืก
- nomad-livelinux-02: ืงืกื ืืืงืก
- consul-livelinux-01: ืงืกื ืืืงืก
ืื ืกืืึทืืืจืื ื ืคืื ื ืึธืืึทื, ืงืึธื ืกืื. ืฉืึทืคึฟื ืึท ื ืึธืืึทื ืงื ืืื
ืืื ืก ืึธื ืืืืื ืืื ืื ืืงืขืจืืืง ืื ืกืืึทืืืจืื ื. ืืึธืืฉ ืื ืกืขืืึทืคึผ ืืื ืคึผืฉืื, ืืื ืืืขื ืืึทืฉืจืืึทืื ืขืก ืคึฟืึทืจ ืื ืึธืจื ืืืขืืงืืึทื ืคืื ืืขื ืึทืจืืืงื: ืขืก ืืื ืืขืืืขื ืืกืขื ืฉืึทืื ืืืฉืืคื ืคึฟืื ืืจืึทืคืฅ ืืื ืืขืจืืช ืคึฟืึทืจ ืฉื ืขื ืึทืงืกืขืก ืืืขื ืืืจืฃ.
ืืืืืขืจ ืืืจ ืึธื ืืืืื ืคืืจ, ืืืจ ืืืขืื ืืืกืงืืืืจื ืื ืืขืึธืจืขืืืฉ ืืืื, ืืืืึทื ืืื ืืขื ืืื ืข ืขืก ืืื ืืืืืืืง ืฆื ืคึฟืึทืจืฉืืืื ืื ืฆืืงืื ืคึฟื ืกืืจืืงืืืจ.
ืืืจ ืืึธืื ืฆืืืื ื ืึธืืืึทื ื ืึธืืื ืืื ืืืจ ืืืืื ืฆื ืคืึทืจืืื ืื ืืื ืืื ืึท ืงื ืืื, ืืื ืืื ืืขืจ ืฆืืงืื ืคึฟื ืืืจ ืืืขืื ืืืื ืืึทืจืคึฟื ืึธืืึทืืึทืืืง ืงื ืืื ืกืงืืืืื ื - ืคึฟืึทืจ ืืขื ืืืจ ืืึทืจืคึฟื ืงืึธื ืกืื. ืืื ืืขื ืืขืฆืืึทื, ืงืืึทืกืืขืจืื ื ืืื ืึทืืื ื ื ืืึท ื ืึธืืื ืืืขืจื ืึท ืืืืขืจ ืคึผืฉืื ืึทืจืืขื: ืื ืืืฉืืคื ื ืึธืืึทื ื ืึธืืข ืงืึทื ืขืงืฅ ืฆื ืื ืงืึธื ืกืื ืึทืืขื ื ืืื ืืขืจื ืึธื ืงืึทื ืขืงืฅ ืฆื ืื ืืืืืกืืื ื ื ืึธืืึทื ืงื ืืื. ืืขืจืืืขืจ, ืืื ืื ืึธื ืืืื ืืืจ ืืืขืื ืื ืกืืึทืืืจื ืื ืงืึธื ืกืื ืกืขืจืืืขืจ, ืงืึทื ืคืืืืขืจ ืืงืขืจืืืง 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/
ืืืฆื ืืืจ ืืึธืื ืึท ืคืึทืจืืืง ืงืึธื ืกืื ืืืื ืขืจื ืคึฟืึทืจ ืืืืึทืืขืจ ืงืึทื ืคืืืืขืจืืืฉืึทื.
ืฆื ืึทืจืืขืื ืืื ืงืึธื ืกืื, ืืืจ ืืึทืจืคึฟื ืฆื ืฉืึทืคึฟื ืึท ืืื ืฆืืง ืฉืืืกื ืืื ืื ืงืืืืขื ืืึทืคึฟืขื:
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 ืคืื Nomad ืืืขื ืืืื ืื ืงืืืืึทื ืฅ.
- datacenter: dc1. ืกืคึผืขืฆืืคืืฆืืจื ืื ื ืึธืืขื ืคืื ืื ืืึทืื ืฆืขื ืืขืจ ืฆื ืฉืึทืคึฟื ืืขื ืงื ืืื. ืขืก ืืืื ืืืื ืืืืขื ืืงืึทื ืืืืฃ ืืืืืข ืงืืืืึทื ืฅ ืืื ืกืขืจืืืขืจืก.
- ืขื ืงืจืืคึผื: ืืืื ืฉืืืกื. ืืขืจ ืฉืืืกื, ืืืึธืก ืืืื ืืืื ืืืื ืืื ืฆืืง ืืื ืืืืึทืื ืืืืฃ ืึทืืข ืงืืืืึทื ืฅ ืืื ืกืขืจืืืขืจืก. ืืืฉืขื ืขืจืืืืึทื ืืื ืื ืงืึธื ืกืื ืงืืืืขื ืืึทืคึฟืขื.
- 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
ืงืึทืืขืจ ืงืึธื ืกืื ืืืจื 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 ืืื ืืึทืฉืืขืืืงื ืคึผืจืึทืงืกืืกืื ื ืืื ืืืืคึผ ืืขืจืืืืืขื ืืฉ. ืืืจ ืื ืกืืึทืืืจื 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 ืืขืงืข ืืื ืืืฉืขื ืขืจืืื ืึท ื ืืืขื ืืื ืคึผืึทืจืึธื ืคึฟืึทืจ ืขืก. ืืขืจ ื ืืืขืจ ืืื ืคืืจืืื ืื ืึทืืื ืึทื ืื ืืืขื ืืึทืคืืืข ืืื ื ืื ืืืจืขืืืืื ืคึฟืึทืจ ืึทืืขืืขื ืืืืก ืงืขื ืืื ืืืขืจ ืคืขืื. ืึธืืขืจ, ืืืขื ืืืจ ืฉืืขืื ืึทืจืืืฃ ืืืืืึทื, ืืืจ ืืืขืื ืืึธืื ืฆื ืคืึทืจืืึธืื ืืขื - ืึทื ืืขืจืฉ ืืืจ ืืืขืื ื ืืฉื ืงืขื ืขื ืฆื ืฆืขืืืืงืืขื ืืื ืืืขืจ ืึทืคึผืืึทืงืืืฉืึทื ืฆื 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 ืืขืืืืืืื - ืขืก ืืืื ืืืื ืืจืืืขืจืืขืคืืจื ืฆื /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
}
ืื ืืืืกื ื ืืฉื ืคืึทืจืืขืกื ืฆื ืืืืฉื ืื ืงืึทื ืคืืืืขืจืืืฉืึทื ืืขืงืข ืืืืฃ ืื ืจืืข ืกืขืจืืืขืจ - ืืึธืจื ืืืจ ืืืขื ืืึทืจืคึฟื ืฆื ืืืืฉื ืื ืืืขืจื ืคืื ืื ืืืืคึผ ืืืจืขืงืืืื.
ืื ืืขืฆืืข ืืึทื ืืื ืืขื ืืื ืข ืืื ืฆื ืงืึทื ืคืืืืขืจ Nginx ืคึฟืึทืจ ืคึผืจืึทืงืกืืื ื ืืื ืืึทืฉืืขืืืงื ืืืืคึผ ืืขืจืืืืืขื ืืฉ. ืืื ืืึทืื ืคืื ืื nomad.conf ืืขืงืข:
upstream nomad-auth {
server 172.30.0.5:4646;
}
server {
server_name nomad.domain.name;
location / {
proxy_pass http://nomad-auth;
proxy_set_header Host $host;
auth_basic_user_file /etc/nginx/.htpasswd;
auth_basic "Password-protected Area";
}
}
ืืืฆื ืืืจ ืงืขื ืขื ืึทืงืกืขืก ืื ืืืขื ืืึทืคืืืข ืืืจื ืึท ืคืื ืืจืืืกื ืืืง ื ืขืฅ. ืคืึทืจืืื ืื ืืื ืืืื ืฆื ืื ืกืขืจืืืขืจืก ืืืึทื:
ืืืื 1. ืจืฉืืื ืคืื ืกืขืจืืืขืจืก ืืื ืื ื ืึธืืึทื ืงื ืืื
ืืืืืข ืกืขืจืืืขืจืก ืืขื ืขื ืืฆืืื ืืขืืืืื ืืื ืื ืืึทืคืืืข, ืืืจ ืืืขืื ืืขื ืื ืืขืืืข ืืึทื ืืื ืืขืจ ืจืขืืืืืึทื ืคืื ืื ื ืึธืืืึทื ื ืึธืืข ืกืืึทืืืก ืืึทืคึฟืขื:
ืืืื 2. ืจืขืืืืืึทื ืคืื ืื ื ืึธืืืึทื ื ืึธืืข ืกืืึทืืืก ืืึทืคึฟืขื
ืืืึธืก ืืืขืื ืงืึธื ืกืื? ืืื ืก ืืึทืงืืืขื ืึท ืงืืง. ืืืื ืฆื ืื ืงืึทื ืกืึทื ืงืึธื ืืจืึธื ืืึทืคืืืข ืฆื ืื ื ืึธืืื ืืืึทื:
ืืืื 3. ืจืฉืืื ืคืื ื ืึธืืื ืืื ืื ืงืึธื ืกืื ืงื ืืื
ืืืฆื ืืืจ ืืึธืื ืึท ืฆืืืขืืจืืื ื ืึธืืึทื ืืจืืขืื ืืื ืงืึทื ืืืฉืึทื ืืงืฉืึทื ืืื ืงืึธื ืกืื. ืืื ืื ืืขืฆืืข ืืื ืข, ืืืจ ืืืขืื ืืึทืงืืืขื ืฆื ืืขื ืฉืคึผืึทืก ืืืื: ืืึทืฉืืขืืืงื ืื ืขืงืกืคึผืจืขืก ืคืื ืืึธืงืงืขืจ ืงืึทื ืืืื ืขืจื ืคึฟืื Gitlab ืฆื Nomad, ืืื ืืืื ืจืขืื ืืืขืื ืขืืืขืืข ืคืื โโโโืื ืื ืืขืจืข ืึธืคึผืฉืืืื ืืืง ืคึฟืขืึดืงืืืื.
ืฉืึทืคึฟื ืืืืืึทื ืจืึทื ืขืจ
ืฆื ืฆืขืืืืงืืขื ืืึธืงืงืขืจ ืืืืืขืจ ืฆื 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}
ืืื ืึท ืจืขืืืืืึทื, ืืืจ ืืืขืื ืืึธืื ืึท ืื ืืืฆื ืืืื ืคืื ืื ื ืึธืืึทื ืจืึทื ืขืจ ืืื ืื ืืืืืึทื ืจืขืืืกืืจื, ืืืฆื ืืืจ ืงืขื ืขื ืืืื ืืืืึทื ืฆื ืื ืคึผืจืืืขืงื ืจืืคึผืึทืืึทืืึธืจื, ืฉืึทืคึฟื ืึท ืจืขืจื - ืืื ืืข ืืื ืงืึทื ืคืืืืขืจ ืื ื ืึธืืึทื ืึทืจืืขื.
ืคึผืจืึธืืขืงื ืกืขืืึทืคึผ
ืืึธืืืจ ืึธื ืืืืื ืืื ืื ืึทืจืืขื ืืขืงืข ืคึฟืึทืจ ื ืึธืืึทื. ืืืึทื ืคึผืจืืืขืงื ืืื ืืขื ืึทืจืืืงื ืืืขื ืืืื ืืึทื ืฅ ืคึผืจืืืืืืื: ืขืก ืืืขื ืฆืื ืืืคืฉืืขืื ืืื ืคืื ืืืื ืึทืจืืขื. ืืขืจ ืืื ืืึทืื ืคืื .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
}
ืืื ืืขื ืคึผืฉืื ืฆืืืึทื ื, ืืืจ ืงืขื ืขื ืงืึทื ืคืืืืขืจ ืื ืขืงืกืคึผืจืขืก ืคืื ืงืึทื ืืืื ืขืจื ืฆื ืื ื ืึธืืึทื ืงื ืืื ืืื ืึทืจืืขื ืืื ืืื ืืื ืืขืจ ืฆืืงืื ืคึฟื. ืืื ืืืขื ืืึธืื ืึทื ืืื ืขืืืขืืข ืืึธืก ืืื ืกืืืคึผืึทืืืื ืืื ื ืึธืืึทื - ืขืก ืืื ืืขืจ ืคึผืึทืกืืง ืคึฟืึทืจ ืงืืืื ืคึผืจืึทืืืฉืขืงืก ืืื ืงืืืขืจื ืขืืขืก ืงืขื ืขื ืึธื ืืึทืื ื ืึธื ืงืึทืืคึผืืขืงืกืืื ืืื ืืืขื ื ืืฉื ืคืึทืจืฉืืืื ืืืึทื ืคืื ืคึผืึธืืขื ืฆืืขื. ืคึผืืืก, Nomad ืืื ืืื ืฅ ืคึฟืึทืจ ืืืืื ืขืจื - ืขืก ืืื ืืจืื ื ืฆื ืื ืกืืึทืืืจื ืืื ืงืึทื ืคืืืืขืจ. ืึธืืขืจ, ืืืขื ืืขืกืืื ื ืืืืฃ ืขืืืขืืข ืคึผืจืึทืืืฉืขืงืก, ืืื ืืจืขืคื ืึท ืคึผืจืึธืืืขื ืืื ืืืึทื ืคืจื ืืืขืจืกืืขืก - ืคืืืข ืืงืขืจืืืง ืคืึทื ืืงืฉืึทื ื ืืขื ืขื ืคืฉืื ื ืืฉื ืืึธืจื ืึธืืขืจ ืืื ืืึธื ื ืืฉื ืึทืจืืขืื ืจืืืืืง. ืึธืืขืจ, ืืื ืืืืืื ืึทื Nomad ืืืขื ืคืึธืจืืขืฆื ืฆื ืึทื ืืืืืงืืขื ืืื ืืื ืืขืจ ืฆืืงืื ืคึฟื ืขืก ืืืขื ืงืจืืื ืื ืคืึทื ืืงืฉืึทื ื ืืืึธืก ืึทืืขืืขื ืืึทืจืฃ.
ืืืืจ: Ilya Andreev, ืขืืืืื ืืืจื ืึทืืขืงืกืื ืืฉืึทืืึทื ืืื ืื ืืืืื ืืื ืืงืก ืืึทื ืฉืึทืคึฟื
ืืงืืจ: www.habr.com