Nomad — container va boshqa turdagi workload’larni cluster bo‘ylab joylashtirish va boshqarishga mo‘ljallangan scheduler hamda orchestrator. U service, batch job va system joblarni server node’lari orasida taqsimlaydi.
Nomad faqat container bilan cheklanmaydi. Driver orqali executable, virtualizatsiya yoki boshqa runtime workloadlarini ham boshqarishi mumkin.
Cluster
Nomad cluster ikki asosiy role’dan iborat:
- server;
- client.
Serverlar cluster state, scheduling va leadershipni boshqaradi.
Client node’lar workload’larni ishga tushiradi va holatini serverlarga yuboradi.
Server
- job submission;
- scheduling;
- cluster membership;
- state replication;
- leader election;
- evaluation
jarayonlarini boshqaradi.
Yuqori mavjudlik uchun bir nechta server ishlatiladi.
Consensus majority mavjud bo‘lmasa yangi boshqaruv qarorlari cheklanishi mumkin.
Client
Client node workload bajariladigan host.
U:
- resource ma’lumotini yuboradi;
- allocation oladi;
- driver orqali task ishga tushiradi;
- log va statusni kuzatadi;
- health holatini serverga qaytaradi.
Clientning CPU, memory va boshqa capabilitylari schedulingda ishlatiladi.
Job
Job kerakli workload ta’rifidir.
Unda:
sozlamalari mavjud.
Job file version control’da saqlanishi mumkin.
Job turlari
Service
Uzoq ishlaydigan application yoki daemon.
Masalan, web server yoki API.
Batch
Ishni bajarib tugaydigan task.
Masalan, data processing yoki report.
System
Mos har client node’da ishlaydigan task.
Masalan, log agent yoki monitoring.
Task group
Birga joylashtirilishi kerak bo‘lgan tasklar groupga birlashtiriladi.
Ular:
bilan ishlashi mumkin.
Bu sidecar pattern uchun qulay.
Driver
Driver taskni qaysi runtime orqali bajarishni belgilaydi.
- container;
- raw executable;
- Java;
- virtualized workload;
- external plugin
bo‘lishi mumkin.
Har driverning security va host talabi farq qiladi.
Scheduling
Scheduler job talablari va node imkoniyatlarini solishtiradi.
Hisobga olinadi:
- CPU;
- memory;
- device;
- region;
- datacenter;
- constraint;
- affinity;
- spread;
- volume;
- port.
Mos node topilmasa allocation pending holatda qoladi.
Allocation
Job task groupining node’da ishga tushirilgan instance’i allocation.
ga ega.
Deployment davomida eski va yangi allocationlar birga mavjud bo‘lishi mumkin.
Evaluation
Job yoki cluster holati o‘zgarganda scheduling evaluation yaratiladi.
Evaluation schedulerga yangi qaror kerakligini bildiradi.
Masalan:
- job submit;
- node failure;
- scaling;
- deployment;
- allocation failure.
Rescheduling
Node yo‘qolsa yoki task fail qilsa policy asosida yangi allocation yaratilishi mumkin.
Restart bir node ichida taskni qayta ishga tushiradi.
Reschedule esa boshqa node’da yangi allocation yaratishi mumkin.
Bu ikki tushuncha farqli.
Rolling update
Service job bosqichma-bosqich yangilanadi.
Sozlamalar:
- parallel yangilanadigan instance soni;
- health check;
- minimal healthy vaqt;
- deadline;
- auto revert;
- canary.
Update xato bo‘lsa deployment to‘xtashi yoki rollback qilishi mumkin.
Canary
Yangi version avval kichik allocation guruhida ishlaydi.
Health va application metriclari tekshiriladi.
Keyin deployment promote qilinadi.
Faqat process “running” bo‘lishi business funksiyasi sog‘lomligini isbotlamaydi.
Service discovery
Nomad service registrationni tashqi yoki integratsiyalangan service discovery tizimiga yuborishi mumkin.
- nom;
- address;
- port;
- tag;
- health check
bilan ro‘yxatdan o‘tadi.
Clientlar DNS yoki API orqali endpointlarni topadi.
Secret
Workload secret managerdan runtime credential olishi mumkin.
Secret template fayl yoki environmentga render qilinishi mumkin.
Rotation paytida taskga signal, restart yoki dynamic credential yangilanishi talab qilinadi.
Volume
Stateful workload uchun host yoki external storage volume ulanishi mumkin.
Scheduler volume capability va node availabilityni hisobga oladi.
Application backup va replicationi orchestrator volume attachmentidan alohida masala.
Namespace va quota
Namespace job va policylarni mantiqiy ajratadi.
Quota:
foydalanishini cheklashi mumkin.
Namespace to‘liq fizik isolation emas.
Nomad va Kubernetes
Ikkalasi workload orchestration qiladi.
Nomad ko‘proq turli workload driverlariga va sodda scheduler modeliga urg‘u beradi.
Kubernetes keng container ecosystem va resource APIga ega.
Tanlov workload, operatsion tajriba va integratsiyaga bog‘liq.
Constraint va affinity
Constraint node majburiy shartga mos bo‘lishini talab qiladi. Affinity esa mos node’ga afzallik balli beradi, lekin majburiy emas. Noto‘g‘ri qat’iy constraint clusterda bo‘sh resource bo‘lsa ham jobni pending qoldirishi mumkin.
Spread
Allocationlar region, datacenter, rack yoki boshqa attribute bo‘yicha tarqatiladi. Bu bitta failure domain’da barcha replica yig‘ilib qolishini kamaytiradi.
Preemption
Yuqori priority job uchun yetarli resource bo‘lmasa, past priority allocationlar to‘xtatilishi mumkin. Priority siyosati critical service va batch workload o‘rtasidagi resource tanlovini boshqaradi.
Garbage collection
Tugagan job, evaluation va allocation metadata’si ma’lum vaqt saqlanib, keyin tozalanadi. Juda qisqa retention incident tahlilini qiyinlashtiradi, juda uzun retention server state’ini kattalashtiradi.
Autoscaling
Tashqi autoscaler queue, CPU yoki custom metric asosida job count’ni o‘zgartirishi mumkin. Scale policy minimum, maximum, cooldown va downstream limitlarni hisobga oladi.
Node drain
Maintenance oldidan node drain qilinadi. Scheduler workloadlarni boshqa node’larga ko‘chiradi va yangi allocationlarning shu hostga joylashishini to‘xtatadi.
Bog‘liq tushunchalar
Workload orchestration, Scheduler, Cluster, Job, Task group, Allocation, Driver, Service discovery, Rolling update, Consul, Vault