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