แจแแกแแแแแ
แแแแ แแ แแก Kubernetes-แแก แแแแฃแแแ แแแ แกแฌแ แแคแแ แแแ แแแแ - แฃแคแ แ แแ แฃแคแ แ แแแขแ แแ แแแฅแขแ แแฎแแ แชแแแแแแก แแแก. แแกแฃแ แแ แจแแแแฎแ แแกแแ แแ แแแกแขแ แแขแแ แก, แ แแแแ แแชแแ Nomad: แแก แจแแกแแแแจแแแแแ แแ แแแฅแขแแแแกแแแแก, แ แแแแแแแช แฃแแแ แแงแแแแแแ HashiCorp-แแก แกแฎแแ แแแแแฌแงแแแขแแแแแแแก, แแแแแแแแแ, Vault แแ Consul, แแ แแแแแ แแ แแแฅแขแแแ แแ แแ แแก แ แแฃแแ แแแคแ แแกแขแ แฃแฅแขแฃแ แแก แแแแแกแแแ แแกแแ. แแก แแแกแแแ แจแแแชแแแก แแแกแขแ แฃแฅแชแแแแก Nomad-แแก แแแงแแแแแแก, แแ แ แแแแแซแแก แแแแกแขแแ แจแ แแแแ แแแแแแแแก, แแกแแแ Nomad-แแก Gitlab-แแแ แแแขแแแ แแชแแแก แจแแกแแฎแแ.
แกแแขแแกแขแ แกแขแแแแ
แชแแขแ แ แแ แกแแขแแกแขแ แกแแแแแ: แกแแแ แแแ แขแฃแแแฃแ แ แกแแ แแแ แ แแแแแแงแแแแแ 2 CPU, 4 RAM, 50 Gb SSD แแแฎแแกแแแแแแแแแแ, แแแแ แแแแแแแฃแแแ แกแแแ แแ แแแแแแฃแ แฅแกแแแจแ. แแแแ แกแแฎแแแแแ แแ IP แแแกแแแแ แแแแ:
- nomad-livelinux-01: 172.30.0.5
- nomad-livelinux-02: 172.30.0.10
- consul-livelinux-01: 172.30.0.15
Nomad-แแก แแแกแขแแแแชแแ, แแแแกแฃแแ. แแแแแแแแ แ แแแแกแขแแ แแก แจแแฅแแแ
แแแแแฌแงแแ แซแแ แแแแแ แแแกแขแแแแชแแ. แแแฃแฎแแแแแแ แแแแกแ, แ แแ แแแงแแแแแ แแแ แขแแแ แแงแ, แแ แแฆแแฌแแ แแแก แกแขแแขแแแก แแแแแแแแแแกแแแแก: แแก แแ แกแแแแแแ แจแแแฅแแแ แแแฎแแแแแแแแ แแ แจแแแแจแแแแแแแแ, แกแแญแแ แแแแแก แจแแแแฎแแแแแจแ แกแฌแ แแคแ แฌแแแแแแกแแแแก.
แกแแแแ แแ แแฅแขแแแแก แแแแแฌแงแแแ, แแแแแแฎแแแแแ แแแแ แแฃแ แแแฌแแแก, แ แแแแแ แแ แแขแแแแ แแแแจแแแแแแแแแแ แแแแแแแแ แกแขแ แฃแฅแขแฃแ แแก แแแแแแ.
แฉแแแ แแแแฅแแก แแ แ แแแแแแแแ แ แแแแแซแ แแ แแแแแแ แแแแแแ แแแแแแ แแกแแแ แแแแกแขแแ แจแ แแ แแแแแแแแจแ แแกแแแ แแแแแญแแ แแแแ แแแแกแขแแ แแแแก แแแขแแแแขแฃแ แ แแแกแจแขแแแแ แแแ - แแแแกแแแแก แแแแแญแแ แแแแ แแแแกแฃแแ. แแ แฎแแแกแแฌแงแแก แกแแจแฃแแแแแแ แแแแกแขแแ แแ แแแ แแ แแฎแแแ แแแแแซแแแแก แแแแแขแแแ แฎแแแแ แซแแแแแ แแแ แขแแแ แแแแชแแแ: แจแแฅแแแแแ Nomad แแแแแซแ แฃแแแแจแแ แแแแ Consul-แแก แแแแแขแก, แจแแแแแ แแ แฃแแ แแแแแ แแ แกแแแฃแ Nomad แแแแกแขแแ แก. แแแแขแแ, แแแกแแฌแงแแกแจแ แฉแแแ แแแแแแแกแขแแแแ แแแ Consul แกแแ แแแ แก, แแแแแงแแแแแ แซแแ แแแแ http แแแขแแ แแแแชแแแก แแแ แแแแแแแกแแแแก (แแก แแแแฃแแแกแฎแแแแแ แแ แแก แแแขแแ แแแแชแแแก แแแ แแจแ แแ แแแกแ แฌแแแแแ แจแแกแแซแแแแแแแ แแแ แ แแแกแแแแ แแแ), แแกแแแ แแแแแ แแแแกแฃแแแก แแแแแขแแแก Nomad แกแแ แแแ แแแแ, แ แแก แจแแแแแแแช แฉแแแ แแฎแแแแ Nomad-แแ แแแแแแ แซแแแแแ.
HashiCorp-แแก แแแกแขแ แฃแแแแขแแแแก แแแกแขแแแแชแแ แซแแแแแ แแแ แขแแแแ: แแ แกแแแแแแ, แฉแแแ แฃแแ แแแแ แแแแแแแขแแแ แแ แแแแ แคแแแแก bin แแแ แแฅแขแแ แแแจแ, แแแงแแแแแ แฎแแแกแแฌแงแแก แแแแคแแแฃแ แแชแแแก แคแแแแก แแ แแฅแแแแ แแแก แกแแ แแแก แคแแแแก.
แฉแแแแขแแแ แแแ Consul แแ แแแแแ แคแแแแ แแ แแแฎแกแแแแ แแแ แแแแฎแแแ แแแแแก แกแแฎแแแก แแแ แแฅแขแแ แแแจแ:
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
แแแแแ แแแแแแแแแ Consul-แแก แแแแคแแแฃแ แแชแแแก แแแงแแแแแแแ, แจแแแฅแแแแ แแแ แแฅแขแแ แแ /etc/consul.d/ แจแแแแแแ แกแขแ แฃแฅแขแฃแ แแ:
/etc/consul.d/
โโโ bootstrap
โ โโโ config.json
แฉแแขแแแ แแแแก แแแ แแฅแขแแ แแ แจแแแชแแแก แแแแคแแแฃแ แแชแแแก แคแแแแก 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"]
}
แแแแแ แแแแแแฎแแแแ แซแแ แแแแแ แแแ แแฅแขแแแแแ แแ แแแแ แแแแจแแแแแแแ แชแแแแ:
- แฉแแขแแแ แแแแก: แแแ แแแแแ. แฉแแแ แฉแแ แแแแ แแฎแแแ แแแแแซแแแแก แแแขแแแแขแฃแ แแแแแขแแแแก, แแฃ แแกแแแ แแแแแแจแแ แแแฃแแแ. แแ แแฆแแแแจแแแ, แ แแ แฉแแแ แแฅ แแ แแแแฃแแแแแแ แแแกแแแแแแแแ แแแแแซแแแแก แแฃแกแข แ แแแแแแแแแก.
- แกแแ แแแ แแ: แแแ แแแแแ. แกแแ แแแ แแก แ แแแแแแก แฉแแ แแแ. แแแแกแฃแแ แแ แแแ แขแฃแแแฃแ แแแแฅแแแแแ แแแแฅแแแแแแก, แ แแแแ แช แแ แแแแแ แแ แกแแ แแแ แ แแ แแแกแขแแ แ แแ แแแแแแขแจแ, Nomad's VM แแฅแแแแ แแแแแแขแแแ.
- แแแแแชแแแแ แชแแแขแ แ: dc1. แแแฃแแแแแ แแแแแชแแแแ แชแแแขแ แแก แกแแฎแแแ แแแแกแขแแ แแก แจแแกแแฅแแแแแแ. แแก แฃแแแ แแงแแก แแแแแขแฃแ แ แ แแแแ แช แแแแแแขแแแแ, แแกแแแ แกแแ แแแ แแแแ.
- แแแจแแคแ แแ: แจแแแ แแแกแแฆแแแ. แแแกแแฆแแแ, แ แแแแแแช แแกแแแ แฃแแแ แแงแแก แฃแแแแแแฃแ แ แแ แแแแฎแแแแ แงแแแแ แแแแแแขแกแ แแ แกแแ แแแ แก. แแแแแ แแ แแแฃแแแ consul keygen แแ แซแแแแแแก แแแแแงแแแแแแ.
- แแแฌแงแแแ_แจแแแ แแแแ. แแ แกแแแจแ แฉแแแ แแแแฃแแแแแแ 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 แฌแแแ แแแจแ. แแก แแแจแแแแก, แ แแ แแก แฌแแ แแแขแแแแ แแแฃแแแแจแแ แแ แแแแกแขแแ แก, แ แแแแ แช แแแแแแขแก. แแแแแ แแแแแแแ แแ แแแแ แ แกแแ แแแ แแ แแ แแแแก แจแแแแแ แจแแแแแซแแแ แแแแแฌแงแแ 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
แแฃแแชแ, แฉแแแ แแ แแฉแฅแแ แแแ 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";
}
}
แแฎแแ แฉแแแ แจแแแแแซแแแ แแแ แแแแแแแ แฌแแแแแ แแแ แ แฅแกแแแแก แกแแจแฃแแแแแแ. แแแฃแแแแจแแ แแแ แแ แแแแแแแ แกแแ แแแ แแแแก แแแแ แแแ:
แกแฃแ แแแ 1. Nomad แแแแกแขแแ แจแ แกแแ แแแ แแแแก แกแแ
แแ แแแ แกแแ แแแ แ แฌแแ แแแขแแแแ แแ แแก แแแฉแแแแแแ แแแแแแจแ, แฉแแแ แแแแแแก แแแแแแแฎแแแ แแแแแแแแ แ แแแแแซแแก แกแขแแขแฃแกแแก แแ แซแแแแแแก แแแแแกแแแแแจแ:
แกแฃแ แแแ 2. แแแแแแแแ แ แแแแแซแแก แกแขแแขแฃแกแแก แแ แซแแแแแแก แแแแแแแแแแ
แ แแช แจแแแฎแแแ แแแแกแฃแแก? แแแแแ แจแแแฎแแแแ. แแแแแแแ แแแแกแฃแแแก แแแ แแแแก แแแแแแแ, แแแแแซแแแแก แแแแ แแแ:
แกแฃแ แแแ 3. แแแแแซแแแแก แกแแ แแแแกแฃแแแก แแแแกแขแแ แจแ
แแฎแแ แฉแแแ แแแงแแแก แแแแแแแแแฃแแ Nomad, แ แแแแแแช แแฃแจแแแแก แแแแกแฃแแแแ แแ แแแ. แคแแแแแฃแ แแขแแแแ แแแแแฆแแแ แกแแฎแแแแกแ แแแฌแแแก: Docker-แแก แแแแขแแแแแ แแแแก แแแฌแแแแแแก แแแงแแแแแ Gitlab-แแแ Nomad-แแแ แแ แแกแแแ แกแแฃแแแ แ แแแก แกแฎแแ แแแแแ แฉแแฃแ แแแฎแแกแแแแแแแแแแ.
Gitlab Runner-แแก แจแแฅแแแ
Nomad-แจแ แแแแแ แแก แกแฃแ แแแแแแก แแแแกแแแแแกแแแแแ, แฉแแแ แแแแแแแงแแแแแ แชแแแแแฃแ แแแ แแแแแแก, แ แแแแแจแแช แจแแแแก Nomad แแ แแแแแ แคแแแแ (แแฅ, แกแฎแแแแ แจแแ แแก, แจแแแแแซแแแ แแฆแแแแจแแแ Hashicorp แแแแแแแชแแแแแก แแแแแ แแ แแ แแแฎแแกแแแแแแแแ - แแแแแแแแฃแแแฃแ แแ แแกแแแ แแ แแ แแ แแแแแ แคแแแแแ). แแขแแแ แแแ แแแ runner แแแ แแฅแขแแ แแแจแ. แแแแแ แจแแแฅแแแแ แแแกแแแแก แแแ แขแแแ 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-แแก แกแแแฃแจแแแก แคแแแแแ. แฉแแแ แแ แแแฅแขแ แแ แกแขแแขแแแจแ แกแแแแแแ แแ แแแแขแแฃแแ แแฅแแแแ: แแก แจแแแแแแ แแ แแ แแแแแแแแแกแแแ. .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
แแฅ แแแแแแแแแ แฎแแแแ แฎแแแแ, แแแแ แแ แจแแแแซแแแแ แแแกแ แแแแคแแแฃแ แแชแแ แจแแชแแแแแ แแ แแแฅแขแแก แแแ แแฅแขแแ แแแจแ แจแแแแแแกแ. แแแแกแแแแแ แจแแแแแแ แแ แ แแขแแแแกแแแ: แแแแแกแแฎแฃแแแแแก แแฌแงแแแ แแ แแแกแ แแแแแแแแแ แแแแแแแแ แแแ. แแแ แแแ แแขแแแแ แฉแแแ แแแฌแงแแแ แแแแแ แแก แกแฃแ แแแก แแ แแแงแแแแแ แแแก แฉแแแแก แ แแแกแขแ แจแ, แฎแแแ แแแแ แแจแ แแแฌแงแแแ แกแแแฃแจแแแก 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" {}
}
}
}
}
}
แแแฎแแแ แแแแแแแแแกแฌแแแแ, แ แแ แแ แแแฅแแก แแแ แแแ แ แแแกแขแ แ แแ แแแแแ แแก แกแฃแ แแแแก แฌแแ แแแขแแแแ แแแแแกแแขแแแแ แฃแแแ แจแแฎแแแแ แแแกแจแ. แกแแฃแแแแแกแ แแแแแกแแแแแ แแ แจแแแแฎแแแแแจแ แแ แแก แจแแกแแแ แแ แแแ แแแ Vault-แจแ แจแแงแแแแ แแ แจแแแแแ แแแกแ แแแขแแแ แแ แแแ 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"
}
แแ แแแงแแแแ แแแขแแ แแแแชแแแก แขแแแแแแ แแ แแแ แแแแกแขแ แแ แแ แแแก แแแ แแแแแ แแฅ, แแกแแแ แแ แแก แแแแแแแแ แ แแแแแขแแก แแแฌแงแแแแกแแก แขแแแแแแก แชแแแแแแก แแแแแแแแแก แจแแกแแซแแแแแแแ:
$ 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