It soe amper ferkeard wêze om te sizzen dat de bêste fan manlju
fyn freugde troch lijen.
Ludwig van Beethoven

Ik bin Sergey, ik wurkje by Yandex.Money yn it prestaasjesûndersykteam. Ik wol jo it begjin fan it ferhaal fertelle oer ús paad nei it brûken fan orkestraasje - hoe't wy ynstruminten hawwe keazen en wêr't wy rekken mei hawwe. Alle eveneminten út it artikel plakfine yn realtime, sadat jo, bêste lêzers, de ûntwikkeling fan 'e situaasje hast live folgje.
Wêrom hawwe wy in dirigint nedich yn ús team?
Wa is in dirigint? Fan fr. diriger - beheare, regissearje, liede - yn 'e wrâld fan muzyk - dit is in persoan dy't de lieder is fan it learen en útfieren fan ensemblemuzyk. Yn ús gefal wurdt dit plak beset troch orkestraasje- en automatisearringssystemen.
Har rol is net oars as de rol fan in dirigint yn muzyk - se binne nedich om it team te helpen, te begelieden en har spul te organisearjen.
As regel hat in team in bepaalde set kapasiteiten - lit ús se tsjinners neame - wêrop se har projekten útfiere.
De oanpak foar it krijen en operearjen fan dizze servers is farieare. In pear foarbylden:
- It team docht in fersyk, bygelyks, oan 'e operaasjegroep, om har middels te foarsjen mei bepaalde parameters.
- It operaasjeteam foarsjocht harren fan de nedige kwantiteit - wolk of bleat metaal - en ferplichtet har om se yn goede steat te hâlden neffens de SLA. De opset wurdt ek útfierd troch it operaasjeteam.
- It team ûntfangt allinich wolk- of bleate metalen boarnen fan 'e operaasjegroep, en konfigurearret it op har eigen.
- It team sels "keapet" de middels en ûnderhâldt/stelt se folslein selsstannich op.
Us team brûkt servers dy't moatte wurde stipe - it OS bywurkje, nije pakketten ynstallearje, ensfh.
Foar ússels hawwe wy se ferdield yn twa haadtypen:
- tank groep,
- tsjinst groep.
De tank groep bestiet út hosts mei Yandex.Tank.
De tsjinstgroep omfettet alles relatearre oan ûnderhâld - dit binne ferskate tsjinsten om stipe te leverjen foar de frijlittingssyklus, automatyske rapporten te generearjen, ensfh.
Op in stuit waard dit alles ûngemaklik om mei de hân te behearjen, en wy tochten oer it automatisearjen fan it heule proses, begjinnend fan "laden" fan servers en einigje mei de ûntwikkeling, frijlitting en lansearring fan ús ynterne tsjinst.
Wêrom is in dirigint nedich, ek al kin it orkest sels spylje?
Om te begjinnen, hawwe wy Ansible behearske en begûnen ús bleate metalen tsjinners te "jitten" om minder ôfhinklik te wêzen fan systeembehearders - elkenien wint hjir, wy krije nije feardigens en ûntlêste behearders fan wat fan it wurk dat se altyd genôch hawwe sûnder ús . Wy stribje dernei om safolle mooglik te ûntwikkeljen bûten ús spesjaliteit en teamautonomie.
Yn it bedriuw is wurk mei Ansible al in lange tiid konfigurearre en regele, sadat wy ús oplossing maklik yn dit proses yntegrearje.
Op it stuit bestiet de hostpool út trije Ansible-rollen:
- de earste rol ynstallearret it OS,
- de twadde rint basisynstellingen foar de host, LDAP-autorisaasje, bygelyks,
- en de tredde ynstallearret Yandex.Tank en relatearre ôfhinklikens yn in docker-container.
Litte wy trochgean nei de tsjinsten dy't wy binnen it team brûke.
Foar ús taken brûke wy Kotlin en Python gelyk, en in bytsje mear Golang. Om de ûntwikkeling en ynset fan ús tsjinsten te ferienigjen, besleaten wy se yn Docker-konteners te ferpakken. Dit jout jo de frijheid om in programmeartaal te kiezen en regelet tagelyk in unifoarm leveringsformaat foar jo applikaasje.
In lytse opmerking oer ipv6 yn Docker
Guon fan 'e tsjinsten wêrmei wy omgeane binne allinich beskikber fia ipv6, dus wy moasten útfine hoe't wy ipv6 foar konteners kinne meitsje.
Neffens de ipv6-dokumintaasje op 'e offisjele Docker-webside is ipv6 ynskeakele troch parameters ta te foegjen oan daemon.json:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}
Yn dit gefal moat de provider in ipv6-subnet útjaan, wêryn jo registrearje fixed-cidr-v6.
Wy hawwe lykwols in oare opsje keazen - ipv6 NAT, en hjir is wêrom:
- No docker allinnich mei ipv6.
- In globaal routerber adres hawwe yn elke kontener betsjut dat alle havens (sels net-publisearre) wurde bleatsteld oan elkenien, útsein as ekstra filtering wurdt útfierd.
- userland proxy foar publisearjen fan havens, .
ipv6 NAT is , dy't sels de regels yn ip6tables beheart en se bewurket by it tafoegjen fan in nije kontener.
Om dizze oplossing goed te wurkjen, wie it nedich om in oantal oare manipulaasjes te meitsjen. Wês wis dat jo ip6table_nat op it systeem inisjalisearje. De oanwêzigens fan in module ynstalleare op it systeem garandearret net dat de module by it opstarten yn 'e kernel laden wurdt. Wy binne dit tsjinkaam doe't wy dizze flater krigen by it útfieren fan in kontener mei NAT op in frisse host:
2019/01/22 14:59:54 running [/sbin/ip6tables -t filter -N DOCKER --wait]: exit status 3: modprobe: can't change directory to '/lib/modules': No such file or directory
ip6tables v1.6.2: can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)
It probleem waard oplost nei it tafoegjen fan inisjalisaasje oan 'e Ansible-rol mei de modprobe-module en it laden by it opstarten fan OS mei lineinfile:
- name: Add ip6table_nat module
modprobe:
name: ip6table_nat
state: present
- name: Add ip6table_nat to boot
lineinfile:
path: /etc/modules
line: 'ip6table_nat'
Trouwens, der is in goede ien op 'e hub , dy't koart en dúdlik beskriuwt de foardielen en neidielen fan ien of oare metoade foar it útfieren fan ipv6 yn docker.
Mar lit ús weromgean nei ús fraach oan it begjin:
Wêrom is in dirigint nedich, ek al kin it orkest sels spylje?
No stelt elkenien foar hoe te spyljen yn ús team:
- it proses fan "útjaan" fan servers is oanmakke,
- ûntwikkeling en ynset fan tsjinsten wurde ferienige.
In ridlike fraach ûntstiet: hoe kinne jo ús tsjinsten yn Docker-konteners effisjint en sa automatysk mooglik ynsette, bywurkje en kontrolearje?
Nettsjinsteande it feit dat elk orkestlid syn part wit, kin er yn de war komme en ôfwike fan it oarspronklike idee. Hjir komme wy ta de konklúzje dat sûnder dirigint ús orkest net effektyf repetearje sil en gearhingjend spylje. De dirigint is ferantwurdlik foar alle parameters fan 'e foarstelling, en soarget derfoar dat alles ferienige wurdt troch ien tempo en stimming.
Hoe kinne jo in goede dirigint krije mei minimale ynvestearring?
It ûnderwerp fan orkestraasje is frij goed ûntwikkele yn 'e merke. Mar earst litte wy prate oer helpmiddels dy't de dirigint kinne helpe.
- in systeem dat twa haadfunksjes leveret:
- tsjinst ûntdekking,
- ferspraat kaai-wearde opslach.
Yn ús orkest sil Consul ferantwurdlik wêze foar it registrearjen fan tsjinsten en it bewarjen fan har konfiguraasjes. D'r binne twa opsjes foar registraasje:
- Aktyf is as de tsjinst himsels registrearret mei de HTTP API;
- Passyf - de tsjinst moat wurde registrearre mei de hân.
Vault is in repository dat de feilige opslach en ôfhanneling fan geheimen standerdisearret en ferieniget - wachtwurden, sertifikaten.
Hjir binne de foardielen dy't wy sille krije troch dit ark te brûken:
- In ienich sintrum foar it meitsjen en opslaan fan geheimen en it behearen fan har libbenssyklus mei de HTTP API.
- Transit Secrets Engine - fersifering en ûntsifering fan gegevens sûnder it op te slaan. De mooglikheid om gegevens yn fersifere foarm oer te stjoeren oer net befeilige kommunikaasjekanalen.
- Tagong ta belied dat maklik te konfigurearjen is.
- Audit fan tagong ta geheimen.
- De mooglikheid om jo eigen CA (Certificate Authority) te meitsjen om sels-ûndertekene sertifikaten binnen jo ynfrastruktuer te behearjen.
Sjoen al ús easken wiene twa opsjes geskikt foar de rol fan dirigint - Kubernetes en Nomad.
Kubernetes
Hoefolle artikels en boeken binne der al oer him skreaun (hjir , bygelyks), binne d'r rapporten dy't ik koart sil skriuwe - dit is in universele harvester dy't hast alles kin dwaan. De priis hjirfoar is dat it opsetten en ûnderhâlden fan in kluster op Kubernetes net altyd maklik is.
Nomade
út HashiCorp, in bedriuw bekend om de hjirboppe neamde konsul en ferwulft.
Wy fûnen dat Nomad frijwat makliker is te ynstallearjen en te konfigurearjen dan Kubernetes. Ien binêre triem wurket yn sawol tsjinner as client modus. Tagelyk beslacht Nomad de heule list mei taken dy't wy wolle dat it oplost: klusterbehear, snelle planner, multidatacenter-stipe. Plus, by it brûken fan konsul en vault, krije wy strakkere yntegraasje foar it orkestrearjen fan ús tsjinsten.
Wat is op it stuit dwaande:
- taret servers foar Consul-ynset,
- de konfiguraasje fan 'e nomadcluster sil yn Consul ynfierd wurde, mei help fan' e nomad moat automatysk ynset wurde,
- Parallel sille wy ferwulft ynstallearje om geheimen op te slaan.
Fraach oan it publyk: is it de muoite wurdich om foar sokke taken in dirigint yn te nimmen of docht it orkest it goed sûnder him? Fertel ús yn 'e kommentaren wat jo tinke oer dit.
Abonnearje op ús blog en bliuw yn kontakt - wy sille jo gau fertelle wat der op it lêst barde en oft wy it nomadenkluster konfigureare sa't wy it woenen.
Kom nei ús gesellich , wêr't jo altyd om advys kinne freegje, kollega's helpe en gewoan petearje oer produktiviteitsûndersyk en mear.
Boarne: www.habr.com
