Kubernetes — containerlashtirilgan dasturlarni joylashtirish, boshqarish, scale qilish va tiklash jarayonlarini avtomatlashtiradigan orchestration platformasi. U ko‘p serverdan iborat cluster ichida container workload’larini kerakli holatda ushlab turadi.
Kubernetes application kodini yaratmaydi va container image’ni build qilmaydi. U tayyor image’larni node’larga joylashtiradi, network va storage bilan bog‘laydi hamda ularning ishlash holatini kuzatadi.
Cluster tuzilishi
Kubernetes cluster ikki asosiy qismdan iborat:
- control plane;
- worker nodelar.
Control plane cluster holatini boshqaradi. Worker node’lar application containerlarini ishga tushiradi.
Control plane
Control plane quyidagi vazifalarni bajaradi:
- API requestlarni qabul qilish;
- cluster holatini saqlash;
- workload qaysi node’da ishlashini tanlash;
- joriy holatni kerakli holatga yaqinlashtirish;
- controllerlarni boshqarish.
Kubernetes declarative modelga tayanadi. Foydalanuvchi “uchta instance ishlasin” deb kerakli holatni yozadi. Tizim bu holatni saqlashga harakat qiladi.
API server
API server Kubernetes boshqaruvining markaziy kirish nuqtasi.
kubectl, controller, operator va boshqa clientlar API server bilan ishlaydi.
U:
- authentication;
- authorization;
- admission;
- validation;
- resource API
jarayonlarini bajaradi.
Cluster holatini to‘g‘ridan-to‘g‘ri ichki database’ga yozish o‘rniga API server orqali boshqarish kerak.
Cluster holati
Kubernetes resource’lari va konfiguratsiyasi key-value ko‘rinishidagi barqaror storage’da saqlanadi.
Bu ma’lumot:
holatini o‘z ichiga oladi.
Cluster holatining backup va restore jarayoni disaster recovery uchun muhim.
Scheduler
Scheduler yangi Pod uchun mos node tanlaydi.
Qarorga quyidagilar ta’sir qiladi:
- CPU va memory request;
- node label;
- affinity;
- anti-affinity;
- taint va toleration;
- topology;
- storage cheklovi;
- priority.
Scheduler containerning o‘zini ishga tushirmaydi. U Podni node bilan bog‘laydi.
Controller
Controller joriy holatni kerakli holat bilan solishtiradi.
Masalan, Deployment uchta replica talab qiladi. Bitta Pod o‘chsa, controller yangi Pod yaratadi.
Bu reconciliation loop deb ataladi.
Kubernetes boshqaruvi bir martalik script emas, doimiy kuzatuv va tuzatish jarayonidir.
Node
Node application workload ishlaydigan server yoki virtual mashina.
Node tarkibida:
bo‘lishi mumkin.
Kubelet API serverdan Pod topshiriqlarini olib, local runtime orqali containerlarni boshqaradi.
Pod
Pod — Kubernetes’dagi eng kichik deploy qilinadigan birlik.
Pod bir yoki bir nechta containerdan iborat bo‘lishi mumkin.
Bir Pod ichidagi containerlar:
dan foydalanishi mumkin.
Odatda applicationning bitta asosiy containeri va kerak bo‘lsa sidecar containerlar bir Podga joylanadi.
Deployment
Deployment stateless application Podlarini boshqaradi.
U:
ni belgilaydi.
Yangi image deploy qilinganda rolling update orqali Podlar bosqichma-bosqich almashtiriladi.
StatefulSet
Stateful applicationlar uchun StatefulSet ishlatiladi.
U Podlarga:
- barqaror nom;
- tartibli yaratish;
- tartibli o‘chirish;
- persistent volume bilan bog‘lanish
beradi.
Database’ni StatefulSetga joylashtirish mumkin, ammo backup, replication va failure modeli alohida loyihalanadi.
DaemonSet
DaemonSet tanlangan har node’da bitta Pod ishlashini ta’minlaydi.
Qo‘llanishlar:
Node clusterga qo‘shilsa tegishli Pod avtomatik yaratiladi.
Service
Pod IP manzillari o‘zgarishi mumkin.
Service Podlar guruhiga barqaror network endpoint beradi.
U label selector orqali backend Podlarni topadi.
Service turlari ichki cluster access, node port yoki tashqi load balancer bilan ishlashi mumkin.
Ingress
Ingress HTTP va HTTPS trafficni host yoki path bo‘yicha Service’larga yo‘naltirish qoidalarini ifodalaydi.
Qoidalarni amalda bajarish uchun ingress controller kerak.
kabi vazifalarni bajarishi mumkin.
ConfigMap va Secret
ConfigMap maxfiy bo‘lmagan configurationni saqlaydi.
Secret credential va token kabi ma’lumotlar uchun mo‘ljallangan.
Secretning oddiy encodingi encryption degani emas. Cluster storage encryption, RBAC va secret manager integratsiyasi talab qilinishi mumkin.
Resource request va limit
Container uchun CPU va memory request schedulerga minimal ehtiyojni bildiradi.
Limit maksimal foydalanishni cheklaydi.
Memory limitdan oshsa container tugatilishi mumkin. CPU limit esa throttlingga olib kelishi mumkin.
Noto‘g‘ri qiymatlar cluster resource’idan samarasiz foydalanishga sabab bo‘ladi.
Health check
Kubernetes probe’lari:
- startup probe — application boshlanishi;
- readiness probe — traffic qabul qilishga tayyorlik;
- liveness probe — processni qayta boshlash zarurligi
uchun ishlatiladi.
Liveness noto‘g‘ri sozlansa sekin application doimiy restart loopga tushishi mumkin.
Namespace
Namespace resource’larni mantiqiy ajratadi.
U:
uchun ishlatiladi.
Namespace alohida cluster yoki to‘liq security boundary emas.
Autoscaling
Kubernetes workload’ni metric asosida scale qilishi mumkin.
Scale turlari:
- Pod replica sonini o‘zgartirish;
- Pod resource requestini o‘zgartirish;
- node sonini oshirish yoki kamaytirish.
Scale downstream database va tashqi service limitlari bilan mos bo‘lishi kerak.
Network policy
NetworkPolicy Podlar orasidagi ruxsat etilgan trafficni belgilaydi. Policy ishlashi cluster network plugin qo‘lloviga bog‘liq. Default deny siyosati bilan faqat kerakli ingress va egress yo‘llari ochiladi.
Persistent volume
PersistentVolume va PersistentVolumeClaim storage lifecycle’ini Pod lifecycle’idan ajratadi. Access mode, storage class, reclaim policy va zone cheklovi schedulingga ta’sir qiladi.
Bog‘liq tushunchalar
Container orchestration, Cluster, Control plane, Node, Pod, Deployment, StatefulSet, Service, Ingress, ConfigMap, Secret, Autoscaling