Cnuasach Nomad a bhunú ag úsáid Consal agus ag comhtháthú le Gitlab

Réamhrá

Le déanaí, tá an tóir a bhí ar Kubernetes ag fás go tapa - tá níos mó agus níos mó tionscadal á gcur i bhfeidhm. Theastaigh uaim teagmháil a dhéanamh le ceolfhoirneoir cosúil le Nomad: tá sé foirfe do thionscadail a úsáideann réitigh eile ó HashiCorp cheana féin, mar shampla, Vault and Consul, agus níl na tionscadail féin casta i dtéarmaí bonneagair. Beidh treoracha san ábhar seo maidir le Nomad a shuiteáil, dhá nód a chomhcheangal i mbraisle, chomh maith le Nomad a chomhtháthú le Gitlab.

Cnuasach Nomad a bhunú ag úsáid Consal agus ag comhtháthú le Gitlab

Seastán tástála

Beagán faoin mbinse tástála: úsáidtear trí fhreastalaí fíorúla le tréithe 2 CPU, 4 RAM, 50 Gb SSD, aontaithe i líonra áitiúil coiteann. A n-ainmneacha agus seoltaí IP:

  1. nomad-livelinux-01: 172.30.0.5
  2. nomad-livelinux-02: 172.30.0.10
  3. consal-livelinux-01: 172.30.0.15

Suiteáil Nomad, Consal. Cnuasach Nomad a chruthú

Let tús leis an suiteáil bhunúsach. Cé go raibh an socrú simplí, déanfaidh mé cur síos air ar mhaithe le sláine an ailt: cruthaíodh é go bunúsach ó dhréachtaí agus nótaí le haghaidh rochtain tapa nuair is gá.

Sula dtosaímid ar an gcleachtas, déanfaimid plé ar an gcuid teoiriciúil, mar ag an gcéim seo tá sé tábhachtach tuiscint a fháil ar an struchtúr sa todhchaí.

Tá dhá nód fánach againn agus ba mhaith linn iad a chomhcheangal i mbraisle, agus sa todhchaí beidh gá againn freisin le scálú braisle uathoibríoch - le haghaidh seo beidh Consal de dhíth orainn. Leis an uirlis seo, déantar tasc an-simplí a bhailiú agus a chur leis nóid nua: nascann an nód Nomad cruthaithe leis an ngníomhaire Consal, agus ansin nascann sé leis an mbraisle Nomad atá ann cheana féin. Dá bhrí sin, ag an tús déanfaimid an freastalaí Consal a shuiteáil, bunúdarú http a chumrú don phainéal gréasáin (tá sé gan údarú de réir réamhshocraithe agus is féidir rochtain a fháil air ag seoladh seachtrach), chomh maith leis na gníomhairí Consal iad féin ar fhreastalaithe Nomad, ina dhiaidh sin ní rachaimid ar aghaidh ach go Nomad.

Tá sé an-simplí uirlisí HashiCorp a shuiteáil: go bunúsach, ní dhéanaimid ach an comhad dénártha a bhogadh chuig an eolaire boscaí bruscair, comhad cumraíochta an uirlis a bhunú, agus a chomhad seirbhíse a chruthú.

Íoslódáil an comhad dénártha Consal agus díphacáil isteach in eolaire baile an úsáideora:

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/

Anois tá dénártha consal réidh againn le haghaidh tuilleadh cumraíochta.

Chun oibriú le Consal, ní mór dúinn eochair uathúil a chruthú ag baint úsáide as an ordú keygen:

root@consul-livelinux-01:~# consul keygen

Rachaimid ar aghaidh go dtí an chumraíocht Consal a bhunú, ag cruthú eolaire /etc/consul.d/ leis an struchtúr seo a leanas:

/etc/consul.d/
├── bootstrap
│   └── config.json

Beidh comhad cumraíochta sa chomhadlann bootstrap config.json - ann socróimid na socruithe Consal. A bhfuil 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"]
}

Breathnaímid ar na príomhthreoracha agus a mbrí ar leithligh:

  • bootstrap: fíor. Cumasaimid nóid nua a chur leis go huathoibríoch má tá siad nasctha. Tugaim faoi deara nach gcuirimid in iúl anseo líon beacht na nóid a bhfuiltear ag súil leo.
  • freastalaí: fíor. Cumasaigh mód freastalaí. Feidhmeoidh Consal ar an meaisín fíorúil seo mar an t-aon fhreastalaí agus máistir faoi láthair, is iad VM Nomad na cliaint.
  • Datacenter:dc1. Sonraigh ainm an ionaid sonraí chun an braisle a chruthú. Caithfidh sé a bheith comhionann ar chliaint agus ar fhreastalaithe araon.
  • criptigh: d'eochair. An eochair, a chaithfidh a bheith uathúil agus comhoiriúnach ar gach cliant agus freastalaí. Ginte ag baint úsáide as an ordú consul keygen.
  • tús_join. Sa liosta seo léirímid liosta seoltaí IP a ndéanfar an nasc leo. Faoi láthair níl fágtha againn ach ár seoladh féin.

Ag an bpointe seo is féidir linn consal a rith ag baint úsáide as an líne ordaithe:

root@consul-livelinux-01:~# /usr/local/bin/consul agent -config-dir /etc/consul.d/bootstrap -ui

Is bealach maith é seo chun dífhabhtú a dhéanamh anois, áfach, ní bheidh tú in ann an modh seo a úsáid ar bhonn leanúnach ar chúiseanna soiléire. Cruthaímid comhad seirbhíse chun Consal a bhainistiú trí systemd:

root@consul-livelinux-01:~# nano /etc/systemd/system/consul.service

Ábhar an chomhaid 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

Seoladh Consal trí systemctl:

root@consul-livelinux-01:~# systemctl start consul

Déanaimis seiceáil: caithfidh ár seirbhís a bheith ag rith, agus trí ordú na gcomhaltaí consal a fhorghníomhú ba cheart dúinn ár bhfreastalaí a fheiceáil:

root@consul-livelinux:/etc/consul.d# consul members
consul-livelinux    172.30.0.15:8301  alive   server  1.5.0  2         dc1  <all>

An chéad chéim eile: Nginx a shuiteáil agus údarú seachfhreastalaí agus http a chur ar bun. Suiteáil muid nginx tríd an mbainisteoir pacáiste agus san eolaire /etc/nginx/sites-enabled cruthaímid comhad cumraíochta consul.conf leis an ábhar seo 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";
    }
}

Ná déan dearmad comhad .htpasswd a chruthú agus ainm úsáideora agus pasfhocal a ghiniúint dó. Tá an mhír seo ag teastáil ionas nach mbeidh an painéal gréasáin ar fáil do gach duine a bhfuil aithne aige ar ár bhfearann. Nuair a bheidh Gitlab á bhunú, áfach, beidh orainn é seo a thréigean - nó ní bheimid in ann ár n-iarratas a imscaradh chuig Nomad. I mo thionscadal, níl Gitlab agus Nomad araon ach ar an ngréasán liath, agus mar sin níl aon fhadhb den sórt sin anseo.

Ar an dá fhreastalaí eile a shuiteáilimid gníomhairí Consal de réir na dtreoracha seo a leanas. Déanaimid na céimeanna arís leis an gcomhad dénártha:

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/

De réir analaí leis an bhfreastalaí roimhe seo, cruthaímid eolaire le haghaidh comhaid cumraíochta /etc/consul.d leis an struchtúr seo a leanas:

/etc/consul.d/
├── client
│   └── config.json

Ábhar an chomhaid 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ábháil na hathruithe agus bog ar aghaidh go dtí socrú an chomhaid seirbhíse, a bhfuil 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

Seolaimid consal ar an bhfreastalaí. Anois, tar éis seoladh, ba cheart dúinn an tseirbhís cumraithe a fheiceáil i mbaill nsul. Ciallaíonn sé seo gur éirigh leis nascadh leis an mbraisle mar chliant. Déan an rud céanna arís ar an dara freastalaí agus ina dhiaidh sin is féidir linn tosú ar Nomad a shuiteáil agus a chumrú.

Tá cur síos níos mionsonraithe ar shuiteáil Nomad ina dhoiciméid oifigiúil. Tá dhá mhodh suiteála traidisiúnta ann: comhad dénártha a íoslódáil agus a thiomsú ón bhfoinse. Roghnóidh mé an chéad mhodh.

Tabhair faoi deara: Tá an tionscadal ag forbairt go han-tapa, is minic a scaoiltear nuashonruithe nua. B’fhéidir go mbeidh leagan nua eisithe faoin am a mbeidh an t-alt seo críochnaithe. Mar sin, roimh léamh, molaim an leagan reatha de Nomad a sheiceáil faoi láthair agus é a íoslódáil.

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

Tar éis díphacáil a dhéanamh, gheobhaidh muid comhad dénártha Nomad a mheáchan 65 MB - ní mór é a aistriú go /usr/local/bin.

Déanaimis eolaire sonraí a chruthú do Nomad agus a chomhad seirbhíse a chur in eagar (is dócha nach mbeidh sé ann ag an tús):

root@nomad-livelinux-01:~# mkdir --parents /opt/nomad
root@nomad-livelinux-01:~# nano /etc/systemd/system/nomad.service

Greamaigh na línte seo a leanas ansin:

[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

Mar sin féin, níl aon deifir orainn nomad a sheoladh - níl a chomhad cumraíochta cruthaithe againn fós:

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

Beidh an struchtúr eolaire deiridh mar seo a leanas:

/etc/nomad.d/
├── nomad.hcl
└── server.hcl

Ba cheart go mbeadh an chumraíocht seo a leanas sa chomhad nomad.hcl:

datacenter = "dc1"
data_dir = "/opt/nomad"

Ábhar an chomhaid 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
}

Ná déan dearmad an comhad cumraíochta a athrú ar an dara freastalaí - ansin beidh ort luach na treorach http a athrú.

Is é an rud deireanach ag an gcéim seo ná Nginx a chumrú le haghaidh seachfhreastalaí agus údarú http a bhunú. Ábhar an chomhaid 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";
        }
        
}

Anois is féidir linn rochtain a fháil ar an bpainéal gréasáin trí líonra seachtrach. Ceangail agus téigh go dtí an leathanach freastalaithe:

Cnuasach Nomad a bhunú ag úsáid Consal agus ag comhtháthú le Gitlab
Íomhá 1 . Liosta freastalaithe i mbraisle Nomad

Taispeántar an dá fhreastalaí go rathúil sa phainéal, feicfimid an rud céanna in aschur an ordaithe stádais nód nomad:

Cnuasach Nomad a bhunú ag úsáid Consal agus ag comhtháthú le Gitlab
Íomhá 2 . Aschur an ordaithe stádais nód nomad

Cad mar gheall ar Chonsal? A ligean ar a fháil breathnú. Téigh go dtí an painéal rialaithe Consal, chuig an leathanach nóid:
Cnuasach Nomad a bhunú ag úsáid Consal agus ag comhtháthú le Gitlab
Íomhá 3 . Liosta de na nóid sa bhraisle Consal

Anois tá Nomad ullmhaithe againn ag obair i gcomhar leis an gConsal. Sa chéim dheireanach, beidh muid ag dul go dtí an chuid spraoi: socrú a dhéanamh ar sheachadadh coimeádáin Docker ó Gitlab go Nomad, agus ag caint freisin faoi roinnt de na gnéithe sainiúla eile.

Runner Gitlab á Chruthú

Chun íomhánna docker a imscaradh chuig Nomad, úsáidfimid rádala ar leith leis an gcomhad dénártha Nomad taobh istigh (anseo, dála an scéil, is féidir linn gné eile d'iarratais Hashicorp a thabhairt faoi deara - ina n-aonar is comhad dénártha amháin iad). Uaslódáil é chuig an eolaire runner. Cruthaímid Dockerfile simplí dó leis an ábhar seo a leanas:


FROM alpine:3.9
RUN apk add --update --no-cache libc6-compat gettext
COPY nomad /usr/local/bin/nomad

Sa tionscadal céanna cruthaímid .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 sin, beidh íomhá ar fáil againn den rádala Nomad i gClárlann Gitlab, anois is féidir linn dul díreach chuig stór an tionscadail, Píblíne a chruthú agus post nomad Nomad a chumrú.

Socrú tionscadail

Cuirimis tús le comhad an phoist do Nomad. Beidh mo thionscadal san Airteagal seo go leor primitive: beidh sé comhdhéanta de thasc amháin. Is mar seo a leanas a bheidh ábhar .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

Anseo tarlaíonn an t-imscaradh de láimh, ach is féidir leat é a chumrú chun ábhar an eolaire tionscadail a athrú. Tá dhá chéim sa phíblíne: cóimeáil íomhá agus a imscaradh chuig fánaíocht. Ag an gcéad chéim, déanaimid íomhá docker a chur le chéile agus a bhrú isteach inár gClárlann, agus ag an dara céim seolann muid ár bpost i 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" {}
                }
            }
        }
    }
}

Tabhair faoi deara le do thoil go bhfuil Clárlann phríobháideach agam agus chun íomhá docker a tharraingt go rathúil ní mór dom logáil isteach ann. Is é an réiteach is fearr sa chás seo ná logáil isteach agus pasfhocal a chur isteach i Vault agus ansin é a chomhtháthú le Nomad. Tugann Nomad tacaíocht ó dhúchas do Vault. Ach ar dtús, déanaimis na beartais riachtanacha do Nomad a shuiteáil in Vault féin; is féidir iad a íoslódáil:

# 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

Anois, tar éis na polasaithe riachtanacha a chruthú, cuirfimid comhtháthú le Vault sa bhloc tasc sa chomhad job.nomad:

vault {
  enabled = true
  address = "https://vault.domain.name:8200"
  token = "token"
}

Úsáidim údarú trí chomhartha agus cláraíonn mé é go díreach anseo, tá an rogha ann freisin an comhartha a shonrú mar athróg agus gníomhaire nomad á thosú:

$ VAULT_TOKEN=<token> nomad agent -config /path/to/config

Anois is féidir linn na heochracha a úsáid le cruinneachán. Tá prionsabal na hoibríochta simplí: cruthaímid comhad i Nomad job a stórálfaidh luachanna na n-athróg, mar shampla:

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 gcur chuige simplí seo, is féidir leat seachadadh coimeádán chuig braisle Nomad a chumrú agus oibriú leis sa todhchaí. Déarfaidh mé go bhfuil comhbhrón agam go pointe áirithe le Nomad - tá sé níos oiriúnaí do thionscadail bheaga inar féidir le Kubernetes castacht bhreise a chur faoi deara agus nach mbainfidh sé a lánacmhainneacht amach. Ina theannta sin, tá Nomad foirfe do thosaitheoirí - tá sé éasca a shuiteáil agus a chumrú. Mar sin féin, nuair a dhéantar tástáil ar roinnt tionscadal, bíonn fadhb agam lena leaganacha luatha - níl go leor feidhmeanna bunúsacha ann nó ní oibríonn siad i gceart. Mar sin féin, creidim go leanfaidh Nomad ag forbairt agus go bhfaighidh sé na feidhmeanna atá de dhíth ar gach duine amach anseo.

Údar: Ilya Andreev, curtha in eagar ag Alexey Zhadan agus an fhoireann Live Linux


Foinse: will.com

Add a comment