k8s-debug

27 commands

27 shown

Эфемерный debug-контейнер Присоединить debug-контейнер (netshoot) к работающему поду — общие PID/net namespace kubectl debug -it <pod> --image=nicolaka/netshoot -n <ns> #debug#network#pods Использование ресурсов нодами CPU и память по каждой ноде (требует metrics-server) kubectl top nodes #nodes#monitoring Использование ресурсов подами Поды отсортированные по памяти во всех неймспейсах — найти прожорливые kubectl top pods -A --sort-by=memory #pods#monitoring Просмотр ConfigMap Вывести только поле data; передайте в python -m json.tool для форматирования kubectl get cm <name> -n <ns> -o jsonpath='{.data}' #config#debug Декодирование Secret Дамп и base64-декодирование всех полей k8s Secret kubectl get secret <name> -n <ns> -o jsonpath='{.data}' | python3 -c "import sys,json,base64; [print(k,'=',base64.b64decode(v).decode()) for k,v in json.load(sys.stdin).items()]" #secrets#debug Список всех ресурсов в неймспейсе Перечислить все типы ресурсов в неймспейсе — удобно для аудита kubectl api-resources --verbs=list --namespaced -o name | xargs -I{} kubectl get {} -n <ns> --ignore-not-found #debug JSONPath для любого ресурса Извлечь конкретные поля из объектов k8s API без jq kubectl get pods -A -o jsonpath='{range .items[*]}{.metadata.namespace}\t{.metadata.name}\t{.status.phase}\n{end}' #debug#pods Отладка с эфемерным контейнером Подключить эфемерный контейнер для отладки к работающему поду kubectl debug -it mypod --image=busybox --target=app #k8s-debug#kubectl Запустить debug pod на узле Привилегированная оболочка на узле кластера через debug pod kubectl debug node/my-node -it --image=ubuntu #k8s-debug#kubectl Exec в sidecar контейнер Открыть оболочку в конкретном контейнере мульти-контейнерного пода kubectl exec -it mypod -c sidecar-name -- /bin/sh #k8s-debug#kubectl Проверить requests/limits Показать requests и limits для каждого контейнера kubectl get pod mypod -o jsonpath='{range .spec.containers[*]}{.name}{"\t"}{.resources}{"\n"}{end}' #k8s-debug#kubectl Состояние узла (describe) Проверить условия узла: Ready, MemoryPressure, DiskPressure kubectl describe node my-node | grep -A5 'Conditions:' #k8s-debug#kubectl Поды по потреблению ресурсов Топ 20 подов по потреблению памяти kubectl top pods -A --sort-by=memory | head -20 #k8s-debug#kubectl#monitoring Следить за событиями пода Стриминг событий для конкретного пода kubectl get events -n mynamespace --field-selector involvedObject.name=mypod --watch #k8s-debug#kubectl Скопировать файл из пода Скачать файл из работающего контейнера kubectl cp mynamespace/mypod:/var/log/app.log ./app.log #k8s-debug#kubectl Поды с наибольшим числом рестартов Ранжирует поды во всём кластере по числу рестартов, чтобы быстро находить crash-loop kubectl get po -A --sort-by='.status.containerStatuses[0].restartCount' | tail -20 #k8s-debug#troubleshooting#k8s#observability Поиск OOMKilled-контейнеров Выводит поды, у которых последний выход контейнера был OOMKilled, по всем namespace kubectl get po -A -o jsonpath='{range .items[*]}{.metadata.namespace}{" "}{.metadata.name}{" "}{.status.containerStatuses[*].lastState.terminated.reason}{"\n"}{end}' | grep OOMKilled #k8s-debug#troubleshooting#performance#k8s Причина зависания Pending-подов Извлекает причины FailedScheduling для каждого Pending-пода (taints, ресурсы, affinity) kubectl get po -A --field-selector=status.phase=Pending -o name | xargs -I{} kubectl describe {} -n <ns> | grep -A3 FailedScheduling #k8s-debug#troubleshooting#k8s#performance Диагностика узла NotReady Смотрит Conditions узла, затем хвост журнала kubelet, чтобы понять причину NotReady kubectl describe node <node> | grep -A12 Conditions; ssh <node> 'journalctl -u kubelet -n 100 --no-pager' #k8s-debug#troubleshooting#k8s#kernel Причина ImagePullBackOff Показывает ошибки pull из registry: неверный тег, отсутствие imagePullSecret или rate limit kubectl get events -n <ns> --field-selector reason=Failed -o wide | grep -i 'pull\|manifest\|unauthorized' #k8s-debug#troubleshooting#k8s#security Очистка вытесненных подов Массово удаляет все Evicted-поды, оставшиеся после вытеснения по нехватке ресурсов узла kubectl get po -A | grep Evicted | awk '{print $2" -n "$1}' | xargs -L1 kubectl delete po #k8s-debug#troubleshooting#k8s#disk Снятие зависшего Terminating-пода Сбрасывает finalizers, чтобы снять под, зависший в Terminating; note: сначала убедитесь, что узел мёртв kubectl patch po <pod> -n <ns> -p '{"metadata":{"finalizers":null}}' --type=merge; kubectl delete po <pod> -n <ns> --grace-period=0 --force #k8s-debug#troubleshooting#k8s Сырая статистика kubelet Берёт актуальную память по подам из Summary API kubelet в обход metrics-server kubectl get --raw /api/v1/nodes/<node>/proxy/stats/summary | jq '.pods[] | {name:.podRef.name, mem:.memory.workingSetBytes}' #k8s-debug#monitoring#performance#k8s Статистика conntrack на узле Проверяет conntrack drop/insert_failed по CPU; переполнение таблицы nf_conntrack теряет пакеты kubectl debug node/<node> -it --image=nicolaka/netshoot -- conntrack -S #k8s-debug#network#troubleshooting#kernel Тест разрешения DNS в кластере Резолвит FQDN сервиса из временного пода, чтобы отделить проблемы CoreDNS от DNS приложения kubectl run dnstest --rm -it --image=nicolaka/netshoot --restart=Never -- dig +short <name>.<ns>.svc.cluster.local #k8s-debug#dns#network#troubleshooting События пода по времени Показывает только Warning-события одного пода в хронологии; modern: заменяет фильтр get events kubectl events --for pod/<pod> -n <ns> --types=Warning #k8s-debug#troubleshooting#observability#k8s Логи предыдущего падения с метками Берёт логи предыдущего экземпляра упавшего контейнера, чтобы поймать трейс перед рестартом kubectl logs <pod> -n <ns> -c <name> --previous --timestamps --tail=200 #k8s-debug#troubleshooting#debug#k8s
no commands match