Şübhəsiz ki, insanların ən yaxşıları
acı çəkməklə xoşbəxtliyi tapırlar.
Ludwig van Beethoven

Mən Sergeyəm, Yandex.Money-də performans tədqiqatı qrupunda çalışıram. Sizə orkestrasiya istifadə etməyə gedən yolumuzun başlanğıcı haqqında bir hekayə danışmaq istəyirəm - alətləri necə seçdiyimizi və nələri nəzərə aldığımızı. Məqalədəki bütün hadisələr real vaxtda baş verir, buna görə də, əziz oxucular, vəziyyətin inkişafını demək olar ki, birbaşa izləyirsiniz.
Komandamızda dirijor nə üçün lazımdır?
Dirijor kimdir? Fransızca diriger - rəhbərlik etmək, yönləndirmək - musiqi dünyasında bu, ansambl musiqisinin öyrənilməsi və ifasına rəhbərlik edən insandır. Bizim vəziyyətimizdə bu rolu orkestrasiya və avtomatlaşdırma sistemləri tutur.
Onların rolu musiqidəki dirijorun rolundan fərqlənmir - onlar komandaya kömək etməyə, onu yönləndirməyə və təşkil etməyə lazımdır.
Adətən, komanda müəyyən bir güc dəstinə malikdir - onlara serverlər deyək, burada öz layihələrini həyata keçirirlər.
Bu serverlərin əldə edilməsi və istifadəsi müxtəlifdir. Bir neçə nümunə:
- Komanda, məsələn, istifadə etmələri üçün müəyyən parametrlərlə resurs tələb edir.
- İstismar qrupu onlara lazım olan sayı - cloud və ya bare metal (“çıplaq metal”) təqdim edir - və onları SLA əsasında müvafiq şəkildə saxlamağı öhdəsinə götürür. Tənzimləmə də istismar qrupu tərəfindən həyata keçirilir.
- Komanda, istismar qrupundan yalnız cloud və ya bare metal resursları alır, tənzimləməni isə öz imkanları ilə həyata keçirir.
- Komanda öz resurslarını "alır" və onları tamamilə özbaşına saxlayır/tənzimləyir.
Bizim komandamızda saxlanılması lazım olan serverlər var - OS-u yeniləmək, yeni paketlər quraşdırmaq və s.
Biz onları iki əsas tipə ayırmışıq:
- tank qrupu,
- xidmət qrupu.
Tank qrupu Yandex.Tank ilə hostlardan ibarətdir.
Xidmət qrupu, buraya buraxılış dövrünün dəstəklənməsi, avtomatik hesabatların hazırlanması və s. daxil olan bütün xidməti əhatə edir.
Bir anda bütün bunları əl ilə idarə etmək çətin oldu və biz prosesin avtomatlaşdırılması barədə düşünməyə başladıq, serverlərin "şırnağı" mərhələsindən başlayaraq, daxili xidmətimizin hazırlanması, yerləşdirilməsi və işə salınması ilə sona çatdıq.
Niyə dirijor lazımdır, hətta orkestr öz-özünə musiqi ifa edə bilsə?
Başlamaq üçün Ansible-i öyrəndik və serverlərimizi bare metal-yə «yükləməyə» başladıq, beləliklə sistem administratorlarından daha az asılı oluruq. Bu, hər kəs üçün faydalıdır: yeni bacarıqlar əldə edirik və administratorları həmişə kifayət qədər olan işlərindən azad edirik. Biz öz ixtisasımızdan kənarda inkişaf etməyə və komandamızın müstəqilliyinə mümkün qədər nail olmağa çalışırıq.
Şirkətdə Ansible ilə iş uzun müddətdir qurulub və tənzimlənib, buna görə öz həllimizi bu prosesə asanlıqla əlavə etdik.
Hazırda hostların yüklənməsi üç Ansible rolu ilə həyata keçirilir:
- birinci rol OS-u quraşdırır,
- ikinci rol host üçün əsas parametrləri, məsələn, LDAP-avtorizasiyasını tənzimləyir,
- və üçüncü rol docker konteynerində Yandex.Tank və ona aid asılılıqları quraşdırır.
Gəlin komandamızda istifadə etdiyimiz xidmətlərə keçək.
Biz öz işlərimiz üçün Kotlin və Python-dan bərabər istifadə edirik, bir az da Golang əlavə etmək istərdik. Xidmətlərimizin inkişafını və yerləşdirilməsini birləşdirmək üçün onları docker konteynerlərində paketləməyi qərara aldıq. Bu, proqramlaşdırma dilinin seçimini azad edir və eyni zamanda tətbiqimizin tədarükü üçün bir standart format tənzimləyir.
Docker-də ipv6 ilə bağlı qısa qeyd
Bizimlə qarşılıqlı əlaqə saxlayan xidmətlərin bəziləri yalnız ipv6 üzərindən mövcuddur, beləliklə konteynerlər üçün ipv6-nı necə yaratmağı öyrənmək lazım oldu.
Docker-in rəsmi saytında yayımlanan ipv6 sənədlərinə görə, ipv6 yalnız daemon.json-a parametrlərin əlavə edilməsi ilə aktivləşdirilir:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}Bu zaman provayder sizə nəzərdə tutulmuş ipv6 altşəbəkəsini təqdim etməlidir, onu fixed-cidr-v6-da qeyd etməlisiniz.
Amma biz başqa bir variant seçdik — ipv6 NAT, səbəbi isə budur:
- Hazırda docker Hər konteynerdə qlobal yönləndirilə bilən ünvanın olması, bütün portların (hətta yayımlanmamış portlar da daxil olmaqla) hər kəsə açıq olacağı deməkdir, əgər əlavə filtrasiya olunmazsa.
- portların yayımlanması üçün userland proxy,
- iptables yalnız ipv4 üçün .
docker konteyneridir Bu həllin düzgün işləməsi üçün bir sıra əlavə manevrlər etmək lazım oldu. İstifadə sistemində ip6table_nat-i aktivləşdirmək mütləqdir. Sistem modulunun quraşdırılması onun kernelə yüklənəcəyini təmin etmir. Biz bununla bağlı NAT ilə konteyneri işə salarkən belə bir xətayla qarşılaşdıq:
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?)
Problem Ansible roluna modprobe modulu ilə ilkinləşdirmə əlavə etdikdən və əməliyyat sisteminin başlanğıcı ilə yükləndikdən sonra həll olundu.Problem həll olundu, Ansible roluna modprobe modulu ilə başlatma əlavə edildikdən sonra və OS yüklənərkən lineinfile istifadə edildi:
- ad: ip6table_nat modulunu əlavə et
modprobe:
ad: ip6table_nat
vəziyyət: mövcud
- ad: ip6table_nat-i başlamağa əlavə et
lineinfile:
yol: /etc/modules
xətt: 'ip6table_nat'Bu arada, habrda yaxşı bir yazı var , hansı ki, docker-da ipv6 ilə işləmə metodlarının üstünlüklərini və çatışmazlıqlarını qısa və aydın şəkildə izah edir.
Amma əvvəldə verdiyimiz suala qayıdaq:
Niyə dirijor lazımdır, hətta orkestr öz-özünə musiqi ifa edə bilsə?
İndi hər kəs komanda içində oynamağı təsəvvür edə bilər:
- serverlərin «doldurulması» prosesi yaradılıb,
- xidmətlərin inkişafı və yerləşdirilməsi birləşdirilib.
Yalnız bir sual yaranır — how effektiv və maksimum avtomatlaşdırılmış şəkildə docker konteynerlərində xidmətlərimizi yerləşdirmək, yeniləmək və idarə etmək olar?
Hər orkestra iştirakçısı öz partiyasını bilsə də, bəzən səhv edə bilər, ilkin fikrindən uzaqlaşa bilər. Burada biz orkestrimiz olmadan effektiv məşq edə bilməyəcəyimizi, uyumlu ifa etməyəcəyimizi anladığımız yerə gəlirik. Dirijor bütün ifa parametrlərinə, hər şeyin bir tempo və əhvalda birləşməsinə cavabdehdir.
Minimum sərmayə ilə yaxşı bir dirijor əldə etmək necə mümkündür?
Orkestrasiya mövzusu bazarda kifayət qədər yaxşı inkişaf edib. Amma əvvəlcə dirijor üçün köməkçi alətlərlə danışaq.
— iki əsas funksiyanı təqdim edən bir sistemdir:
- xidmətlərin aşkar edilməsi (service discovery),
- paylanmış açar-dəyər anbarı.
Bizim orkestrdə Consul xidmətlərin qeydiyyatı və onların konfiqurasiyalarını saxlamaq üçün məsul olacaq. İki qeydiyyat variantı var:
- Aktiv — xidmətin özünü HTTP API istifadə edərək qeydiyyata aldıqda;
- Passiv — xidmətin əl ilə qeydiyyatı tələb olunur.
Vault — təhlükəsiz məlumatların saxlanmasını və idarə edilməsini standartlaşdıran və birləşdirən bir anbardır — parollar, sertifikatlar.
Bu aləti istifadə etdikdə əldə edəcəyimiz üstünlüklər:
- HTTP API vasitəsilə gizli məlumatların yaradılması və saxlanılması üçün bir mərkəz.
- Transit Secrets Engine — məlumatların şifrələnməsi-deşifrələnməsi onların saxlanması olmadan. Məlumatların şifrələnmiş formada qorunmamış əlaqə kanalları ilə ötürülməsi imkanı.
- Quraşdırılması asan olan giriş siyasətləri.
- Gizli məlumatlara girişin auditi.
- Öz CA (Sertifikat orqanı) yaratmaq imkanı, öz infrastrukturunuzda öz imzalanmış sertifikatlarla idarə etmək üçün.
Bütün tələblərimizi nəzərə alaraq, dirijor vəzifəsinə iki variant uygundur — Kubernetes və Nomad.
Kubernetes
Artıq bununla bağlı yazılmış çoxsaylı məqalələr və kitablar var (budur , məsələn) və bir neçə təqdimat da edilmişdir, ona görə də qısa yazıram — bu demək olar ki, hər şeyi edə bilən universal kombayndır. Bunun əvəzinə ödədiyiniz qiymət — Kubernetes klasterinin həmişə asan quraşdırılması və dəstəklənməsi deyil.
Nomad
HashiCorp-dan, yuxarıda adı çəkilən consul və vault ilə tanınan bir şirkət.
Nomad bizə Kubernetes-dən daha asan quraşdırılacağını və konfiqurasiya ediləcəyini göstərdi. Tək bir ikili fayl həm server, həm də müştəri rejimində işləyir. Həmçinin, Nomad idarəetmə, sürətli planlaşdırma, multidatacenter dəstəyini təmin edən bütün tapşırıqları yerinə yetirir. Eləcə də, Consul və Vault istifadə edərək xidmətlərin orkestrasiyası üçün daha sıx inteqrasiya əldə edirik.
İndidə işdə olanlar:
- Consul yerləşdirmək üçün serverlər hazırladıq,
- Consul-da nomad klasterinin konfiqurasiyası yerləşdiriləcək ki, bu da nomad-ın avtomatik olaraq yerləşdirilməsini təmin edəcək,
- eyni zamanda sirrləri saxlamaq üçün Vault quracağıq.
Sual var — belə işlər üçün dirijor gətirmək lazımdırmı, yoxsa onun olmadan da orkestrasiya yaxşıdır? Bu barədə fikirlərinizi şərhlərdə bizimlə bölüşün.
Blogumuza abunə olun və bizimlə əlaqədə qalın — tezliklə nəticələrimizi sizə təqdim edəcəyik, nomad klasterini istədiyimiz kimi konfiqurasiya edib-etmədiyimizi paylaşacağıq.
Bizim rahat , burada siz hər zaman məsləhət istəyə, həmkarlarınıza kömək edə və performans tədqiqatları və digər mövzularla bağlı söhbət edə bilərsiniz.
Mənbə: habr.com
