Pod — Kubernetes’da joylashtiriladigan eng kichik execution birligi bo‘lib, bir yoki bir nechta container’ni umumiy tarmoq namespace’i va ayrim storage volume’lari bilan birlashtiradi. Pod ichidagi containerlar bir xil IP manzil va port maydonini bo‘lishadi hamda localhost orqali aloqa qiladi. Odatda pod bitta application process va unga juda yaqin yordamchi containerlardan tuziladi.
Containerlar guruhi
Pod container uchun oddiy “papka” emas; uning tarkibidagi processlar lifecycle va placement bo‘yicha birga boshqariladi. Sidecar log uzatish, proxy yoki konfiguratsiyani yangilash kabi yordamchi vazifa bajarishi mumkin. Bir-biridan mustaqil masshtablanishi kerak bo‘lgan xizmatlarni bitta podga joylash noto‘g‘ri coupling hosil qiladi.
Init containerlar application boshlanishidan oldin ketma-ket bajariladi. Ular konfiguratsiya yaratishi yoki dependency tayyorligini tekshirishi mumkin. Init muvaffaqiyatsiz bo‘lsa application container boshlanmaydi va restart siyosatiga muvofiq qayta uriniladi.
Tarmoq modeli
Har pod cluster tarmog‘ida o‘z IP’sini oladi. Pod qayta yaratilsa IP o‘zgarishi mumkin, shu sabab mijozlar to‘g‘ridan-to‘g‘ri pod IP’ni doimiy manzil sifatida saqlamaydi. Service label selector orqali podlar to‘plamiga barqaror DNS va virtual endpoint beradi.
Bir poddagi containerlar bir portni bir vaqtning o‘zida tinglay olmaydi, chunki network namespace umumiy. Containerlar filesystem’ni default holatda bo‘lishmaydi; umumiy volume mount qilish kerak.
Lifecycle va holatlar
Pod manifesti control plane’da desired state sifatida yaratiladi. Scheduler node tanlaydi, kubelet image’larni oladi va container runtime orqali ishga tushiradi. Pod o‘sha node’ga bog‘lanadi; node yo‘qolsa aynan o‘sha pod “ko‘chirilmaydi”, controller boshqa ID bilan yangi pod yaratadi.
| Holat | Mazmuni |
|---|---|
| Pending | Scheduling yoki image tayyorlanmoqda |
| Running | Kamida bitta container ishlamoqda |
| Succeeded | Barcha container muvaffaqiyatli tugagan |
| Failed | Kamida biri muvaffaqiyatsiz tugagan |
| Unknown | Node bilan holat aniqlanmagan |
Deployment uzoq ishlovchi stateless podlarni, Job tugaydigan vazifalarni, StatefulSet esa identity talab qiladigan podlarni boshqaradi. Yalang‘och pod o‘chsa controller uni qayta yaratmaydi.
Health probe
Startup probe sekin boshlanuvchi ilovaga vaqt beradi. Readiness probe pod trafik qabul qila olishini bildiradi; xato bo‘lsa Service endpointidan chiqariladi. Liveness probe process qotib qolganini aniqlab container restartiga sabab bo‘ladi.
Noto‘g‘ri liveness dependency vaqtincha ishlamaganda sog‘lom podlarni restart qilib cascading failure yaratishi mumkin. Probe arzon, aniq va ilovaning tegishli holatini tekshirishi kerak. Readiness database bilan vaqtinchalik aloqani ko‘rishi mumkin, liveness esa odatda applicationning ichki progressini tekshiradi.
Resurslar va tugatish
Request schedulerga zarur CPU va memory’ni, limit esa container iste’molining yuqori chegarasini bildiradi. CPU limit throttling, memory limit esa OOM termination keltirishi mumkin. Pod ichidagi containerlar node resursi uchun boshqa podlar bilan raqobatlashadi.
Pod o‘chirilganda preStop hook va SIGTERM beriladi, termination grace period ichida requestlar tugatiladi. So‘ng process majburan to‘xtatilishi mumkin. Ilova signalni qabul qilib yangi ishni olmasligi va aktiv ishni yakunlashi kerak.
Xavfsizlik
Security context root bo‘lmagan user, read-only root filesystem, capability va seccomp profilini belgilaydi. Service account token podga faqat zarur bo‘lsa beriladi. Privileged container hostga yaqin huquq oladi va qat’iy policy bilan cheklanadi.
NetworkPolicy podlar orasidagi trafikni label va namespace bo‘yicha boshqaradi. Secret environment variable yoki volume orqali berilishi mumkin; process dump va loglarda oshkor bo‘lmasligi hisobga olinadi.
Bog‘liq tushunchalar
Kubernetes, Container, Deployment, StatefulSet, Service, Kubelet, Init container