Whakataki
Ina tata nei, kua tere te tipu o te rongonui o Kubernetes - kua maha ake nga kaupapa e whakatinana ana. I hiahia ahau ki te pa atu ki tetahi kaitoi penei i a Nomad: he mea tino pai mo nga kaupapa e whakamahi ana i etahi atu otinga mai i HashiCorp, hei tauira, Vault me Consul, a ko nga kaupapa ake ehara i te mea uaua mo te hanganga. Kei roto i tenei rauemi nga tohutohu mo te whakauru i a Nomad, te whakakotahi i nga pona e rua ki roto i te kapoi, me te whakauru i a Nomad me Gitlab.
pae whakamatautau
He iti mo te papa whakamatautau: e toru nga kaitoro mariko e whakamahia ana me nga ahuatanga o te 2 PTM, 4 RAM, 50 Gb SSD, ka hono ki te whatunga rohe noa. O ratou ingoa me o ratou wahitau IP:
- nomad-livelinux-01: 172.30.0.5
- nomad-livelinux-02: 172.30.0.10
- consul-livelinux-01: 172.30.0.15
Te whakaurunga o Nomad, Consul. Te hanga i te roopu Nomad
Me timata ki te whakaurunga taketake. Ahakoa he ngawari te tatūnga, ka whakaahuahia e au mo te pono o te tuhinga: i hangaia mai i nga tauira me nga tuhipoka mo te uru tere ina hiahiatia.
I mua i te timata ki te parakatihi, ka matapakihia e tatou te wahanga ariā, na te mea i tenei wahanga he mea nui kia mohio ki te hanganga a meake nei.
E rua a matou kohanga nomad ka hiahia matou ki te whakakotahi i a raatau ki roto i te kapoi, a hei nga ra kei te heke mai ka hiahia ano matou ki te whakahiato kapoi aunoa - mo tenei ka hiahia matou ki te Consul. Ma tenei taputapu, he mahi tino ngawari te whakahiato me te taapiri i nga pona hou: ka hono te node Nomad i hangaia ki te kaihoko Consul, ka hono atu ki te roopu Nomad o naianei. No reira, i te timatanga ka whakauruhia e matou te kaitoro Consul, whirihorahia te whakamanatanga http taketake mo te pae tukutuku (kaore he whakamanatanga ma te taunoa ka taea te uru atu ki tetahi wahitau o waho), me nga Kaihautu ano i runga i nga tūmau Nomad, ka mutu ka haere noa tatou ki Nomad.
He tino ngawari te whakauru i nga taputapu a HashiCorp: ko te tikanga, ka nukuhia e matou te konae rua ki te raarangi bin, ka whakatuu i te konae whirihoranga o te taputapu, ka hanga i tana konae ratonga.
Tikiake i te kōnae ā-rua a Consul ka wetewete ki roto i te whaiaronga kāinga o te kaiwhakamahi:
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/
Inaianei kei a maatau he kaunihera kaunihera kua rite mo etahi atu whirihoranga.
Hei mahi tahi me Consul, me hanga e matou he taviri ahurei ma te whakamahi i te whakahau keygen:
root@consul-livelinux-01:~# consul keygen
Me haere tatou ki te whakarite i te whirihoranga Consul, te hanga i tetahi whaiaronga /etc/consul.d/ me te hanganga e whai ake nei:
/etc/consul.d/
├── bootstrap
│ └── config.json
Kei roto i te whaiaronga bootstrap he konae whirihora config.json - kei roto ka tautuhia e matou nga tautuhinga Consul. Ko ona ihirangi:
{
"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"]
}
Me titiro motuhake ki nga tohutohu matua me o raatau tikanga:
- Bootstrap: pono. Ka taea e matou te taapiri aunoa i nga pona hou mena ka hono. Ka kite ahau kaore matou e whakaatu i konei te maha o nga waahanga e tumanakohia ana.
- tūmau: pono. Whakahohehia te aratau tūmau. Ko te Kaipupuri mo tenei miihini mariko anake te kaimau me te rangatira i tenei wa, ko te VM a Nomad nga kaihoko.
- kaiwhakarato raraunga: dc1. Tauwhāitihia te ingoa o te pokapū raraunga hei hanga i te tautau. Me rite tonu ki nga kaihoko me nga kaitoro.
- whakamuna: to-ki. Ko te matua, he mea ahurei me te rite ki nga kaihoko me nga kaitoro katoa. I hangaia ma te tono consul keygen.
- timata_hono. I roto i tenei rarangi ka tohuhia he rarangi o nga wahitau IP e hono ai te hononga. I tenei wa ka waiho noa to matou ake wahi noho.
I tenei wa ka taea e taatau te whakahaere consul ma te whakamahi i te raina whakahau:
root@consul-livelinux-01:~# /usr/local/bin/consul agent -config-dir /etc/consul.d/bootstrap -ui
He huarahi pai tenei ki te patuiro inaianei, heoi, kare e taea e koe te whakamahi tonu i tenei tikanga mo nga take maamaa. Me hanga he konae ratonga hei whakahaere i a Consul ma te punaha:
root@consul-livelinux-01:~# nano /etc/systemd/system/consul.service
Nga ihirangi o te konae 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
Whakarewa Consul mā systemctl:
root@consul-livelinux-01:~# systemctl start consul
Me titiro tatou: me mahi tonu ta maatau ratonga, a ma te whakahaere i nga whakahau a nga mema kaunihera me kite tatou i to tatou tūmau:
root@consul-livelinux:/etc/consul.d# consul members
consul-livelinux 172.30.0.15:8301 alive server 1.5.0 2 dc1 <all>
I muri mai: te whakauru i te Nginx me te whakarite i te takawaenga me te whakamanatanga http. Ka whakauruhia e matou te nginx na roto i te kaiwhakahaere kete me te raarangi /etc/nginx/sites-enabled ka hangaia e matou he konae whirihoranga consul.conf me nga mea e whai ake nei:
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";
}
}
Kaua e wareware ki te hanga i tetahi konae .htpasswd me te whakaputa i te ingoa kaiwhakamahi me te kupuhipa mo taua mea. Kei te hiahiatia tenei mea kia kore ai te pae tukutuku e waatea ki nga tangata katoa e mohio ana ki to tatou rohe. Heoi, i te wa e whakatuu ana i a Gitlab, me whakarere tenei - mena ka kore e taea te tuku i ta tatou tono ki Nomad. I roto i taku kaupapa, ko Gitlab me Nomad kei runga noa i te paetukutuku hina, na reira kaore he raruraru penei i konei.
I nga toenga e rua ka whakauruhia e matou nga kaihoko a Consul i runga i nga tohutohu e whai ake nei. Ka whakahoki ano i nga taahiraa me te konae rua:
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/
Ma te whakataurite ki te tūmau o mua, ka waihangahia he raarangi mo nga konae whirihoranga /etc/consul.d me te hanganga e whai ake nei:
/etc/consul.d/
├── client
│ └── config.json
Nga ihirangi o te kōnae 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
}
Tiakina nga huringa ka haere tonu ki te whakarite i te konae ratonga, me ona ihirangi:
/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
Ka whakarewahia e matou he kaitohutohu i runga i te tūmau. Na, i muri i te whakarewatanga, me kite tatou i te ratonga whirihora i roto i nga mema nsul. Ko te tikanga kua pai te hono atu ki te tautau hei kaihoko. Whakahokia ano i runga i te tuarua o te tūmau ka mutu ka taea te tiimata ki te whakauru me te whirihora i a Nomad.
Ko etahi atu korero mo te whakaurunga o Nomad e whakaahuatia ana i roto i ana tuhinga mana. E rua nga tikanga whakauru tawhito: te tango i te konae rua me te whakahiato mai i te puna. Ka whiriwhiria e au te tikanga tuatahi.
parau: Kei te tino tere te whakawhanaketanga o te kaupapa, ka tukuna nga whakahou hou. Tena pea ka puta he putanga hou i te wa e oti ai tenei tuhinga. Na, i mua i te panui, ka tūtohu ahau ki te tirotiro i te putanga o Nomad i tenei wa me te tango.
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
Whai muri i te wetewete, ka whiwhi matou i tetahi konae takirua Nomad e 65 MB te taumaha - me nuku ki /usr/local/bin.
Waihangahia he whaiaronga raraunga mo Nomad ka whakatika i tana konae ratonga (kaore pea i te timatanga):
root@nomad-livelinux-01:~# mkdir --parents /opt/nomad
root@nomad-livelinux-01:~# nano /etc/systemd/system/nomad.service
Whakapirihia nga rarangi e whai ake nei ki reira:
[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
Heoi, kaore matou i te tere ki te whakarewa i te nomad - kaore ano matou i hanga i tana konae whirihoranga:
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
Ko te hanganga whaiaronga whakamutunga ka penei:
/etc/nomad.d/
├── nomad.hcl
└── server.hcl
Me whai i te kōnae nomad.hcl te whirihoranga e whai ake nei:
datacenter = "dc1"
data_dir = "/opt/nomad"
Nga ihirangi o te kōnae 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
}
Kaua e wareware ki te huri i te konae whirihoranga i runga i te tūmau tuarua - i reira ka hiahia koe ki te huri i te uara o te tohutohu http.
Ko te mea whakamutunga i tenei waahanga ko te whirihora i a Nginx mo te takawaenga me te whakatu i te whakamanatanga http. Nga ihirangi o te kōnae 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";
}
}
Inaianei ka taea e taatau te uru atu ki te pae tukutuku ma te whatunga o waho. Tūhono ka haere ki te whārangi tūmau:
Whakaahua 1. Rārangi o ngā tūmau i te kāhui Nomad
Ka whakaatu pai nga kaitoro e rua ki te panui, ka kite tatou i te mea ano i roto i te putanga o te whakahau mana node nomad:
Whakaahua 2. Putanga o te tono mana node nomad
He aha te korero mo te Consul? Kia titiro tatou. Haere ki te paewhiri mana Consul, ki te wharangi nodes:
Whakaahua 3. Rārangi o ngā kōpuku i te kāhui Consul
Inaianei kei a maatau tetahi Nomad e mahi tahi ana me te Kaihoko. I te waahanga whakamutunga, ka tae atu ki te waahanga ngahau: te whakarite i te tuku ipu Docker mai i Gitlab ki Nomad, me te korero ano mo etahi atu ahuatanga motuhake.
Waihangahia te Runner Gitlab
Hei tuku i nga whakaahua docker ki Nomad, ka whakamahia e matou he kaihoroi motuhake me te konae rua Nomad kei roto (i konei, ma te ara, ka taea e matou te kite i tetahi atu waahanga o nga tono Hashicorp - takitahi he konae takirua kotahi). Tukuna atu ki te whaiaronga kaihoroi. Me hanga he Dockerfile ngawari mo taua mea me nga mea e whai ake nei:
FROM alpine:3.9
RUN apk add --update --no-cache libc6-compat gettext
COPY nomad /usr/local/bin/nomad
I roto i taua kaupapa ka hangaia e matou .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}
Ko te mutunga, ka whiwhi tatou i te ahua o te kaihoroi Nomad i roto i te Gitlab Registry, inaianei ka taea e tatou te haere tika ki te putunga kaupapa, te hanga Pipeline me te whirihora i te mahi nomad a Nomad.
Tatūnga kaupapa
Me timata me te konae mahi mo Nomad. Ko taku kaupapa i roto i tenei tuhinga ka tino maamaa: kotahi te mahi. Ko nga korero o .gitlab-ci ka penei:
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
I konei ka puta a ringa te tukunga, engari ka taea e koe te whirihora hei huri i nga ihirangi o te raarangi kaupapa. E rua nga waahanga o te Pipeline: ko te whakahiato whakaahua me te tuku ki te hunga nomad. I te wahanga tuatahi, ka kohia e matou he ahua docker ka pana ki roto i ta matou Rehita, a i te tuarua ka whakarewahia e matou a matou mahi ki 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" {}
}
}
}
}
}
Kia mahara kei a au he Rehitatanga motuhake me te tohi angitu i te ahua docker me uru atu ahau ki reira. Ko te otinga pai mo tenei keehi ko te whakauru i te takiuru me te kupuhipa ki roto i te Vault ka whakauru ki a Nomad. Ka tautoko a Nomad i a Vault. Engari tuatahi, me whakauru nga kaupapa here e tika ana mo Nomad i Vault ake; ka taea te tango:
# 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
Inaianei, kua hanga e matou nga kaupapa here e tika ana, ka taapirihia e matou te whakauru ki a Vault i te poraka mahi i roto i te konae job.nomad:
vault {
enabled = true
address = "https://vault.domain.name:8200"
token = "token"
}
Ka whakamahi ahau i te whakamanatanga ma te tohu ka rehita tika ki konei, kei kona ano te whiringa ki te tohu i te tohu hei taurangi i te wa e tiimata ana te kaihoko nomad:
$ VAULT_TOKEN=<token> nomad agent -config /path/to/config
Inaianei ka taea e taatau te whakamahi i nga taviri me Vault. He ngawari te kaupapa o te mahi: ka hangaia e matou he konae i roto i te mahi Nomad ka penapena nga uara o nga taurangi, hei tauira:
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
}
Ma tenei huarahi ngawari, ka taea e koe te whirihora i te tuku ipu ki te roopu Nomad me te mahi tahi a muri ake nei. Ka kii ahau ka aroha ahau ki a Nomad - he pai ake mo nga kaupapa iti ka taea e Kubernetes te whakararu ake, kaore hoki e mohio ki tona kaha. I tua atu, he tino pai a Nomad mo te hunga timata—he ngawari ki te whakauru me te whirihora. Heoi, i te wa e whakamatautau ana i etahi kaupapa, ka raru ahau me ona putanga o mua - he maha nga mahi taketake kaore i reira, kaore ranei e mahi tika. Heoi ano, e whakapono ana ahau ka whanake tonu a Nomad, a, kei te heke mai ka riro i a ia nga mahi e hiahiatia ana e te katoa.
Kaituhi: Ilya Andreev, i whakatikahia e Alexey Zhadan me te roopu Live Linux
Source: will.com