ืืืื
ืืืืจืื ื, ืืคืืคืืืจืืืช ืฉื Kubernetes ืืืื ืืืืืจืืช - ืืืชืจ ืืืืชืจ ืคืจืืืงืืื ืืืืฉืืื ืืืชื. ืจืฆืืชื ืืืขืช ืืืชืืืจ ืืื Nomad: ืืื ืืืฉืื ืืคืจืืืงืืื ืฉืืืจ ืืฉืชืืฉืื ืืคืชืจืื ืืช ืืืจืื ืฉื HashiCorp, ืืืฉื, Vault ื-Consul, ืืืคืจืืืงืืื ืขืฆืื ืืื ื ืืืจืืืื ืืืืื ืช ืชืฉืชืืช. ืืืืจ ืื ืืืื ืืืจืืืช ืืืชืงื ืช Nomad, ืฉืืืื ืฉื ื ืฆืืชืื ืืืฉืืื, ืืื ืฉืืืื ืฉื Nomad ืขื Gitlab.
ืขืืืช ืืืื
ืงืฆืช ืขื ืกืคืกื ืืืืืงื: ื ืขืฉื ืฉืืืืฉ ืืฉืืืฉื ืฉืจืชืื ืืืจืืืืืืื ืขื ืืืคืืื ืื ืฉื 2 ืืขืืืื, 4 ืืืืจืื RAM, 50 ื'ืืื-ืืืื SSD, ืืืืืืืื ืืจืฉืช ืืงืืืืช ืืฉืืชืคืช. ืืฉืืืช ืืืชืืืืช ื-IP ืฉืืื:
- nomad-livelinux-01: 172.30.0.5
- nomad-livelinux-02: 172.30.0.10
- consul-livelinux-01: 172.30.0.15
ืืชืงื ื ืฉื ื ืืื, ืงืื ืกืื. ืืฆืืจืช ืืฉืืื ื ืืืืื
ื ืชืืื ืขื ืืืชืงื ื ืืืกืืกืืช. ืืืจืืช ืฉืืืืืจื ืืืืชื ืคืฉืืื, ืืชืืจ ืืืชื ืืืขื ืฉืืืืช ืืืืืจ: ืืื ื ืืฆืจื ืืขืฆื ืืืืืืืช ืืืขืจืืช ืืืืฉื ืืืืจื ืืขืช ืืฆืืจื.
ืืคื ื ืฉื ืชืืื ืืชืจืืื, ื ืืื ืืืืง ืืชืืืืจืื, ืื ืืฉืื ืื ืืฉืื ืืืืื ืืช ืืืื ื ืืขืชืืื.
ืืฉ ืื ื ืฉื ื ืฆืืชืื ื ืืืืื ืืื ืื ื ืจืืฆืื ืืฉืื ืืืชื ืืืฉืืื, ืืืขืชืื ื ืฆืืจื ืื ืงื ื ืืืื ืืืืืืื ืฉื ืืฉืืืืืช - ืืฉืืื ืื ื ืืืงืง ืืงืื ืกืื. ืืขืืจืช ืืืื ืืื, clustering ืืืืกืคื ืฉื ืฆืืชืื ืืืฉืื ืืืคืืื ืืืฉืืื ืคืฉืืื ืืืื: ื-Nomad ืฉื ืืฆืจ ืืชืืืจ ืืกืืื ื-Consul, ืืืืืจ ืืื ืืชืืืจ ืืืฉืืื Nomad ืืงืืื. ืืื, ืืืชืืื ื ืชืงืื ืืช ืฉืจืช ื-Consul, ื ืชืงืื ืืจืฉืืช http ืืกืืกื ืืคืื ื ืืืื ืืจื ื (ืืื ืืื ืืจืฉืื ืืืจืืจืช ืืืื ืื ืืชื ืืืฉืช ืืืื ืืืชืืืช ืืืฆืื ืืช), ืืื ืืช ืกืืื ื ืืงืื ืกืื ืขืฆืื ืืฉืจืชื Nomad, ืืืืจ ืืื ื ืืฉืื ืจืง ืื ืืืื.
ืืชืงื ืช ืืืืื ืฉื HashiCorp ืืื ืคืฉืืื ืืืื: ืืขืฆื, ืื ืื ื ืคืฉืื ืืขืืืจืื ืืช ืืงืืืฅ ืืืื ืืจื ืืกืคืจืืืช bin, ืืืืืจืื ืืช ืงืืืฅ ืืชืฆืืจื ืฉื ืืืื ืืืืฆืจืื ืืช ืงืืืฅ ืืฉืืจืืช ืฉืื.
ืืืจื ืืช ืืงืืืฅ ืืืื ืืจื ืฉื ืงืื ืกืื ืืคืจืง ืืืชื ืืกืคืจืืืช ืืืืช ืฉื ืืืฉืชืืฉ:
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 - ืื ื ืืืืจ ืืช ืืืืจืืช ื-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"]
}
ืืื ื ืกืชืื ืขื ืืื ืืืืช ืืขืืงืจืืืช ืืืฉืืขืืืืชืืื ืื ืคืจื:
- ืึนืึถื ืึทื ึทืขึทื: ื ืืื. ืื ื ืืืคืฉืจืื ืืืกืคื ืืืืืืืืช ืฉื ืฆืืชืื ืืืฉืื ืื ืื ืืืืืจืื. ืืฆืืื ืฉืืื ื ื ืืฆืืื ืื ืืื ืืช ืืืกืคืจ ืืืืืืง ืฉื ืืฆืืชืื ืืฆืคืืืื.
- ืฉืจืช: ื ืืื. ืืคืฉืจ ืืฆื ืฉืจืช. ืงืื ืกืื ืืืืื ื ืืืืจืืืืืืช ืืื ืืฉืืฉ ืืฉืจืช ืืืืืกืืจ ืืืืื ืืจืืข, ื-VM ืฉื Nomad ืืืื ืืืงืืืืช.
- ืืจืื ืื ืชืื ืื: dc1. ืฆืืื ืืช ืฉื ืืจืื ืื ืชืื ืื ืืืฆืืจืช ืืืฉืืื. ืื ืืืื ืืืืืช ืืื ืื ืืืงืืืืช ืืื ืืฉืจืชืื.
- ืืืฆืคืื: ืืืคืชื ืฉืื. ืืืคืชื, ืฉืืืื ืืืืืช ืื ืืืืืื ืืืืชืืื ืืื ืืืงืืืืช ืืืฉืจืชืื. ื ืืฆืจ ืืืืฆืขืืช ืืคืงืืื consul keygen.
- ืืชืื_ืืืฆืืจืฃ. ืืจืฉืืื ืื ืื ื ืืฆืืื ืื ืจืฉืืื ืฉื ืืชืืืืช IP ืืืืื ืืชืืฆืข ืืืืืืจ. ืืจืืข ืื ืื ื ืืฉืืืจืื ืจืง ืืชืืืช ืืฉืื ื.
ืืฉืื ืื ื ืืื ืืืคืขืื ืืช ืงืื ืกืื ืืืืฆืขืืช ืฉืืจืช ืืคืงืืื:
root@consul-livelinux-01:~# /usr/local/bin/consul agent -config-dir /etc/consul.d/bootstrap -ui
ืืืื ืืจื ืืืื ืื ืคืืช ืืืืื ืืขืช, ืขื ืืืช, ืื ืชืืื ืืืฉืชืืฉ ืืฉืืื ืื ืขื ืืกืืก ืืชืืฉื ืืกืืืืช ืืจืืจืืช. ืืืื ื ืืฆืืจ ืงืืืฅ ืฉืืจืืช ืื ืืืื Consul ืืืืฆืขืืช 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
ืืคืขื ืืช Consul ืืจื 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 ืื ื ืืืฆืจืื ืงืืืฅ ืชืฆืืจื consul.conf ืขื ืืชืืื ืืื:
upstream consul-auth {
server localhost:8500;
}
server {
server_name consul.doman.name;
location / {
proxy_pass http://consul-auth;
proxy_set_header Host $host;
auth_basic_user_file /etc/nginx/.htpasswd;
auth_basic "Password-protected Area";
}
}
ืื ืชืฉืื ืืืฆืืจ ืงืืืฅ .htpasswd ืืืืฆืืจ ืขืืืจื ืฉื ืืฉืชืืฉ ืืกืืกืื. ืคืจืื ืื ื ืืจืฉ ืืื ืฉืคืื ื ืืืื ืืจื ื ืื ืืืื ืืืื ืืื ืื ืฉืืืืจ ืืช ืืืืืืื ืฉืื ื. ืขื ืืืช, ืืขืช ืืืืจืช Gitlab, ื ืฆืืจื ืื ืืืฉ ืืืช - ืืืจืช ืื ื ืืื ืืคืจืืก ืืช ืืืคืืืงืฆืื ืฉืื ื ืื ืืื. ืืคืจืืืงื ืฉืื, ืื Gitlab ืืื Nomad ื ืืฆืืื ืจืง ืืจืฉืช ืืืคืืจื, ืื ืฉืืื ืืื ืืขืื ืืื.
ืืฉื ื ืืฉืจืชืื ืื ืืชืจืื ืื ื ืืชืงืื ืื ืกืืื ื Consul ืืคื ืืืืจืืืช ืืืืืช. ืื ื ืืืืจืื ืขื ืืฉืืืื ืขื ืืงืืืฅ ืืืื ืืจื:
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 ืืชืืืจืช ืืชืืขืื ืืจืฉืื ืฉืื. ืืฉื ื ืฉืชื ืฉืืืืช ืืชืงื ื ืืกืืจืชืืืช: ืืืจืืช ืงืืืฅ ืืื ืืจื ืืืืืืจ ืืืงืืจ. ืื ื ืืืืจ ืืฉืืื ืืจืืฉืื ื.
ืฉืื ืื: ืืคืจืืืงื ืืชืคืชื ืืืจ ืืืื, ืืขืชืื ืงืจืืืืช ืืชืคืจืกืืื ืขืืืื ืื ืืืฉืื. ืืืื ืืจืกื ืืืฉื ืชืฉืืืจืจ ืขื ืฉืืืืืจ ืืื ืืืฉืื. ืืื, ืืคื ื ืืงืจืืื, ืื ื ืืืืืฅ ืืืืืง ืืช ืืืจืกื ืื ืืืืืช ืฉื 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 ืืื-ืืืื - ืืฉ ืืืขืืืจื ื- /usr/local/bin.
ืืืื ื ืืฆืืจ ืกืคืจืืืช ื ืชืื ืื ืขืืืจ Nomad ืื ืขืจืื ืืช ืงืืืฅ ืืฉืืจืืช ืฉืื (ืกืืืจ ืืื ืื ืฉืืื ืื ืืืื ืงืืื ืืืชืืื):
root@nomad-livelinux-01:~# mkdir --parents /opt/nomad
root@nomad-livelinux-01:~# nano /etc/systemd/system/nomad.service
ืืืืง ืฉื ืืช ืืฉืืจืืช ืืืืืช:
[Unit]
Description=Nomad
Documentation=https://nomadproject.io/docs/
Wants=network-online.target
After=network-online.target
[Service]
ExecReload=/bin/kill -HUP $MAINPID
ExecStart=/usr/local/bin/nomad agent -config /etc/nomad.d
KillMode=process
KillSignal=SIGINT
LimitNOFILE=infinity
LimitNPROC=infinity
Restart=on-failure
RestartSec=2
StartLimitBurst=3
StartLimitIntervalSec=10
TasksMax=infinity
[Install]
WantedBy=multi-user.target
ืขื ืืืช, ืื ืื ื ืื ืืืืจืื ืืืฉืืง ืืช ื ืืื - ืขืืืื ืื ืืฆืจื ื ืืช ืงืืืฅ ืืชืฆืืจื ืฉืื:
root@nomad-livelinux-01:~# mkdir --parents /etc/nomad.d
root@nomad-livelinux-01:~# chmod 700 /etc/nomad.d
root@nomad-livelinux-01:~# nano /etc/nomad.d/nomad.hcl
root@nomad-livelinux-01:~# nano /etc/nomad.d/server.hcl
ืืื ื ืืกืคืจืืืช ืืกืืคื ืืืื ืืืืงืื:
/etc/nomad.d/
โโโ nomad.hcl
โโโ server.hcl
ืืงืืืฅ nomad.hcl ืฆืจืื ืืืืื ืืช ืืชืฆืืจื ืืืื:
datacenter = "dc1"
data_dir = "/opt/nomad"
ืชืืื ืืงืืืฅ server.hcl:
server {
enabled = true
bootstrap_expect = 1
}
consul {
address = "127.0.0.1:8500"
server_service_name = "nomad"
client_service_name = "nomad-client"
auto_advertise = true
server_auto_join = true
client_auto_join = true
}
bind_addr = "127.0.0.1"
advertise {
http = "172.30.0.5"
}
client {
enabled = true
}
ืื ืชืฉืืื ืืฉื ืืช ืืช ืงืืืฅ ืืชืฆืืจื ืืฉืจืช ืืฉื ื - ืฉื ืชืฆืืจืื ืืฉื ืืช ืืช ืืขืจื ืฉื ืืืจืืช http.
ืืืืจ ืืืืจืื ืืฉืื ืื ืืื ืืืืืืจ ืืช Nginx ื-Proxy ืืืืืจืช ืืจืฉืืช 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";
}
}
ืืขืช ื ืืื ืืืฉืช ืืืื ืืืื ืืจื ื ืืจื ืจืฉืช ืืืฆืื ืืช. ืืชืืืจ ืืขืืืจ ืืืฃ ืืฉืจืชืื:
ืชืืื ื 1. ืจืฉืืืช ืฉืจืชืื ืืืฉืืื Nomad
ืฉื ื ืืฉืจืชืื ืืืฆืืื ืืืฆืืื ืืืืื ืืช, ื ืจืื ืืช ืืืชื ืืืืจ ืืคืื ืฉื ืคืงืืืช ืืฆื ืืฆืืืช ืื ืื:
ืชืืื ื 2. ืคืื ืฉื ืคืงืืืช ืืฆื ืืฆืืืช ืื ืืื
ืื ืขื ืงืื ืกืื? ืืืื ื ืกืชืื. ืขืืืจ ืืืื ืืืงืจื ืฉื ืงืื ืกืื, ืืืฃ ืืฆืืชืื:
ืชืืื ื 3. ืจืฉืืืช ืฆืืชืื ืืืฉืืื ืืงืื ืกืื
ืขืืฉืื ืืฉ ืื ื ื ืืื ืืืื ืฉืขืืื ืืฉืืชืืฃ ืขื ืงืื ืกืื. ืืฉืื ืืืืจืื, ื ืืืข ืืืืง ืืืื ื: ืืืืจืช ืืฉืืื ืฉื ืืืืืืช Docker ื-Gitlab ืื ืืื, ืืื ื ืืืจ ืขื ืืื ืืืืืคืืื ืื ืืืืืืืืื ืืืืจืื ืฉืื.
ืืฆืืจืช 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 ื-Gitlab Registry, ืืขืช ื ืืื ืืขืืืจ ืืฉืืจืืช ืืืืืจ ืืคืจืืืงืืื, ืืืฆืืจ Pipeline ืืืืืืืจ ืืช ืขืืืืช ืื ืืืืื ืฉื 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 ืืืืืคืื ืืืชื ืืจืืฉืื ืฉืื ื, ืืืฉื ื ืื ืื ื ืืฉืืงืื ืืช ืืขืืืื ืฉืื ื ื-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" {}
}
}
}
}
}
ืฉืืื ืื ืฉืืฉ ืื ืจืืฉืื ืคืจืื ืืืื ืืืฉืื ืืืฆืืื ืชืืื ืช docker ืื ื ืฆืจืื ืืืืื ืก ืืืื. ืืคืชืจืื ืืืื ืืืืชืจ ืืืงืจื ืื ืืื ืืืืื ืฉื ืืฉืชืืฉ ืืกืืกืื ืืืกืคืช ืืืืืจ ืืื ืืฉืื ืืืชื ืขื Nomad. Nomad ืชืืื ืืืืคื ืืงืืจื ืืืกืคืช. ืืื ืจืืฉืืช, ืืืื ื ืชืงืื ืืช ืืืืื ืืืช ืืืจืืฉื ืขืืืจ 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
ืืขืช, ืืืืจ ืฉืืฆืจื ื ืืช ืืืืื ืืืช ืืืจืืฉื, ื ืืกืืฃ ืืื ืืืจืฆืื ืขื Vault ืืืืืง ืืืฉืืืืช ืืงืืืฅ job.nomad:
vault {
enabled = true
address = "https://vault.domain.name:8200"
token = "token"
}
ืื ื ืืฉืชืืฉ ืืืจืฉืื ืืคื ืืกืืืื ืืจืืฉื ืืืชื ืืฉืืจืืช ืืื, ืืฉ ืื ืืคืฉืจืืช ืืฆืืื ืืช ืืืกืืืื ืืืฉืชื ื ืืขืช ืืคืขืืช ืกืืื ื ืืืืื:
$ VAULT_TOKEN=<token> nomad agent -config /path/to/config
ืขืืฉืื ืื ืื ื ืืืืืื ืืืฉืชืืฉ ืืืคืชืืืช ืขื Vault. ืขืงืจืื ืืคืขืืื ืคืฉืื: ืื ื ืืืฆืจืื ืงืืืฅ ื-Nomad job ืฉืืืืกื ืืช ืืขืจืืื ืฉื ืืฉืชื ืื, ืืืฉื:
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 ืชืืฉืื ืืืชืคืชื ืืืขืชืื ืืื ืชืจืืืฉ ืืช ืืคืื ืงืฆืืืช ืฉืืืื ืฆืจืืืื.
ืืืืจ: ืืืืื ืื ืืจืืื, ืืขืจืืืช ืืืืกืื ื'ืืืื ืืฆืืืช Live Linux
ืืงืืจ: www.habr.com