Kubernetes: Запитання на основі сценаріїв

pic

Кubernetes

1. Проблеми з плануванням Pod

Сценарій: Деплоймент з pod не вдається запустити, і в повідомленні про помилку сказано: 0/5 nodes are available: insufficient memory.

Відповідь:

  1. Перевірте запити та ліміти пам'яті для pod у YAML файлі
kubectl describe pod 
  1. Порівняйте запитувану пам'ять з ресурсами вузла
kubectl describe node 
  • Зменшіть запити/ліміти пам'яті у специфікації pod.
  • Масштабуйте кластер, додаючи вузли з достатньою кількістю пам'яті.

2. Проблеми з мережею

Сценарій: Front-end pod не може зв’язатися з back-end сервісом.
Відповідь:

  1. Перевірте back-end сервіс
kubectl get svc backend-service
  1. Перевірте DNS-резолюцію з front-end pod
kubectl exec -it  -- nslookup backend-service
  1. Переконайтеся, що back-end pod працює і слухає на правильному порту
kubectl describe pod 
  1. Якщо тип сервісу — ClusterIP, переконайтеся, що pod знаходяться в одному просторі імен. Для міжпросторової комунікації використовуйте ..svc.cluster.local.

3. Проблеми з постійними томами

Сценарій: Pod, що використовує PVC, залишається у стані Pending.
Відповідь:

  1. Перевірте статус PVC
kubectl describe pvc 
  1. Переконайтеся, що існує PersistentVolume (PV), який відповідає вимогам PVC (розмір, режими доступу, клас зберігання).
kubectl get pv
  • Створіть PV вручну, що відповідає специфікаціям PVC.
  • Оновіть клас зберігання для динамічного створення необхідного сховища.

4. Високе споживання ресурсів

Сценарій: Pod споживає занадто багато CPU, що впливає на інші навантаження.

Відповідь:

  1. Перевірте використання ресурсів pod:
kubectl top pod 
  1. Оновіть запити та ліміти ресурсів для обмеження використання CPU
resources:  
 requests:  
 cpu: "500m"  
 limits:  
 cpu: "1000m"
  1. Моніторьте використання ресурсів вузла
kubectl top node

5. CrashLoopBackOff

Сценарій: Pod постійно перезавантажується і має статус CrashLoopBackOff

Відповідь:

  1. Перевірте логи pod
kubectl logs 
  1. Перевірте події на наявність помилок
kubectl describe pod 
  • Якщо проблема пов'язана з змінними середовища, секретами чи конфігураційними картами, перевірте та виправте їх.
  • Переконайтеся, що команда запуску контейнера або код додатку правильні.

6. Сервіс не спрямовує трафік до pod

Сценарій: Сервіс не направляє трафік до pod, які він вибирає.

Відповідь:

  1. Перевірте selector сервісу, щоб він відповідав міткам pod
kubectl describe svc   
kubectl get pods --show-labels
  1. Перевірте, чи pod у стані Running
kubectl get pods
  • Оновіть selector сервісу або мітки pod для відповідності.

7. Вузол не готовий

Сценарій: Вузол в кластері має статус NotReady.

Відповідь:

  1. Перевірте статус вузла
kubectl describe node 
  1. Перевірте логи kubelet на вузлі
journalctl -u kubelet
  • Перевірте наявність проблем з дисковим тиском або виснаженням ресурсів.
  • Перезапустіть kubelet або досліджуйте проблеми на рівні вузла (наприклад, мережеві проблеми).

8. Ingress не спрямовує трафік

Сценарій: Ingress не спрямовує зовнішній трафік до сервісу.

Відповідь:

  1. Перевірте правила Ingress
kubectl describe ingress 
  1. Переконайтеся, що ingress controller працює
kubectl get pods -n ingress-nginx
  1. Перевірте DNS-резолюцію для імені хоста
nslookup 
  • Переконайтеся, що бекенд-сервіс здоровий і доступний на правильному порту.

9. HPA не масштабує pod

Сценарій: Horizontal Pod Autoscaler (HPA) не масштабує pod відповідно до очікувань.

Відповідь:

  1. Перевірте конфігурацію HPA
kubectl describe hpa 

Перевірте, чи працює сервер метрик

kubectl get pods -n kube-system | grep metrics-server
```

  • Переконайтеся, що запити та ліміти ресурсів для CPU/Memory встановлені в деплойменті.
  • Перевірте метрики
kubectl top pod

10. Pod застряг у стані Terminating

Сценарій: Pod застряг у стані Terminating.

Відповідь:

  1. Перевірте наявність фіналізаторів, які заважають видаленню
kubectl describe pod 
  1. Примусово видаліть 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

Leave a Reply

Your email address will not be published. Required fields are marked *