Модуль 5.7: Логування та моніторинг
Складність:
[MEDIUM]— Основні навички спостережуваностіЧас на виконання: 40–50 хвилин
Передумови: Модуль 5.1 (Методологія), Модулі 5.2–5.6 (специфіка усунення несправностей)
Що ви зможете робити
Розділ «Що ви зможете робити»Після цього модуля ви зможете:
- Запитати логи контейнерів за допомогою kubectl logs з вибором контейнера, попередніми логами та режимом слідкування
- Відстежити використання ресурсів кластера за допомогою kubectl top (вузли та поди) та пояснити metrics-server
- Імплементувати sidecar-логування для застосунків, що пишуть у файли замість stdout
- Дебажити проблеми metrics-server та пояснити, як метрики ресурсів надходять від kubelet до API server
Чому цей модуль важливий
Розділ «Чому цей модуль важливий»Логи та метрики — це ваші очі для розуміння того, що відбувається в кластері. Без них усунення несправностей — це вгадування. Розуміння того, як отримувати доступ до логів контейнерів, інтерпретувати події та використовувати метрики для визначення проблем з ресурсами, є фундаментальним для ефективної роботи з Kubernetes.
Аналогія з камерами спостереження
Логи — це як записи камер спостереження — вони фіксують що сталось і коли. Події — це як звіти про інциденти охоронця — помітні випадки, записані на папері. Метрики — це як датчики будівлі — температура, заповнюваність, споживання енергії. Разом вони розповідають повну історію того, що відбувається у вашому кластері.
Що ви дізнаєтесь
Розділ «Що ви дізнаєтесь»Після завершення цього модуля ви зможете:
- Ефективно отримувати доступ та фільтрувати логи контейнерів
- Розуміти події Kubernetes та їх значення
- Використовувати kubectl top для метрик ресурсів
- Орієнтуватись у розташуванні логів на вузлах
- Застосовувати стратегії логування для усунення несправностей
Чи знали ви?
Розділ «Чи знали ви?»- Логи йдуть у stdout/stderr: Kubernetes захоплює те, що контейнери пишуть у stdout та stderr — це єдина «магія» логування
- Події зберігаються в etcd: події — це звичайні об’єкти Kubernetes з TTL за замовчуванням 1 година
- Metrics Server не встановлений за замовчуванням: kubectl top вимагає запущеного Metrics Server
- Ротація логів — завдання kubelet: kubelet ротує логи контейнерів на основі налаштувань розміру та кількості
Частина 1: Логи контейнерів
Розділ «Частина 1: Логи контейнерів»1.1 Як працює логування контейнерів
Розділ «1.1 Як працює логування контейнерів»┌──────────────────────────────────────────────────────────────┐│ ПОТІК ЛОГУВАННЯ КОНТЕЙНЕРІВ ││ ││ Контейнер ││ ┌────────────────────────────────────────────────────┐ ││ │ Додаток │ ││ │ │ │ ││ │ ├── stdout ──────┐ │ ││ │ │ │ │ ││ │ └── stderr ──────┼────▶ Container runtime │ ││ │ │ захоплює вивід │ ││ └────────────────────────────────────────────────────┘ ││ │ ││ ▼ ││ Файлова система вузла ││ /var/log/containers/<pod>_<ns>_<container>-<id>.log ││ │ ││ ▼ ││ kubectl logs (читає ці файли через kubelet API) ││ │└──────────────────────────────────────────────────────────────┘1.2 Базові команди для логів
Розділ «1.2 Базові команди для логів»# Переглянути логи Підів (один контейнер)k logs <pod>
# Переглянути логи конкретного контейнера (багатоконтейнерний Під)k logs <pod> -c <container>
# Слідкувати за логами в реальному часіk logs <pod> -f
# Показати останні N рядківk logs <pod> --tail=50
# Показати логи за часk logs <pod> --since=1hk logs <pod> --since=30m
# Показати логи з мітками часуk logs <pod> --timestamps
# Комбінувати параметриk logs <pod> --tail=100 --timestamps -f1.3 Логи багатоконтейнерних Підів
Розділ «1.3 Логи багатоконтейнерних Підів»# Перелік контейнерів у Підовіk get pod <pod> -o jsonpath='{.spec.containers[*].name}'
# Отримати логи конкретного контейнераk logs <pod> -c <container>
# Отримати логи всіх контейнерівk logs <pod> --all-containers=true
# Отримати логи init-контейнерівk logs <pod> -c <init-container>1.4 Логи попереднього контейнера
Розділ «1.4 Логи попереднього контейнера»Критично для усунення несправностей CrashLoopBackOff:
# Отримати логи попереднього екземпляра контейнера (після падіння)k logs <pod> --previousk logs <pod> -c <container> --previous
# Це показує що було записано перед тим, як контейнер загинув# Критично для розуміння чому він впав1.5 Логи за мітками/селекторами
Розділ «1.5 Логи за мітками/селекторами»# Логи всіх Підів з міткоюk logs -l app=nginx
# Логи всіх Підів Деплойментаk logs deployment/my-deployment
# Слідкувати за логами всіх відповідних Підівk logs -l app=nginx -f
# З ім'ям контейнера для багатоконтейнерних Підівk logs -l app=nginx -c <container>Частина 2: Події Kubernetes
Розділ «Частина 2: Події Kubernetes»2.1 Розуміння подій
Розділ «2.1 Розуміння подій»┌──────────────────────────────────────────────────────────────┐│ ПОДІЇ KUBERNETES ││ ││ Події генеруються: ││ • Планувальником (рішення про розподіл) ││ • kubelet (життєвий цикл контейнерів) ││ • Контролерами (управління ресурсами) ││ • API-сервером (операції API) ││ ││ Типи подій: ││ • Normal: Інформаційні, все працює як очікувалось ││ • Warning: Щось неочікуване, може потребувати уваги ││ ││ Важливо: події зникають приблизно через 1 годину ││ за замовчуванням! ││ │└──────────────────────────────────────────────────────────────┘2.2 Перегляд подій
Розділ «2.2 Перегляд подій»# Усі події в поточному namespacek get events
# Усі події по всьому кластеруk get events -A
# Сортування за часом (найновіші останні)k get events --sort-by='.lastTimestamp'
# Сортування за часом (найновіші перші)k get events --sort-by='.lastTimestamp' | tac
# Фільтр за типомk get events --field-selector type=Warning
# Події для конкретного об'єктаk get events --field-selector involvedObject.name=<pod-name>
# Спостерігати за подіями в реальному часіk get events -w2.3 Типові причини подій
Розділ «2.3 Типові причини подій»| Причина | Тип | Що це означає |
|---|---|---|
| Scheduled | Normal | Під призначений на вузол |
| Pulled | Normal | Образ успішно витягнуто |
| Created | Normal | Контейнер створений |
| Started | Normal | Контейнер запущений |
| Killing | Normal | Контейнер завершується |
| FailedScheduling | Warning | Не вдалось знайти відповідний вузол |
| FailedMount | Warning | Монтування тому збоїло |
| Unhealthy | Warning | Проба не пройшла |
| BackOff | Warning | Контейнер падає, затримка |
| FailedCreate | Warning | Контролер не зміг створити Під |
| Evicted | Warning | Під евіктований з вузла |
| OOMKilling | Warning | Контейнер вбитий через OOM |
2.4 Події у виводі describe
Розділ «2.4 Події у виводі describe»# Події з'являються у виводі describek describe pod <pod># Шукайте секцію Events внизу
k describe node <node># Показує події на рівні вузла
k describe pvc <pvc># Показує події прив'язки томуЧастина 3: Метрики ресурсів
Розділ «Частина 3: Метрики ресурсів»3.1 Metrics Server
Розділ «3.1 Metrics Server»┌──────────────────────────────────────────────────────────────┐│ METRICS SERVER ││ ││ Вузли Metrics Server ││ ┌──────────┐ ┌──────────────┐ ││ │ kubelet │────────────│ Збирає │ ││ │ /metrics │ │ агрегує │ ││ └──────────┘ │ надає доступ │ ││ └──────┬───────┘ ││ │ ││ metrics.k8s.io API ││ │ ││ ▼ ││ kubectl top ││ ││ Без Metrics Server → kubectl top не працює ││ │└──────────────────────────────────────────────────────────────┘3.2 Перевірка Metrics Server
Розділ «3.2 Перевірка Metrics Server»# Перевірити чи Metrics Server встановленийk -n kube-system get pods | grep metrics-server
# Перевірити metrics APIk get apiservices | grep metrics
# Якщо не встановлений, команди top не працюватимутьk top nodes # Error: Metrics API not available3.3 Використання kubectl top
Розділ «3.3 Використання kubectl top»# Використання ресурсів вузлівk top nodes
# Використання ресурсів Підів (поточний namespace)k top pods
# Використання ресурсів Підів (усі namespace)k top pods -A
# Сортування за CPUk top pods --sort-by=cpu
# Сортування за пам'яттюk top pods --sort-by=memory
# Використання по контейнерахk top pods --containers
# Конкретний Підk top pod <pod-name>3.4 Інтерпретація метрик
Розділ «3.4 Інтерпретація метрик»┌──────────────────────────────────────────────────────────────┐│ ІНТЕРПРЕТАЦІЯ МЕТРИК ││ ││ NAME CPU(cores) MEMORY(bytes) ││ my-pod 100m 256Mi ││ ││ CPU: 100m = 100 мілікорів = 0.1 ядра CPU ││ 1000m = 1 ядро ││ ││ Пам'ять: Mi = мебібайти (1024 * 1024 байт) ││ Gi = гібібайти ││ ││ Порівняйте з requests/limits: ││ Якщо використання >> requests: може бути OOMKilled ││ Якщо використання >> limit: буде OOMKilled або CPU ││ тротлінг ││ │└──────────────────────────────────────────────────────────────┘3.5 Порівняння ресурсів
Розділ «3.5 Порівняння ресурсів»# Порівняти фактичне використання vs запити# Крок 1: Отримати запитиk get pod <pod> -o jsonpath='{.spec.containers[0].resources.requests}'
# Крок 2: Отримати фактичне використанняk top pod <pod>
# Якщо фактичне >> запити — Під недозапитаний# Якщо фактичне << запити — Під перезапитанийЧастина 4: Логи на рівні вузла
Розділ «Частина 4: Логи на рівні вузла»4.1 Розташування логів на вузлах
Розділ «4.1 Розташування логів на вузлах»┌──────────────────────────────────────────────────────────────┐│ РОЗТАШУВАННЯ ЛОГІВ НА ВУЗЛІ ││ ││ Логи контейнерів: ││ /var/log/containers/<pod>_<ns>_<container>-<id>.log ││ ││ Логи Підів (symlinks): ││ /var/log/pods/<ns>_<pod>_<uid>/ ││ ││ Логи kubelet: ││ journalctl -u kubelet ││ ││ Логи container runtime: ││ journalctl -u containerd ││ journalctl -u docker (якщо використовується docker) ││ ││ Системні логи: ││ /var/log/syslog або /var/log/messages ││ journalctl ││ │└──────────────────────────────────────────────────────────────┘4.2 Доступ до логів вузла
Розділ «4.2 Доступ до логів вузла»# Спочатку SSH на вузолssh <node>
# Логи контейнерів напрямуls /var/log/containers/tail -f /var/log/containers/<pod>*.log
# Логи kubeletjournalctl -u kubelet -fjournalctl -u kubelet --since "10 minutes ago"journalctl -u kubelet | grep -i error
# Логи container runtimejournalctl -u containerd -f
# Системні повідомленняdmesg | tail -50journalctl -xe4.3 Логи компонентів площини управління
Розділ «4.3 Логи компонентів площини управління»На вузлах площини управління:
# Якщо використовуються статичні Під'и (kubeadm)# Логи доступні через kubectlk -n kube-system logs kube-apiserver-<node>k -n kube-system logs kube-scheduler-<node>k -n kube-system logs kube-controller-manager-<node>k -n kube-system logs etcd-<node>
# Або напряму на вузлі через journalctl (якщо сервіси systemd)journalctl -u kube-apiserverjournalctl -u kube-schedulerjournalctl -u kube-controller-managerjournalctl -u etcdЧастина 5: Стратегії логування для усунення несправностей
Розділ «Частина 5: Стратегії логування для усунення несправностей»5.1 Робочий процес аналізу логів
Розділ «5.1 Робочий процес аналізу логів»┌──────────────────────────────────────────────────────────────┐│ РОБОЧИЙ ПРОЦЕС АНАЛІЗУ ЛОГІВ ││ ││ 1. Починайте з подій ││ k describe <resource> | grep -A 20 Events ││ ││ 2. Перевірте останні події по кластеру ││ k get events --sort-by='.lastTimestamp' | tail ││ ││ 3. Отримайте логи контейнера ││ k logs <pod> ││ k logs <pod> --previous (якщо впав) ││ ││ 4. Фільтруйте помилки ││ k logs <pod> | grep -i error ││ k logs <pod> | grep -i exception ││ ││ 5. Перевірте час ││ k logs <pod> --timestamps --since=10m ││ ││ 6. Перевірте пов'язані компоненти ││ Проблеми Підів: перевірте вузол ││ Проблеми мережі: перевірте CNI, kube-proxy ││ Проблеми DNS: перевірте CoreDNS ││ │└──────────────────────────────────────────────────────────────┘5.2 Фільтрація виводу логів
Розділ «5.2 Фільтрація виводу логів»# Пошук помилокk logs <pod> | grep -i errork logs <pod> | grep -i exceptionk logs <pod> | grep -i fatal
# Виключення шумуk logs <pod> | grep -v "INFO"k logs <pod> | grep -v "health check"
# Складні фільтриk logs <pod> | grep -E "error|warning|failed"
# З мітками часу та фільтрацієюk logs <pod> --timestamps | grep "2024-01-15T10:3"
# Підрахунок появ помилокk logs <pod> | grep -c error5.3 Аналіз логів кількох Підів
Розділ «5.3 Аналіз логів кількох Підів»# Логи всіх Підів Деплойментаk logs deployment/<name> --all-containers
# Агрегація логів з кількох Підів за міткамиk logs -l app=frontend --all-containers
# Використання stern (не вбудований, але корисний)# stern <pod-name-pattern>
# Обхідний шлях: цикл по Під'ахfor pod in $(k get pods -l app=nginx -o name); do echo "=== $pod ===" k logs $pod --tail=5done5.4 Кореляція подій та логів
Розділ «5.4 Кореляція подій та логів»# Отримати час подіїk get events --field-selector involvedObject.name=my-pod
# Запам'ятайте мітку часу, потім перевірте логи навколо того часуk logs my-pod --since-time="2024-01-15T10:30:00Z"
# Або використайте відносний часk logs my-pod --since=5mЧастина 6: Шаблони моніторингу
Розділ «Частина 6: Шаблони моніторингу»6.1 Проактивні команди моніторингу
Розділ «6.1 Проактивні команди моніторингу»# Швидка перевірка здоров'я кластераk get nodesk get pods -A | grep -v Runningk top nodesk get events -A --field-selector type=Warning
# Створити простий скрипт моніторингуwatch -n 5 'kubectl get pods -A | grep -v Running | grep -v Completed'6.2 Виявлення тиску на ресурси
Розділ «6.2 Виявлення тиску на ресурси»# Перевірити тиск на вузлиk describe nodes | grep -E "MemoryPressure|DiskPressure|PIDPressure"
# Перевірити Під'и, що використовують надмірно ресурсівk top pods -A --sort-by=memory | head -10k top pods -A --sort-by=cpu | head -10
# Перевірити Під'и в Pending (може означати нестачу ресурсів)k get pods -A --field-selector=status.phase=Pending6.3 Налагодження з тимчасовими Під’ами
Розділ «6.3 Налагодження з тимчасовими Під’ами»# Створити debug-Під з мережевими інструментамиk run debug --image=nicolaka/netshoot --rm -it --restart=Never -- bash
# Простий debug-Підk run debug --image=busybox:1.36 --rm -it --restart=Never -- sh
# Debug з конкретним service accountk run debug --image=busybox:1.36 --rm -it --restart=Never --serviceaccount=<sa> -- sh
# Debug у конкретному namespacek run debug -n <namespace> --image=busybox:1.36 --rm -it --restart=Never -- shТипові помилки
Розділ «Типові помилки»| Помилка | Проблема | Рішення |
|---|---|---|
Забути --previous | Не бачите логи падіння | Використовуйте --previous для CrashLoopBackOff |
| Не фільтрувати логи | Занадто багато шуму | Використовуйте grep, --since, --tail |
| Ігнорування подій | Пропуск очевидних підказок | Завжди перевіряйте події першими |
| Пропуск багатоконтейнерних | Логи не того контейнера | Використовуйте -c <container> або --all-containers |
| Події зникли | Немає історичних даних | Перевіряйте логи одразу після інциденту |
| Немає Metrics Server | kubectl top не працює | Встановіть Metrics Server |
Тест
Розділ «Тест»Q1: Попередні логи
Розділ «Q1: Попередні логи»Коли ви використовуєте kubectl logs --previous?
Відповідь
Використовуйте --previous коли контейнер впав і перезапустився. Він показує логи попереднього екземпляра контейнера перед його загибеллю. Критично для усунення несправностей CrashLoopBackOff — без нього ви бачите лише логи новозапущеного (ймовірно, знову падаючого) контейнера.
k logs <pod> --previousQ2: Зберігання подій
Розділ «Q2: Зберігання подій»Як довго зберігаються події Kubernetes за замовчуванням?
Відповідь
1 годину за замовчуванням. Події зберігаються в etcd з TTL. Після закінчення терміну вони збираються збирачем сміття. Тому важливо перевіряти події одразу після інциденту — докази зникають.
Тривалість зберігання можна змінити прапорцем API-сервера --event-ttl.
Q3: Metrics Server
Розділ «Q3: Metrics Server»kubectl top pods повертає «metrics not available». Що не так?
Відповідь
Metrics Server не встановлений або не працює. kubectl top вимагає запущеного Metrics Server.
Перевірте:
k -n kube-system get pods | grep metrics-serverk get apiservices | grep metrics.k8s.ioВстановіть Metrics Server, якщо відсутній.
Q4: Логи багатоконтейнерних Підів
Розділ «Q4: Логи багатоконтейнерних Підів»Як отримати логи всіх контейнерів у Підові?
Відповідь
k logs <pod> --all-containers=trueАбо вкажіть кожний контейнер окремо:
k logs <pod> -c container1k logs <pod> -c container2Спочатку перелічіть контейнери:
k get pod <pod> -o jsonpath='{.spec.containers[*].name}'Q5: Розташування логів
Розділ «Q5: Розташування логів»Де зберігаються логи контейнерів на вузлі?
Відповідь
/var/log/containers/<pod>_<namespace>_<container>-<id>.logНасправді це symlinks на реальні файли логів, якими керує container runtime. kubelet відповідає за ротацію логів.
Ви можете отримати до них прямий доступ через SSH на вузол.
Q6: Події vs Логи
Розділ «Q6: Події vs Логи»Коли ви перевіряєте події vs логи?
Відповідь
Події першими — для:
- Проблем розподілу (чому Під не розподілений)
- Життєвого циклу контейнерів (створення, запуск, зупинка)
- Монтування томів
- Витягування образів
- Загального розуміння «що сталось»
Логи другими — для:
- Проблем на рівні додатку
- Чому додаток збоїть
- Детальних повідомлень про помилки
- Stack trace
- «Що робить додаток»
Події розповідають про операції Kubernetes; логи розповідають про поведінку додатку.
Практична вправа: Аналіз логів та метрик
Розділ «Практична вправа: Аналіз логів та метрик»Сценарій
Розділ «Сценарій»Практика використання логів та метрик для усунення несправностей.
Підготовка
Розділ «Підготовка»# Створити тестовий namespacek create ns logging-lab
# Створити Під, що генерує логиcat <<'EOF' | k apply -f -apiVersion: v1kind: Podmetadata: name: log-generator namespace: logging-labspec: containers: - name: logger image: busybox:1.36 command: - sh - -c - | i=0 while true; do echo "$(date '+%Y-%m-%d %H:%M:%S') INFO: Log message $i" if [ $((i % 5)) -eq 0 ]; then echo "$(date '+%Y-%m-%d %H:%M:%S') ERROR: Something went wrong at iteration $i" >&2 fi i=$((i+1)) sleep 2 doneEOF
# Створити Під, що падає, для демонстрації --previouscat <<'EOF' | k apply -f -apiVersion: v1kind: Podmetadata: name: crashy-pod namespace: logging-labspec: containers: - name: crasher image: busybox:1.36 command: - sh - -c - | echo "Starting up..." sleep 5 echo "About to crash!" exit 1EOFЗавдання 1: Базові операції з логами
Розділ «Завдання 1: Базові операції з логами»# Переглянути логиk logs -n logging-lab log-generator
# Слідкувати за логамиk logs -n logging-lab log-generator -f# (Ctrl+C для зупинки)
# Останні 10 рядківk logs -n logging-lab log-generator --tail=10
# З мітками часуk logs -n logging-lab log-generator --tail=10 --timestampsЗавдання 2: Фільтрація логів
Розділ «Завдання 2: Фільтрація логів»# Знайти лише помилкиk logs -n logging-lab log-generator | grep ERROR
# Підрахувати помилкиk logs -n logging-lab log-generator | grep -c ERROR
# Виключити повідомлення INFOk logs -n logging-lab log-generator | grep -v INFOЗавдання 3: Логи попереднього контейнера
Розділ «Завдання 3: Логи попереднього контейнера»# Зачекати поки crashy-pod впаде та перезапуститьсяk get pod -n logging-lab crashy-pod -w
# Коли покаже CrashLoopBackOff або перезапуски, перевірте попередні логиk logs -n logging-lab crashy-pod --previousЗавдання 4: Аналіз подій
Розділ «Завдання 4: Аналіз подій»# Усі події в namespacek get events -n logging-lab --sort-by='.lastTimestamp'
# Описати Під для подійk describe pod -n logging-lab crashy-pod | grep -A 10 Events
# Спостерігати за новими подіямиk get events -n logging-lab -wЗавдання 5: Метрики (якщо Metrics Server встановлений)
Розділ «Завдання 5: Метрики (якщо Metrics Server встановлений)»# Метрики вузлівk top nodes
# Метрики Підівk top pods -n logging-lab
# Усі Під'и за пам'яттюk top pods -A --sort-by=memory | headКритерії успіху
Розділ «Критерії успіху»- Переглянули логи в реальному часі зі слідкуванням
- Відфільтрували логи за помилками
- Отримали логи попереднього контейнера
- Проаналізували події для інформації про падіння
- Використали kubectl top (якщо Metrics Server доступний)
Очищення
Розділ «Очищення»k delete ns logging-labПрактичні вправи
Розділ «Практичні вправи»Вправа 1: Перегляд останніх N логів (30 с)
Розділ «Вправа 1: Перегляд останніх N логів (30 с)»# Завдання: Показати останні 20 рядків логівk logs <pod> --tail=20Вправа 2: Логи з мітками часу (30 с)
Розділ «Вправа 2: Логи з мітками часу (30 с)»# Завдання: Показати логи з мітками часуk logs <pod> --timestampsВправа 3: Логи попереднього контейнера (30 с)
Розділ «Вправа 3: Логи попереднього контейнера (30 с)»# Завдання: Отримати логи контейнера, що впавk logs <pod> --previousВправа 4: Логи багатоконтейнерних Підів (1 хв)
Розділ «Вправа 4: Логи багатоконтейнерних Підів (1 хв)»# Завдання: Отримати логи конкретного контейнераk get pod <pod> -o jsonpath='{.spec.containers[*].name}'k logs <pod> -c <container-name>Вправа 5: Останні події (30 с)
Розділ «Вправа 5: Останні події (30 с)»# Завдання: Показати події, відсортовані за часомk get events --sort-by='.lastTimestamp'Вправа 6: Попереджувальні події (30 с)
Розділ «Вправа 6: Попереджувальні події (30 с)»# Завдання: Показати лише попереджувальні подіїk get events --field-selector type=WarningВправа 7: Метрики вузлів (30 с)
Розділ «Вправа 7: Метрики вузлів (30 с)»# Завдання: Показати використання ресурсів вузлівk top nodesВправа 8: Метрики Підів відсортовані (30 с)
Розділ «Вправа 8: Метрики Підів відсортовані (30 с)»# Завдання: Показати Під'и з найбільшим споживанням пам'ятіk top pods -A --sort-by=memory | headПідсумок Частини 5
Розділ «Підсумок Частини 5»Вітаємо із завершенням Частини 5: Усунення несправностей! Ви вивчили:
- Методологію: Систематичний підхід до діагностики
- Збої додатків: Проблеми Підів, контейнерів та Деплойментів
- Площину управління: API-сервер, планувальник, controller manager, etcd
- Робочі вузли: kubelet, runtime та ресурси вузлів
- Мережу: Зв’язок Підів, DNS та CNI
- Сервіси: ClusterIP, NodePort, LoadBalancer, Ingress
- Логування та моніторинг: Логи, події та метрики
З 30% ваги іспиту CKA усунення несправностей є критичним. Практикуйте вправи, поки вони не стануть автоматичними.
Наступні кроки
Розділ «Наступні кроки»Переходьте до Частина 6: Пробні іспити, щоб перевірити свої знання на реалістичних сценаріях іспиту.