Кubernetes
1. Проблеми з плануванням Pod
Сценарій: Деплоймент з pod не вдається запустити, і в повідомленні про помилку сказано: 0/5 nodes are available: insufficient memory.
Відповідь:
- Перевірте запити та ліміти пам'яті для pod у YAML файлі
kubectl describe pod
- Порівняйте запитувану пам'ять з ресурсами вузла
kubectl describe node
- Зменшіть запити/ліміти пам'яті у специфікації pod.
- Масштабуйте кластер, додаючи вузли з достатньою кількістю пам'яті.
2. Проблеми з мережею
Сценарій: Front-end pod не може зв’язатися з back-end сервісом.
Відповідь:
- Перевірте back-end сервіс
kubectl get svc backend-service
- Перевірте DNS-резолюцію з front-end pod
kubectl exec -it -- nslookup backend-service
- Переконайтеся, що back-end pod працює і слухає на правильному порту
kubectl describe pod
- Якщо тип сервісу —
ClusterIP
, переконайтеся, що pod знаходяться в одному просторі імен. Для міжпросторової комунікації використовуйте..svc.cluster.local
.
3. Проблеми з постійними томами
Сценарій: Pod, що використовує PVC, залишається у стані Pending
.
Відповідь:
- Перевірте статус PVC
kubectl describe pvc
- Переконайтеся, що існує PersistentVolume (PV), який відповідає вимогам PVC (розмір, режими доступу, клас зберігання).
kubectl get pv
- Створіть PV вручну, що відповідає специфікаціям PVC.
- Оновіть клас зберігання для динамічного створення необхідного сховища.
4. Високе споживання ресурсів
Сценарій: Pod споживає занадто багато CPU, що впливає на інші навантаження.
Відповідь:
- Перевірте використання ресурсів pod:
kubectl top pod
- Оновіть запити та ліміти ресурсів для обмеження використання CPU
resources:
requests:
cpu: "500m"
limits:
cpu: "1000m"
- Моніторьте використання ресурсів вузла
kubectl top node
5. CrashLoopBackOff
Сценарій: Pod постійно перезавантажується і має статус CrashLoopBackOff
Відповідь:
- Перевірте логи pod
kubectl logs
- Перевірте події на наявність помилок
kubectl describe pod
- Якщо проблема пов'язана з змінними середовища, секретами чи конфігураційними картами, перевірте та виправте їх.
- Переконайтеся, що команда запуску контейнера або код додатку правильні.
6. Сервіс не спрямовує трафік до pod
Сценарій: Сервіс не направляє трафік до pod, які він вибирає.
Відповідь:
- Перевірте
selector
сервісу, щоб він відповідав міткам pod
kubectl describe svc
kubectl get pods --show-labels
- Перевірте, чи pod у стані
Running
kubectl get pods
- Оновіть selector сервісу або мітки pod для відповідності.
7. Вузол не готовий
Сценарій: Вузол в кластері має статус NotReady
.
Відповідь:
- Перевірте статус вузла
kubectl describe node
- Перевірте логи kubelet на вузлі
journalctl -u kubelet
- Перевірте наявність проблем з дисковим тиском або виснаженням ресурсів.
- Перезапустіть kubelet або досліджуйте проблеми на рівні вузла (наприклад, мережеві проблеми).
8. Ingress не спрямовує трафік
Сценарій: Ingress не спрямовує зовнішній трафік до сервісу.
Відповідь:
- Перевірте правила Ingress
kubectl describe ingress
- Переконайтеся, що ingress controller працює
kubectl get pods -n ingress-nginx
- Перевірте DNS-резолюцію для імені хоста
nslookup
- Переконайтеся, що бекенд-сервіс здоровий і доступний на правильному порту.
9. HPA не масштабує pod
Сценарій: Horizontal Pod Autoscaler (HPA) не масштабує pod відповідно до очікувань.
Відповідь:
- Перевірте конфігурацію HPA
kubectl describe hpa
Перевірте, чи працює сервер метрик
kubectl get pods -n kube-system | grep metrics-server
```
- Переконайтеся, що запити та ліміти ресурсів для CPU/Memory встановлені в деплойменті.
- Перевірте метрики
kubectl top pod
10. Pod застряг у стані Terminating
Сценарій: Pod застряг у стані Terminating
.
Відповідь:
- Перевірте наявність фіналізаторів, які заважають видаленню
kubectl describe pod
- Примусово видаліть pod
kubectl delete pod --grace-period=0 --force
- Якщо pod використовує PersistentVolumes, система зберігання може не встигнути відключити або видалити том.
- Несправності kubelet або API серверу можуть призвести до неповного завершення операцій з видалення pod.
- Вузол, на якому розміщено pod, може мати проблеми. Перевірте його статус та логи kubelet
kubectl describe node
journalctl -u kubelet | grep
Висновок
Виявлення та усунення проблем у Kubernetes є важливим навиком для підтримки стабільних і надійних контейнеризованих середовищ. У цій статті розглянуті різноманітні реальні сценарії, такі як проблеми з плануванням pod, проблеми з мережею, труднощі з постійними томами та pod, які застрягли в стані Terminating
. Для кожного сценарію надано конкретні кроки для діагностики та ефективного вирішення проблем.
Слідкуйте за мною на LinkedIn
Слідкуйте за новими статтями, як ця 😁
Перекладено з: Kubernetes: Scenario based questions