Цикл синхронізації Kubelet
Kubelet — це основний "агент вузла", який створює та відстежує Podʼи на кожному вузлі. kubelet запускає цикл синхронізації, який періодично узгоджує бажаний стан (специфікацію Podʼів) з фактичним станом запущених контейнерів.
- Цикл синхронізації (Sync Loop): Цикл синхронізації ставить у чергу роботу (агреговану з багатьох джерел) для Podʼів, призначених для його вузла (де
nodeNameзбігається з вузлом). Протягом кожного циклу субпроцеси, що називаються «pod workers», намагатимуться узгодити бажаний стан цих Podʼів з поточним станом запущених контейнерів. - Синхронізація Podʼів (Sync Pod): Більшість логіки
kubeletзберігається в наборі функцій у межах інтерфейсуpodSyncer, включаючи функціюSyncPodта її варіанти (наприклад,SyncTerminatingPodтаSyncTerminatedPod). Під час кожного циклу синхронізації відповідна функціяpodSyncerбуде виконана для кожного Podʼа, намагаючись привести його стан на вузлі до бажаного стану. - Container Runtime Interface (CRI): Щоб фактично запускати контейнери,
kubeletвикористовує CRI для взаємодії з середовищем виконання контейнерів (наприклад, containerd або CRI-O).kubeletвиступає як клієнт, надаючи вказівки середовищу виконання створити "пісочницю Podʼа", а потім створити/запустити окремі контейнери, визначені в специфікації Podʼа. - PLEG (Pod Lifecycle Event Generator):
kubeletпотрібно знати, коли контейнери запускаються, зупиняються або виходять з ладу. Він покладається на компонент з назвою PLEG, який періодично опитує середовище виконання для стандартного стану всіх контейнерів. PLEG генерує події, які пробуджують цикл синхронізації для оновлення статусу Podʼа.
Через цей механізм опитування стан, який видно в API (наприклад, за допомогою команди kubectl get pod), може дещо запізнюватися порівняно з тим, що насправді відбувається на вузлі.