Nomadum botrum portassent utens consul et integrando cum Gitlab

introduction

Nuper favor Kubernetes celeriter crescens - magis magisque incepta exsequenda sunt. Orchestratorem quasi Nomadum attingere volui: perfectum est in inceptis quae iam aliis solutionibus ab HashiCorp utuntur, exempli gratia, Fors et Consul, et ipsa incepta non sunt complexa secundum infrastructuram. Haec materia instructiones continebit de Nomadum instituendo, duos nodi in botrum iungendo, ac Nomad cum Gitlab integrando.

Nomadum botrum portassent utens consul et integrando cum Gitlab

Test scamnum

Paulo de scamno examinis: tres viri virtuales adhibentur cum notis 2 CPU, 4 RAM, 50 Gb SSD, in ornatum localem communem. Eorum nomina et inscriptiones IP:

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

Nomadum consulem instruitur. Nomadum botrus creando

Let's start with the basic installation. Tametsi simplex est, propter integritatem articuli narrabo: ex haustibus et notis ad vivum accessum, cum opus fuerit, essentialiter creatum est.

Antequam praxim incipiamus, de parte speculativa disseremus, quia nunc interest futuram structuram intelligere.

Nodos duos nodos habemus et eos in botrum coniungere volumus, et in posterum etiam botrum scalis latis egebimus - Consule hoc opus erit. Cum hoc instrumento, glomerationibus et nodis additis, valde simplex negotium fit: Nomadum creatus nodi agenti consuli coniungit, et tunc existentem Nomadum botrum coniungit. Initio igitur consulem instituemus, fundamentalem auctoritatem ad tabulam interretam configuramus (sine licentia per defaltam et ad externam electronicam adiri potest), necnon consulem procuratores ipsi Nomad cum servientibus, post quem. tantum ad Nomadas pergamus.

Instrumenta HashiCorp inaugurari valde simplex est: essentialiter, modo fasciculum binarium ad directorium binarium movemus, limam configurationis instrumenti leva, ac fasciculum suum crea.

Download consulem fasciculum binarium et eum in directorium domus usoris exsolvere:

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/

Nunc promptum consulem factum binarium ad ulteriorem configurationem habemus.

Ad cum Consule laborandum, opus est ut unicum clavem utendo imperio keygenico creare;

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

Transeamus ad constituendum consulem configurationem, directorium /etc/consul.d/ creando cum hac structura:

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

Directorium bootstrapum configurationem fasciculi config.json continebit - in eo occasus consulem ponemus. Contenta:

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

Praecipuas normas inspiciamus earumque significationes separatim inspiciamus;

  • bootstrap: verum. Automatico novorum nodum adiectio, si coniunguntur, dabimus. Adnoto nos hic non indicari numerum nodis expectatorum.
  • Server: verum. Admitte modum servo. Consul in hac virtuali machina aget ut unicus minister et dominus tempore, Nomad's VM clientes erunt.
  • Mauris interdum: dc1. Mauris interdum nomine speciem creare botrum. In clientibus et servientibus idem esse debet.
  • encrypt: clavem tuam. Clavis, quae debet esse unica et aequare omnibus clientibus et servientibus. Genitus imperio usus consul keygen.
  • start_join. In hoc indice indices IP inscriptionum indicamus ad quas connexio ponetur. In momento inscriptionis nostrae tantum relinquimus.

In hoc loco possumus uti recta iussione consulem currere;

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

Haec bona via est nunc debug, tamen, methodo permanenti argumentis obviis uti non poteris. Facere servitutem fasciculum ad consulem per systemd administrandum:

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

Contenta consulum.service file:

[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

Consule duc per systemctl:

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

Sit scriptor reprehendo: officium nostrum currendum est, et membra consulis exequendo mandant ut servo nostro videamur:

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

Proximum scaena: installing Nginx et constituens procuratorem et http potestatem. nginx per procuratorem sarcinam instituimus et in directorio /etc/nginx/sites-enabledos nos conformationem tabellam consulis creamus.conf his contentis:

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

Noli oblivisci fasciculum .htpasswd creare et usoris password generare pro eo. Hoc item requiritur ut tabula interretialis omnibus notis dominium nostrum non suppetat. Sed cum Gitlab instituere debebimus, hoc relinquendum erit - aliter applicationem ad Nomadum explicari non poterimus. In incepto meo, tam Gitlab quam Nomad tantum in tela cineritia sunt, ergo hic quaestio non est.

Reliquis duobus servientibus Consul procuratores instituimus secundum hoc mandatum. Repetimus vestigia fasciculi binarii:

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/

Per analogiam cum servo priore, directorium imaginum /etc/consul.d creamus cum hac structura:

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

Contenta fasciculi 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
     }

Servare mutationes et movere ad constituendum fasciculi servitium, contenta:

/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

Consulem in servo deducunt. Nunc, post launch, felis in membris nsul videre debemus. Hoc erit quod feliciter cum botro clienti coniungitur. Idem iterare de servo secundo et postea instituere et configurare Nomad possumus incipere.

Accuratior institutionis Nomadum in documentis officialibus eius describitur. Modi institutionis traditae duae sunt: ​​lima binaria exprimendi et ex fonte componendo. Primum modum eligam.

illud: Consilium celerrime developing, novae updates saepe dimittuntur. Fortasse nova versio tempore huius articuli absolvetur. Priusquam igitur legam, commendo versionem Nomadum hodiernam in ipso momento inhiberi ac deponi.

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

Post vestimenta accipiemus fasciculum Nomadum binarium pondo 65 MB - ad /usr/locum/bin movendum est.

Nomadum indicis notitias faciamus et eius servitutem limam emendo (quod verisimile non erit ab initio);

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

Sequuntur ibi crustulum:

[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

Sed nihil festinamus ad dacia deducere - nondum file eius configurationem creavimus;

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

Postrema structura directorii talis erit:

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

Fasciculus nomad.hcl sequenti configurationem debet continere:

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

Contenta fasciculi 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
}

Noli oblivisci fasciculi configurationis secundae servientis mutare - ibi debes mutare valorem http directivum.

Ultimum hoc statu est configurare Nginx ad procurandum et constituendum http authoritatem. Contenta fasciculi 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";
        }
        
}

Nunc ad tabulam interretam accedere possumus per ornatum externum. Coniungere et ire ad paginam servientibus:

Nomadum botrum portassent utens consul et integrando cum Gitlab
Imago 1 . Index servers in Nomadum botrum portassent

Ambo servientes in tabula feliciter ostentantur, idem in output nodi status nodi videbimus.

Nomadum botrum portassent utens consul et integrando cum Gitlab
Imago 2 . Output vaga nodi status imperium

Quid de Consul? Demus aspectum. Vade ad consulem decuriam, ad nodos paginam:
Nomadum botrum portassent utens consul et integrando cum Gitlab
Imago 3 . Index nodium in botrum consulis

Nunc parati sumus Nomadum cum Consule operando. In ultimo spectaculo ad partem ioci perveniemus: traditionem Docker vasorum a Gitlab ad Nomadum constituendo, et etiam de quibusdam aliis notis distinctis loquentibus.

Partum Gitlab Cursor

Ad imagines navale Nomad explicandas, cursore separato cum Nomadum fasciculo binario utemur (hic obiter notare possumus aliam notam applicationum Hashicorp - singulae fasciculi binarii). Imposuisti cursor ad presul. Simplex Dockerfile pro ea faciamus cum sequenti contento:


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

In eodem consilio creamus .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}

Quam ob rem habebimus praesto imaginem cursoris Nomadiensis in Registro Gitlab, nunc directe ad repositorium project, creare Pipeline et nomad officium nomad configurare.

Project setup

Incipiamus cum tabellario Nomadum officium. Propositum meum in hoc articulo satis primitivum erit: unius operis erit. Contenta .gitlab-ci erunt haec.

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

Hic instruere manually occurrit, sed illud configurare potes ad contenta directorii propositi mutare. Pipeline duobus gradibus consistit: conventus imaginis et instruere ad dacia. In primo stadio scurra colligimus imaginem et in Registrium nostrum detrudimus, et in secundo officium nostrum Nomadum deducimus.

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

Nota quaeso me subcriptio privatum habere et imaginem photographicam feliciter trahere quam necesse est ad eam aperi. Optima solutio in hoc casu est login et tesseram in Vault inire et eam cum Nomade inire. Nomadum paternum fovet Vault. Sed primum rationes necessarias pro Nomad in Vault ipsa instituant, deponi possunt:

# 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

Nunc, necessariis rationibus creatis, integrationem cum Coultu addamus in clausura in schedula onerariarum:

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

Auctoritate utimur per signum et eam directe hic subcriptio, optio quoque est specificandi symbolum variabile ineunte agente vagante;

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

Nunc cum Clave clavium uti possumus. Principium operationis simplex est: lima in Nomadum officium creamus, qui variabilium valores condiet, exempli gratia:

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
}

Hoc simplici accessu, traditionem vasculorum ad Nomadum botrum configurare potes et cum eo in futurum operari. Dicam aliquatenus compatior cum Nomade - aptius est parvis inceptis ubi Kubernetes augere possunt complexionem et plenam suam potentiam non percipient. Plus, Nomad inceptis perfectus est – facile est instituere et configurare. Nihilominus, cum tentat aliqua incepta, Difficultatem invenio cum primis eius versionibus - multae functiones fundamentales simpliciter ibi non sunt vel non recte operantur. Tamen credo Nomadum perseveret augeri ac in futurum acquirere munera quae quisque indiget.

Author: Ilya Andreev, edited by Alexey Zhadan and the Live Linux team


Source: www.habr.com

Add a comment