áááá«ááºáž
áááŒá¬áá±ážáá®áá Kubernetes ááá±áááºážá á¬ážááŸá¯ááẠáá»ááºááŒááºá áœá¬ááŒá®ážááœá¬ážáá¬ááẠ- ááá±á¬áá»ááºáá»á¬ážá áááºážááᯠá¡áááºááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºáá±áá«áááºá Nomad áá²á·ááá¯á· áá¶á á¯á¶áá®ážááá¯ááºážááᯠááááœá±á·áá»ááºáá«áááº- Vault ááŸáá·áº Consul áá²á·ááá¯á·áá±á¬ HashiCorp á០á¡ááŒá¬ážáá±á¬ ááŒá±ááŸááºážáááºážáá»á¬ážááᯠá¡áá¯á¶ážááŒá¯ááŒá®ážáá±á¬ ááá±á¬áá»ááºáá»á¬ážá¡ááœáẠááŒá®ážááŒáá·áºá á¯á¶ááŒá®áž á á®áá¶ááááºážáá»á¬ážááẠá¡ááŒá±áá¶á¡áá±á¬ááºá¡á¡á¯á¶ááá¯ááºáᬠááŸá¯ááºááœá±ážááŸá¯áááŸááá«á á€áá á¹á ááºážááẠNomad ááŸá áºáá¯ááᯠá¡á á¯á¡áá±ážáá áºáá¯á¡ááŒá Ạáá±á«ááºážá ááºážáᬠNomad ááᯠGitlab ááŸáá·áº áá±á«ááºážá ááºážáááºá¡ááœáẠááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááᯠáá±ážáá«áááá·áºáááºá
á ááºážáááºááŸá¯áááº
á ááºážáááºáá¯á¶áááºážáá»á¬ážá¡ááŒá±á¬ááºáž á¡áááºážáááº- CPU 2 áá¯á RAM 4 áá¯á 50 Gb SSD áááá¹ááá¬áá»á¬ážáá«ááŸááá±á¬ virtual server áá¯á¶ážáá¯ááᯠáá¯á¶áá±ááá¶ááœááºáááºáá áºáá¯ááœáẠá á¯á ááºážá¡áá¯á¶ážááŒá¯áá¬ážáááºá áááºážááá¯á·áá¡áááºáá»á¬ážááŸáá·áº IP ááááºá á¬áá»á¬áž-
- nomad-livelinux-01: 172.30.0.5
- nomad-livelinux-02: 172.30.0.10
- áá±á¬ááºá á áºáááº-livelinux-01: 172.30.0.15
Nomad, Consul áááºáááºááŒááºážá Nomad Cluster áááºáá®ážááŒááºážá
á¡ááŒá±áá¶ááá·áºááœááºážááŸá¯ááŒáá·áºá ááŒáá«á áá¯á·á áááºáááºáááœááºáá°áá±á¬áºáááºážá áá±á¬ááºážáá«ážáááá¯ááºáá¬ááŸá¯ááá¯áá±á¬ááºá áááºážá¡á¬áž áá»áœááºá¯ááºáá±á¬áºááŒáá«áááº- á¡ááŸááºááŸá¬á ááá¯á¡ááºááá·áºá¡áá«ááœáẠá¡ááŒááºáááºáá±á¬ááºááá¯ááºááẠáá°ááŒááºážáá»á¬ážááŸáá·áº ááŸááºá á¯áá»á¬ážá០áááºáá®ážáá¬ážáááºá
áááºááœá±á·ááá¯ááºáá±á¬ááºáá®á áá»áœááºá¯ááºááá¯á·ááẠáá®á¡áá¯áá®á¡ááá¯ááºážááᯠááœá±ážááœá±ážáááºááŒá áºáá±á¬ááŒá±á¬áá·áº á€á¡ááá·áºááœáẠá¡áá¬áááºááœá²á·á ááºážáá¯á¶ááᯠáá¬ážáááºááẠá¡áá±ážááŒá®ážáá«áááºá
áá»áœááºá¯ááºááá¯á·ááœáẠnomad node ááŸá áºáá¯ááŸáááŒá®áž áááºážááá¯á·ááᯠá¡á á¯á¡áá±ážáá áºáá¯á¡ááŒá Ạáá±á«ááºážá ááºááá¯áááºá ááá¯á·á¡ááŒáẠá¡áá¬áááºá¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠá¡á á¯á¡ááœá²á·á á¡ááá¯á¡áá»á±á¬áẠá¡ááá¯ááºážá¡áá¬ááᯠááá¯á¡ááºáááºááŒá áºááẠ- áááºážá¡ááœáẠáá»áœááºá¯ááºááá¯á·ááẠáá±á¬ááºá á áºááẠááá¯á¡ááºáá«áááºá á€áááááá¬ááŒáá·áºá nodes á¡áá áºáá»á¬ážááᯠá¡á á¯ááá¯ááºá¡ááŒá¯á¶ááá¯áẠáá±á«ááºážááá·áºááŒááºážááẠá¡ááœááºááá¯ážááŸááºážáá±á¬ á¡áá¯ááºááŒá áºáá¬áááº- áááºáá®ážáá¬ážáá±á¬ Nomad node ááẠáá±á¬ááºá á áºáááºá¡á±ážáá»áá·áºáá¶ááá¯á· áá»áááºáááºáááºá ááá¯á·áá±á¬áẠáááºážááẠáááºááŸá Nomad á¡á á¯á¡áá±ážááá¯á· áá»áááºáááºáááºá ááá¯á·ááŒá±á¬áá·áºá á¡á ááá¯ááºážááœáẠáá»áœááºá¯ááºááá¯á·ááẠConsul áá¬áá¬ááᯠááá·áºááœááºážááŒá®áž áááºá¡ááá·áºá¡ááœáẠá¡ááŒá±áᶠhttp ááœáá·áºááŒá¯áá»ááºá¡á¬áž ááŒááºáááºáááºááŸááºááẠ(áááºážááẠáá°áááºážááœáá·áºááŒá¯áá»ááºáááŸááá² ááŒááºáááááºá á¬ááœáẠáááºáá±á¬ááºááŒáá·áºááŸá¯ááá¯ááºáááº) ááŸáá·áº Nomad áá¬áá¬áá»á¬ážááœáẠáá±á¬ááºá á áºáááºá¡á±ážáá»áá·áºáá»á¬áž áááºážááá¯á·ááá¯ááºááá¯áẠáá¯ááºáá±á¬ááºááŒá®ážáá±á¬ááºá áá»áœááºá¯ááºááá¯á·ááẠNomad ááá¯á áááºáá«áááºá
HashiCorp ááááááá¬áá»á¬ážááá¯ááá·áºááœááºážááŒááºážáááºá¡ááœááºááá¯ážááŸááºážáá«áááº- á¡ááŸá áºáá¬áá¡á¬ážááŒáá·áºá áá»áœááºá¯ááºááá¯á·ááẠbinary ááá¯ááºááᯠbin directory ááá¯á·ááœáŸá±á·ááŒá®ážá tool á configuration file ááá¯áááºáá±á¬ááºáᬠáááºážááááºáá±á¬ááºááŸá¯ááá¯ááºááá¯áááºáá®ážáá¯á¶áá¬ááŒá áºáááºá
Consul binary ááᯠáá±á«ááºážáá¯ááºáá¯ááºááŒá®áž á¡áá¯á¶ážááŒá¯áá°á áááºááááºážááœáŸááºááá¯á· áá¯ááºáá°áá«á
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/
ááᯠáá»áœááºá¯ááºááá¯á·ááœáẠáá±á¬ááºáááºá áááºááŒáá¯ááºááŒááºáááºááŸá¯á¡ááœáẠáá±á¬ááºá á áºááẠbinary á¡áááºááá·áºááŸááááºá
áá±á¬ááºá á áºáááºááŸáá·áºá¡áá¯ááºáá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠkeygen á¡áááá·áºááᯠá¡áá¯á¶ážááŒá¯á áá°ážááŒá¬ážáá±á¬áá±á¬á·áá áºáá¯ááᯠáá¯ááºáá¯ááºááẠááá¯á¡ááºáááº-
root@consul-livelinux-01:~# consul keygen
Consul ááᯠconfigure áá¯ááºááŒááºážááá¯á· áááºááœá¬ážááŒáá«á áá¯á·á áááºážááœáŸááºáá áºáᯠ/etc/consul.d/ ááᯠá¡á±á¬ááºáá«ááœá²á·á ááºážáá¯á¶ááŒáá·áº áááºáá®ážááŒáá«á áá¯á·á
/etc/consul.d/
âââ bootstrap
â âââ config.json
bootstrap directory ááœáẠconfig.json configuration file áá«ááŸáááẠ- áááºážááœáẠConsul áááºáááºáá»á¬ážááᯠáá»áœááºá¯ááºááá¯á· áááºááŸááºáá«áááºá áááºážáá¡ááŒá±á¬ááºážá¡áá¬-
{
"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: ááŸááºáá«áááºá áá»áááºáááºáá¬ážáá»áŸáẠnode á¡áá áºáá»á¬ážá á¡ááá¯á¡áá»á±á¬áẠáááºááá·áºááŒááºážááᯠááœáá·áºáá«á áá»áŸá±á¬áºááá·áºáá¬ážáá±á¬ node á¡áá±á¡ááœááºá¡ááá¡áá»ááᯠá€áá±áá¬ááœáẠááá±á¬áºááŒáá¬ážááŒá±á¬ááºáž áá»áœááºá¯ááºáááááŒá¯áááá«áááºá
- áá¬áá¬á: ááŸááºáá«áááºá áá¬áá¬áá¯ááºááᯠááœáá·áºáá«á ဠvirtual machine áá±á«áºááŸá áá±á¬ááºá á áºáááºááẠáááºááŸáááœáẠáá áºáá¯áááºážáá±á¬ áá¬áá¬ááŸáá·áº áá¬á áá¬á¡ááŒá Ạáá±á¬ááºááœááºáááºááŒá áºááŒá®áž Nomad á VM ááẠáá±á¬ááºáááºáá»á¬áž ááŒá áºáá¬áááºááŒá áºáááºá
- datacenter: dc1 á á¡á á¯á¡áá±ážááá¯áááºáá®ážááẠáá±áá¬á ááºáá¬áá¡áááºááᯠáááºááŸááºáá«á áááºážááẠáá¯á¶ážá áœá²áá°áá»á¬ážááŸáá·áº áá¬áá¬ááŸá áºáá¯áá¯á¶ážááœáẠáá°áá®ááá«áááºá
- á á¬ááŸááº:áááºážáá²á·áá±á¬á·á áá±á¬á·ááẠáá±á¬ááºáááºáá»á¬ážááŸáá·áº áá¬áá¬áá»á¬ážá¡á¬ážáá¯á¶ážááœáẠáá°ážááŒá¬ážááŒá®áž ááá¯ááºáá®ááŸá¯ááŸáááááºá áá±á¬ááºá á áºááẠkeygen á¡áááá·áºááᯠá¡áá¯á¶ážááŒá¯á áá¯ááºáá¯ááºáá²á·áááºá
- start_join. á€á á¬áááºážááœááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áááºáááºááŸá¯ááŒá¯áá¯ááºááá·áº IP ááááºá á¬áá»á¬ážá á¬áááºážááᯠáááºááŸááºáá±ážáá«áááºá áá±á¬áá±á¬áááºáá±á¬á· ááá¯áá·áºááááºá á¬ááá¯áá² áá»ááºáá¬ážáá²á·áá¬á
á€á¡áá»áááºááœááºá áá»áœááºá¯ááºááá¯á·ááẠcommand line ááá¯á¡áá¯á¶ážááŒá¯á áá±á¬ááºá á áºáááºááá¯á áááºááá¯ááºáááº-
root@consul-livelinux-01:~# /usr/local/bin/consul agent -config-dir /etc/consul.d/bootstrap -ui
á€áááºááŸá¬ ááá¯á¡ááŸá¬ážááŸá¬ááŒááºááẠáááºážáááºážáá±á¬ááºážáá áºáá¯ááŒá áºáá±á¬áºáááºážá áááºááŸá¬ážáá±á¬á¡ááŒá±á¬ááºážááŒáá»ááºáá»á¬ážá¡ááœáẠá¡ááŒá²áááºážá¡ááŒá±áá¶ááœáẠá¡áá¯ááºáááŒá áºáá«á Systemd ááŸáá áºááá·áº Consul ááá¯á á®áá¶ááá·áºááœá²ááẠáááºáá±á¬ááºááŸá¯ááá¯ááºáá áºáᯠáááºáá®ážááŒáá«á áá¯á·á
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 ááᯠááá·áºááœááºážááŒá®áž proxying ááᯠáááºááŸááºááŒááºážá http ááœáá·áºááŒá¯áá»ááºá nginx ááᯠáááºáá±á·áá»áºáááºáá±áá»á¬ááŸáááá·áº ááá·áºááœááºážááŒá®áž /etc/nginx/sites-enabled directory ááœáẠá¡á±á¬ááºáá«á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááŒáá·áº 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 ááŸá áºáá¯áá¯á¶ážááẠáá®ážááá¯ážáá±á¬ááºááœááºáááºááœááºáᬠááŸááááºá ááá¯á·ááŒá±á¬áá·áº á€áá±áá¬ááœáẠááŒá¿áá¬áááŸááá«á
áá»ááºáá¬áá¬ááŸá áºáá¯ááœáẠá¡á±á¬ááºáá«ááœáŸááºááŒá¬ážáá»ááºáá»á¬ážááŸáá·áºá¡áá® Consul á¡á±ážáá»áá·áºáá»á¬ážááᯠááá·áºááœááºážáá«á áá»áœááºá¯ááºááá¯á·ááẠbinary ááá¯ááºááŒáá·áº á¡ááá·áºáá»á¬ážááᯠááŒááºáá¯ááºáááº-
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 á¡ááœá²á·áááºáá»á¬ážááœáẠconfigured service ááá¯ááœá±á·ááá«áááºá áááºážááẠáááá¯ááºážááá·áºá¡ááŒá Ạá¡á á¯á¡áá±ážááá¯á· á¡á±á¬ááºááŒááºá áœá¬ áá»áááºáááºáá²á·ááŒá±á¬ááºáž ááá¯ááá¯áááá·áºáááºá áá¯ááááá¬áá¬ááœáẠá¡áá¬ážáá°ááŒááºáá¯ááºááŒá®ážáá±á¬áẠáá»áœááºá¯ááºááá¯á·ááẠNomad ááᯠá áááºááá·áºááœááºážáᬠááŒááºáááºáááºááŸááºááá¯ááºáááºá
Nomad ááᯠáááºážáááá¬ážáááºá á¬ááœááºá á¬áááºážáá»á¬ážááœáẠá¡áá±ážá áááºááá·áºááœááºážáá±á¬áºááŒáá¬ážáááºá ááá¬ážááá¯ážáá» áááºáááºáááºáž ááŸá áºáᯠááŸááááº- binary ááá¯ááºááᯠáá±á«ááºážáá¯ááºááœá²ááŒááºážááŸáá·áº á¡áááºážá¡ááŒá áºá០á á¯á ááºážááŒááºážá ááááááºážááᯠááœá±ážáááºá
ááœá±á¬ááá¯: ááá±á¬áá»ááºááẠá¡ááœááºáá»ááºááŒááºá áœá¬ ááá¯ážáááºáá±ááŒá®áž á¡ááºááááºá¡áá áºáá»á¬ážááᯠáááŒá¬áá áá¯ááºááŒááºáá±á·ááŸááááºá áá±á¬ááºážáá«ážááŒá®ážáá¯á¶ážááœá¬ážáá±á¬á¡áá«ááœáẠáá¬ážááŸááºážá¡áá áºáá áºáᯠááœááºááŸááá¬áááºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áºá ááááºáá®á áááºááŸá 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 binary ááá¯ááºááá¯ááá«ááẠ- áááºážááᯠ/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 ááá¯ááœáá·áºááẠá¡áá»ááºá ááá¯áááŒá áºáá« - áá»áœááºá¯ááºááá¯á·ááẠáááºážá configuration file ááᯠááááºáá®ážááá±ážáá«á
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
}
áá¯ááááá¬áá¬ááœáẠconfiguration ááá¯ááºááá¯ááŒá±á¬ááºážáááºááá±á·áá«ááŸáá·áº - ááá¯áá±áá¬ááœáẠ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 á¡á
á¯á¡áá±ážááŸá áá¬áá¬áá»á¬ážá
á¬áááºáž
áá¬áá¬ááŸá áºáá¯áá¯á¶ážááᯠpanel ááœááºá¡á±á¬ááºááŒááºá áœá¬ááŒááá¬ážááŒá®ážá nomad node status command á output ááœááºáá°áá®áááºááá¯ááœá±á·ááá«áááºá
áá¯á¶ áá Nomad node á¡ááŒá±á¡áá± á¡áááá·áºáá±ážáá»áẠá¡ááœááº
áá±á¬ááºá
á
áºáááºáá±á¬á áá
áºáá»ááºááŒáá·áºááá¯ááºáá¡á±á¬ááºá áá±á¬ááºá
á
áºáááºááááºážáá»á¯ááºááŸá¯ panel ááá¯á·ááœá¬ážáá«á nodes á
á¬áá»ááºááŸá¬ááá¯á·ááœá¬ážáá«-
áá¯á¶ áá Consul cluster ááŸá node áá»á¬ážá
á¬áááºáž
ááᯠáá»áœááºá¯ááºááá¯á·ááœáẠáá±á¬ááºá á áºáááºááŸáá·áº ááœá²áááºáá¯ááºáá±á¬ááºááẠNomad á¡áááºááá·áºááŸááááºá áá±á¬ááºáá¯á¶ážá¡ááá·áºááœááºá áá»áœááºá¯ááºááá¯á·ááẠá áááºáááºá á¬ážá áá¬á¡áá±á¬ááºážáá¯á¶ážá¡ááá¯ááºážááá¯á· áááºážááœá¬ážáá«áááº- Docker containers áá»á¬ážááᯠGitlab á០Nomad ááá¯á· ááá¯á·áá±á¬ááºáá±ážáááºááŒá áºááŒá®áž áááºážáá¡ááŒá¬ážáá°ážááŒá¬ážáá±á¬á¡ááºá¹áá«áááºá¡áá»áá¯á·ááá¯áááºáž ááœá±ážááœá±ážáá«áááºá
Gitlab Runner áááºáá®ážááŒááºážá
Nomad ááœáẠdocker áá¯á¶áá»á¬ážááᯠááŒáá·áºáá»ááºáááºá á¡ááœááºážááœáẠNomad á binary ááá¯ááºáá«áá±á¬ áá®ážááŒá¬áž runner áá áºáá¯ááᯠá¡áá¯á¶ážááŒá¯áá«ááẠ(á€áá±áá¬ááœáẠHashicorp á¡ááá®áá±ážááŸááºážáá»á¬ážá áá±á¬ááºáááºá¡ááºá¹áá«áááºáá áºáá¯ááᯠááŸááºáá¬ážááá¯ááºááẠ- áááºážááá¯á·ááẠáá áºáá¯áááºážáá±á¬ binary ááá¯ááºááŒá áºáááº)á áááºážááᯠá¡ááŒá±ážááá¬ážáááºážááœáŸááºááá¯á· á¡ááºáá¯ááºáá¯ááºáá«á á¡á±á¬ááºáá«á¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááŒáá·áº áááºážá¡ááœáẠááá¯ážááŸááºážáá±á¬ 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 Registry ááœáẠ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 image ááᯠá¡á±á¬ááºááŒááºá áœá¬ááœá²áá°áááºá¡ááœáẠáááºážááᯠlogin áááºáááºááá¯á¡ááºááŒá±á¬ááºáž áá»á±ážáá°ážááŒá¯á áááááŒá¯áá«á á€ááá á¹á ááœáẠá¡áá±á¬ááºážáá¯á¶ážááŒá±ááŸááºážáá»ááºááŸá¬ Vault ááŸá áá±á¬á·ááºá¡ááºááŸáá·áº á áá¬ážááŸááºááᯠáááá¯á¶ážáá»á¯ááºááŒá®áž Nomad ááŸáá·áº áá±á«ááºážá ááºážáááºááŒá áºáááºá Nomad ááẠVault ááᯠáá°áááºážá¡ááá¯ááºáž áá±á¬ááºáá¶áááºá ááá¯á·áá±á¬áº áŠážá áœá¬á Vault ááá¯ááºááá¯ááºáá áá»áœááºá¯ááºááá¯á·ááẠ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 ááŸáá·áº áá±á«ááºážá ááºážááŸá¯ááᯠáá±á«ááºážááá·áºáá«áááº-
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 áááºá¡á ááŒá¯áá°áá»á¬ážá¡ááœááºáá±á¬ááºážááœááºááẠ- áááºážáááºáááºáááºáááºááŸáá·áº configure áá¯ááºáááºááœááºáá°áááºá ááá¯á·áá±á¬áºáááºážá á¡áá»áá¯á·áá±á¬ááá±á¬áá»ááºáá»á¬ážááᯠá ááºážáááºáá±á¬á¡áá«á áááºážáá¡á á±á¬ááá¯ááºážáá¬ážááŸááºážáá»á¬ážá ááŒá¿áá¬ááᯠáá»áœááºá¯ááºááŒá¯á¶ááœá±á·ááá«ááẠ- á¡ááŒá±áá¶áá¯ááºáá±á¬ááºáá»ááºáá»á¬ážá áœá¬ááẠááá¯ážááá¯ážááŸááºážááŸááºážáááŸááá« ááá¯á·ááá¯áẠááŸááºáááºá áœá¬á¡áá¯ááºááá¯ááºáá«á ááá¯á·áá±á¬áºáááºáž Nomad ááẠáááºáááºááœá¶á·ááŒáá¯ážááá¯ážáááºáá¬áááºááŒá áºááŒá®áž á¡áá¬áááºááœáẠáá°ááá¯ááºážááá¯á¡ááºááá·áºáá¯ááºáá±á¬ááºáá»ááºáá»á¬ážááᯠáááŸááá¬áááºáᯠáá¯á¶ááŒááºáá«áááºá
á
á¬áá±ážáá°- Alexey Zhadan ááŸáá·áº Live Linux á¡ááœá²á·á០áááºážááŒááºáá° Ilya Andreev
source: www.habr.com