Ro-ràdh
O chionn ghoirid, tha fèill mhòr air Kubernetes air a bhith a’ fàs gu luath - tha barrachd is barrachd phròiseactan ga bhuileachadh. Bha mi airson suathadh air orcastra mar Nomad: tha e foirfe airson pròiseactan a tha mar-thà a’ cleachdadh fuasglaidhean eile bho HashiCorp, mar eisimpleir, Vault and Consul, agus chan eil na pròiseactan fhèin iom-fhillte a thaobh bun-structair. Bidh stiùireadh anns an stuth seo airson Nomad a chuir a-steach, a’ cothlamadh dà nodan ann am brabhsair, a bharrachd air a bhith ag aonachadh Nomad le Gitlab.
seasamh deuchainn
Beagan mun bheing deuchainn: tha trì frithealaichean brìgheil air an cleachdadh le feartan 2 CPU, 4 RAM, 50 Gb SSD, aonaichte ann an lìonra ionadail cumanta. Na h-ainmean agus na seòlaidhean IP aca:
- nomad-livelinux-01: 172.30.0.5
- nomad-livelinux-02: 172.30.0.10
- consul-livelinux-01: 172.30.0.15
Stàladh Nomad, Consul. Cruthachadh buidheann Nomad
Feuch an tòisich sinn leis an stàladh bunaiteach. Ged a bha an stèidheachadh sìmplidh, bheir mi cunntas air air sgàth ionracas an artaigil: chaidh a chruthachadh gu bunaiteach bho dhreachan agus notaichean airson ruigsinneachd luath nuair a bha feum air.
Mus tòisich sinn air cleachdadh, bruidhnidh sinn air a 'phàirt teòiridheach, oir aig an ìre seo tha e cudromach tuigsinn an structar san àm ri teachd.
Tha dà nodan nomad againn agus tha sinn airson an cur còmhla ann am buidheann, agus san àm ri teachd bidh feum againn cuideachd air sgèileadh brabhsair fèin-ghluasadach - airson seo bidh feum againn air Consal. Leis an inneal seo, bidh cruinneachadh agus cuir nodan ùra gu bhith na obair gu math sìmplidh: bidh an nód Nomad a chaidh a chruthachadh a’ ceangal ris an àidseant Consul, agus an uairsin a’ ceangal ris a’ bhuidheann Nomad a th’ ann mar-thà. Mar sin, aig an toiseach stàlaidhidh sinn am frithealaiche Consul, rèitichidh sinn cead http bunaiteach airson a’ phannal lìn (tha e gun chead gu bunaiteach agus gheibhear thuige aig seòladh a-muigh), a bharrachd air na riochdairean Consul fhèin air frithealaichean Nomad, às deidh sin cha tèid sinn air adhart ach gu Nomad.
Tha stàladh innealan HashiCorp gu math sìmplidh: gu bunaiteach, bidh sinn dìreach a’ gluasad am faidhle binary gu eòlaire a’ bhiona, a’ stèidheachadh faidhle rèiteachaidh an inneil, agus a’ cruthachadh am faidhle seirbheis aige.
Luchdaich sìos am faidhle binary Consul agus dì-phacaich e ann an eòlaire dachaigh an neach-cleachdaidh:
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/
A-nis tha binary consul deiseil againn airson tuilleadh rèiteachaidh.
Gus obrachadh le Consul, feumaidh sinn iuchair shònraichte a chruthachadh a’ cleachdadh an àithne keygen:
root@consul-livelinux-01:~# consul keygen
Gluaisidh sinn air adhart gu bhith a’ stèidheachadh rèiteachadh Consul, a’ cruthachadh eòlaire /etc/consul.d/ leis an structar a leanas:
/etc/consul.d/
├── bootstrap
│ └── config.json
Anns an eòlaire bootstrap bidh faidhle rèiteachaidh config.json - ann an sin suidhichidh sinn na roghainnean Consul. Na tha ann:
{
"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"]
}
Bheir sinn sùil air na prìomh stiùiridhean agus an ciall fa leth:
- bootstrap: fìor. Bidh sinn a’ comasachadh nodan ùra a chuir ris gu fèin-ghluasadach ma tha iad ceangailte. Tha mi a’ toirt fa-near nach eil sinn a’ comharrachadh an seo an dearbh àireamh de nodan ris a bheil dùil.
- frithealaiche: fìor. Cuir an comas modh frithealaiche. Bidh consul air an inneal brìgheil seo mar an aon fhrithealaiche agus maighstir an-dràsta, is e Nomad's VM an teachdaichean.
- datacenter:dhc1. Sònraich ainm an ionaid dàta gus am brabhsair a chruthachadh. Feumaidh e a bhith co-ionann air gach cuid teachdaichean agus frithealaichean.
- Encrypt: d' iuchair. An iuchair, a dh'fheumas a bhith gun samhail agus co-ionnan air a h-uile neach-dèiligidh agus frithealaiche. Air a chruthachadh a’ cleachdadh an àithne consul keygen.
- tòiseachadh_join. Anns an liosta seo tha sinn a 'sealltainn liosta de sheòlaidhean IP ris an tèid an ceangal a dhèanamh. Aig an àm seo chan eil sinn a’ fàgail ach ar seòladh fhèin.
Aig an ìre seo is urrainn dhuinn consul a ruith leis an loidhne-àithne:
root@consul-livelinux-01:~# /usr/local/bin/consul agent -config-dir /etc/consul.d/bootstrap -ui
Is e dòigh mhath a tha seo airson dì-bhugachadh a-nis, ge-tà, cha bhith e comasach dhut an dòigh seo a chleachdadh gu leantainneach airson adhbharan follaiseach. Cruthaichidh sinn faidhle seirbheis gus Consul a riaghladh tro systemd:
root@consul-livelinux-01:~# nano /etc/systemd/system/consul.service
Susbaint an fhaidhle 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
Cuir air bhog Consul tro systemctl:
root@consul-livelinux-01:~# systemctl start consul
Feuch an dèan sinn cinnteach: feumaidh an t-seirbheis againn a bhith a’ ruith, agus le bhith a’ cur an gnìomh àithne buill a’ chonsal bu chòir dhuinn ar frithealaiche fhaicinn:
root@consul-livelinux:/etc/consul.d# consul members
consul-livelinux 172.30.0.15:8301 alive server 1.5.0 2 dc1 <all>
An ath cheum: stàladh Nginx agus stèidheachadh ùghdarras proxying agus http. Bidh sinn a’ stàladh nginx tron mhanaidsear pacaid agus anns an eòlaire /etc/nginx/sites-enabled bidh sinn a’ cruthachadh faidhle rèiteachaidh consul.conf leis an t-susbaint a leanas:
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";
}
}
Na dìochuimhnich faidhle .htpasswd a chruthachadh agus ainm-cleachdaidh agus facal-faire a ghineadh air a shon. Tha feum air an rud seo gus nach bi am pannal lìn ri fhaighinn don h-uile duine aig a bheil eòlas air an àrainn againn. Ach, nuair a bhios sinn a’ stèidheachadh Gitlab, feumaidh sinn seo a thrèigsinn - air neo cha bhith e comasach dhuinn ar tagradh a chuir gu Nomad. Anns a’ phròiseact agam, chan eil an dà chuid Gitlab agus Nomad ach air an lìon ghlas, agus mar sin chan eil an leithid de dhuilgheadas an seo.
Air an dà fhrithealaiche a tha air fhàgail bidh sinn a’ stàladh riochdairean Consul a rèir an stiùiridh a leanas. Bidh sinn ag ath-aithris na ceumannan leis an fhaidhle 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/
A rèir an t-seirbheisiche a bh’ ann roimhe, bidh sinn a’ cruthachadh eòlaire airson faidhlichean rèiteachaidh /etc/consul.d leis an structar a leanas:
/etc/consul.d/
├── client
│ └── config.json
Susbaint an fhaidhle 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
}
Sàbhail na h-atharrachaidhean agus gluais air adhart gu bhith a’ stèidheachadh am faidhle seirbheis, na th’ ann:
/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
Bidh sinn a 'cur air bhog consul air an fhrithealaiche. A-nis, às deidh a chuir air bhog, bu chòir dhuinn an t-seirbheis rèiteachaidh fhaicinn ann am buill nsul. Bidh seo a’ ciallachadh gu bheil e air ceangal soirbheachail a dhèanamh ris a’ bhuidheann mar neach-dèiligidh. Dèan an aon rud a-rithist air an dàrna frithealaiche agus às deidh sin is urrainn dhuinn tòiseachadh air Nomad a chuir a-steach agus a rèiteachadh.
Tha stàladh nas mionaidiche de Nomad air a mhìneachadh anns na sgrìobhainnean oifigeil aige. Tha dà dhòigh stàlaidh traidiseanta ann: luchdachadh sìos faidhle binary agus cur ri chèile bhon stòr. Taghaidh mi a’ chiad dòigh.
thuirt: Tha am pròiseact a 'leasachadh gu math luath, gu tric bidh ùrachaidhean ùra gan sgaoileadh. Is dòcha gun tèid dreach ùr fhoillseachadh mus tèid an artaigil seo a chrìochnachadh. Mar sin, mus leugh thu, tha mi a’ moladh sùil a thoirt air an dreach làithreach de Nomad an-dràsta agus a luchdachadh sìos.
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
Às deidh dhuinn dì-phapadh, gheibh sinn faidhle binary Nomad le cuideam 65 MB - feumar a ghluasad gu /usr/local/bin.
Cruthaichidh sinn eòlaire dàta airson Nomad agus deasaich sinn am faidhle seirbheis aige (is dòcha nach bi e ann aig an toiseach):
root@nomad-livelinux-01:~# mkdir --parents /opt/nomad
root@nomad-livelinux-01:~# nano /etc/systemd/system/nomad.service
Cuir na loidhnichean a leanas an sin:
[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
Ach, chan eil sinn ann an cabhag airson nomad a chuir air bhog - chan eil sinn air am faidhle rèiteachaidh aige a chruthachadh fhathast:
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
Bidh structar an eòlaire mu dheireadh mar a leanas:
/etc/nomad.d/
├── nomad.hcl
└── server.hcl
Bu chòir an rèiteachadh a leanas a bhith san fhaidhle nomad.hcl:
datacenter = "dc1"
data_dir = "/opt/nomad"
Susbaint an fhaidhle 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
}
Na dìochuimhnich am faidhle rèiteachaidh atharrachadh air an dàrna frithealaiche - an sin feumaidh tu luach an stiùiridh http atharrachadh.
Is e an rud mu dheireadh aig an ìre seo Nginx a rèiteachadh airson proxying agus stèidheachadh cead http. Susbaint an fhaidhle 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";
}
}
A-nis is urrainn dhuinn faighinn chun phannal lìn tro lìonra a-muigh. Ceangail agus rach gu duilleag an fhrithealaiche:
Dealbh 1. Liosta de na frithealaichean ann am buidheann Nomad
Tha an dà fhrithealaiche air an taisbeanadh gu soirbheachail sa phannal, chì sinn an aon rud ann an toradh an àithne inbhe node nomad:
Dealbh 2. Toradh an àithne inbhe node nomad
Dè mu dheidhinn Consal? Bheir sinn sùil. Rach gu pannal smachd Consal, gu duilleag nan nodan:
Dealbh 3. Liosta de na nodan ann am buidheann Consul
A-nis tha Nomad ullaichte againn ag obair còmhla ris a’ Chonsal. Anns an ìre mu dheireadh, ruigidh sinn am pàirt spòrsail: a’ stèidheachadh lìbhrigeadh shoithichean Docker bho Gitlab gu Nomad, agus cuideachd a’ bruidhinn mu chuid de na feartan sònraichte eile aige.
A 'cruthachadh Gitlab Runner
Gus ìomhaighean docker a chuir gu Nomad, cleachdaidh sinn ruitheadair air leth leis an fhaidhle binary Nomad a-staigh (an seo, leis an t-slighe, is urrainn dhuinn feart eile de thagraidhean Hashicorp a thoirt fa-near - leotha fhèin tha iad nan aon fhaidhle binary). Luchdaich suas e chun chlàr runner. Cruthaichidh sinn Dockerfile sìmplidh air a shon leis an t-susbaint a leanas:
FROM alpine:3.9
RUN apk add --update --no-cache libc6-compat gettext
COPY nomad /usr/local/bin/nomad
Anns an aon phròiseact bidh sinn a’ cruthachadh .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}
Mar thoradh air an sin, bidh ìomhaigh againn den ruitheadair Nomad ann an Clàr Gitlab, a-nis is urrainn dhuinn a dhol gu dìreach gu stòr a ’phròiseict, loidhne-phìoban a chruthachadh agus obair nomad Nomad a rèiteachadh.
Suidheachadh pròiseict
Feuch an tòisich sinn le faidhle na h-obrach airson Nomad. Bidh mo phròiseact san artaigil seo gu math prìomhadail: bidh e air a dhèanamh suas de aon ghnìomh. Bidh susbaint .gitlab-ci mar a leanas:
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
An seo bidh an cleachdadh a’ tachairt le làimh, ach faodaidh tu a rèiteachadh gus susbaint an eòlaire pròiseict atharrachadh. Tha dà ìre anns an loidhne-phìoban: co-chruinneachadh ìomhaighean agus a chleachdadh gu nomad. Aig a’ chiad ìre, bidh sinn a’ cruinneachadh ìomhaigh docker agus ga phutadh a-steach don Chlàr againn, agus aig an dàrna fear bidh sinn a’ cur air bhog ar n-obair ann an 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" {}
}
}
}
}
}
Thoir an aire gu bheil Clàradh prìobhaideach agam agus gus ìomhaigh docker a tharraing gu soirbheachail feumaidh mi logadh a-steach ann. Is e am fuasgladh as fheàrr sa chùis seo logadh a-steach agus facal-faire a chuir a-steach gu Vault agus an uairsin fhilleadh a-steach le Nomad. Tha Nomad gu dùthchasach a’ toirt taic do Vault. Ach an toiseach, stàlaich sinn na poileasaidhean riatanach airson Nomad ann an Vault fhèin; faodar an luchdachadh sìos:
# 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
A-nis, às deidh dhuinn na poileasaidhean riatanach a chruthachadh, cuiridh sinn amalachadh le Vault sa bhloc gnìomh anns an fhaidhle job.nomad:
vault {
enabled = true
address = "https://vault.domain.name:8200"
token = "token"
}
Bidh mi a’ cleachdadh cead le tòcan agus ga chlàradh gu dìreach an seo, tha roghainn ann cuideachd an tòcan a shònrachadh mar chaochladair nuair a thòisicheas mi àidseant nomad:
$ VAULT_TOKEN=<token> nomad agent -config /path/to/config
A-nis is urrainn dhuinn na h-iuchraichean a chleachdadh le Vault. Tha am prionnsapal obrachaidh sìmplidh: bidh sinn a’ cruthachadh faidhle ann an obair Nomad a bhios a’ stòradh luachan caochladairean, mar eisimpleir:
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
}
Leis an dòigh shìmplidh seo, faodaidh tu lìbhrigeadh shoithichean gu buidheann Nomad a rèiteachadh agus obrachadh còmhla ris san àm ri teachd. Canaidh mi gu bheil mi gu ìre a’ co-fhaireachdainn le Nomad - tha e nas freagarraiche airson pròiseactan beaga far am faod Kubernetes iom-fhillteachd a bharrachd adhbhrachadh agus nach tuig e a làn chomas. A bharrachd air an sin, tha Nomad foirfe dha luchd-tòiseachaidh - tha e furasta a stàladh agus a rèiteachadh. Ach, nuair a bhios mi a 'dèanamh deuchainn air cuid de phròiseactan, bidh mi a' tighinn tarsainn air duilgheadas leis na dreachan tràtha aige - chan eil mòran de ghnìomhan bunaiteach ann no chan eil iad ag obair ceart. Ach, tha mi a’ creidsinn gun lean Nomad a’ leasachadh agus san àm ri teachd gheibh e na gnìomhan a dh’ fheumas a h-uile duine.
Ùghdar: Ilya Andreev, deasaichte le Alexey Zhadan agus an sgioba Live Linux
Source: www.habr.com