A’ stèidheachadh cruinneachadh Nomad a’ cleachdadh Consul agus ag aonachadh le Gitlab

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.

A’ stèidheachadh cruinneachadh Nomad a’ cleachdadh Consul agus ag aonachadh 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:

  1. nomad-livelinux-01: 172.30.0.5
  2. nomad-livelinux-02: 172.30.0.10
  3. 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:

A’ stèidheachadh cruinneachadh Nomad a’ cleachdadh Consul agus ag aonachadh le Gitlab
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:

A’ stèidheachadh cruinneachadh Nomad a’ cleachdadh Consul agus ag aonachadh le Gitlab
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:
A’ stèidheachadh cruinneachadh Nomad a’ cleachdadh Consul agus ag aonachadh le Gitlab
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

Cuir beachd ann