1. Що таке Kubernetes?
Kubernetes (K8s) — це open-source платформа оркестрації контейнерів для декларативного розгортання, масштабування та керування застосунками.
Kubernetes працює за desired state моделлю: ти описуєш стан у YAML, а control plane постійно приводить фактичний стан до цільового.
Ключові обʼєкти в роботі:
Pod— мінімальна одиниця запуску контейнерів;Deployment/StatefulSet/DaemonSet— керування життєвим циклом workload;Service,Ingress,Gateway API— мережевий доступ і маршрутизація;ConfigMap,Secret— конфігурація і секрети.
Коротко:
- Kubernetes автоматизує запуск і керування контейнеризованими застосунками.
- Працює декларативно через desired state та controllers.
- Дає стандартний API для compute, networking, storage і security.
2. Які проблеми вирішує Kubernetes?
Kubernetes прибирає ручні операції навколо контейнерів і дає стабільну production-експлуатацію.
Практичні проблеми, які він закриває:
- orchestration: планування Pod на вузли, self-healing, автоперезапуск;
- scaling: горизонтальне масштабування через
HPA, кластерне через autoscaler; - delivery: rolling update, rollback, zero-downtime деплой;
- service networking: discovery, балансування, політики мережі;
- config/security: централізовані
ConfigMap/Secret,RBAC, pod security.
Коротко:
- Kubernetes зменшує операційний overhead у керуванні контейнерами.
- Дає вбудовані механізми відмовостійкості, масштабування і оновлень.
- Уніфікує delivery-процес між середовищами.
3. Що таке кластер Kubernetes?
Кластер Kubernetes — це набір вузлів, обʼєднаних одним control plane і спільним API.
Склад кластера:
- control plane:
kube-apiserver,etcd,scheduler,controller-manager; - worker nodes:
kubelet, container runtime (containerd/CRI-O),kube-proxyабо eBPF data plane; - CNI-плагін для pod-to-pod мережі;
- CSI-драйвери для storage інтеграції.
Кластер може бути single-zone або multi-zone залежно від вимог HA.
Коротко:
- Кластер = control plane + worker nodes.
- Усі операції проходять через Kubernetes API.
- HA, network і storage можливості залежать від конфігурації кластера.
4. Що таке Node?
Node — це обчислювальний вузол кластера (VM або bare metal), де запускаються Pod.
На Node працюють:
kubelet— агент, що виконує PodSpec і репортує стан;- container runtime через CRI;
- компонент мережі (
kube-proxyабо CNI/eBPF datapath).
Node має ресурси (CPU, RAM, ephemeral storage), які scheduler враховує через
requests/limits, affinity, taints/tolerations.
Коротко:
- Node надає ресурси для запуску Pod.
kubeletсинхронізує workload із control plane.- Планування Pod на Node керується політиками scheduling.
5. Що таке Pod?
Pod — найменша deploy-одиниця в Kubernetes: один або кілька контейнерів із спільним network namespace та томами.
Важливі властивості:
- один Pod IP для всіх контейнерів у Pod;
- локальний обмін між контейнерами через
localhost; - Pod ефемерний: при пересозданні змінюється ідентичність.
У production Pod зазвичай керується контролером (Deployment, StatefulSet),
а не створюється вручну.
Коротко:
- Pod інкапсулює контейнер(и), мережу та томи як єдину одиницю.
- Контейнери в Pod спільно використовують IP і можуть ділити storage.
- Для масштабування/оновлень Pod використовують workload controllers.
6. Що таке Pod з кількома контейнерами?
Multi-container Pod — Pod, у якому кілька контейнерів працюють разом як один функціональний юніт.
Коли це доречно:
- основний контейнер + sidecar для логування, проксі, auth, telemetry;
- тісно повʼязані процеси з однаковим життєвим циклом;
- потреба в обміні через
localhostабо спільний volume.
Коли не доречно:
- незалежні сервіси з різним lifecycle краще розділяти на окремі Pod.
Коротко:
- Multi-container Pod використовується для тісно звʼязаних процесів.
- Контейнери ділять мережу й томи, але мають окремі образи та процеси.
- Незалежні компоненти краще виносити в різні Pod.
7. Що таке sidecar-контейнер?
Sidecar — допоміжний контейнер у тому ж Pod, що й основний застосунок, який додає платформену функцію без зміни коду застосунку.
Типові сценарії:
- логування/форвардинг логів;
- service mesh proxy;
- cert/secret reload;
- локальний кеш або адаптер протоколів.
Sidecar має спільний життєвий контекст із Pod, тому його доступність впливає на поведінку всього Pod.
Коротко:
- Sidecar розширює можливості основного контейнера в межах одного Pod.
- Найчастіше використовується для мережі, безпеки та observability.
- Це стандартний патерн для platform-level функцій.
8. Що таке native sidecar containers?
Native sidecar containers — це sidecar-контейнери, оголошені через
initContainers з політикою перезапуску sidecar, щоб вони жили протягом усього
життєвого циклу Pod і запускались у передбачуваному порядку.
Практичний ефект:
- контрольований startup-order (спочатку sidecar, далі app-контейнери);
- стабільніша поведінка Pod при рестартах sidecar;
- чистіша модель для проксі/агентів, яким треба стартувати раніше застосунку.
Це зменшує кількість workaround-патернів для класичних sidecar у складних Pod.
Коротко:
- Native sidecar дає нативний lifecycle для допоміжних контейнерів.
- Покращує контроль порядку старту і перезапусків у Pod.
- Корисно для mesh proxy, security/telemetry агентів та bootstrap-залежностей.
9. Що таке Namespace?
Namespace — логічна ізоляція ресурсів усередині одного кластера Kubernetes.
Що дає Namespace у production:
- розділення середовищ і команд (
dev,staging,prod, team-per-namespace); - scoped policy:
RBAC,ResourceQuota,LimitRange,NetworkPolicy; - зручніший операційний контур для deployment і доступів.
Приклад роботи:
kubectl get pods -n payments
kubectl apply -f deployment.yaml -n payments
kubectl auth can-i get secrets -n payments --as system:serviceaccount:payments:apiКоротко:
- Namespace ізолює ресурси і політики в межах одного кластера.
- Дає базовий контур для доступів, квот і мережевих правил.
- Є ключовою одиницею організації multi-team середовища.
10. Як Kubernetes підтримує multi-tenancy?
Kubernetes підтримує multi-tenancy комбінацією логічної ізоляції, контролю доступу та ресурсних обмежень.
Базовий production-набір:
Namespaceяк межа tenant;RBACдля least-privilege доступу;ResourceQuotaіLimitRangeдля fair usage ресурсів;NetworkPolicyдля сегментації трафіку;Pod Security Admission+ Pod Security Standards для базового hardening;- окремі service accounts, secrets, CI/CD policy на tenant.
Для жорсткої ізоляції використовують окремі кластери або віртуальні кластери.
Коротко:
- Multi-tenancy в Kubernetes реалізується політиками, а не одним прапорцем.
- Мінімальний контур: Namespace + RBAC + Quotas + NetworkPolicy + Pod Security.
- Рівень ізоляції обирають між shared-cluster і dedicated-cluster моделями.
11. Опишіть архітектуру Kubernetes.
Архітектура Kubernetes складається з control plane та worker nodes.
Control plane приймає декларації стану через API і керує кластером через контролери. Worker nodes виконують Pod і звітують про стан.
Типовий потік:
- Маніфест застосовується через
kubectl apply -f .... kube-apiserverвалідує запит і зберігає стан вetcd.- Контролери створюють/оновлюють потрібні обʼєкти.
kube-schedulerпривʼязує Pod до Node.kubeletна Node запускає контейнери через CRI runtime.- Мережа/сервіс-доступ надаються через CNI + Service/Gateway/Ingress.
Коротко:
- Kubernetes працює як control-loop система desired state.
- Control plane приймає рішення, nodes виконують workload.
- API + etcd + controllers + scheduler + kubelet формують основний цикл.
12. Що таке control plane?
Control plane — набір керуючих компонентів кластера, які зберігають стан, планують workload і підтримують узгодженість ресурсів.
Склад control plane:
kube-apiserver— єдина точка входу в API;etcd— key-value сховище стану кластера;kube-scheduler— вибір Node для Pod;kube-controller-manager— control loops для ресурсів;cloud-controller-manager(у хмарі) — інтеграція з cloud API.
У HA-конфігурації control plane запускають у кількох репліках.
Коротко:
- Control plane керує всім життєвим циклом ресурсів Kubernetes.
- Критичні компоненти: API server, etcd, scheduler, controller manager.
- Від доступності control plane залежить керованість кластера.
13. Що таке kube-apiserver?
kube-apiserver — центральний API-сервер Kubernetes, через який проходять усі
операції читання/запису ресурсів.
Функції kube-apiserver:
- автентифікація, авторизація (
RBAC), admission; - валідація/мутація обʼєктів;
- збереження стану в
etcd; - надання watch-стрімів для controllers/operators.
Практичні команди взаємодії:
kubectl get --raw /healthz
kubectl api-resources
kubectl explain deployment.spec.template.specКоротко:
kube-apiserverє єдиною офіційною точкою доступу до кластера.- Через нього проходять безпека, валідація та persistence стану.
- Усі controllers і клієнти працюють через Kubernetes API.
14. Що таке etcd і чому він критичний?
etcd — розподілене консистентне key-value сховище, у якому Kubernetes тримає
весь кластерний стан (обʼєкти API, конфігурацію, метадані).
Чому критичний:
- втрата
etcd= втрата джерела істини про кластер; - продуктивність
etcdвпливає на latency control plane; - консистентність
etcdзабезпечує коректну роботу controllers.
Практика production:
- регулярні snapshot backup;
- шифрування секретів at-rest;
- low-latency диски та моніторинг затримок/розміру БД.
Коротко:
etcdзберігає весь desired/actual state Kubernetes.- Це найкритичніший компонент control plane з точки зору даних.
- Backup/restore
etcdмає бути перевіреним операційним процесом.
15. Що таке kube-scheduler?
kube-scheduler призначає Pod на конкретний Node, якщо Pod ще не має привʼязки.
При виборі Node scheduler враховує:
requests/limitsі доступні ресурси;nodeSelector, node affinity/anti-affinity;- taints/tolerations;
- topology spread constraints;
- policy-пріоритети та scoring rules.
Scheduler не запускає контейнери самостійно, а лише робить binding Pod->Node.
Коротко:
kube-schedulerвідповідає за placement Pod у кластері.- Рішення базується на ресурсах і scheduling-політиках.
- Після binding запуск контейнерів виконує
kubeletна вибраному Node.
16. Що таке kube-controller-manager?
kube-controller-manager запускає набір control loops, що постійно звіряють
desired state з фактичним станом та коригують розбіжності.
Приклади контролерів:
- Deployment/ReplicaSet controller;
- Node controller;
- Job/CronJob controller;
- ServiceAccount, Namespace та інші базові контролери.
Кожен контролер працює за схемою watch -> compare -> reconcile.
Коротко:
kube-controller-managerреалізує reconciliation у Kubernetes.- Контролери автоматично повертають систему до описаного стану.
- Це основа self-healing і декларативної моделі.
17. Що таке kubelet?
kubelet — агент на кожному Node, який забезпечує виконання PodSpec на цьому
вузлі.
Що робить kubelet:
- отримує Pod-опис із API server;
- запускає/зупиняє контейнери через CRI runtime;
- монтує томи, налаштовує probes;
- репортує статус Pod/Node у control plane.
kubelet не приймає глобальні рішення планування, це зона scheduler.
Коротко:
kubeletкерує життєвим циклом Pod на конкретному Node.- Взаємодіє з runtime через CRI і зі storage/network підсистемами.
- Саме
kubeletзабезпечує виконання того, що призначив control plane.
18. Що таке kube-proxy?
kube-proxy — компонент Node-рівня, який реалізує мережеву модель Service
(ClusterIP/NodePort/частково LoadBalancer backend routing) через правила
маршрутизації.
Залежно від режиму використовує iptables, ipvs або eBPF-реалізацію
мережевого стеку (через CNI-рішення).
Основна задача:
- направити трафік із Service VIP на актуальні Pod endpoints.
Коротко:
kube-proxyзабезпечує сервісну маршрутизацію всередині кластера.- Працює на кожному Node і оновлює мережеві правила за змінами endpoints.
- Є критичним для стабільної Service connectivity.
19. Що таке Container Runtime Interface (CRI)?
CRI (Container Runtime Interface) — стандартний gRPC-інтерфейс між kubelet і
container runtime.
Завдяки CRI Kubernetes абстрагує запуск контейнерів від конкретної реалізації runtime.
Що це дає:
- взаємозамінність runtime без змін у workload YAML;
- єдиний контракт для create/start/stop pod sandbox і контейнерів;
- простіша еволюція платформи без привʼязки до одного runtime.
Коротко:
- CRI — це API-шар між Kubernetes і runtime.
kubeletкерує контейнерами через CRI, а не напряму через Docker API.- CRI забезпечує portability між runtime-реалізаціями.
20. Які container runtimes підтримуються (containerd, CRI-O)?
У production Kubernetes стандартно використовують CRI-сумісні runtimes:
containerd і CRI-O.
containerd:
- найпоширеніший runtime у managed і self-managed кластерах;
- стабільна інтеграція, широка підтримка екосистеми.
CRI-O:
- runtime, орієнтований саме на Kubernetes;
- часто використовується у платформах на базі OpenShift/enterprise Linux.
Dockershim видалений із Kubernetes; Docker Engine не є нативним runtime для
kubelet.
Коротко:
- Актуальні runtimes:
containerdіCRI-O. - Обидва працюють через CRI та підтримують production-сценарії.
- Docker як runtime для Kubernetes не використовується.
21. Що таке Deployment?
Deployment — controller для керування stateless workload через декларативні оновлення Pod.
Deployment керує ReplicaSet і забезпечує:
- потрібну кількість реплік (
spec.replicas); - rolling update без повної зупинки сервісу;
- rollback до попередньої ревізії;
- scale up/down через зміну desired state.
Базові команди:
kubectl get deploy -n app
kubectl apply -f deployment.yaml -n app
kubectl rollout status deploy/api -n appКоротко:
- Deployment — стандартний механізм для stateless застосунків.
- Працює через ReplicaSet і revision history.
- Дає безпечні оновлення та відкат змін.
22. Як Deployment виконує rolling update?
Rolling update замінює Pod поступово, керуючи одночасно старими та новими репліками.
Ключові параметри стратегії:
maxUnavailable— скільки Pod можна тимчасово втратити;maxSurge— скільки додаткових Pod можна створити понад ціль;- probes (
readiness/liveness/startup) — коли Pod вважається готовим.
При зміні image або Pod template Deployment створює новий ReplicaSet і перерозподіляє трафік через Service на ready Pod.
kubectl set image deployment/api api=ghcr.io/org/api:v2 -n app
kubectl rollout status deployment/api -n app
kubectl get rs -n appКоротко:
- Rolling update виконує поступову заміну Pod без повного downtime.
- Поведінка оновлення керується
maxUnavailableіmaxSurge. - Readiness probes критичні для zero-downtime.
23. Як виконати rollback Deployment?
Rollback повертає Deployment до попередньої стабільної ревізії ReplicaSet.
Практичний процес:
kubectl rollout history deployment/api -n app
kubectl rollout undo deployment/api -n app
kubectl rollout undo deployment/api --to-revision=3 -n app
kubectl rollout status deployment/api -n appРекомендовано перед rollback перевірити причину деградації через:
kubectl describe deployment, kubectl get events, kubectl logs.
Коротко:
- Rollback виконується через
kubectl rollout undo. - Можна відкотити до конкретної ревізії.
- Після відкату перевіряють статус rollout і здоровʼя Pod.
24. Що таке ReplicaSet?
ReplicaSet гарантує, що в кластері постійно працює задана кількість однакових Pod за selector.
ReplicaSet:
- створює нові Pod, якщо частина впала;
- видаляє зайві Pod, якщо фактичних більше за desired;
- зазвичай керується Deployment, а не напряму.
Пряме ручне керування ReplicaSet рідко використовується у production.
Коротко:
- ReplicaSet підтримує стабільну кількість Pod.
- Це базовий механізм self-healing для stateless реплік.
- У більшості випадків ReplicaSet створює й оновлює Deployment.
25. Що таке StatefulSet і коли його використовувати?
StatefulSet — controller для stateful workload, де важливі стабільна ідентичність Pod, порядок запуску/зупинки та постійне сховище.
Використання:
- бази даних (PostgreSQL, MongoDB, Cassandra);
- брокери повідомлень і кластери з quorum;
- сервіси, де Pod має стабільне DNS-імʼя (
pod-0,pod-1).
StatefulSet часто працює разом із headless Service і PVC templates.
Коротко:
- StatefulSet потрібен для застосунків зі станом і стабільною ідентичністю.
- Дає ordered rollout/termination та стабільні volume привʼязки.
- Типовий вибір для DB і distributed stateful систем.
26. Що таке DaemonSet?
DaemonSet забезпечує запуск одного Pod на кожному (або вибраних) Node.
Типові сценарії:
- лог-агенти;
- node monitoring/exporters;
- CNI/мережеві агенти;
- security scanning agent на вузлі.
При додаванні нового Node DaemonSet автоматично розгортає на ньому Pod.
Коротко:
- DaemonSet = по одному Pod на Node.
- Використовується для node-level інфраструктурних агентів.
- Автоматично масштабується разом із кількістю вузлів.
27. Що таке Job?
Job — ресурс для одноразових або batch-задач, які мають успішно завершитись.
Job керує:
- кількістю успішних завершень (
completions); - рівнем паралелізму (
parallelism); - retry-поведінкою (
backoffLimit).
Приклади: міграції БД, масова обробка даних, генерація звітів.
Коротко:
- Job виконує кінцеві задачі до стану
Complete. - Підходить для batch і адміністративних операцій.
- Підтримує retry, паралельність і контроль завершення.
28. Що таке CronJob?
CronJob запускає Job за розкладом (cron), наприклад щогодини або раз на добу.
Ключові параметри:
schedule— cron-вираз;concurrencyPolicy— чи дозволяти паралельні запуски;startingDeadlineSeconds— вікно пропущеного запуску;successfulJobsHistoryLimit/failedJobsHistoryLimit— історія.
Типові задачі: backup, cleanup, синхронізація, регулярні перевірки.
Коротко:
- CronJob = планувальник для періодичних Job.
- Дозволяє контролювати конкуренцію та політику пропущених запусків.
- Основний інструмент для регламентних фонових задач у кластері.
29. Коли використовувати StatefulSet замість Deployment?
StatefulSet обирають замість Deployment, коли потрібен керований стан і стабільна ідентичність Pod.
Ознаки, що потрібен StatefulSet:
- Pod має постійний volume, привʼязаний саме до нього;
- важливий порядок старту/зупинки;
- потрібні стабільні мережеві імена між репліками;
- кластерний застосунок має ролі
primary/replicaабо quorum.
Якщо сервіс stateless і не потребує стабільних Pod identity/storage, краще Deployment.
Коротко:
- StatefulSet для stateful ідентичних, але не взаємозамінних реплік.
- Deployment для взаємозамінних stateless Pod.
- Ключовий критерій: стан, identity і порядок життєвого циклу.
30. Як розгорнути базу даних у Kubernetes?
Базу даних у Kubernetes розгортають як Stateful workload із персистентним storage, політиками безпеки та резервуванням.
Базовий production-підхід:
- Використати
StatefulSet+ headless Service. - Виділити
PVCчерезStorageClass(dynamic provisioning). - Винести конфігурацію в
ConfigMap, секрети вSecret. - Додати probes,
requests/limits,PodDisruptionBudget. - Налаштувати backup/restore (CronJob або зовнішній оператор).
- Обмежити доступ через
NetworkPolicyіRBAC.
Короткий приклад перевірки:
kubectl get statefulset,pvc,pods -n data
kubectl describe statefulset postgres -n data
kubectl logs postgres-0 -n dataДля production часто використовують DB Operator (наприклад, PostgreSQL/MongoDB operator), а не "ручний" StatefulSet.
Коротко:
- Для БД потрібні StatefulSet, persistent volumes і контроль доступу.
- Надійність визначають backup/restore, probes і ресурсна ізоляція.
- Для складних кластерів БД краще використовувати Operators.
31. Що таке ConfigMap?
ConfigMap — ресурс Kubernetes для зберігання несекретної конфігурації у форматі
key/value.
ConfigMap використовують для:
- змінних середовища застосунку;
- конфіг-файлів через volume mount;
- розділення конфігурації і container image.
kubectl create configmap api-config --from-literal=LOG_LEVEL=info -n app
kubectl get configmap api-config -n app -o yamlКоротко:
- ConfigMap зберігає несекретну конфігурацію.
- Дозволяє змінювати параметри без перебілду образу.
- Подається в Pod через env або volume.
32. Що таке Secret?
Secret — ресурс для зберігання чутливих даних: паролів, токенів, API-ключів, сертифікатів.
Типи Secret: Opaque, kubernetes.io/tls, kubernetes.io/dockerconfigjson
тощо.
Секрети можна передавати в Pod:
- як env vars;
- як файли у volume;
- через CSI secret drivers із зовнішніх vault-систем.
Коротко:
- Secret призначений для конфіденційних даних.
- Дає керований спосіб доставки секретів у Pod.
- Має використовуватись разом із RBAC і шифруванням.
33. Як безпечно зберігаються Secrets?
Безпечне зберігання Secrets базується на кількох шарах контролю.
Практика production:
- увімкнений
encryption at restдляetcd; - строгий
RBAC(least privilege) наsecrets; - мінімізація використання env vars для секретів;
- аудит доступу до API і ротація секретів;
- інтеграція зі зовнішніми secret manager (Vault, KMS-backed рішення).
kubectl auth can-i get secrets -n app --as system:serviceaccount:app:apiКоротко:
- Безпека Secret = encryption + access control + операційна гігієна.
- Найкритичніше: обмежити читання Secret через RBAC.
- У production часто використовують зовнішній secret manager.
34. Що таке encryption at rest для Secrets?
Encryption at rest — шифрування даних Secret перед записом у etcd.
Без цього Secret у etcd зберігаються як base64-encoded дані, що не є
криптографічним захистом.
Механіка:
- API server використовує
EncryptionConfiguration; - ключі зберігаються через KMS/provider;
- при читанні дані дешифруються прозоро для авторизованих запитів.
Коротко:
- Encryption at rest захищає Secret у сховищі
etcd. - Base64 саме по собі не є шифруванням.
- Це обовʼязковий контроль для production-кластерів.
35. Як передати конфігурацію в Pod?
Конфігурацію в Pod передають через ConfigMap і Secret трьома основними
способами.
- Env vars (
env,envFrom). - Файли через volume mount.
- Аргументи контейнера (
command/args) разом із env.
Приклад:
envFrom:
- configMapRef:
name: api-config
- secretRef:
name: api-secretsДля runtime-конфігів, які повинні оновлюватись без redeploy, частіше використовують mounted files + reload-логіку.
Коротко:
- Базові джерела конфігурації: ConfigMap і Secret.
- Найпростіше передавати через env, гнучкіше через volumes.
- Спосіб залежить від вимог до оновлення конфігурації під час роботи.
36. Які best practices для роботи з Secrets?
Ключові best practices:
- не зберігати секрети у Git у відкритому вигляді;
- обмежити доступ до
Secretчерез namespace-scoped RBAC; - увімкнути encryption at rest і audit logging;
- застосовувати короткоживучі креденшіали та ротацію;
- монтувати секрети у файли, якщо важлива ротація без перезапуску;
- уникати виводу секретів у логах/
kubectl describe.
У GitOps-сценаріях використовують Sealed Secrets/SOPS або зовнішній secret operator.
Коротко:
- Secret потребують lifecycle-керування, а не лише створення.
- RBAC, ротація і шифрування — мінімальний baseline.
- GitOps для секретів має бути з контрольованим шифруванням.
37. Як працює мережа в Kubernetes?
Мережа Kubernetes базується на моделі "кожен Pod має власний IP і може спілкуватися з іншими Pod без NAT між Pod".
Базові рівні:
- CNI забезпечує pod networking;
- Service дає стабільну віртуальну адресу для групи Pod;
- Ingress/Gateway API керують north-south трафіком;
- NetworkPolicy контролює дозволені потоки.
Data path залежить від CNI (iptables/ipvs/eBPF).
Коротко:
- Pod-to-Pod, Service і ingress-рівень формують повну мережеву модель.
- CNI визначає реалізацію мережевого dataplane.
- Без NetworkPolicy трафік між Pod зазвичай відкритий за замовчуванням.
38. Що таке Service?
Service — абстракція стабільної мережевої точки доступу до динамічного набору Pod (через label selector).
Service вирішує:
- стабільний endpoint незалежно від перезапуску Pod;
- балансування трафіку між ready endpoints;
- service discovery через DNS.
kubectl get svc -n app
kubectl describe svc api -n appКоротко:
- Service дає стабільну адресу для змінних Pod.
- Трафік маршрутизується на healthy endpoints.
- Це базовий механізм внутрішньокластерного доступу.
39. Типи Service: ClusterIP, NodePort, LoadBalancer — у чому різниця?
ClusterIP:
- доступний лише всередині кластера;
- стандартний тип для service-to-service трафіку.
NodePort:
- відкриває порт на кожному Node;
- трафік заходить через
<NodeIP>:<NodePort>.
LoadBalancer:
- у cloud-середовищі створює зовнішній балансувальник;
- маршрутизує трафік на Service (зазвичай поверх NodePort/інтеграції провайдера).
Коротко:
ClusterIPдля внутрішнього доступу.NodePortдля прямого доступу через вузли.LoadBalancerдля керованого зовнішнього доступу.
40. Що таке Headless Service?
Headless Service — Service з clusterIP: None, який не надає єдиного VIP.
DNS повертає IP конкретних Pod endpoints, що корисно для:
- StatefulSet (стабільні pod DNS-імена);
- клієнтського балансування;
- кластерних stateful систем із peer discovery.
Коротко:
- Headless Service відключає virtual IP і повертає адреси Pod.
- Часто використовується зі StatefulSet.
- Дає контроль над прямою адресацією реплік.
41. Як працює service discovery?
Service discovery у Kubernetes реалізується через DNS (CoreDNS) і Service-імена.
Типовий формат DNS-імен:
service.namespace.svc.cluster.local
Коли Pod звертається до api.app.svc, DNS повертає Service IP (або Pod IP для
headless Service).
kubectl get endpoints api -n app
kubectl get endpointslices -n appКоротко:
- Service discovery у Kubernetes — DNS-first модель.
- CoreDNS + Service/EndpointSlice забезпечують резолюцію й маршрутизацію.
- Для headless Service повертаються адреси Pod, а не один VIP.
42. Що таке Ingress?
Ingress — API-ресурс L7 маршрутизації HTTP(S) трафіку до Service за host/path правилами.
Ingress дозволяє:
- термінацію TLS;
- virtual hosts;
- path-based routing;
- централізований вхідний трафік для кількох сервісів.
Ingress сам по собі не працює без Ingress Controller.
Коротко:
- Ingress описує HTTP(S) правила входу в кластер.
- Дає host/path маршрутизацію і TLS на edge-рівні.
- Для роботи потребує встановленого Ingress Controller.
43. Що таке Ingress Controller?
Ingress Controller — data-plane компонент, який читає ресурси Ingress і реалізує їх у реальній мережевій конфігурації (Nginx, HAProxy, Envoy тощо).
Функції:
- завантаження правил Ingress;
- маршрутизація до backend Service;
- TLS termination, redirects, rate limiting (залежно від контролера).
Без Ingress Controller обʼєкти Ingress не впливають на трафік.
Коротко:
- Ingress Controller виконує правила, описані в Ingress.
- Це runtime-компонент, не лише декларація.
- Вибір контролера впливає на можливості L7 і продуктивність.
44. Що таке Gateway API?
Gateway API — сучасний набір Kubernetes API для L4/L7 трафіку з чітким розділенням ролей платформи і застосунку.
Основні ресурси:
GatewayClass— клас/реалізація контролера;Gateway— мережевий вхідний шлюз (listeners, TLS, адресація);HTTPRoute/GRPCRoute/інші Route — правила маршрутизації.
Gateway API дає кращу розширюваність і портативність, ніж класичний Ingress.
Коротко:
- Gateway API — наступний етап розвитку ingress-моделі в Kubernetes.
- Дає типізовані маршрути та кращу модель delegation.
- Підходить для складних multi-team edge сценаріїв.
45. Чим Gateway API відрізняється від Ingress?
Головні відмінності:
- Ingress: один базовий ресурс з обмеженою моделлю;
- Gateway API: набір ресурсів з окремими ролями (infra vs app teams);
- Gateway API має багатші policy/route моделі і кращу extensibility.
Практично це означає:
- гнучкіше керування listener-ами і маршрутами;
- безпечніша делегація маршрутів між namespace;
- зручніша підтримка не лише HTTP use-cases.
Коротко:
- Ingress простіший, Gateway API масштабованіший по архітектурі.
- Gateway API краще для великих платформ і складного трафік-менеджменту.
- Обидва потребують відповідного контролера даних.
46. Що таке Gateway, GatewayClass та HTTPRoute?
GatewayClass — описує, який контролер/платформний клас обслуговує Gateway.
Gateway:
- визначає точки входу (listeners), порти, TLS і привʼязку до інфраструктури;
- зазвичай управляється platform team.
HTTPRoute:
- описує host/path/match правила та backend refs;
- зазвичай управляється командою застосунку.
Разом вони реалізують розділення відповідальності edge-інфраструктури і маршрутів застосунків.
Коротко:
GatewayClass= тип реалізації.Gateway= вхідний шлюз і listeners.HTTPRoute= правила маршрутизації до сервісів.
47. Що таке NetworkPolicy?
NetworkPolicy — ресурс для контролю мережевого доступу до/від Pod на рівні L3/L4 (IP, порт, протокол).
Дозволяє описувати:
ingressправила до Pod;egressправила з Pod;- селекцію за labels namespace/pod.
Працює лише якщо CNI підтримує NetworkPolicy enforcement.
Коротко:
- NetworkPolicy обмежує мережеву взаємодію між workload.
- Дозволяє будувати мікросегментацію в межах кластера.
- Ефективність залежить від можливостей CNI.
48. Як NetworkPolicy підвищує безпеку?
NetworkPolicy реалізує принцип least privilege для мережі: дозволяється лише потрібний трафік.
Безпековий ефект:
- зменшення lateral movement у разі компрометації Pod;
- ізоляція чутливих сервісів (DB, auth, internal API);
- контроль outbound доступу до зовнішніх endpoint.
Практичний підхід: default-deny + явні allow-правила.
Коротко:
- NetworkPolicy сегментує трафік і зменшує blast radius.
- Найкраща практика: починати з deny-by-default.
- Це базовий елемент defense-in-depth у Kubernetes.
49. Що таке Persistent Volume (PV)?
PV — кластерний ресурс, що представляє виділене сховище (block/file) з визначеними параметрами доступу і життєвого циклу.
PV може бути:
- static (створений адміністратором);
- dynamic (створений автоматично через StorageClass).
PV існує незалежно від конкретного Pod.
Коротко:
- PV описує реальний storage-ресурс у кластері.
- Відокремлює життєвий цикл даних від Pod.
- Використовується через механізм PVC binding.
50. Що таке Persistent Volume Claim (PVC)?
PVC — запит застосунку на сховище з певним розміром, режимом доступу і класом storage.
Pod не монтує PV напряму: він монтує PVC, який привʼязується до сумісного PV.
kubectl get pvc -n data
kubectl describe pvc pgdata-postgres-0 -n dataКоротко:
- PVC — це декларація потреби застосунку у persistent storage.
- Kubernetes автоматично підбирає/створює відповідний PV.
- Pod працює з PVC як стабільною абстракцією storage.
51. У чому різниця між PV і PVC?
PV — це ресурс постачання сховища (supply side),
PVC — це запит споживача на сховище (demand side).
Модель схожа на "ресурс і контракт його споживання":
- адміністратор/платформа надає класи та backend;
- workload-команда описує потребу через PVC;
- control plane виконує binding між PVC і PV.
Коротко:
- PV = що кластер може надати.
- PVC = що застосунок запитує.
- Звʼязування відбувається автоматично за сумісними параметрами.
52. Що таке StorageClass?
StorageClass описує "профіль" сховища для dynamic provisioning: тип диска, параметри, reclaim policy, binding mode.
Що задає StorageClass:
- provisioner (CSI driver);
- performance/availability параметри;
volumeBindingMode(Immediate/WaitForFirstConsumer);reclaimPolicy(Delete/Retain).
Коротко:
- StorageClass стандартизує класи storage для команд.
- Керує тим, як і де створюються volumes.
- Є основою dynamic provisioning у Kubernetes.
53. Що таке dynamic provisioning?
Dynamic provisioning — автоматичне створення PV у момент створення PVC за правилами StorageClass.
Переваги:
- без ручного створення PV під кожен workload;
- швидше розгортання stateful сервісів;
- узгоджені параметри storage через стандартизовані класи.
Це типовий production-підхід у cloud і сучасних on-prem кластерах.
Коротко:
- PVC тригерить автоматичне створення PV через StorageClass.
- Dynamic provisioning прибирає ручні storage-операції.
- Дає масштабовану модель роботи з persistent volumes.
54. Як StatefulSet працює з постійним сховищем?
StatefulSet використовує volumeClaimTemplates, щоб для кожної репліки
створювався окремий PVC.
Приклади імен:
data-mydb-0,data-mydb-1дляmydb-0,mydb-1.
Це гарантує:
- стабільну привʼязку сховища до конкретної репліки;
- збереження даних при пересозданні Pod;
- передбачувану identity + storage модель для stateful кластерів.
Коротко:
- StatefulSet створює індивідуальний PVC на кожен Pod.
- Репліка повторно піднімається зі своїм volume.
- Така модель критична для БД і quorum-систем.
55. Що відбувається з даними після перезапуску Pod?
Залежить від типу сховища:
- дані в writable layer контейнера зникають при пересозданні Pod;
- дані в
emptyDirживуть лише поки Pod існує; - дані на
PVC/PVзберігаються і підмонтовуються після restart/recreate.
Тому для стану застосунку (БД, черги, файли) потрібен persistent volume.
Коротко:
- Ефемерне сховище Pod не гарантує збереження даних.
- Лише PVC/PV дають персистентність між перезапусками.
- Для stateful workload persistent storage є обовʼязковим.
56. Як scheduler обирає Node?
kube-scheduler фільтрує і ранжує вузли, а потім робить binding Pod до
найкращого Node.
Етапи:
- filtering: перевірка ресурсів, taints/tolerations, affinity, topology;
- scoring: пріоритети (баланс, locality, anti-affinity, spread);
- binding: запис призначення Pod -> Node в API.
Коротко:
- Scheduler не запускає контейнери, а лише обирає вузол.
- Вибір базується на політиках і доступних ресурсах.
- Після binding Pod піднімає
kubeletна вибраному Node.
57. Що таке resource requests і limits?
requests — гарантований мінімум ресурсу для планування Pod.
limits — верхня межа використання ресурсу контейнером.
Для CPU і RAM:
- scheduler враховує саме
requests; - перевищення
memory limitпризводить до OOMKill; - CPU при перевищенні
limitthrottling-иться.
Коротко:
requestsвпливають на placement Pod.limitsобмежують споживання під час виконання.- Коректні значення критичні для стабільності кластера.
58. Що таке QoS (Guaranteed, Burstable, BestEffort)?
QoS клас визначає пріоритет виживання Pod під ресурсним тиском.
Guaranteed: у всіх контейнерівrequests == limitsдля CPU/RAM.Burstable: єrequests, алеrequests != limitsхоча б десь.BestEffort: немаєrequestsіlimits.
При eviction найменш пріоритетний — BestEffort.
Коротко:
- QoS визначає, які Pod видалятимуться першими при дефіциті ресурсів.
Guaranteedмає найвищий пріоритет стабільності.- QoS напряму залежить від requests/limits.
59. Що таке nodeSelector?
nodeSelector — простий механізм привʼязки Pod до Node за label exact-match.
Приклад:
nodeSelector:
nodepool: paymentsЯкщо жоден Node не відповідає label, Pod залишиться в Pending.
Коротко:
nodeSelector— найпростіший спосіб node placement.- Працює лише як точний збіг label.
- Для складних правил краще
nodeAffinity.
60. Що таке node affinity?
nodeAffinity — розширений механізм планування Pod на вузли за label-правилами.
Режими:
requiredDuringSchedulingIgnoredDuringExecution— жорстка вимога;preferredDuringSchedulingIgnoredDuringExecution— мʼяке побажання.
Підтримує оператори In, NotIn, Exists, DoesNotExist.
Коротко:
- Node affinity гнучкіший за
nodeSelector. - Дозволяє hard/soft правила placement.
- Використовується для зон, типів вузлів і спецпулів.
61. Що таке pod affinity та anti-affinity?
Pod affinity/anti-affinity керує взаємним розміщенням Pod відносно інших Pod.
- affinity: розміщувати поруч із певними Pod;
- anti-affinity: не розміщувати поруч.
Часто застосовується з topologyKey (kubernetes.io/hostname, zone).
Коротко:
- Pod affinity керує co-location workload.
- Pod anti-affinity підвищує відмовостійкість через розподіл реплік.
- Це важливий інструмент для HA-дизайну.
62. Що таке taints і tolerations?
Taint ставиться на Node і "відштовхує" Pod. Toleration у Pod дозволяє ігнорувати конкретний taint.
Типовий сценарій: виділити вузли під спецнавантаження (GPU, infra, DB).
Ефекти taint:
NoSchedulePreferNoScheduleNoExecute
Коротко:
- Taints керують тим, кого не можна садити на Node.
- Tolerations не гарантує placement, а лише дозволяє його.
- Використовуються для ізоляції й контрольованого доступу до нод.
63. Як ізолювати навантаження на окремих нодах?
Комбінують кілька механізмів scheduling:
- окремий node pool із labels;
taintsна вузлах +tolerationsу потрібних Pod;nodeAffinity/nodeSelectorдля жорсткої привʼязки;ResourceQuotaіPriorityClassдля контролю конкуренції.
Для критичних сервісів додають anti-affinity і PDB.
Коротко:
- Найнадійніше: taints+tolerations + affinity + виділений node pool.
- Це зменшує noisy-neighbor ефект.
- Ізоляцію треба поєднувати з ресурсними політиками.
64. Що таке Horizontal Pod Autoscaler (HPA)?
HPA автоматично змінює кількість реплік workload (Deployment, StatefulSet)
за метриками навантаження.
Типові метрики:
- CPU/Memory utilization;
- custom/external metrics (через adapter).
Коротко:
- HPA масштабує кількість Pod горизонтально.
- Працює за поточним навантаженням.
- Основний autoscaling-механізм для додатків.
65. Як працює HPA?
Контролер HPA періодично читає метрики, обчислює бажану кількість реплік і
оновлює scale target-ресурсу.
Базова логіка:
- поточна метрика > target -> scale up;
- поточна метрика < target -> scale down (з урахуванням stabilization window).
Для CPU/memory зазвичай потрібен Metrics Server.
Коротко:
- HPA — це control loop над метриками.
- Скейлить через оновлення
spec.replicasу target workload. - Параметри поведінки важливі для уникнення "флапінгу".
66. Що таке Metrics Server і навіщо він потрібен?
Metrics Server збирає базові ресурсні метрики Pod/Node (CPU, memory) для Kubernetes autoscaling API.
Використовується для:
- HPA на CPU/memory;
kubectl top pods/nodes.
Це не повноцінний monitoring stack (не замінює Prometheus).
Коротко:
- Metrics Server дає оперативні ресурсні метрики для autoscaling.
- Потрібен для типових HPA сценаріїв.
- Для історії/алертів потрібен окремий стек моніторингу.
67. Що таке Vertical Pod Autoscaler (VPA)?
VPA автоматично підбирає requests/limits для контейнерів на основі історії
споживання ресурсів.
Режими:
Off(recommendation only);Initial(на старті Pod);Auto/Recreate(оновлення через перезапуск Pod).
Коротко:
- VPA масштабує ресурси вертикально, а не кількість реплік.
- Допомагає прибрати over/under-provisioning.
- Часто використовується окремо від HPA на CPU.
68. Що таке Cluster Autoscaler?
Cluster Autoscaler масштабує кількість Node у кластері за станом scheduler.
Поведінка:
- додає вузли, коли Pod не можуть бути заплановані;
- прибирає недовантажені вузли, якщо Pod можна безпечно перенести.
Працює через інтеграцію з cloud/node group API.
Коротко:
- Cluster Autoscaler масштабує інфраструктуру, не Pod.
- Закриває дефіцит або надлишок вузлів.
- Працює в парі з HPA/VPA для повного autoscaling.
69. У чому різниця між HPA, VPA та Cluster Autoscaler?
- HPA: змінює кількість Pod (
replicas). - VPA: змінює ресурси Pod (
requests/limits). - Cluster Autoscaler: змінює кількість Node.
Разом вони працюють на різних рівнях: workload, pod sizing, cluster capacity.
Коротко:
- HPA = горизонтальне масштабування застосунку.
- VPA = вертикальне тюнінгування ресурсів Pod.
- CA = масштабування обчислювальної бази кластера.
70. Як масштабувати додаток за кастомними метриками?
Для custom metrics HPA використовує API custom.metrics.k8s.io або
external.metrics.k8s.io через adapter (часто Prometheus Adapter).
Типовий потік:
- Експортувати метрику (наприклад, queue lag, RPS).
- Зібрати її в Prometheus.
- Віддати в HPA через adapter.
- Описати target в
autoscaling/v2HPA.
Коротко:
- Кастомні метрики дають бізнес-орієнтований autoscaling.
- Найчастіше реалізується через Prometheus Adapter.
- Потрібен контроль якості метрик, щоб уникнути нестабільного scaling.
71. Які стратегії оновлення Deployment: RollingUpdate vs Recreate?
У Deployment є дві основні стратегії оновлення: RollingUpdate і Recreate.
RollingUpdate:
- поступова заміна Pod;
- підтримує безперервну доступність за коректних probes;
- керується параметрами
maxUnavailableіmaxSurge.
Recreate:
- спочатку видаляє старі Pod, потім запускає нові;
- простіша логіка, але зазвичай з downtime;
- доречна для несумісних версій або особливих міграційних сценаріїв.
Коротко:
RollingUpdate— стандарт для zero/low downtime релізів.Recreate— винятковий варіант, коли потрібна повна заміна версії.- Вибір стратегії залежить від сумісності версій і вимог до доступності.
72. Що таке стратегія Recreate?
Recreate спочатку зупиняє старі Pod, а потім запускає нові.
Коли доречно:
- додаток не підтримує паралельну роботу старої/нової версії;
- є жорсткі несумісності стану або схеми.
Ризик: повний або частковий downtime на час заміни.
Коротко:
- Recreate = stop old -> start new.
- Простий, але ризиковий щодо доступності.
- Використовується лише коли RollingUpdate неможливий.
73. Як реалізувати Blue/Green deployment?
Створюють два оточення однієї версії сервісу: blue (active) і green
(candidate), після перевірки перемикають трафік.
Реалізація:
- два Deployment з різними labels;
- один Service, який перемикає selector;
- або керування через Ingress/Gateway weights.
Коротко:
- Blue/Green дає швидкий cutover і простий rollback.
- Потребує подвійних ресурсів на час релізу.
- Добре підходить для критичних оновлень.
74. Як реалізувати Canary deployment?
Canary подає малу частину трафіку на нову версію і поступово збільшує відсоток після перевірки метрик.
Реалізація:
- окремі stable/canary Deployment;
- маршрутизація через Ingress/Gateway/service mesh;
- автоматичний промоушн/rollback за SLO.
Коротко:
- Canary зменшує ризик релізу через поетапне введення версії.
- Рішення про промоушн базується на метриках, не на таймері.
- Потребує інструментів traffic splitting і observability.
75. Які інструменти використовуються для progressive delivery (Argo Rollouts, Flagger)?
Найуживаніші інструменти:
- Argo Rollouts: canary/blue-green controller з analysis і rollback;
- Flagger: автоматизує progressive delivery на базі метрик;
- service mesh/ingress інтеграції (Istio, Linkerd, NGINX, Gateway API).
Коротко:
- Progressive delivery потребує окремого rollout-контролера.
- Argo Rollouts і Flagger — стандартні production-варіанти.
- Ключова умова: надійні метрики та automated rollback.
76. Як забезпечити zero-downtime deployment?
Потрібна комбінація deployment і runtime-практик:
- RollingUpdate з адекватними
maxUnavailable/maxSurge; - коректні
readiness/startupprobes; - graceful shutdown (
preStop,terminationGracePeriodSeconds); - кілька реплік + anti-affinity;
- PDB і контроль disruption.
Коротко:
- Zero-downtime досягається політикою оновлення + готовністю Pod.
- Readiness probe критичні для безпечного переключення трафіку.
- Один Pod або відсутність grace shutdown зазвичай ламають ціль.
77. Що таке Pod Disruption Budget (PDB)?
PDB обмежує кількість Pod, які можна добровільно евакуювати одночасно (maintenance, drain, autoscaler scale-down).
Параметри:
minAvailablemaxUnavailable
PDB не захищає від аварійного падіння ноди/процесу.
Коротко:
- PDB контролює voluntary disruptions.
- Допомагає зберегти мінімальну доступність сервісу.
- Працює разом із rollout/disruption процесами.
78. Чому PDB важливий?
Без PDB платформа може одночасно видалити занадто багато реплік під час обслуговування вузлів.
Наслідки відсутності PDB:
- деградація або недоступність сервісу;
- збої під час node upgrade/drain;
- нестабільний autoscaler scale-down.
Коротко:
- PDB — страховка доступності під час планових змін.
- Особливо критичний для stateful і latency-sensitive сервісів.
- Є базовою вимогою production-надійності.
79. Що таке RBAC?
RBAC (Role-Based Access Control) — модель авторизації Kubernetes, яка визначає, хто і які API-дії може виконувати.
Сутності:
- Role/ClusterRole — набір дозволів;
- RoleBinding/ClusterRoleBinding — привʼязка дозволів до subject.
Коротко:
- RBAC керує доступом до ресурсів API.
- Дозволяє реалізувати least privilege.
- Це базовий security-control у Kubernetes.
80. Різниця між Role і ClusterRole?
Roleдіє в межах одного namespace.ClusterRoleдіє на рівні всього кластера або для non-namespaced ресурсів.
ClusterRole можна також привʼязати в конкретному namespace через
RoleBinding.
Коротко:
- Role = namespace scope.
- ClusterRole = cluster scope.
- Вибір залежить від області доступу.
81. Що таке RoleBinding і ClusterRoleBinding?
Це ресурси привʼязки прав до користувачів, груп або service accounts.
RoleBinding: надає Role/ClusterRole в межах namespace.ClusterRoleBinding: надає ClusterRole на весь кластер.
Коротко:
- Binding зʼєднує "хто" і "що дозволено".
- RoleBinding обмежує доступ namespace-рамками.
- ClusterRoleBinding застосовується для глобальних прав.
82. Що таке Pod Security Standards?
Pod Security Standards (PSS) — набір профілів безпеки Pod:
PrivilegedBaselineRestricted
Вони визначають вимоги до security-параметрів контейнерів і Pod.
Коротко:
- PSS — стандартизовані рівні жорсткості безпеки Pod.
- У production зазвичай ціль —
Restricted(з винятками). - Це policy-модель, яку застосовує Pod Security Admission.
83. Що таке Pod Security Admission?
Pod Security Admission (PSA) — вбудований admission controller, який перевіряє Pod проти PSS-політик на рівні namespace labels.
Режими:
enforcewarnaudit
PSP застарів і видалений; актуальний механізм — PSA.
Коротко:
- PSA забезпечує policy enforcement для безпеки Pod.
- Керується namespace labels і режимами enforce/warn/audit.
- Це стандартна заміна PodSecurityPolicy.
84. Як запускати контейнери без root?
Налаштовують securityContext контейнера/Pod:
runAsNonRoot: truerunAsUser,runAsGroup- read-only root filesystem за потреби.
Також образ має підтримувати non-root користувача.
Коротко:
- Non-root запуск — базова вимога hardening.
- Потрібні і правильний image, і правильний securityContext.
- Це знижує ризик privilege escalation.
85. Що таке SecurityContext?
securityContext — набір security-параметрів для Pod/контейнера:
- user/group IDs;
- capabilities;
allowPrivilegeEscalation;readOnlyRootFilesystem;- seccomp, SELinux/AppArmor (де підтримується).
Коротко:
- SecurityContext керує привілеями процесів у контейнері.
- Це ключовий механізм runtime hardening.
- Налаштовується на рівні Pod і контейнера.
86. Як обмежити Linux capabilities контейнера?
У securityContext.capabilities прибирають усе зайве і додають лише необхідне.
Практика:
drop: ["ALL"]addтільки точково (наприкладNET_BIND_SERVICE).
Це мінімізує surface для контейнерних атак.
Коротко:
- Починати варто з
drop ALL. - Додавати тільки capability, без якої сервіс не працює.
- Це важливий елемент least privilege на рівні процесу.
87. Як захистити Kubernetes API server?
Базовий hardening API server:
- приватний endpoint або жорсткий network allowlist;
- mTLS між компонентами control plane;
- OIDC/корпоративна ідентифікація + MFA на admin-доступ;
- строгий RBAC, мінімум
cluster-admin; - admission policies, audit logging, своєчасні оновлення.
Коротко:
- API server — найкритичніша точка атаки в кластері.
- Захист будується комбінацією мережі, IAM і політик.
- Регулярний patching і аудит обовʼязкові.
88. Як виконувати аудит дій у кластері?
Увімкнути Kubernetes audit logging на API server і відправляти логи в централізоване сховище (SIEM/лог-платформа).
Що аудіювати:
- доступ до
secrets, RBAC, authn/authz зміни; - create/update/delete критичних ресурсів;
- exec/port-forward у production namespaces.
Коротко:
- Аудит у Kubernetes робиться через audit policy API server.
- Логи мають централізовано зберігатися і корелюватися.
- Без аудиту складно розслідувати інциденти і порушення доступу.
89. Які основні best practices безпеки Kubernetes?
Ключовий security baseline:
- RBAC least privilege + окремі service accounts;
- PSA (
Restricted) і securityContext non-root; - NetworkPolicy default-deny;
- Secrets encryption at rest + ротація;
- image signing/scanning та заборона latest-tags;
- регулярні оновлення Kubernetes і вузлів.
Коротко:
- Безпека Kubernetes багатошарова: IAM, мережа, runtime, supply chain.
- Найкраща стратегія — policy-by-default, винятки точково.
- Автоматизація перевірок важливіша за ручні ревʼю.
90. Як переглянути логи Pod?
Базові команди:
kubectl logs pod-name -n app
kubectl logs pod-name -c container-name -n app
kubectl logs deploy/api -n app --since=30m
kubectl logs pod-name -n app --previous--previous корисний після restart контейнера.
Коротко:
kubectl logs— перший крок діагностики Pod.- Для multi-container Pod потрібно вказувати
-c. --previousдопомагає аналізувати попередній crash.
91. Як діагностувати CrashLoopBackOff?
Послідовність перевірки:
kubectl describe pod ...— reason, exit code, events.kubectl logs ... --previous— лог перед падінням.- Перевірити probes, env/config, dependencies (DB, DNS, secrets).
- Перевірити OOMKill/ресурси (
kubectl top).
Коротко:
- CrashLoopBackOff — симптом, а не першопричина.
- Ключові джерела: describe, previous logs, events.
- Часті причини: помилка старту, bad config, OOM, probe misconfig.
92. Як знайти причину постійного перезапуску Pod?
Перезапуски найчастіше викликають: OOM, failing probes, process crash, зовнішні залежності.
Що перевірити:
restartCount,lastState,exitCodeуkubectl describe pod;kubectl logs --previous;- readiness/liveness/startup probes;
- requests/limits і реальне споживання.
Коротко:
- Аналіз починається з
describeі--previous logs. - Причина зазвичай в процесі, конфігурації або ресурсах.
- Правильні probes і sizing суттєво знижують restart-loop.
93. Як діагностувати мережеві проблеми?
Практичний чеклист:
- перевірити Service/Endpoints/EndpointSlice;
- перевірити DNS (
nslookup,digз debug pod); - перевірити NetworkPolicy;
- перевірити Ingress/Gateway маршрути і backend health;
- перевірити CNI/kube-proxy стан на вузлах.
kubectl get svc,endpoints,endpointslices -n app
kubectl get networkpolicy -n app
kubectl exec -it debug -- nslookup api.app.svcКоротко:
- Мережеву проблему локалізують по шарах: DNS -> Service -> Policy -> CNI.
- Endpoints показують, чи бачить Service реальні Pod.
- Debug pod з мережевими утилітами істотно прискорює діагностику.
94. Як переглянути події (events) у кластері?
Події показують причини змін стану ресурсів і помилки scheduler/kubelet.
kubectl get events -A --sort-by=.lastTimestamp
kubectl get events -n app --field-selector involvedObject.name=api-xxx
kubectl describe pod api-xxx -n appEvents мають короткий retention, тому для production потрібне централізоване збирання.
Коротко:
- Events — швидкий спосіб побачити "що пішло не так".
- Особливо корисні для Pending/Failed scheduling і image pull проблем.
- Їх варто збирати централізовано через короткий TTL.
95. Як моніторити Kubernetes за допомогою Prometheus?
Типовий стек: Prometheus + kube-state-metrics + node-exporter + Alertmanager + Grafana.
Що моніторять:
- стан Pod/Deployment/Node;
- ресурси CPU/RAM/disk/network;
- SLI/SLO сервісів;
- control plane метрики.
Найчастіше розгортають через kube-prometheus-stack Helm chart.
Коротко:
- Prometheus — стандарт де-факто для метрик Kubernetes.
- Потрібні як інфраструктурні, так і прикладні метрики.
- Цінність моніторингу визначається якістю алертів і дашбордів.
96. Що таке kube-state-metrics?
kube-state-metrics експортує метрики стану Kubernetes-обʼєктів з API server (не ресурсне використання процесів).
Приклади:
- кількість desired/available реплік;
- статус Pod/Job;
- фази PVC/PV.
Коротко:
- kube-state-metrics = метрики стану обʼєктів control plane.
- Доповнює node/cAdvisor метрики ресурсного споживання.
- Критичний для алертів на деградацію workload.
97. Як організувати централізований логінг (EFK / Loki)?
Патерн: агент на ноді збирає stdout/stderr контейнерів і відправляє в централізоване сховище.
Варіанти:
- EFK: Fluent Bit/Fluentd -> Elasticsearch/OpenSearch -> Kibana;
- Loki stack: Promtail/Fluent Bit -> Loki -> Grafana.
Рекомендації:
- структурувати логи в JSON;
- додавати labels (namespace, app, pod);
- налаштувати retention і контроль вартості.
Коротко:
- Централізований логінг потрібен для розслідувань і аудиту.
- Loki зазвичай дешевший для log-at-scale, EFK гнучкіший у full-text.
- Важлива стандартизація формату логів і labels.
98. Як налаштувати алерти (Alertmanager)?
Prometheus обчислює alert rules, Alertmanager групує/дедуплікує та надсилає сповіщення (Slack, PagerDuty, email).
Практика:
- алерти за симптомами + алерти за причинами;
- чіткі severity і маршрутизація по командах;
- inhibition/silence під maintenance windows.
Коротко:
- Alertmanager керує життєвим циклом сповіщень.
- Якісні алерти мають низький шум і чіткі runbook-посилання.
- Routing і dedup критичні для on-call ефективності.
99. Як знайти причину високого використання ресурсів?
Порядок аналізу:
- Знайти проблемний рівень: node, namespace, workload, pod/container.
- Зіставити
requests/limitsі реальне споживання. - Перевірити throttling, OOM, GC, I/O wait, queue lag.
- Перевірити зміни релізу і трафіку.
Інструменти: kubectl top, Prometheus, профілювання застосунку.
Коротко:
- Причину шукають зверху вниз: кластер -> workload -> контейнер.
- Часто проблема в неправильному sizing або регресії релізу.
- Метрики інфри і аплікації потрібно аналізувати разом.
100. Різниця між imperative і declarative підходами?
Imperative: команди типу "зроби дію зараз" (kubectl scale, kubectl set image).
Declarative: опис цільового стану в YAML + kubectl apply.
Declarative кращий для відтворюваності, ревʼю та GitOps.
Коротко:
- Imperative зручний для оперативних дій.
- Declarative — база для стабільного production-управління.
- У довгому циклі переважає declarative модель.
101. Що таке declarative configuration?
Declarative configuration — це опис бажаного стану ресурсів у маніфестах, який Kubernetes постійно приводить до фактичного.
Основний інструмент:
kubectl apply -f k8s/Коротко:
- Описується "що має бути", а не "як виконати кроки".
- Полегшує контроль змін, відкат і автоматизацію.
- Є фундаментом GitOps-процесів.
102. Що таке GitOps?
GitOps — операційна модель, у якій Git-репозиторій є джерелом правди для кластерного стану, а контролер синхронізує кластер із Git.
Принципи:
- всі зміни через pull request;
- автоматична синхронізація і reconcile;
- видимий audit trail змін.
Коротко:
- GitOps переносить керування кластером у контрольований Git workflow.
- Зменшує конфіг-дрифт і ручні зміни "в обхід".
- Дає прозорість і відтворюваність операцій.
103. Як працюють Argo CD або Flux?
Argo CD і Flux запускають у кластері контролери, які:
- читають маніфести з Git;
- порівнюють desired state з live state;
- застосовують зміни та сигналізують про drift.
Підтримуються auto-sync, rollback/pinning і multi-env workflows.
Коротко:
- Це reconciliation controllers для GitOps.
- Вони автоматизують deploy і контроль відповідності Git->cluster.
- Різниця переважно у UX та операційній моделі, не у базовому принципі.
104. Чому Git використовується як source of truth?
Git дає версіонування, review, історію, контроль доступу і простий rollback.
Переваги для платформи:
- прозорі зміни через PR;
- відтворюваність середовищ;
- аудит хто/коли/що змінив.
Коротко:
- Git забезпечує керованість конфігурації як коду.
- Це зменшує ризик несанкціонованих і невидимих змін.
- Source of truth у Git спрощує disaster recovery.
105. Як структурувати маніфести для GitOps?
Практична структура:
apps/для сервісів;platform/для shared-компонентів;environments/(dev/stage/prod) з overlays/values;- окремі репо або чіткі каталоги для доступів команд.
Рекомендується: один спосіб шаблонізації (Helm або Kustomize) на один контур.
Коротко:
- Структура має відображати ownership і середовища.
- Мінімізуйте дублювання через overlays/чарти.
- Проста ієрархія важливіша за "ідеальну" складність.
106. Що таке drift detection?
Drift detection — виявлення розходження між станом у Git і фактичним станом у кластері.
Причини drift:
- ручні
kubectl edit/patch; - зовнішні controllers або ad-hoc зміни;
- неповне покриття ресурсів GitOps-контролером.
Коротко:
- Drift = кластер відхилився від source of truth.
- GitOps-контролери мають виявляти і виправляти такі відхилення.
- Без drift detection важко гарантувати консистентність середовищ.
107. Що таке Helm?
Helm — пакетний менеджер Kubernetes для шаблонізації, версіонування і встановлення наборів маніфестів.
Основні операції:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm upgrade --install api ./chart -n app
helm rollback api 3 -n appКоротко:
- Helm спрощує керування складними deployment-наборами.
- Дає параметризацію через values і контроль версій релізів.
- Широко використовується для platform і app deployment.
108. Що таке Helm Chart?
Helm Chart — пакунок шаблонів Kubernetes-ресурсів і metadata для інсталяції застосунку.
Типова структура:
Chart.yamlvalues.yamltemplates/
Chart може мати залежності (dependencies).
Коротко:
- Chart = інсталяційний шаблон застосунку для Helm.
- Містить шаблони, дефолтні values і метадані.
- Дозволяє повторно використовувати deployment-патерни.
109. Різниця між Helm і Kustomize?
- Helm: шаблонізація (Go templates), values, release management.
- Kustomize: patch/overlay без шаблонізатора, ближче до "чистого YAML".
Helm зручніший для reusable пакетів; Kustomize — для керованих overlays усередині одного репо/платформи.
Коротко:
- Helm = пакетування + шаблонізація + релізи.
- Kustomize = композиція і патчинг маніфестів.
- Обирають за моделлю керування, а не за "краще/гірше".
110. Які best practices використання Helm?
Практики для production:
- тримати values мінімальними і явними по середовищах;
- уникати надмірної логіки в templates;
- додавати
values.schema.jsonдля валідації; - фіксувати версії chart і dependencies;
- перевіряти рендер (
helm template,helm lint) у CI.
Коротко:
- Helm має залишатися читабельним і передбачуваним.
- Валідація values і CI-перевірки критичні.
- Версійний контроль chart/dependencies знижує регресії.
111. Що таке Kubernetes Operator?
Operator — це контролер, який автоматизує доменну операційну логіку для складного застосунку через CRD + reconciliation.
Типові задачі Operator:
- bootstrap кластера сервісу;
- backup/restore;
- failover;
- upgrade orchestration.
Коротко:
- Operator кодує runbook у вигляді controller logic.
- Використовується для складних stateful систем.
- Працює як розширення control plane.
112. Що таке Custom Resource (CR)?
Custom Resource (CR) — конкретний обʼєкт користувацького API-типу, визначеного через CRD.
Приклад: PostgresCluster/my-db як інстанс власного ресурсу.
CR описує desired state, який обробляє відповідний controller/operator.
Коротко:
- CR — це екземпляр кастомного ресурсу.
- Дозволяє керувати доменною логікою через Kubernetes API.
- Сам по собі CR не працює без контролера, який його reconciles.
113. Що таке Custom Resource Definition (CRD)?
CRD — ресурс, який розширює Kubernetes API новим типом обʼєкта.
CRD визначає:
- групу/версію/вид ресурсу;
- схему (OpenAPI validation);
- scope (Namespaced або Cluster).
Після створення CRD у кластері зʼявляються нові API endpoints.
Коротко:
- CRD додає нові типи ресурсів у Kubernetes.
- Дає формальний контракт і валідацію для custom API.
- Є фундаментом для Operators.
114. Коли варто створювати Operator?
Operator варто створювати, коли ручний runbook для сервісу складний, повторюваний і критичний для надійності.
Сигнали, що Operator виправданий:
- складні day-2 операції (backup, failover, resharding, upgrade);
- багато однакових інсталяцій сервісу;
- високий ризик помилок при ручному керуванні;
- потреба у self-healing на рівні доменної логіки.
Коротко:
- Operator потрібен для автоматизації складної operational логіки.
- Для простих stateless сервісів зазвичай достатньо Deployment/Helm.
- Вартість розробки Operator має окупатися стабільністю і масштабом.
115. Як забезпечити High Availability кластера?
High Availability (HA) кластера забезпечується на рівні control plane, worker nodes і застосунків.
Практичний baseline:
- мінімум 3 control plane вузли (etcd quorum);
- розподіл control plane та node pools по різних AZ;
- кілька реплік критичних сервісів + anti-affinity;
PodDisruptionBudgetдля захисту доступності;- зовнішній/керований load balancer перед API server.
Коротко:
- HA = відсутність single point of failure на всіх рівнях.
- Критичний мінімум: 3 control plane і зональна відмовостійкість.
- Для сервісів потрібні репліки, anti-affinity і PDB.
116. Як виконати backup та restore etcd?
Backup роблять через snapshot etcdctl, restore — із цього snapshot у новий або
відновлений etcd data dir.
Типовий потік:
ETCDCTL_API=3 etcdctl snapshot save /backup/etcd-$(date +%F).db
ETCDCTL_API=3 etcdctl snapshot status /backup/etcd-2026-02-26.db -w table
ETCDCTL_API=3 etcdctl snapshot restore /backup/etcd-2026-02-26.db --data-dir /var/lib/etcd-restoreПрактика production:
- регулярний автоматизований snapshot schedule;
- зберігання копій поза кластером;
- регулярний тест restore (DR drill).
Коротко:
- etcd backup/restore — ключова процедура disaster recovery.
- Snapshot без перевіреного restore-процесу недостатній.
- Backup має бути регулярним і протестованим.
117. Що станеться, якщо etcd стане недоступним?
Якщо etcd недоступний, control plane втрачає доступ до джерела істини стану кластера.
Наслідки:
- нові create/update/delete операції через API зазвичай не виконуються;
- controllers/scheduler не можуть коректно reconcile новий стан;
- вже запущені Pod на worker nodes можуть продовжити працювати певний час.
Фактично кластер переходить у режим деградації керованості.
Коротко:
- Недоступний etcd блокує керування кластером.
- Поточний workload може жити, але керованість різко падає.
- Тому etcd HA і restore-план критично важливі.
118. Як розподіляти навантаження між зонами доступності?
Для multi-AZ розподілу використовують scheduling-політики та zonal інфраструктуру.
Базові механізми:
- node groups у кількох AZ;
topologySpreadConstraintsдля рівномірного розміщення Pod;- pod anti-affinity по zone/hostname;
- zonal-aware storage і load balancer;
- перевірка cross-zone latency/cost.
Коротко:
- Розподіл по AZ підвищує стійкість до зональних збоїв.
topologySpreadConstraintsі anti-affinity — ключові інструменти.- Потрібно узгоджувати compute, network і storage по зонах.
119. Як працюють readiness і liveness probes?
readinessProbe визначає, чи Pod готовий приймати трафік.
livenessProbe визначає, чи контейнер "живий" і чи треба його перезапустити.
Поведінка:
- readiness fail -> Pod прибирається з Service endpoints;
- liveness fail -> kubelet перезапускає контейнер.
Важливо правильно налаштувати initialDelaySeconds, timeoutSeconds,
failureThreshold, щоб уникати хибних перезапусків.
Коротко:
- Readiness керує маршрутизацією трафіку.
- Liveness керує автовідновленням завислих контейнерів.
- Неправильні probe-параметри часто викликають нестабільність.
120. Що таке startup probe і коли його використовувати?
startupProbe використовується для повільного старту контейнерів і тимчасово
відключає перевірки liveness/readiness, доки застосунок не підніметься.
Коли потрібен:
- довгий bootstrap (міграції, кеш-прогрів, великі JVM/.NET старти);
- liveness занадто рано вбиває контейнер під час ініціалізації.
Після успішного startup probe починають діяти readiness/liveness.
Коротко:
- Startup probe захищає повільний старт від помилкових рестартів.
- Використовується для "важких" застосунків із довгою ініціалізацією.
- Після завершення startup працюють звичайні probes.
121. Що таке labels і selectors у Kubernetes?
labels — це ключ-значення метадані на ресурсах (Pod, Node, Service,
Namespace тощо).
selectors — правила вибірки ресурсів за labels.
Де це використовується:
Deployment/ReplicaSetвибирає Pod для керування;Serviceвибирає backend Pod для трафіку;- scheduling-політики (
nodeSelector, affinity) працюють через labels.
Коротко:
- Labels дають уніфіковану класифікацію ресурсів.
- Selectors звʼязують ресурси між собою через labels.
- Неправильні labels/selectors часто ламають routing і rollout.
122. Який lifecycle Pod (фази Pod і стани контейнерів)?
Основні фази Pod:
Pending— Pod створено, але ще не запущено повністю;Running— Pod запущений, хоча б один контейнер виконується;Succeeded— всі контейнери завершилися успішно;Failed— хоча б один контейнер завершився з помилкою;Unknown— стан не може бути визначений.
Стани контейнера всередині Pod:
WaitingRunningTerminated
Перевірка:
kubectl get pods -n app
kubectl describe pod api-xxx -n appКоротко:
- Pod phase показує життєвий етап обʼєкта в цілому.
- Container state деталізує стан процесів усередині Pod.
- Для діагностики потрібні і phase, і reason у container state.
123. Яка послідовність старту Pod і як працює graceful shutdown?
Типова послідовність старту:
- Scheduler призначає Pod на Node.
kubeletстворює pod sandbox і мережу.- Запускаються
initContainers(послідовно). - Запускаються основні контейнери.
readinessProbeдодає Pod в Service endpoints.
Graceful shutdown при видаленні Pod:
- Pod позначається
Terminatingі прибирається з endpoint-ів. - Виконується
preStophook (якщо заданий). - Надсилається
SIGTERMпроцесу контейнера. - Після
terminationGracePeriodSecondsнадсилаєтьсяSIGKILL(якщо процес не завершився).
Коротко:
- Правильний старт/зупинка Pod критичні для zero-downtime.
initContainers, probes і preStop визначають стабільність lifecycle.- Без graceful shutdown зростає ризик втрати запитів і некоректного stop.
124. Які є способи розгортання Kubernetes-кластера (kubeadm, k3s, k3d, kind, the hard way)?
Поширені варіанти:
kubeadm— стандартний спосіб підняти production-like кластер на VM/bare metal;k3s— легкий дистрибутив Kubernetes для edge/lab/small production;k3d— запуск k3s-кластерів у Docker (локальна розробка/тести);kind— Kubernetes in Docker для CI та інтеграційних тестів;Kubernetes the Hard Way— навчальний шлях для глибокого розуміння компонентів, не типовий production-метод.
Вибір залежить від цілі: локальна розробка, навчання, staging або production.
Коротко:
- Для production найчастіше
kubeadmабо managed Kubernetes. - Для локальної розробки зручні
kindіk3d. the hard wayкорисний для навчання архітектури, а не для швидкого запуску.