Mametraka kluster Nomad mampiasa Consul ary mitambatra amin'ny Gitlab

fampidirana

Vao haingana, nitombo haingana ny lazan'ny Kubernetes - mihamaro ny tetikasa manatanteraka izany. Te hiresaka momba ny orkesitra toa an'i Nomad aho: tonga lafatra amin'ny tetikasa efa mampiasa vahaolana hafa avy amin'ny HashiCorp, ohatra, Vault sy Consul, ary ny tetikasa mihitsy dia tsy sarotra amin'ny fotodrafitrasa. Ity fitaovana ity dia ahitana torolalana amin'ny fametrahana Nomad, manambatra ny node roa ho cluster, ary koa ny fampidirana ny Nomad amin'ny Gitlab.

Mametraka kluster Nomad mampiasa Consul ary mitambatra amin'ny Gitlab

Fijoroana fitsapana

Somary momba ny dabilio fitsapana: mpizara virtoaly telo no ampiasaina miaraka amin'ny toetran'ny 2 CPU, 4 RAM, 50 Gb SSD, mitambatra ho tambajotra eo an-toerana. Ny anaran'izy ireo sy ny adiresy IP:

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

Fametrahana Nomad, Consul. Mamorona cluster Nomad

Andeha isika hanomboka amin'ny fametrahana fototra. Na dia tsotra aza ny fanamboarana, dia holazaiko azy io noho ny fahamarinan'ny lahatsoratra: noforonina tamin'ny drafitra sy naoty ho an'ny fidirana haingana rehefa ilaina izany.

Alohan'ny hanombohantsika fampiharana, dia hiresaka momba ny ampahany teorika isika, satria amin'ity dingana ity dia zava-dehibe ny mahatakatra ny rafitra ho avy.

Manana node roa mpifindrafindra monina izahay ary te hanambatra azy ireo ho cluster, ary amin'ny ho avy dia mila scaling cluster automatique ihany koa izahay - noho izany dia mila Consul. Amin'ny alalan'ity fitaovana ity dia lasa asa tena tsotra ny fanangonana sy fampidirana node vaovao: ny node noforonina dia mifandray amin'ny mpiasan'ny Consul, ary avy eo mifandray amin'ny cluster Nomad efa misy. Noho izany, eo am-piandohana dia hametraka ny mpizara Consul izahay, amboary ny fanomezan-dΓ lana http fototra ho an'ny tontonana tranonkala (tsy misy fanomezan-dΓ lana amin'ny alΓ lan'ny default ary azo idirana amin'ny adiresy ivelany), ary koa ny mpiasan'ny Consul ao amin'ny servers Nomad, aorian'izay mankany amin'ny Nomad ihany isika.

Ny fametrahana ny fitaovan'i HashiCorp dia tena tsotra: raha ny tena izy, dia afindrantsika any amin'ny lahatahiry bin fotsiny ny rakitra binary, amboary ny fisie fanamafisana ny fitaovana, ary mamorona ny rakitra serivisy.

Ampidino ny rakitra binary Consul ary esory ao amin'ny lahatahirin'ny mpampiasa:

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/

Ankehitriny isika dia manana consul binary efa vonona ho an'ny fanamafisana fanampiny.

Raha te hiara-hiasa amin'ny Consul dia mila mamorona fanalahidy tokana isika amin'ny fampiasana ny baiko keygen:

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

Andeha isika hiroso amin'ny fametrahana ny Consul configuration, mamorona lahatahiry /etc/consul.d/ miaraka amin'ity rafitra manaraka ity:

/etc/consul.d/
β”œβ”€β”€ bootstrap
β”‚   └── config.json

Ny lahatahiry bootstrap dia ahitana fisie config.json - ao anatin'izany no hametrahantsika ny fikaonan'ny Consul. Ny ao anatiny:

{
"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"]
}

Andeha hojerentsika misaraka ireo toromarika fototra sy ny dikany:

  • bootstrap: marina. Avelantsika ny fampidirana mandeha ho azy ny nodes vaovao raha mifandray izy ireo. Marihiko fa tsy aseho eto ny tena isan'ny nodes andrasana.
  • mpizara: marina. Alefaso ny maody mpizara. Ny Consul amin'ity milina virtoaly ity no hany mpizara sy tompon'andraikitra amin'izao fotoana izao, ny VM Nomad no ho mpanjifa.
  • datacenter: dc1. Ampidiro ny anaran'ny foibe angona hamoronana ny cluster. Tsy maintsy mitovy amin'ny mpanjifa sy ny mpizara izany.
  • encrypt: ny fanalahidinao. Ny fanalahidy, izay tsy maintsy miavaka ihany koa ary mifanentana amin'ny mpanjifa sy mpizara rehetra. Namboarina tamin'ny alalan'ny baiko consul keygen.
  • start_join. Amin'ity lisitra ity dia manondro lisitr'ireo adiresy IP izay hanaovana ny fifandraisana. Amin'izao fotoana izao, ny adiresinay ihany no avelanay.

Amin'izao fotoana izao dia afaka mihazakazaka consul mampiasa ny baiko baiko isika:

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

Ity dia fomba tsara hanaovana debug izao, na izany aza, tsy ho afaka hampiasa an'io fomba io amin'ny fototra tsy tapaka ianao noho ny antony mazava. Andao hamorona rakitra serivisy hitantana ny Consul amin'ny alΓ lan'ny systemd:

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

Ny votoatin'ny rakitra 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

Alefaso ny Consul amin'ny alΓ lan'ny systemctl:

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

Andeha hojerentsika: tsy maintsy mandeha ny serivisy, ary amin'ny fanatanterahana ny baikon'ny mpikambana ao amin'ny consul dia tokony hahita ny servery izahay:

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

Dingana manaraka: fametrahana Nginx sy fametrahana proxy ary fanomezan-dΓ lana http. Mametraka nginx amin'ny alΓ lan'ny mpitantana ny fonosana izahay ary ao amin'ny lahatahiry /etc/nginx/sites-enabled dia mamorona rakitra consul.conf miaraka amin'ireto atiny manaraka ireto:

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";
    }
}

Aza adino ny mamorona rakitra .htpasswd ary mamorona solonanarana sy tenimiafina ho azy. Ilaina ity singa ity mba tsy ho azon'ny rehetra mahafantatra ny sehatra misy anay ny tontonana web. Na izany aza, rehefa manangana Gitlab dia tsy maintsy miala amin'izany isika - raha tsy izany dia tsy ho afaka hametraka ny fampiharana amin'ny Nomad isika. Ao amin'ny tetikasako, na Gitlab sy Nomad dia tsy misy afa-tsy amin'ny tranonkala maitso, ka tsy misy olana toy izany eto.

Amin'ireo mpizara roa ambiny dia mametraka mpiasan'ny Consul izahay araka ny torolΓ lana manaraka. Averinay ny dingana miaraka amin'ny rakitra 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/

Amin'ny alΓ lan'ny fanoharana amin'ny mpizara teo aloha, dia mamorona lahatahiry ho an'ny fisie /etc/consul.d miaraka amin'ity rafitra manaraka ity izahay:

/etc/consul.d/
β”œβ”€β”€ client
β”‚   └── config.json

Ny votoatin'ny rakitra 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
     }

Tehirizo ireo fanovana ary mandroso amin'ny fametrahana ny rakitra serivisy, ny ao anatiny:

/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

Manokatra consul amin'ny mpizara izahay. Ankehitriny, aorian'ny fandefasana dia tokony ho hitantsika ny serivisy voarindra ao amin'ny mpikambana nsul. Midika izany fa nifandray soa aman-tsara tamin'ny cluster ho mpanjifa izy. Avereno izany amin'ny mpizara faharoa ary aorian'izay dia afaka manomboka mametraka sy manamboatra ny Nomad.

Ny fametrahana ny Nomad amin'ny antsipiriany kokoa dia voalaza ao amin'ny antontan-taratasy ofisialy. Misy fomba fametrahana nentim-paharazana roa: fampidinana rakitra binary sy fanangonana avy amin'ny loharano. Hifidy ny fomba voalohany aho.

fanamarihana: Mivoatra haingana ny tetikasa, matetika no mivoaka ny fanavaozana vaovao. Angamba hisy dikan-teny vaovao hivoaka rehefa vita ity lahatsoratra ity. Noho izany, alohan'ny hamakiana dia manoro hevitra aho hanamarina ny dikan-tenin'ny Nomad amin'izao fotoana izao ary misintona azy.

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

Aorian'ny famoahana azy dia hahazo rakitra binary Nomad milanja 65 MB isika - tsy maintsy afindra any amin'ny /usr/local/bin.

Andao hamorona lahatahiry data ho an'ny Nomad ary hanova ny rakitra serivisy (mety tsy hisy izany any am-piandohana):

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

Apetaho eo ireto andalana manaraka ireto:

[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

Na izany aza, tsy maika ny handefa mpifindrafindra monina izahay - mbola tsy namorona ny fichier-ny:

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

Ny firafitry ny lahatahiry farany dia ho toy izao manaraka izao:

/etc/nomad.d/
β”œβ”€β”€ nomad.hcl
└── server.hcl

Ny fisie nomad.hcl dia tokony ahitana ireto tefy manaraka ireto:

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

Ny votoatin'ny rakitra 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
}

Aza adino ny manova ny fisie fisie amin'ny mpizara faharoa - eo ianao dia mila manova ny sandan'ny http directive.

Ny zavatra farany amin'ity dingana ity dia ny manamboatra Nginx ho an'ny proxy sy fametrahana fanomezan-dΓ lana http. Ny votoatin'ny rakitra 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";
        }
        
}

Ankehitriny isika dia afaka miditra amin'ny tontonana tranonkala amin'ny alΓ lan'ny tambajotra ivelany. Mifandraisa ary mankanesa any amin'ny pejin'ny mpizara:

Mametraka kluster Nomad mampiasa Consul ary mitambatra amin'ny Gitlab
Sary 1. Lisitry ny mpizara ao amin'ny cluster Nomad

Ireo mpizara roa dia aseho soa aman-tsara eo amin'ny tontonana, ho hitantsika ny zavatra mitovy amin'ny famoahana ny baikon'ny status nomad:

Mametraka kluster Nomad mampiasa Consul ary mitambatra amin'ny Gitlab
Sary 2. Famoahana ny baikon'ny sata node nomad

Ahoana ny momba ny Consul? Andeha hojerentsika. Mandehana any amin'ny Consul Control Panel, mankany amin'ny pejy nodes:
Mametraka kluster Nomad mampiasa Consul ary mitambatra amin'ny Gitlab
Sary 3. Lisitry ny node ao amin'ny cluster Consul

Ankehitriny dia manana Nomad voaomana isika miara-miasa amin'ny Consul. Amin'ny dingana farany dia ho tonga amin'ny ampahany mahafinaritra isika: fametrahana ny fandefasana ny kaontenera Docker avy amin'ny Gitlab mankany Nomad, ary miresaka momba ny sasany amin'ireo endri-javatra miavaka hafa.

Mamorona Gitlab Runner

Mba hametrahana sary docker amin'ny Nomad, dia hampiasa mpihazakazaka misaraka miaraka amin'ny rakitra binary Nomad ao anatiny (eto, raha ny marina, afaka manamarika endri-javatra hafa amin'ny fampiharana Hashicorp isika - tsirairay dia rakitra binary tokana). Alefaso any amin'ny lahatahiry mpihazakazaka. Andao hamorona Dockerfile tsotra ho azy miaraka amin'ity atiny manaraka ity:


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

Ao amin'io tetikasa io ihany no mamorona .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}

Vokatr'izany dia hanana sarin'ny mpihazakazaka Nomad ao amin'ny Rejistra Gitlab isika, ankehitriny dia afaka mandeha mivantana any amin'ny tranokalan'ny tetikasa, mamorona Pipeline ary manamboatra ny asan'ny Nomad's nomad.

Fanamboarana tetikasa

Andeha isika hanomboka amin'ny rakitra asa ho an'ny Nomad. Ny tetik'asako ato amin'ity lahatsoratra ity dia ho tena tsotra: misy asa iray. Ny votoatin'ny .gitlab-ci dia ho toy izao manaraka izao:

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

Eto ny fametrahana dia atao amin'ny tanana, fa azonao atao ny manitsy azy hanova ny votoatin'ny lahatahiry tetikasa. Ny fantsona fantsona dia misy dingana roa: fanangonana sary sy ny fametrahana azy amin'ny mpifindrafindra monina. Amin'ny dingana voalohany dia manangona sary docker izahay ary manosika azy ao amin'ny rejisitra, ary amin'ny faharoa dia manomboka ny asantsika ao amin'ny 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" {}
                }
            }
        }
    }
}

Mariho fa manana rejisitra manokana aho ary mba hisintonana sary docker am-pahombiazana dia mila miditra ao aho. Ny vahaolana tsara indrindra amin'ity tranga ity dia ny fampidirana fidirana sy tenimiafina ao amin'ny Vault ary ampifandraiso amin'ny Nomad. Nomad dia manohana an'i Vault. Fa aloha, andao hametraka ny politika ilaina ho an'ny Nomad ao amin'ny Vault mihitsy; azo alaina izy ireo:

# 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

Ankehitriny, rehefa namorona ny politika ilaina, dia hanampy ny fampidirana miaraka amin'i Vault ao amin'ny sakana asa ao amin'ny job.nomad rakitra:

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

Mampiasa fanomezan-dΓ lana amin'ny alΓ lan'ny token aho ary misoratra anarana mivantana eto, misy ihany koa ny safidy hamaritana ny mari-pamantarana ho miovaova rehefa manomboka mpandraharaha nomad:

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

Ankehitriny dia afaka mampiasa ny fanalahidy miaraka amin'ny Vault isika. Tsotra ny fitsipiky ny fandidiana: mamorona rakitra ao amin'ny asa Nomad izay hitahiry ny soatoavin'ny variables, ohatra:

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
}

Amin'ny alalan'ity fomba tsotra ity dia azonao atao ny manamboatra ny fandefasana kaontenera amin'ny cluster Nomad ary miara-miasa aminy amin'ny ho avy. Lazaiko fa amin'ny lafiny iray dia miombom-pihetseham-po amin'i Nomad aho - mety kokoa amin'ny tetikasa madinika izay ahafahan'ny Kubernetes miteraka fahasarotana fanampiny ary tsy hahatsapa ny fahafaha-manaony. Fanampin'izay, tonga lafatra ho an'ireo vao manomboka ny Nomad β€” mora ny mametraka sy manitsy. Na izany aza, rehefa manao fitsapana amin'ny tetikasa sasany aho dia tojo olana amin'ny dikan-teny voalohany - maro ny fiasa fototra tsy eo fotsiny na tsy mandeha tsara. Na izany aza, mino aho fa mbola hivoatra hatrany ny Nomad ary amin'ny ho avy dia hahazo ny asa ilain'ny tsirairay.

Mpanoratra: Ilya Andreev, natontan'i Alexey Zhadan sy ny ekipa Live Linux


Source: www.habr.com

Add a comment