[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/errors/linux/kubectl-crashloopbackoff":3,"mdc-5ui5ch-key":961,"mdc--ca8ftx-key":971,"mdc--wjf2oj-key":1004,"mdc--5jqtfc-key":1032,"mdc--gvdw3a-key":1040,"mdc-3wag89-key":1091,"mdc-a2153q-key":1114,"mdc-3dzyoq-key":1122,"mdc-7i1o04-key":1154,"related-/errors/linux/kubectl-imagepullbackoff,/guides/linux/kubernetes-debug-pods,/errors/linux/k8s-oomkilled":1178},{"id":4,"title":5,"appliesTo":6,"author":10,"body":11,"canonical":892,"code":25,"createdAt":893,"description":894,"difficulty":895,"draft":896,"estimatedTime":897,"extension":898,"faq":899,"howToSteps":912,"howToTotalTime":928,"image":892,"keywords":929,"locale":938,"meta":939,"navigation":940,"path":941,"platform":942,"related":943,"section":947,"seo":948,"severity":949,"stem":950,"summary":951,"tags":952,"twitterCreator":892,"twitterSite":892,"type":959,"updatedAt":893,"__hash__":960},"content_ru/errors/linux/kubectl-crashloopbackoff.md","CrashLoopBackOff в kubectl: причины и способы исправления",[7,8,9],"Kubernetes 1.19+","kubectl 1.19+","Любые дистрибутивы Linux/Windows/macOS с kubectl","FixPedia Team",{"type":12,"value":13,"toc":880},"minimark",[14,19,36,39,64,78,88,96,100,115,175,179,184,187,363,366,370,381,513,517,532,541,562,567,586,595,599,606,697,701,718,804,808,876],[15,16,18],"h2",{"id":17},"что-означает-ошибка-crashloopbackoff","Что означает ошибка CrashLoopBackOff",[20,21,22,26,27,31,32,35],"p",{},[23,24,25],"code",{},"CrashLoopBackOff"," — это не код ошибки в классическом понимании, а ",[28,29,30],"strong",{},"состояние пода (Pod)"," в Kubernetes. Оно означает, что контейнер внутри пода постоянно завершается (крашится), а ",[23,33,34],{},"kubelet"," (агент на ноде) срабатывает механизм экспоненциальной задержки (back-off) между попытками перезапуска.",[20,37,38],{},"Вы увидите это состояние при выполнении команды:",[40,41,46],"pre",{"className":42,"code":43,"language":44,"meta":45,"style":45},"language-bash shiki shiki-themes github-light github-dark","kubectl get pods\n","bash","",[23,47,48],{"__ignoreMap":45},[49,50,53,57,61],"span",{"class":51,"line":52},"line",1,[49,54,56],{"class":55},"sScJk","kubectl",[49,58,60],{"class":59},"sZZnC"," get",[49,62,63],{"class":59}," pods\n",[20,65,66,67,70,71,73,74,77],{},"В колонке ",[23,68,69],{},"STATUS"," будет ",[23,72,25],{},", а в ",[23,75,76],{},"RESTARTS"," — постоянно увеличивающееся число.",[20,79,80,83,84,87],{},[28,81,82],{},"Полный текст события"," (из ",[23,85,86],{},"kubectl describe pod",") обычно выглядит так:",[40,89,94],{"className":90,"code":92,"language":93},[91],"language-text","  State:          Waiting\n    Reason:       CrashLoopBackOff\n  Last State:    Terminated\n    Reason:       Error\n    Exit Code:    1\n    Started:      ...\n    Finished:     ...\n","text",[23,95,92],{"__ignoreMap":45},[15,97,99],{"id":98},"причины-возникновения","Причины возникновения",[20,101,102,103,106,107,110,111,114],{},"Состояние CrashLoopBackOff почти всегда вызвано тем, что ",[28,104,105],{},"процесс внутри контейнера завершается с ненулевым кодом возврата"," (обычно ",[23,108,109],{},"1"," или ",[23,112,113],{},"137","). Основные причины:",[116,117,118,125,139,153,163,169],"ol",{},[119,120,121,124],"li",{},[28,122,123],{},"Ошибка в самом приложении",": Непредвиденное исключение в коде, ошибка конфигурации, отсутствие обязательного файла или переменной окружения. Контейнер запускается, приложение падает.",[119,126,127,130,131,134,135,138],{},[28,128,129],{},"Некорректная команда запуска (CMD/ENTRYPOINT)",": В Dockerfile или спецификации Pod'а указана команда, которая завершается сразу (например, запуск скрипта без ",[23,132,133],{},"exec"," или запуск фонового процесса без ",[23,136,137],{},"wait",").",[119,140,141,144,145,148,149,152],{},[28,142,143],{},"Нехватка ресурсов (OOMKilled)",": Контейнеру не хватает оперативной памяти, и ядро ноды его убивает. В логах и событии будет ",[23,146,147],{},"Reason: OOMKilled"," и ",[23,150,151],{},"Exit Code: 137",".",[119,154,155,158,159,162],{},[28,156,157],{},"Проблемы с правами доступа",": Приложение пытается записать в защищённую директорию (например, ",[23,160,161],{},"/root","), или не хватает прав на чтение файла.",[119,164,165,168],{},[28,166,167],{},"Некорректно настроенные health-проб (livenessProbe)",": Проба (например, HTTP GET) постоянно возвращает неуспешный ответ, и kubelet убивает контейнер, даже если приложение в целом работает.",[119,170,171,174],{},[28,172,173],{},"Отсутствие ожидаемого фонового процесса",": Приложение запускается, порождает дочерний процесс и завершается, оставляя дочерний процесс \"сиротой\", который затем уничтожается.",[15,176,178],{"id":177},"способы-решения","Способы решения",[180,181,183],"h3",{"id":182},"способ-1-анализ-логов-и-событий-пода","Способ 1: Анализ логов и событий пода",[20,185,186],{},"Это первый и самый важный шаг. Команды ниже дадут точные указания на причину.",[116,188,189,271],{},[119,190,191,194,195,224,227,228,231,232,110,235,238,239,148,242,245,246,249,250,249,253,256,257,260,261,263,264,267,268,138],{},[28,192,193],{},"Посмотрите детальную информацию о поде",":",[40,196,198],{"className":42,"code":197,"language":44,"meta":45,"style":45},"kubectl describe pod \u003Cимя-вашего-pod>\n",[23,199,200],{"__ignoreMap":45},[49,201,202,204,207,210,214,217,221],{"class":51,"line":52},[49,203,56],{"class":55},[49,205,206],{"class":59}," describe",[49,208,209],{"class":59}," pod",[49,211,213],{"class":212},"szBVR"," \u003C",[49,215,216],{"class":59},"имя-вашего-po",[49,218,220],{"class":219},"sVt8B","d",[49,222,223],{"class":212},">\n",[225,226],"br",{},"Прокрутите секцию ",[23,229,230],{},"Events"," вниз. Ищите последние события типа ",[23,233,234],{},"Failed",[23,236,237],{},"BackOff",". Обратите внимание на поля ",[23,240,241],{},"Reason",[23,243,244],{},"Message",". Также в секции ",[23,247,248],{},"Containers"," -> ",[23,251,252],{},"\u003Cимя-контейнера>",[23,254,255],{},"State"," будут указаны ",[23,258,259],{},"Last State"," (последнее состояние) и ",[23,262,241],{}," (например, ",[23,265,266],{},"Error",", ",[23,269,270],{},"OOMKilled",[119,272,273,194,276,341,343,346,347,267,350,267,353,267,356,267,359,362],{},[28,274,275],{},"Получите логи контейнера",[277,278,279,310,335],"ul",{},[119,280,281,284,285],{},[28,282,283],{},"Логи последнего упавшего экземпляра"," (самые важные):\n",[40,286,288],{"className":42,"code":287,"language":44,"meta":45,"style":45},"kubectl logs \u003Cимя-вашего-pod> --previous\n",[23,289,290],{"__ignoreMap":45},[49,291,292,294,297,299,301,303,306],{"class":51,"line":52},[49,293,56],{"class":55},[49,295,296],{"class":59}," logs",[49,298,213],{"class":212},[49,300,216],{"class":59},[49,302,220],{"class":219},[49,304,305],{"class":212},">",[49,307,309],{"class":308},"sj4cs"," --previous\n",[119,311,312,315,316],{},[28,313,314],{},"Логи текущего (возможно, только что запустившегося) контейнера",":\n",[40,317,319],{"className":42,"code":318,"language":44,"meta":45,"style":45},"kubectl logs \u003Cимя-вашего-pod>\n",[23,320,321],{"__ignoreMap":45},[49,322,323,325,327,329,331,333],{"class":51,"line":52},[49,324,56],{"class":55},[49,326,296],{"class":59},[49,328,213],{"class":212},[49,330,216],{"class":59},[49,332,220],{"class":219},[49,334,223],{"class":212},[119,336,337,338,152],{},"Если в поде несколько контейнеров, укажите имя контейнера: ",[23,339,340],{},"kubectl logs \u003Cpod-name> -c \u003Ccontainer-name> --previous",[225,342],{},[28,344,345],{},"На что смотреть в логах",": Исключения (Java, Python, Node.js), сообщения ",[23,348,349],{},"permission denied",[23,351,352],{},"connection refused",[23,354,355],{},"file not found",[23,357,358],{},"OutOfMemoryError",[23,360,361],{},"Killed",". Последние 5-10 строк часто содержат суть.",[364,365],"in-article-ad",{},[180,367,369],{"id":368},"способ-2-проверка-и-корректировка-ресурсов-memorycpu","Способ 2: Проверка и корректировка ресурсов (Memory/CPU)",[20,371,372,373,375,376,110,378,380],{},"Если в ",[23,374,86],{}," или логах есть упоминание ",[23,377,270],{},[23,379,151],{},", проблема, скорее всего, в нехватке памяти.",[116,382,383,487,510],{},[119,384,385,388,389],{},[28,386,387],{},"Временно увеличьте лимит памяти"," в манифесте YAML пода:\n",[40,390,394],{"className":391,"code":392,"language":393,"meta":45,"style":45},"language-yaml shiki shiki-themes github-light github-dark","spec:\n  containers:\n  - name: my-app\n    image: my-image\n    resources:\n      limits:\n        memory: \"512Mi\"   # Увеличьте, например, до 1Gi\n      requests:\n        memory: \"256Mi\"\n","yaml",[23,395,396,404,412,427,438,446,454,469,477],{"__ignoreMap":45},[49,397,398,402],{"class":51,"line":52},[49,399,401],{"class":400},"s9eBZ","spec",[49,403,315],{"class":219},[49,405,407,410],{"class":51,"line":406},2,[49,408,409],{"class":400},"  containers",[49,411,315],{"class":219},[49,413,415,418,421,424],{"class":51,"line":414},3,[49,416,417],{"class":219},"  - ",[49,419,420],{"class":400},"name",[49,422,423],{"class":219},": ",[49,425,426],{"class":59},"my-app\n",[49,428,430,433,435],{"class":51,"line":429},4,[49,431,432],{"class":400},"    image",[49,434,423],{"class":219},[49,436,437],{"class":59},"my-image\n",[49,439,441,444],{"class":51,"line":440},5,[49,442,443],{"class":400},"    resources",[49,445,315],{"class":219},[49,447,449,452],{"class":51,"line":448},6,[49,450,451],{"class":400},"      limits",[49,453,315],{"class":219},[49,455,457,460,462,465],{"class":51,"line":456},7,[49,458,459],{"class":400},"        memory",[49,461,423],{"class":219},[49,463,464],{"class":59},"\"512Mi\"",[49,466,468],{"class":467},"sJ8bj","   # Увеличьте, например, до 1Gi\n",[49,470,472,475],{"class":51,"line":471},8,[49,473,474],{"class":400},"      requests",[49,476,315],{"class":219},[49,478,480,482,484],{"class":51,"line":479},9,[49,481,459],{"class":400},[49,483,423],{"class":219},[49,485,486],{"class":59},"\"256Mi\"\n",[119,488,489,315,492],{},[28,490,491],{},"Примените изменения",[40,493,495],{"className":42,"code":494,"language":44,"meta":45,"style":45},"kubectl apply -f ваш-манифест.yaml\n",[23,496,497],{"__ignoreMap":45},[49,498,499,501,504,507],{"class":51,"line":52},[49,500,56],{"class":55},[49,502,503],{"class":59}," apply",[49,505,506],{"class":308}," -f",[49,508,509],{"class":59}," ваш-манифест.yaml\n",[119,511,512],{},"Если контейнер стабильно работает — проблема была в лимитах. Оптимизируйте приложение или установите реалистичные лимиты.",[180,514,516],{"id":515},"способ-3-проверка-и-исправление-команды-запуска-cmdentrypoint","Способ 3: Проверка и исправление команды запуска (CMD/ENTRYPOINT)",[20,518,519,520,523,524,527,528,531],{},"Контейнер должен запускать ",[28,521,522],{},"foreground-процесс",". Если ваш скрипт-точка входа (",[23,525,526],{},"entrypoint.sh",") запускает демон в фоне (",[23,529,530],{},"&",") и завершается, контейнер умрёт.",[20,533,534,537,538,540],{},[28,535,536],{},"Неправильно"," (в ",[23,539,526],{},"):",[40,542,544],{"className":42,"code":543,"language":44,"meta":45,"style":45},"#!/bin/sh\nmy-background-service &  # Запускает в фоне и завершает скрипт\n",[23,545,546,551],{"__ignoreMap":45},[49,547,548],{"class":51,"line":52},[49,549,550],{"class":467},"#!/bin/sh\n",[49,552,553,556,559],{"class":51,"line":406},[49,554,555],{"class":55},"my-background-service",[49,557,558],{"class":219}," &  ",[49,560,561],{"class":467},"# Запускает в фоне и завершает скрипт\n",[20,563,564,194],{},[28,565,566],{},"Правильно",[40,568,570],{"className":42,"code":569,"language":44,"meta":45,"style":45},"#!/bin/sh\nexec my-background-service  # exec заменяет shell процессом и не возвращает управление\n",[23,571,572,576],{"__ignoreMap":45},[49,573,574],{"class":51,"line":52},[49,575,550],{"class":467},[49,577,578,580,583],{"class":51,"line":406},[49,579,133],{"class":308},[49,581,582],{"class":59}," my-background-service",[49,584,585],{"class":467},"  # exec заменяет shell процессом и не возвращает управление\n",[20,587,588,589,110,592,138],{},"Или, если нужно запустить несколько процессов, используйте менеджер процессов (например, ",[23,590,591],{},"tini",[23,593,594],{},"supervisord",[180,596,598],{"id":597},"способ-4-временное-отключение-или-проверка-health-пробов","Способ 4: Временное отключение или проверка health-пробов",[20,600,601,602,605],{},"Некорректный ",[23,603,604],{},"livenessProbe"," — частая причина, особенно на ранних этапах разработки.",[116,607,608,649,654],{},[119,609,610,613,614],{},[28,611,612],{},"Временно отключите пробу"," в манифесте пода, закомментировав её секцию:\n",[40,615,617],{"className":391,"code":616,"language":393,"meta":45,"style":45},"# livenessProbe:\n#   httpGet:\n#     path: /health\n#     port: 8080\n#   initialDelaySeconds: 30\n#   periodSeconds: 10\n",[23,618,619,624,629,634,639,644],{"__ignoreMap":45},[49,620,621],{"class":51,"line":52},[49,622,623],{"class":467},"# livenessProbe:\n",[49,625,626],{"class":51,"line":406},[49,627,628],{"class":467},"#   httpGet:\n",[49,630,631],{"class":51,"line":414},[49,632,633],{"class":467},"#     path: /health\n",[49,635,636],{"class":51,"line":429},[49,637,638],{"class":467},"#     port: 8080\n",[49,640,641],{"class":51,"line":440},[49,642,643],{"class":467},"#   initialDelaySeconds: 30\n",[49,645,646],{"class":51,"line":448},[49,647,648],{"class":467},"#   periodSeconds: 10\n",[119,650,651,652,152],{},"Примените манифест и проверьте, исчез ли ",[23,653,25],{},[119,655,656,657,315,660],{},"Если проблема ушла — ",[28,658,659],{},"настройте пробу правильно",[277,661,662,669,687],{},[119,663,664,665,668],{},"Увеличьте ",[23,666,667],{},"initialDelaySeconds",", давая приложению время на запуск.",[119,670,671,672,148,675,678,679,682,683,686],{},"Убедитесь, что ",[23,673,674],{},"path",[23,676,677],{},"port"," корректны и сервис действительно отвечает ",[23,680,681],{},"2xx","/",[23,684,685],{},"3xx"," на этот эндпоинт.",[119,688,689,690,693,694,696],{},"Для приложений с долгой инициализацией используйте ",[23,691,692],{},"readinessProbe"," для контроля готовности принимать трафик, а ",[23,695,604],{}," — только для жизнеспособности.",[180,698,700],{"id":699},"способ-5-проверка-переменных-окружения-и-конфигурационных-файлов","Способ 5: Проверка переменных окружения и конфигурационных файлов",[20,702,703,704,707,708,682,711,682,714,717],{},"Убедитесь, что все обязательные переменные окружения (",[23,705,706],{},"env",") и тома (",[23,709,710],{},"volumes",[23,712,713],{},"configMap",[23,715,716],{},"secret",") правильно указаны и доступны внутри контейнера.",[116,719,720,769,801],{},[119,721,722,723],{},"Проверьте, что переменные передаются:\n",[40,724,726],{"className":42,"code":725,"language":44,"meta":45,"style":45},"kubectl exec \u003Cимя-pod> -- printenv | grep -i \u003Cимя-важной-переменной>\n",[23,727,728],{"__ignoreMap":45},[49,729,730,732,735,737,740,742,744,747,750,753,756,759,761,764,767],{"class":51,"line":52},[49,731,56],{"class":55},[49,733,734],{"class":59}," exec",[49,736,213],{"class":212},[49,738,739],{"class":59},"имя-po",[49,741,220],{"class":219},[49,743,305],{"class":212},[49,745,746],{"class":308}," --",[49,748,749],{"class":59}," printenv",[49,751,752],{"class":212}," |",[49,754,755],{"class":55}," grep",[49,757,758],{"class":308}," -i",[49,760,213],{"class":212},[49,762,763],{"class":59},"имя-важной-переменно",[49,765,766],{"class":219},"й",[49,768,223],{"class":212},[119,770,771,772],{},"Если используется ConfigMap или Secret, проверьте его существование и данные:\n",[40,773,775],{"className":42,"code":774,"language":44,"meta":45,"style":45},"kubectl get configmap \u003Cимя-configmap> -o yaml\n",[23,776,777],{"__ignoreMap":45},[49,778,779,781,783,786,788,791,793,795,798],{"class":51,"line":52},[49,780,56],{"class":55},[49,782,60],{"class":59},[49,784,785],{"class":59}," configmap",[49,787,213],{"class":212},[49,789,790],{"class":59},"имя-configma",[49,792,20],{"class":219},[49,794,305],{"class":212},[49,796,797],{"class":308}," -o",[49,799,800],{"class":59}," yaml\n",[119,802,803],{},"Проверьте права на смонтированные тома, если контейнер должен в них писать.",[15,805,807],{"id":806},"профилактика","Профилактика",[277,809,810,820,830,839,853,867],{},[119,811,812,815,816,819],{},[28,813,814],{},"Всегда проверяйте логи"," (",[23,817,818],{},"kubectl logs --previous",") при первом запуске нового пода.",[119,821,822,825,826,829],{},[28,823,824],{},"Начинайте с адекватных лимитов ресурсов",". Используйте ",[23,827,828],{},"kubectl top pod"," для мониторинга фактического потребления.",[119,831,832,835,836,838],{},[28,833,834],{},"Корректно настраивайте health-проб",". ",[23,837,667],{}," должен превышать время холодного старта приложения.",[119,840,841,848,849,852],{},[28,842,843,844,847],{},"Используйте ",[23,845,846],{},"restartPolicy: OnFailure"," для Jobs",", а не ",[23,850,851],{},"Always",", чтобы избежать бесконечных циклов при ошибках в задачах.",[119,854,855,862,863,866],{},[28,856,857,858,861],{},"Собирайте образы с ",[23,859,860],{},"USER"," без прав root",", если это возможно, и настройте права на директории (",[23,864,865],{},"chown",") на этапе сборки образа, а не в entrypoint.",[119,868,869,815,872,875],{},[28,870,871],{},"Тестируйте образ локально",[23,873,874],{},"docker run --rm \u003Cimage> \u003Ccommand>",") перед деплоем в Kubernetes, чтобы отделить проблемы с образом от проблем с оркестрацией.",[877,878,879],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":45,"searchDepth":406,"depth":406,"links":881},[882,883,884,891],{"id":17,"depth":406,"text":18},{"id":98,"depth":406,"text":99},{"id":177,"depth":406,"text":178,"children":885},[886,887,888,889,890],{"id":182,"depth":414,"text":183},{"id":368,"depth":414,"text":369},{"id":515,"depth":414,"text":516},{"id":597,"depth":414,"text":598},{"id":699,"depth":414,"text":700},{"id":806,"depth":406,"text":807},null,"2026-02-15 20:11:01","Подробное руководство по диагностике и устранению ошибки CrashLoopBackOff в Kubernetes. Пошаговые инструкции и профилактика. Узнайте, как быстро восстановить работу подов.","medium",false,"15-30 мин","md",[900,903,906,909],{"question":901,"answer":902},"Чем CrashLoopBackOff отличается от ImagePullBackOff?","ImagePullBackOff означает, что Kubernetes не может скачать образ контейнера (ошибка сети, неверное имя образа, нет доступа к registry). CrashLoopBackOff — образ скачан, но контейнер внутри него сразу завершается с ошибкой.",{"question":904,"answer":905},"Как посмотреть логи падавшего контейнера, если он уже перезапустился?","Используйте флаг `--previous` с командой `kubectl logs`. Пример: `kubectl logs \u003Cимя-пода> --previous`. Это покажет логи предыдущего экземпляра контейнера, который завершился.",{"question":907,"answer":908},"Что такое `restartPolicy` и как он влияет на CrashLoopBackOff?","`restartPolicy: Always` (по умолчанию для Pod'ов) заставляет kubelet бесконечно пытаться перезапустить упавший контейнер, что и приводит к состоянию CrashLoopBackOff. Для одноразовых задач (Job) используется `restartPolicy: OnFailure` или `Never`.",{"question":910,"answer":911},"Может ли нехватка памяти на ноде (нене pod) вызывать CrashLoopBackOff?","Да, если нода (узел) физически не имеет достаточно ресурсов для запуска контейнера, kubelet может завершать его. Однако чаще всего причина внутри самого контейнера (OOMKilled из-за лимитов памяти самого Pod'а).",[913,916,919,922,925],{"name":914,"text":915},"Проверьте статус пода и текущие события","Выполните `kubectl get pod \u003Cимя-пода> -o wide` и `kubectl describe pod \u003Cимя-пода>`. В секции `Events` ищите события `Failed` или `BackOff`. Обратите внимание на последний `State` контейнера.",{"name":917,"text":918},"Получите логи контейнера (предыдущего и текущего)","Используйте `kubectl logs \u003Cимя-пода> --previous` для логов последнего упавшего контейнера и `kubectl logs \u003Cимя-пода>` для текущего (если он запустился на мгновение). Анализируйте последние строки на наличие исключений (stack trace) или сообщений об ошибках.",{"name":920,"text":921},"Проверьте корректность команды запуска (CMD/ENTRYPOINT)","Убедитесь, что в Dockerfile или манифесте Pod'а указана рабочая команда, которая запускает foreground-процесс и не завершается сразу. Проверьте, что все необходимые аргументы переданы.",{"name":923,"text":924},"Проверьте настройки лимитов ресурсов (requests/limits)","В манифесте пода найдите секции `resources`. Слишком низкие `limits.memory` могут привести к `OOMKilled`. Попробуйте временно убрать лимиты или значительно увеличить их, чтобы проверить гипотезу.",{"name":926,"text":927},"Настройте health-проб (liveness/readiness) или временно отключите их","Некорректно настроенный `livenessProbe` может постоянно убивать здоровый контейнер. Временно закомментируйте пробы в манифесте, примените (`kubectl apply -f`) и проверьте, исчезла ли проблема.","PT20M",[930,931,932,933,934,935,936,937],"CrashLoopBackOff kubectl","k8s CrashLoopBackOff исправить","поды в цикле сбоев kubernetes","контейнер постоянно падает k8s","ошибка CrashLoopBackOff причины","kubectl describe CrashLoopBackOff","kubernetes pod restart backoff","как починить CrashLoopBackOff","ru_RU",{},true,"/errors/linux/kubectl-crashloopbackoff","general",[944,945,946],"/errors/linux/kubectl-imagepullbackoff","/guides/linux/kubernetes-debug-pods","/errors/linux/k8s-oomkilled","Ошибки Kubernetes",{"title":5,"description":894},"high","errors/linux/kubectl-crashloopbackoff","Статья объясняет, что такое состояние CrashLoopBackOff в Kubernetes, какие основные причины вызывают бесконечный цикл падений контейнера, и предоставляет проверенные способы их устранения — от анализа логов до настройки health-проб.",[953,56,954,955,956,957,958],"kubernetes","поды (pods)","контейнеры","ошибка","k8s","отладка","error","kSYK5ppAxDtpz_J5FK8w6I_136WeeMaDlF6ZU-dNyRM",{"data":962,"body":963},{},{"type":964,"children":965},"root",[966],{"type":967,"tag":20,"props":968,"children":969},"element",{},[970],{"type":93,"value":902},{"data":972,"body":973},{},{"type":964,"children":974},[975],{"type":967,"tag":20,"props":976,"children":977},{},[978,980,986,988,994,996,1002],{"type":93,"value":979},"Используйте флаг ",{"type":967,"tag":23,"props":981,"children":983},{"className":982},[],[984],{"type":93,"value":985},"--previous",{"type":93,"value":987}," с командой ",{"type":967,"tag":23,"props":989,"children":991},{"className":990},[],[992],{"type":93,"value":993},"kubectl logs",{"type":93,"value":995},". Пример: ",{"type":967,"tag":23,"props":997,"children":999},{"className":998},[],[1000],{"type":93,"value":1001},"kubectl logs \u003Cимя-пода> --previous",{"type":93,"value":1003},". Это покажет логи предыдущего экземпляра контейнера, который завершился.",{"data":1005,"body":1006},{},{"type":964,"children":1007},[1008],{"type":967,"tag":20,"props":1009,"children":1010},{},[1011,1017,1019,1024,1025,1031],{"type":967,"tag":23,"props":1012,"children":1014},{"className":1013},[],[1015],{"type":93,"value":1016},"restartPolicy: Always",{"type":93,"value":1018}," (по умолчанию для Pod'ов) заставляет kubelet бесконечно пытаться перезапустить упавший контейнер, что и приводит к состоянию CrashLoopBackOff. Для одноразовых задач (Job) используется ",{"type":967,"tag":23,"props":1020,"children":1022},{"className":1021},[],[1023],{"type":93,"value":846},{"type":93,"value":110},{"type":967,"tag":23,"props":1026,"children":1028},{"className":1027},[],[1029],{"type":93,"value":1030},"Never",{"type":93,"value":152},{"data":1033,"body":1034},{},{"type":964,"children":1035},[1036],{"type":967,"tag":20,"props":1037,"children":1038},{},[1039],{"type":93,"value":911},{"data":1041,"body":1042},{},{"type":964,"children":1043},[1044],{"type":967,"tag":20,"props":1045,"children":1046},{},[1047,1049,1055,1056,1062,1064,1069,1071,1076,1077,1082,1084,1089],{"type":93,"value":1048},"Выполните ",{"type":967,"tag":23,"props":1050,"children":1052},{"className":1051},[],[1053],{"type":93,"value":1054},"kubectl get pod \u003Cимя-пода> -o wide",{"type":93,"value":148},{"type":967,"tag":23,"props":1057,"children":1059},{"className":1058},[],[1060],{"type":93,"value":1061},"kubectl describe pod \u003Cимя-пода>",{"type":93,"value":1063},". В секции ",{"type":967,"tag":23,"props":1065,"children":1067},{"className":1066},[],[1068],{"type":93,"value":230},{"type":93,"value":1070}," ищите события ",{"type":967,"tag":23,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":93,"value":234},{"type":93,"value":110},{"type":967,"tag":23,"props":1078,"children":1080},{"className":1079},[],[1081],{"type":93,"value":237},{"type":93,"value":1083},". Обратите внимание на последний ",{"type":967,"tag":23,"props":1085,"children":1087},{"className":1086},[],[1088],{"type":93,"value":255},{"type":93,"value":1090}," контейнера.",{"data":1092,"body":1093},{},{"type":964,"children":1094},[1095],{"type":967,"tag":20,"props":1096,"children":1097},{},[1098,1099,1104,1106,1112],{"type":93,"value":843},{"type":967,"tag":23,"props":1100,"children":1102},{"className":1101},[],[1103],{"type":93,"value":1001},{"type":93,"value":1105}," для логов последнего упавшего контейнера и ",{"type":967,"tag":23,"props":1107,"children":1109},{"className":1108},[],[1110],{"type":93,"value":1111},"kubectl logs \u003Cимя-пода>",{"type":93,"value":1113}," для текущего (если он запустился на мгновение). Анализируйте последние строки на наличие исключений (stack trace) или сообщений об ошибках.",{"data":1115,"body":1116},{},{"type":964,"children":1117},[1118],{"type":967,"tag":20,"props":1119,"children":1120},{},[1121],{"type":93,"value":921},{"data":1123,"body":1124},{},{"type":964,"children":1125},[1126],{"type":967,"tag":20,"props":1127,"children":1128},{},[1129,1131,1137,1139,1145,1147,1152],{"type":93,"value":1130},"В манифесте пода найдите секции ",{"type":967,"tag":23,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":93,"value":1136},"resources",{"type":93,"value":1138},". Слишком низкие ",{"type":967,"tag":23,"props":1140,"children":1142},{"className":1141},[],[1143],{"type":93,"value":1144},"limits.memory",{"type":93,"value":1146}," могут привести к ",{"type":967,"tag":23,"props":1148,"children":1150},{"className":1149},[],[1151],{"type":93,"value":270},{"type":93,"value":1153},". Попробуйте временно убрать лимиты или значительно увеличить их, чтобы проверить гипотезу.",{"data":1155,"body":1156},{},{"type":964,"children":1157},[1158],{"type":967,"tag":20,"props":1159,"children":1160},{},[1161,1163,1168,1170,1176],{"type":93,"value":1162},"Некорректно настроенный ",{"type":967,"tag":23,"props":1164,"children":1166},{"className":1165},[],[1167],{"type":93,"value":604},{"type":93,"value":1169}," может постоянно убивать здоровый контейнер. Временно закомментируйте пробы в манифесте, примените (",{"type":967,"tag":23,"props":1171,"children":1173},{"className":1172},[],[1174],{"type":93,"value":1175},"kubectl apply -f",{"type":93,"value":1177},") и проверьте, исчезла ли проблема.",[1179,2170,3300],{"id":1180,"title":1181,"appliesTo":1182,"author":10,"body":1185,"canonical":892,"code":45,"createdAt":2111,"description":2112,"difficulty":895,"draft":896,"estimatedTime":2113,"extension":898,"faq":2114,"howToSteps":2127,"howToTotalTime":2143,"image":892,"keywords":2144,"locale":938,"meta":2154,"navigation":940,"path":944,"platform":942,"related":2155,"section":947,"seo":2159,"severity":895,"stem":2160,"summary":2161,"tags":2162,"twitterCreator":892,"twitterSite":892,"type":959,"updatedAt":2111,"__hash__":2169},"content_ru/errors/linux/kubectl-imagepullbackoff.md","Kubectl ImagePullBackOff: причины и решение ошибки Kubernetes",[7,8,1183,1184],"Docker Engine","containerd",{"type":12,"value":1186,"toc":2101},[1187,1191,1205,1230,1240,1242,1304,1308,1315,1443,1460,1464,1467,1557,1561,1564,1762,1766,1769,1920,1922,1926,1929,2036,2038,2098],[15,1188,1190],{"id":1189},"что-означает-ошибка-imagepullbackoff","Что означает ошибка ImagePullBackOff",[20,1192,1193,1194,1197,1198,1200,1201,1204],{},"Ошибка ",[28,1195,1196],{},"ImagePullBackOff"," — это состояние Kubernetes-пода, указывающее, что ",[28,1199,34],{}," (агент на ноде) не смог загрузить контейнерный образ из указанного репозитория. После серии неудачных попыток kubelet входит в режим ",[1202,1203,237],"em",{},", задерживая последующие попытки, чтобы избежать бесконечных запросов и перегрузки сети.",[20,1206,1207,1208,1211,1212,110,1214,1217,1218,267,1221,267,1224,110,1227,152],{},"В выводе ",[23,1209,1210],{},"kubectl get pods"," вы увидите статус ",[23,1213,1196],{},[23,1215,1216],{},"ErrImagePull",". Полное сообщение в событиях (Events) обычно содержит детали: ",[23,1219,1220],{},"Failed to pull image",[23,1222,1223],{},"Image not found",[23,1225,1226],{},"unauthorized: authentication required",[23,1228,1229],{},"dial tcp timeout",[20,1231,1232,1233,1236,1237,152],{},"Эта проблема возникает на этапе ",[28,1234,1235],{},"создания контейнера"," и предотвращает переход пода в состояние ",[23,1238,1239],{},"Running",[15,1241,99],{"id":98},[116,1243,1244,1257,1263,1269,1279,1285,1298],{},[119,1245,1246,1249,1250,1253,1254,138],{},[28,1247,1248],{},"Некорректное имя образа"," — опечатка в названии репозитория, образа или тега (например, ",[23,1251,1252],{},"docker.io/library/nginx:lates"," вместо ",[23,1255,1256],{},"latest",[119,1258,1259,1262],{},[28,1260,1261],{},"Образ не существует"," — указанный тег или дайджест образа отсутствуют в репозитории (удалён или никогда не существовал).",[119,1264,1265,1268],{},[28,1266,1267],{},"Проблемы с доступом к репозиторию"," — сетевая недоступность Docker Hub или приватного registry, firewall блокирует порт 443/80, DNS-проблемы.",[119,1270,1271,1274,1275,1278],{},[28,1272,1273],{},"Отсутствие или неверные секреты"," — для приватного репозитория не указан ",[23,1276,1277],{},"imagePullSecrets"," или секрет содержит неверные credentials.",[119,1280,1281,1284],{},[28,1282,1283],{},"Недостаток дискового пространства"," на ноде — kubelet не может сохранить временные слои образа.",[119,1286,1287,1290,1291,1294,1295,138],{},[28,1288,1289],{},"Несовместимость архитектуры"," — образ собран для другой архитектуры (например, ",[23,1292,1293],{},"linux/arm64","), чем у ноды (",[23,1296,1297],{},"linux/amd64",[119,1299,1300,1303],{},[28,1301,1302],{},"Ограничения registry"," — превышен лимит запросов (rate limit) на Docker Hub для анонимных запросов.",[15,1305,1307],{"id":1306},"способ-1-проверьте-и-исправьте-имя-образа","Способ 1: Проверьте и исправьте имя образа",[20,1309,1310,1311,1314],{},"Чаще всего проблема — в опечатке. Убедитесь, что в манифесте пода или deployment указано ",[28,1312,1313],{},"полное и корректное"," имя образа.",[116,1316,1317,1363,1396],{},[119,1318,1319,1320,1356,1358,1359,148,1361,152],{},"Посмотрите события пода:",[40,1321,1323],{"className":42,"code":1322,"language":44,"meta":45,"style":45},"kubectl describe pod \u003Cимя_пода> | grep -A 5 Events\n",[23,1324,1325],{"__ignoreMap":45},[49,1326,1327,1329,1331,1333,1335,1338,1341,1343,1345,1347,1350,1353],{"class":51,"line":52},[49,1328,56],{"class":55},[49,1330,206],{"class":59},[49,1332,209],{"class":59},[49,1334,213],{"class":212},[49,1336,1337],{"class":59},"имя_под",[49,1339,1340],{"class":219},"а",[49,1342,305],{"class":212},[49,1344,752],{"class":212},[49,1346,755],{"class":55},[49,1348,1349],{"class":308}," -A",[49,1351,1352],{"class":308}," 5",[49,1354,1355],{"class":59}," Events\n",[225,1357],{},"Обратите внимание на строки ",[23,1360,234],{},[23,1362,1216],{},[119,1364,1365,1366,1369,1370],{},"Проверьте поле ",[23,1367,1368],{},"Image"," в спецификации:",[40,1371,1373],{"className":42,"code":1372,"language":44,"meta":45,"style":45},"kubectl get pod \u003Cимя_пода> -o jsonpath='{.spec.containers[0].image}'\n",[23,1374,1375],{"__ignoreMap":45},[49,1376,1377,1379,1381,1383,1385,1387,1389,1391,1393],{"class":51,"line":52},[49,1378,56],{"class":55},[49,1380,60],{"class":59},[49,1382,209],{"class":59},[49,1384,213],{"class":212},[49,1386,1337],{"class":59},[49,1388,1340],{"class":219},[49,1390,305],{"class":212},[49,1392,797],{"class":308},[49,1394,1395],{"class":59}," jsonpath='{.spec.containers[0].image}'\n",[119,1397,1398,1399,1424,1426,1427],{},"Если имя неверное, исправьте манифест (deployment, pod, statefulset) и примените заново:",[40,1400,1402],{"className":42,"code":1401,"language":44,"meta":45,"style":45},"kubectl edit deployment \u003Cимя_deployment>\n",[23,1403,1404],{"__ignoreMap":45},[49,1405,1406,1408,1411,1414,1416,1419,1422],{"class":51,"line":52},[49,1407,56],{"class":55},[49,1409,1410],{"class":59}," edit",[49,1412,1413],{"class":59}," deployment",[49,1415,213],{"class":212},[49,1417,1418],{"class":59},"имя_deploymen",[49,1420,1421],{"class":219},"t",[49,1423,223],{"class":212},[225,1425],{},"или",[40,1428,1430],{"className":42,"code":1429,"language":44,"meta":45,"style":45},"kubectl apply -f исправленный_манифест.yaml\n",[23,1431,1432],{"__ignoreMap":45},[49,1433,1434,1436,1438,1440],{"class":51,"line":52},[49,1435,56],{"class":55},[49,1437,503],{"class":59},[49,1439,506],{"class":308},[49,1441,1442],{"class":59}," исправленный_манифест.yaml\n",[1444,1445,1446],"blockquote",{},[20,1447,1448,1449,1452,1453,1253,1456,1459],{},"💡 ",[28,1450,1451],{},"Совет",": Используйте полные имена образов с реестром, например ",[23,1454,1455],{},"docker.io/library/nginx:1.25",[23,1457,1458],{},"nginx:latest",", чтобы избежать неоднозначностей.",[15,1461,1463],{"id":1462},"способ-2-проверьте-доступность-образа-в-репозитории","Способ 2: Проверьте доступность образа в репозитории",[20,1465,1466],{},"Убедитесь, что образ действительно существует и доступен для загрузки.",[116,1468,1469,1523,1554],{},[119,1470,1471,1472,1495,1497,1498,194,1500],{},"Попробуйте загрузить образ с любой ноды кластера (или локально, если используете Docker):",[40,1473,1475],{"className":42,"code":1474,"language":44,"meta":45,"style":45},"docker pull \u003Cобраз>\n",[23,1476,1477],{"__ignoreMap":45},[49,1478,1479,1482,1485,1487,1490,1493],{"class":51,"line":52},[49,1480,1481],{"class":55},"docker",[49,1483,1484],{"class":59}," pull",[49,1486,213],{"class":212},[49,1488,1489],{"class":59},"обра",[49,1491,1492],{"class":219},"з",[49,1494,223],{"class":212},[225,1496],{},"Если используете ",[23,1499,1184],{},[40,1501,1503],{"className":42,"code":1502,"language":44,"meta":45,"style":45},"ctr image pull \u003Cобраз>\n",[23,1504,1505],{"__ignoreMap":45},[49,1506,1507,1510,1513,1515,1517,1519,1521],{"class":51,"line":52},[49,1508,1509],{"class":55},"ctr",[49,1511,1512],{"class":59}," image",[49,1514,1484],{"class":59},[49,1516,213],{"class":212},[49,1518,1489],{"class":59},[49,1520,1492],{"class":219},[49,1522,223],{"class":212},[119,1524,1525,1526,1548,1550,1551,152],{},"Если образ приватный, убедитесь, что вы аутентифицированы:",[40,1527,1529],{"className":42,"code":1528,"language":44,"meta":45,"style":45},"docker login \u003Cregistry>\n",[23,1530,1531],{"__ignoreMap":45},[49,1532,1533,1535,1538,1540,1543,1546],{"class":51,"line":52},[49,1534,1481],{"class":55},[49,1536,1537],{"class":59}," login",[49,1539,213],{"class":212},[49,1541,1542],{"class":59},"registr",[49,1544,1545],{"class":219},"y",[49,1547,223],{"class":212},[225,1549],{},"Для containerd настройте credentials в ",[23,1552,1553],{},"/etc/containerd/config.toml",[119,1555,1556],{},"Если образ отсутствует, найдите правильный тег или дайджест в репозитории и обновите манифест.",[15,1558,1560],{"id":1559},"способ-3-настройте-imagepullsecrets-для-приватных-репозиториев","Способ 3: Настройте imagePullSecrets для приватных репозиториев",[20,1562,1563],{},"Если образ находится в приватном registry, Kubernetes должен иметь права на его загрузку.",[116,1565,1566,1634,1726],{},[119,1567,1568,1569],{},"Создайте секрет Docker registry (если ещё нет):",[40,1570,1572],{"className":42,"code":1571,"language":44,"meta":45,"style":45},"kubectl create secret docker-registry regcred \\\n  --docker-server=\u003Cregistry_url> \\\n  --docker-username=\u003Cusername> \\\n  --docker-password=\u003Cpassword>\n",[23,1573,1574,1593,1608,1622],{"__ignoreMap":45},[49,1575,1576,1578,1581,1584,1587,1590],{"class":51,"line":52},[49,1577,56],{"class":55},[49,1579,1580],{"class":59}," create",[49,1582,1583],{"class":59}," secret",[49,1585,1586],{"class":59}," docker-registry",[49,1588,1589],{"class":59}," regcred",[49,1591,1592],{"class":308}," \\\n",[49,1594,1595,1598,1601,1604,1606],{"class":51,"line":406},[49,1596,1597],{"class":308},"  --docker-server=",[49,1599,1600],{"class":212},"\u003C",[49,1602,1603],{"class":308},"registry_url",[49,1605,305],{"class":212},[49,1607,1592],{"class":308},[49,1609,1610,1613,1615,1618,1620],{"class":51,"line":414},[49,1611,1612],{"class":308},"  --docker-username=",[49,1614,1600],{"class":212},[49,1616,1617],{"class":308},"username",[49,1619,305],{"class":212},[49,1621,1592],{"class":308},[49,1623,1624,1627,1629,1632],{"class":51,"line":429},[49,1625,1626],{"class":308},"  --docker-password=",[49,1628,1600],{"class":212},[49,1630,1631],{"class":308},"password",[49,1633,223],{"class":212},[119,1635,1636,1637,540,1640,1668,1670,1671],{},"Добавьте секрет в сервис-аккаунт, используемый подом (по умолчанию ",[23,1638,1639],{},"default",[40,1641,1643],{"className":42,"code":1642,"language":44,"meta":45,"style":45},"kubectl patch serviceaccount default \\\n  -p '{\"imagePullSecrets\": [{\"name\": \"regcred\"}]}'\n",[23,1644,1645,1660],{"__ignoreMap":45},[49,1646,1647,1649,1652,1655,1658],{"class":51,"line":52},[49,1648,56],{"class":55},[49,1650,1651],{"class":59}," patch",[49,1653,1654],{"class":59}," serviceaccount",[49,1656,1657],{"class":59}," default",[49,1659,1592],{"class":308},[49,1661,1662,1665],{"class":51,"line":406},[49,1663,1664],{"class":308},"  -p",[49,1666,1667],{"class":59}," '{\"imagePullSecrets\": [{\"name\": \"regcred\"}]}'\n",[225,1669],{},"Или укажите напрямую в спецификации пода/deployment:",[40,1672,1674],{"className":391,"code":1673,"language":393,"meta":45,"style":45},"spec:\n  containers:\n  - name: myapp\n    image: myregistry/myapp:latest\n  imagePullSecrets:\n  - name: regcred\n",[23,1675,1676,1682,1688,1699,1708,1715],{"__ignoreMap":45},[49,1677,1678,1680],{"class":51,"line":52},[49,1679,401],{"class":400},[49,1681,315],{"class":219},[49,1683,1684,1686],{"class":51,"line":406},[49,1685,409],{"class":400},[49,1687,315],{"class":219},[49,1689,1690,1692,1694,1696],{"class":51,"line":414},[49,1691,417],{"class":219},[49,1693,420],{"class":400},[49,1695,423],{"class":219},[49,1697,1698],{"class":59},"myapp\n",[49,1700,1701,1703,1705],{"class":51,"line":429},[49,1702,432],{"class":400},[49,1704,423],{"class":219},[49,1706,1707],{"class":59},"myregistry/myapp:latest\n",[49,1709,1710,1713],{"class":51,"line":440},[49,1711,1712],{"class":400},"  imagePullSecrets",[49,1714,315],{"class":219},[49,1716,1717,1719,1721,1723],{"class":51,"line":448},[49,1718,417],{"class":219},[49,1720,420],{"class":400},[49,1722,423],{"class":219},[49,1724,1725],{"class":59},"regcred\n",[119,1727,1728,1729],{},"Проверьте, что секрет применился:",[40,1730,1732],{"className":42,"code":1731,"language":44,"meta":45,"style":45},"kubectl get pod \u003Cимя_пода> -o yaml | grep imagePullSecrets\n",[23,1733,1734],{"__ignoreMap":45},[49,1735,1736,1738,1740,1742,1744,1746,1748,1750,1752,1755,1757,1759],{"class":51,"line":52},[49,1737,56],{"class":55},[49,1739,60],{"class":59},[49,1741,209],{"class":59},[49,1743,213],{"class":212},[49,1745,1337],{"class":59},[49,1747,1340],{"class":219},[49,1749,305],{"class":212},[49,1751,797],{"class":308},[49,1753,1754],{"class":59}," yaml",[49,1756,752],{"class":212},[49,1758,755],{"class":55},[49,1760,1761],{"class":59}," imagePullSecrets\n",[15,1763,1765],{"id":1764},"способ-4-проверьте-ресурсы-и-сеть-ноды","Способ 4: Проверьте ресурсы и сеть ноды",[20,1767,1768],{},"Иногда проблема не в образе, а в среде выполнения.",[116,1770,1771,1828,1879],{},[119,1772,1773,1776,1777,1790,1792,1793,1811,1813,1814],{},[28,1774,1775],{},"Дисковое пространство",": подключитесь к ноде, где запускается под, и проверьте свободное место:",[40,1778,1780],{"className":42,"code":1779,"language":44,"meta":45,"style":45},"df -h\n",[23,1781,1782],{"__ignoreMap":45},[49,1783,1784,1787],{"class":51,"line":52},[49,1785,1786],{"class":55},"df",[49,1788,1789],{"class":308}," -h\n",[225,1791],{},"Если место заканчивается, очистите неиспользуемые образы:",[40,1794,1796],{"className":42,"code":1795,"language":44,"meta":45,"style":45},"docker system prune -a\n",[23,1797,1798],{"__ignoreMap":45},[49,1799,1800,1802,1805,1808],{"class":51,"line":52},[49,1801,1481],{"class":55},[49,1803,1804],{"class":59}," system",[49,1806,1807],{"class":59}," prune",[49,1809,1810],{"class":308}," -a\n",[225,1812],{},"или для containerd:",[40,1815,1817],{"className":42,"code":1816,"language":44,"meta":45,"style":45},"ctr image prune\n",[23,1818,1819],{"__ignoreMap":45},[49,1820,1821,1823,1825],{"class":51,"line":52},[49,1822,1509],{"class":55},[49,1824,1512],{"class":59},[49,1826,1827],{"class":59}," prune\n",[119,1829,1830,1833,1834,1876,1878],{},[28,1831,1832],{},"Сеть и DNS",": проверьте доступность registry с ноды:",[40,1835,1837],{"className":42,"code":1836,"language":44,"meta":45,"style":45},"ping \u003Cregistry_url>\ncurl -v https://\u003Cregistry_url>/v2/_catalog\n",[23,1838,1839,1854],{"__ignoreMap":45},[49,1840,1841,1844,1846,1849,1852],{"class":51,"line":52},[49,1842,1843],{"class":55},"ping",[49,1845,213],{"class":212},[49,1847,1848],{"class":59},"registry_ur",[49,1850,1851],{"class":219},"l",[49,1853,223],{"class":212},[49,1855,1856,1859,1862,1865,1867,1869,1871,1873],{"class":51,"line":406},[49,1857,1858],{"class":55},"curl",[49,1860,1861],{"class":308}," -v",[49,1863,1864],{"class":59}," https://",[49,1866,1600],{"class":212},[49,1868,1848],{"class":59},[49,1870,1851],{"class":219},[49,1872,305],{"class":212},[49,1874,1875],{"class":59},"/v2/_catalog\n",[225,1877],{},"Убедитесь, что нет блокировки firewall.",[119,1880,1881,1884,1885,1914,1916,1917,138],{},[28,1882,1883],{},"Архитектура",": если нода имеет архитектуру, отличную от образа (например, ARM), потребуется образ для нужной архитектуры. Проверьте архитектуру ноды:",[40,1886,1888],{"className":42,"code":1887,"language":44,"meta":45,"style":45},"kubectl get node \u003Cимя_ноды> -o jsonpath='{.status.nodeInfo.architecture}'\n",[23,1889,1890],{"__ignoreMap":45},[49,1891,1892,1894,1896,1899,1901,1904,1907,1909,1911],{"class":51,"line":52},[49,1893,56],{"class":55},[49,1895,60],{"class":59},[49,1897,1898],{"class":59}," node",[49,1900,213],{"class":212},[49,1902,1903],{"class":59},"имя_нод",[49,1905,1906],{"class":219},"ы",[49,1908,305],{"class":212},[49,1910,797],{"class":308},[49,1912,1913],{"class":59}," jsonpath='{.status.nodeInfo.architecture}'\n",[225,1915],{},"И найдите образ с соответствующей платформой в теге (например, ",[23,1918,1919],{},"nginx:1.25-alpine-arm64",[364,1921],{},[15,1923,1925],{"id":1924},"способ-5-анализ-логов-kubelet-и-событий","Способ 5: Анализ логов kubelet и событий",[20,1927,1928],{},"Если предыдущие шаги не дали результата, углубитесь в логи компонентов.",[116,1930,1931,1968,1997,2033],{},[119,1932,1933,1934],{},"Получите расширенные события пода с фильтрацией:",[40,1935,1937],{"className":42,"code":1936,"language":44,"meta":45,"style":45},"kubectl get events --field-selector involvedObject.name=\u003Cимя_пода> --sort-by='.lastTimestamp'\n",[23,1938,1939],{"__ignoreMap":45},[49,1940,1941,1943,1945,1948,1951,1954,1956,1958,1960,1962,1965],{"class":51,"line":52},[49,1942,56],{"class":55},[49,1944,60],{"class":59},[49,1946,1947],{"class":59}," events",[49,1949,1950],{"class":308}," --field-selector",[49,1952,1953],{"class":59}," involvedObject.name=",[49,1955,1600],{"class":212},[49,1957,1337],{"class":59},[49,1959,1340],{"class":219},[49,1961,305],{"class":212},[49,1963,1964],{"class":308}," --sort-by=",[49,1966,1967],{"class":59},"'.lastTimestamp'\n",[119,1969,1970,1971],{},"Найдите ноду, на которой планируется запуск пода:",[40,1972,1974],{"className":42,"code":1973,"language":44,"meta":45,"style":45},"kubectl get pod \u003Cимя_пода> -o wide\n",[23,1975,1976],{"__ignoreMap":45},[49,1977,1978,1980,1982,1984,1986,1988,1990,1992,1994],{"class":51,"line":52},[49,1979,56],{"class":55},[49,1981,60],{"class":59},[49,1983,209],{"class":59},[49,1985,213],{"class":212},[49,1987,1337],{"class":59},[49,1989,1340],{"class":219},[49,1991,305],{"class":212},[49,1993,797],{"class":308},[49,1995,1996],{"class":59}," wide\n",[119,1998,1999,2000,2021,2023,2024,110,2026,2028,2029,2032],{},"Подключитесь к этой ноде и просмотрите логи kubelet:",[40,2001,2003],{"className":42,"code":2002,"language":44,"meta":45,"style":45},"journalctl -u kubelet -f --no-pager\n",[23,2004,2005],{"__ignoreMap":45},[49,2006,2007,2010,2013,2016,2018],{"class":51,"line":52},[49,2008,2009],{"class":55},"journalctl",[49,2011,2012],{"class":308}," -u",[49,2014,2015],{"class":59}," kubelet",[49,2017,506],{"class":308},[49,2019,2020],{"class":308}," --no-pager\n",[225,2022],{},"Ищите строки, содержащие ",[23,2025,1220],{},[23,2027,1196],{},". Там может быть указана более точная причина (например, ",[23,2030,2031],{},"x509: certificate signed by unknown authority"," для самоподписанных сертификатов).",[119,2034,2035],{},"Если используется самоподписанный registry, добавьте его сертификат в доверенные на всех нодах кластера.",[15,2037,807],{"id":806},[277,2039,2040,2049,2059,2074,2086,2092],{},[119,2041,2042,2045,2046,2048],{},[28,2043,2044],{},"Всегда указывайте явный тег или дайджест"," образа вместо ",[23,2047,1256],{}," в production-манифестах.",[119,2050,2051,2054,2055,2058],{},[28,2052,2053],{},"Проверяйте образы перед деплоем",": запускайте ",[23,2056,2057],{},"docker pull"," на тестовой ноде.",[119,2060,2061,2064,2065,110,2068,2071,2072,152],{},[28,2062,2063],{},"Управляйте секретами централизованно",": используйте инструменты вроде ",[23,2066,2067],{},"External Secrets",[23,2069,2070],{},"HashiCorp Vault"," для автоматического создания ",[23,2073,1277],{},[119,2075,2076,2079,2080,2082,2083,138],{},[28,2077,2078],{},"Мониторьте свободное место на нодах"," и настройте автоматическую очистку неиспользуемых образов (например, через ",[23,2081,34],{}," параметр ",[23,2084,2085],{},"--image-gc-high-threshold",[119,2087,2088,2091],{},[28,2089,2090],{},"Используйте private registry с аутентификацией"," по умолчанию, а не анонимный доступ.",[119,2093,2094,2097],{},[28,2095,2096],{},"Тестируйте образы на всех целевых архитектурах"," при использовании мульти-платформенных нод.",[877,2099,2100],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":45,"searchDepth":406,"depth":406,"links":2102},[2103,2104,2105,2106,2107,2108,2109,2110],{"id":1189,"depth":406,"text":1190},{"id":98,"depth":406,"text":99},{"id":1306,"depth":406,"text":1307},{"id":1462,"depth":406,"text":1463},{"id":1559,"depth":406,"text":1560},{"id":1764,"depth":406,"text":1765},{"id":1924,"depth":406,"text":1925},{"id":806,"depth":406,"text":807},"2026-04-08 09:02:02","Ошибка ImagePullBackOff в kubectl мешает запуску подов. Узнайте 5 проверенных способов исправить проблему с загрузкой образа за 10 минут. Пошаговая инструкция для Kubernetes.","10-15 мин",[2115,2118,2121,2124],{"question":2116,"answer":2117},"Что означает статус ImagePullBackOff в Kubernetes?","Это состояние пода, когда kubelet многократно пытался загрузить контейнерный образ, но безуспешно. После нескольких неудачных попыток он переходит в статус BackOff, задерживая следующие попытки.",{"question":2119,"answer":2120},"Как быстро диагностировать причину ImagePullBackOff?","Выполните команду `kubectl describe pod \u003Cимя_пода>` и найдите события (Events) с типом `BackOff`. Там будет указана конкретная причина, например, `ErrImagePull` или `ImageInspectError`.",{"question":2122,"answer":2123},"Может ли ImagePullBackOff возникать из-за приватного Docker-репозитория?","Да, чаще всего. Если образ находится в приватном репозитории, необходимо правильно настроить `imagePullSecrets` в сервис-аккаунте пода или явно указать секрет в спецификации пода.",{"question":2125,"answer":2126},"Как предотвратить ImagePullBackOff при деплое?","Всегда проверяйте корректность имени образа и тега перед применением манифеста. Для приватных репозиториев заранее создавайте и привязывайте секреты. Используйте конкретные теги вместо `latest`.",[2128,2131,2134,2137,2140],{"name":2129,"text":2130},"Проверьте статус пода и события","Выполните `kubectl get pod \u003Cимя_пода>` и `kubectl describe pod \u003Cимя_пода>`. В разделе Events найдите сообщения об ошибках загрузки образа.",{"name":2132,"text":2133},"Убедитесь в корректности имени образа","В выводе `kubectl describe pod` проверьте поле `Image`. Убедитесь, что указан правильный репозиторий, имя и тег образа без опечаток.",{"name":2135,"text":2136},"Проверьте доступность образа в репозитории","Попробуйте вручную загрузить образ с той же ноды, где запускается под: `docker pull \u003Cобраз>` или `ctr image pull \u003Cобраз>` для containerd.",{"name":2138,"text":2139},"Проверьте секреты для приватных репозиториев","Убедитесь, что в сервис-аккаунте пода или в `spec.template.spec` указан `imagePullSecrets`. Проверьте существование секрета: `kubectl get secret \u003Cимя_секрета>`.",{"name":2141,"text":2142},"Изучите логи kubelet на ноде","Если предыдущие шаги не помогли, подключитесь к ноде, где планируется запуск пода, и проверьте логи kubelet: `journalctl -u kubelet -f`.","PT10M",[2145,2146,2147,2148,86,2149,2150,2151,2152,2153],"kubectl ImagePullBackOff","ошибка ImagePullBackOff","Kubernetes образ не загружается","контейнер не запускается","проблемы с Docker образом","K8s ImagePullBackOff решение","kubectl ошибка запуска","Kubernetes ImagePullBackOff причины","как исправить ImagePullBackOff",{},[2156,2157,2158],"/errors/linux/kubectl-imagenotfound","/guides/linux/kubectl-describe-pod","/errors/general/docker-pull-error",{"title":1181,"description":2112},"errors/linux/kubectl-imagepullbackoff","Статья объясняет ошибку ImagePullBackOff в Kubernetes, её основные причины и даёт практические решения для восстановления работы подов, включая проверку имени образа, доступа к репозиторию и секретов.",[2163,56,2164,2165,2166,2167,2168],"Kubernetes","Ошибки","Контейнеры","Docker","imagePullBackOff","Pods","fY-ReLMSSgYPVuI5Q-ZT6I8na-pa9VvNrfabYQezJRw",{"id":2171,"title":2172,"appliesTo":2173,"author":10,"body":2176,"canonical":892,"code":892,"createdAt":3242,"description":3243,"difficulty":895,"draft":896,"estimatedTime":2113,"extension":898,"faq":3244,"howToSteps":3257,"howToTotalTime":3273,"image":892,"keywords":3274,"locale":938,"meta":3285,"navigation":940,"path":945,"platform":3286,"related":3287,"section":3291,"seo":3292,"severity":892,"stem":3293,"summary":3294,"tags":3295,"twitterCreator":892,"twitterSite":892,"type":3298,"updatedAt":3242,"__hash__":3299},"content_ru/guides/linux/kubernetes-debug-pods.md","Отладка подов Kubernetes: пошаговое руководство с kubectl debug",[2174,2175],"Kubernetes 1.20+","kubectl 1.20+",{"type":12,"value":2177,"toc":3223},[2178,2182,2192,2196,2199,2226,2230,2234,2237,2264,2278,2281,2313,2331,2337,2369,2375,2409,2413,2419,2439,2475,2478,2504,2507,2547,2550,2552,2556,2559,2739,2743,2746,2785,2797,2800,2804,2807,2822,2828,2831,2863,2866,2870,2873,2890,2896,2927,2931,2935,2946,3056,3059,3063,3069,3087,3091,3094,3109,3115,3130,3134,3137,3163,3167,3173,3204,3220],[15,2179,2181],{"id":2180},"введение-зачем-это-нужно","Введение / Зачем это нужно",[20,2183,2184,2185,2188,2189,2191],{},"В Kubernetes под (pod) — это минимальная единица развертывания, и когда что-то идет не так, отладка становится критической. Команда ",[23,2186,2187],{},"kubectl debug"," позволяет запустить временный отладочный контейнер (ephemeral container) внутри проблемного пода, чтобы inspect файловую систему, процессы и сетевые настройки без изменения конфигурации пода. Этот гайд покажет, как эффективно использовать ",[23,2190,2187],{}," для диагностики, начиная с проверки статуса пода и заканчивая сбором ключевых данных.",[15,2193,2195],{"id":2194},"требования-подготовка","Требования / Подготовка",[20,2197,2198],{},"Перед началом убедитесь, что:",[277,2200,2201,2210,2217,2220],{},[119,2202,2203,2204,2206,2207,138],{},"Установлен ",[23,2205,56],{}," (версия 1.20+) и настроен доступ к кластеру Kubernetes (",[23,2208,2209],{},"kubectl cluster-info",[119,2211,2212,2213,2216],{},"У вашего аккаунта есть права на создание ephemeral containers в целевом namespace (роль ",[23,2214,2215],{},"pods/exec"," или аналогичная).",[119,2218,2219],{},"Вы знаете имя пода и namespace, который нужно отладить.",[119,2221,2222,2223,2225],{},"Рекомендуется familiarity с базовыми командами ",[23,2224,56],{}," (get, describe, logs).",[15,2227,2229],{"id":2228},"пошаговая-инструкция","Пошаговая инструкция",[180,2231,2233],{"id":2232},"шаг-1-проверка-статуса-пода-и-сбор-информации","Шаг 1: Проверка статуса пода и сбор информации",[20,2235,2236],{},"Первым делом получите общую информацию о поде, чтобы понять его состояние:",[40,2238,2240],{"className":42,"code":2239,"language":44,"meta":45,"style":45},"kubectl get pods -n \u003Cnamespace>\n",[23,2241,2242],{"__ignoreMap":45},[49,2243,2244,2246,2248,2251,2254,2256,2259,2262],{"class":51,"line":52},[49,2245,56],{"class":55},[49,2247,60],{"class":59},[49,2249,2250],{"class":59}," pods",[49,2252,2253],{"class":308}," -n",[49,2255,213],{"class":212},[49,2257,2258],{"class":59},"namespac",[49,2260,2261],{"class":219},"e",[49,2263,223],{"class":212},[20,2265,2266,2267,263,2269,267,2271,267,2273,2275,2276,152],{},"Обратите внимание на поле ",[23,2268,69],{},[23,2270,1239],{},[23,2272,25],{},[23,2274,266],{},") и ",[23,2277,76],{},[20,2279,2280],{},"Затем опишите под для деталей о событиях, контейнерах и условиях:",[40,2282,2284],{"className":42,"code":2283,"language":44,"meta":45,"style":45},"kubectl describe pod \u003Cpod-name> -n \u003Cnamespace>\n",[23,2285,2286],{"__ignoreMap":45},[49,2287,2288,2290,2292,2294,2296,2299,2301,2303,2305,2307,2309,2311],{"class":51,"line":52},[49,2289,56],{"class":55},[49,2291,206],{"class":59},[49,2293,209],{"class":59},[49,2295,213],{"class":212},[49,2297,2298],{"class":59},"pod-nam",[49,2300,2261],{"class":219},[49,2302,305],{"class":212},[49,2304,2253],{"class":308},[49,2306,213],{"class":212},[49,2308,2258],{"class":59},[49,2310,2261],{"class":219},[49,2312,223],{"class":212},[20,2314,2315,2316,267,2318,148,2320,2323,2324,2326,2327,267,2329,152],{},"В выводе ищите разделы ",[23,2317,230],{},[23,2319,248],{},[23,2321,2322],{},"Conditions",". Частые проблемы: ",[23,2325,234],{}," события, ",[23,2328,1196],{},[23,2330,270],{},[20,2332,2333,2334,194],{},"Наконец, посмотрите логи контейнеров. Если в поде несколько контейнеров, используйте ",[23,2335,2336],{},"--all-containers",[40,2338,2340],{"className":42,"code":2339,"language":44,"meta":45,"style":45},"kubectl logs \u003Cpod-name> -n \u003Cnamespace> --all-containers=true\n",[23,2341,2342],{"__ignoreMap":45},[49,2343,2344,2346,2348,2350,2352,2354,2356,2358,2360,2362,2364,2366],{"class":51,"line":52},[49,2345,56],{"class":55},[49,2347,296],{"class":59},[49,2349,213],{"class":212},[49,2351,2298],{"class":59},[49,2353,2261],{"class":219},[49,2355,305],{"class":212},[49,2357,2253],{"class":308},[49,2359,213],{"class":212},[49,2361,2258],{"class":59},[49,2363,2261],{"class":219},[49,2365,305],{"class":212},[49,2367,2368],{"class":308}," --all-containers=true\n",[20,2370,2371,2372,2374],{},"Если под перезапускается, добавьте ",[23,2373,985],{},", чтобы увидеть логи с предыдущего экземпляра контейнера:",[40,2376,2378],{"className":42,"code":2377,"language":44,"meta":45,"style":45},"kubectl logs \u003Cpod-name> -n \u003Cnamespace> --previous --all-containers=true\n",[23,2379,2380],{"__ignoreMap":45},[49,2381,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404,2407],{"class":51,"line":52},[49,2383,56],{"class":55},[49,2385,296],{"class":59},[49,2387,213],{"class":212},[49,2389,2298],{"class":59},[49,2391,2261],{"class":219},[49,2393,305],{"class":212},[49,2395,2253],{"class":308},[49,2397,213],{"class":212},[49,2399,2258],{"class":59},[49,2401,2261],{"class":219},[49,2403,305],{"class":212},[49,2405,2406],{"class":308}," --previous",[49,2408,2368],{"class":308},[180,2410,2412],{"id":2411},"шаг-2-запуск-отладочного-контейнера-с-kubectl-debug","Шаг 2: Запуск отладочного контейнера с kubectl debug",[20,2414,2415,2416,2418],{},"Команда ",[23,2417,2187],{}," добавляет ephemeral container в существующий pod. Ephemeral container — это временный контейнер, который разделяет Namespace сети и IPC с основными контейнерами, но имеет отдельное PID namespace (если не указано иное).",[20,2420,2421,2422,2425,2426,267,2429,267,2432,2435,2436,152],{},"Используйте образ с инструментами для диагностики. ",[23,2423,2424],{},"busybox"," подходит для базовых команд (",[23,2427,2428],{},"sh",[23,2430,2431],{},"ps",[23,2433,2434],{},"netstat","). Для сетевой отладки можно использовать ",[23,2437,2438],{},"nicolaka/netshoot",[40,2440,2442],{"className":42,"code":2441,"language":44,"meta":45,"style":45},"kubectl debug -it \u003Cpod-name> -n \u003Cnamespace> --image=busybox\n",[23,2443,2444],{"__ignoreMap":45},[49,2445,2446,2448,2451,2454,2456,2458,2460,2462,2464,2466,2468,2470,2472],{"class":51,"line":52},[49,2447,56],{"class":55},[49,2449,2450],{"class":59}," debug",[49,2452,2453],{"class":308}," -it",[49,2455,213],{"class":212},[49,2457,2298],{"class":59},[49,2459,2261],{"class":219},[49,2461,305],{"class":212},[49,2463,2253],{"class":308},[49,2465,213],{"class":212},[49,2467,2258],{"class":59},[49,2469,2261],{"class":219},[49,2471,305],{"class":212},[49,2473,2474],{"class":308}," --image=busybox\n",[20,2476,2477],{},"Опции:",[277,2479,2480,2486,2492,2498],{},[119,2481,2482,2485],{},[23,2483,2484],{},"-it"," — интерактивный режим с TTY.",[119,2487,2488,2491],{},[23,2489,2490],{},"--image"," — образ для отладочного контейнера.",[119,2493,2494,2497],{},[23,2495,2496],{},"--target=\u003Ccontainer-name>"," — если нужно прикрепиться к конкретному контейнеру в pod (разделяет его Namespace).",[119,2499,2500,2503],{},[23,2501,2502],{},"--share-processes"," — чтобы отладочный контейнер видел процессы основного контейнера (разделяет PID namespace).",[20,2505,2506],{},"Пример с целевым контейнером и общим PID namespace:",[40,2508,2510],{"className":42,"code":2509,"language":44,"meta":45,"style":45},"kubectl debug -it \u003Cpod-name> -n \u003Cnamespace> --image=busybox --target=app-container --share-processes\n",[23,2511,2512],{"__ignoreMap":45},[49,2513,2514,2516,2518,2520,2522,2524,2526,2528,2530,2532,2534,2536,2538,2541,2544],{"class":51,"line":52},[49,2515,56],{"class":55},[49,2517,2450],{"class":59},[49,2519,2453],{"class":308},[49,2521,213],{"class":212},[49,2523,2298],{"class":59},[49,2525,2261],{"class":219},[49,2527,305],{"class":212},[49,2529,2253],{"class":308},[49,2531,213],{"class":212},[49,2533,2258],{"class":59},[49,2535,2261],{"class":219},[49,2537,305],{"class":212},[49,2539,2540],{"class":308}," --image=busybox",[49,2542,2543],{"class":308}," --target=app-container",[49,2545,2546],{"class":308}," --share-processes\n",[20,2548,2549],{},"После выполнения команды вы окажетесь внутри оболочки отладочного контейнера.",[364,2551],{},[180,2553,2555],{"id":2554},"шаг-3-диагностика-внутри-отладочного-контейнера","Шаг 3: Диагностика внутри отладочного контейнера",[20,2557,2558],{},"В отладочном контейнере у вас есть доступ к файловой системе и (опционально) процессам основного контейнера. Выполните следующие команды для сбора информации:",[277,2560,2561,2590,2648,2690,2705,2726],{},[119,2562,2563,2566,2567,2569,2570],{},[28,2564,2565],{},"Процессы",": проверьте, какие процессы запущены. Если использовали ",[23,2568,2502],{},", вы увидите процессы основного контейнера.",[40,2571,2573],{"className":42,"code":2572,"language":44,"meta":45,"style":45},"ps aux\ntop  # если установлен\n",[23,2574,2575,2582],{"__ignoreMap":45},[49,2576,2577,2579],{"class":51,"line":52},[49,2578,2431],{"class":55},[49,2580,2581],{"class":59}," aux\n",[49,2583,2584,2587],{"class":51,"line":406},[49,2585,2586],{"class":55},"top",[49,2588,2589],{"class":467},"  # если установлен\n",[119,2591,2592,2595,2596],{},[28,2593,2594],{},"Файловая система",": осмотрите структуру, права доступа и наличие критических файлов.",[40,2597,2599],{"className":42,"code":2598,"language":44,"meta":45,"style":45},"df -h  # использование диска\nls -la /  # корневая файловая система\nls -la /app  # например, директория приложения\ncat /etc/os-release  # информация об ОС в контейнере\n",[23,2600,2601,2611,2625,2637],{"__ignoreMap":45},[49,2602,2603,2605,2608],{"class":51,"line":52},[49,2604,1786],{"class":55},[49,2606,2607],{"class":308}," -h",[49,2609,2610],{"class":467},"  # использование диска\n",[49,2612,2613,2616,2619,2622],{"class":51,"line":406},[49,2614,2615],{"class":55},"ls",[49,2617,2618],{"class":308}," -la",[49,2620,2621],{"class":59}," /",[49,2623,2624],{"class":467},"  # корневая файловая система\n",[49,2626,2627,2629,2631,2634],{"class":51,"line":414},[49,2628,2615],{"class":55},[49,2630,2618],{"class":308},[49,2632,2633],{"class":59}," /app",[49,2635,2636],{"class":467},"  # например, директория приложения\n",[49,2638,2639,2642,2645],{"class":51,"line":429},[49,2640,2641],{"class":55},"cat",[49,2643,2644],{"class":59}," /etc/os-release",[49,2646,2647],{"class":467},"  # информация об ОС в контейнере\n",[119,2649,2650,2653,2654],{},[28,2651,2652],{},"Сеть",": проверьте сетевые подключения и доступность портов.",[40,2655,2657],{"className":42,"code":2656,"language":44,"meta":45,"style":45},"netstat -tuln  # слушающие порты\ncurl http://localhost:8080  # если приложение слушает порт 8080\nip addr  # сетевые интерфейсы\n",[23,2658,2659,2669,2679],{"__ignoreMap":45},[49,2660,2661,2663,2666],{"class":51,"line":52},[49,2662,2434],{"class":55},[49,2664,2665],{"class":308}," -tuln",[49,2667,2668],{"class":467},"  # слушающие порты\n",[49,2670,2671,2673,2676],{"class":51,"line":406},[49,2672,1858],{"class":55},[49,2674,2675],{"class":59}," http://localhost:8080",[49,2677,2678],{"class":467},"  # если приложение слушает порт 8080\n",[49,2680,2681,2684,2687],{"class":51,"line":414},[49,2682,2683],{"class":55},"ip",[49,2685,2686],{"class":59}," addr",[49,2688,2689],{"class":467},"  # сетевые интерфейсы\n",[119,2691,2692,2695,2696],{},[28,2693,2694],{},"Переменные окружения",": посмотрите, какие переменные установлены.",[40,2697,2699],{"className":42,"code":2698,"language":44,"meta":45,"style":45},"env\n",[23,2700,2701],{"__ignoreMap":45},[49,2702,2703],{"class":51,"line":52},[49,2704,2698],{"class":55},[119,2706,2707,2710,2711],{},[28,2708,2709],{},"Логи приложения",": если логи пишутся в файл, прочитайте его.",[40,2712,2714],{"className":42,"code":2713,"language":44,"meta":45,"style":45},"tail -f /var/log/app.log\n",[23,2715,2716],{"__ignoreMap":45},[49,2717,2718,2721,2723],{"class":51,"line":52},[49,2719,2720],{"class":55},"tail",[49,2722,506],{"class":308},[49,2724,2725],{"class":59}," /var/log/app.log\n",[119,2727,2728,2731,2732,267,2735,2738],{},[28,2729,2730],{},"Дополнительно",": если образ содержит утилиты (например, ",[23,2733,2734],{},"strace",[23,2736,2737],{},"lsof","), используйте их для углубленной диагностики.",[180,2740,2742],{"id":2741},"шаг-4-анализ-логов-и-событий-кластера","Шаг 4: Анализ логов и событий кластера",[20,2744,2745],{},"Помимо логов контейнеров, проверьте события кластера, связанные с подом. События могут указать на проблемы с планированием, отказами в ресурсах или ошибками безопасности.",[40,2747,2749],{"className":42,"code":2748,"language":44,"meta":45,"style":45},"kubectl get events -n \u003Cnamespace> --field-selector involvedObject.name=\u003Cpod-name> --sort-by='.lastTimestamp'\n",[23,2750,2751],{"__ignoreMap":45},[49,2752,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783],{"class":51,"line":52},[49,2754,56],{"class":55},[49,2756,60],{"class":59},[49,2758,1947],{"class":59},[49,2760,2253],{"class":308},[49,2762,213],{"class":212},[49,2764,2258],{"class":59},[49,2766,2261],{"class":219},[49,2768,305],{"class":212},[49,2770,1950],{"class":308},[49,2772,1953],{"class":59},[49,2774,1600],{"class":212},[49,2776,2298],{"class":59},[49,2778,2261],{"class":219},[49,2780,305],{"class":212},[49,2782,1964],{"class":308},[49,2784,1967],{"class":59},[20,2786,2787,2788,2791,2792,110,2794,152],{},"Обратите внимание на события с типом ",[23,2789,2790],{},"Warning"," и сообщениями вроде ",[23,2793,234],{},[23,2795,2796],{},"Unhealthy",[20,2798,2799],{},"Если под crashed, убедитесь, что вы просмотрели логи с предыдущего запуска (как в Шаге 1). Также проверьте логи kubelet на ноде, где запущен pod (требует доступа к ноде).",[180,2801,2803],{"id":2802},"шаг-5-завершение-отладки-и-очистка","Шаг 5: Завершение отладки и очистка",[20,2805,2806],{},"После сбора необходимых данных выйдите из отладочного контейнера:",[40,2808,2810],{"className":42,"code":2809,"language":44,"meta":45,"style":45},"exit\n# или Ctrl+D\n",[23,2811,2812,2817],{"__ignoreMap":45},[49,2813,2814],{"class":51,"line":52},[49,2815,2816],{"class":308},"exit\n",[49,2818,2819],{"class":51,"line":406},[49,2820,2821],{"class":467},"# или Ctrl+D\n",[20,2823,2824,2825,2827],{},"Ephemeral container автоматически удалится при следующем перезапуске пода (например, если pod управляется Deployment и происходит rolling update). Вручную удалять ephemeral container не требуется, так как они не отображаются в ",[23,2826,1210],{}," как отдельные контейнеры.",[20,2829,2830],{},"Если вы хотите немедленно удалить весь под (например, после тестовой отладки, когда проблема исправлена), выполните:",[40,2832,2834],{"className":42,"code":2833,"language":44,"meta":45,"style":45},"kubectl delete pod \u003Cpod-name> -n \u003Cnamespace>\n",[23,2835,2836],{"__ignoreMap":45},[49,2837,2838,2840,2843,2845,2847,2849,2851,2853,2855,2857,2859,2861],{"class":51,"line":52},[49,2839,56],{"class":55},[49,2841,2842],{"class":59}," delete",[49,2844,209],{"class":59},[49,2846,213],{"class":212},[49,2848,2298],{"class":59},[49,2850,2261],{"class":219},[49,2852,305],{"class":212},[49,2854,2253],{"class":308},[49,2856,213],{"class":212},[49,2858,2258],{"class":59},[49,2860,2261],{"class":219},[49,2862,223],{"class":212},[20,2864,2865],{},"Но будьте осторожны: если pod управляется контроллером (Deployment, StatefulSet), он будет пересоздан. Убедитесь, что изменения (например, исправление образа) уже применены.",[15,2867,2869],{"id":2868},"проверка-результата","Проверка результата",[20,2871,2872],{},"Успешная отладка означает, что вы определили причину проблемы. Например:",[277,2874,2875,2881,2884,2887],{},[119,2876,2877,2878,138],{},"Нашли ошибку в логах приложения (например, ",[23,2879,2880],{},"Connection refused",[119,2882,2883],{},"Обнаружили, что контейнер не имеет доступа к файлу из-за wrong permissions.",[119,2885,2886],{},"Увидели, что процесс падает из-за нехватки памяти (OOM).",[119,2888,2889],{},"Выявили, что конфигурация приложения отсутствует или некорректна.",[20,2891,2892,2893,2895],{},"После исправления (обновление Deployment, изменение ConfigMap, увеличение ресурсов) перезапустите под и убедитесь, что он переходит в состояние ",[23,2894,1239],{}," без перезапусков. Мониторьте логи в реальном времени:",[40,2897,2899],{"className":42,"code":2898,"language":44,"meta":45,"style":45},"kubectl logs -f \u003Cpod-name> -n \u003Cnamespace>\n",[23,2900,2901],{"__ignoreMap":45},[49,2902,2903,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925],{"class":51,"line":52},[49,2904,56],{"class":55},[49,2906,296],{"class":59},[49,2908,506],{"class":308},[49,2910,213],{"class":212},[49,2912,2298],{"class":59},[49,2914,2261],{"class":219},[49,2916,305],{"class":212},[49,2918,2253],{"class":308},[49,2920,213],{"class":212},[49,2922,2258],{"class":59},[49,2924,2261],{"class":219},[49,2926,223],{"class":212},[15,2928,2930],{"id":2929},"возможные-проблемы","Возможные проблемы",[180,2932,2934],{"id":2933},"ошибка-доступа-forbidden","Ошибка доступа (Forbidden)",[20,2936,2937,2938,2941,2942,2945],{},"Если вы получаете ",[23,2939,2940],{},"Error from server (Forbidden): pods \"\u003Cpod-name>\" is forbidden",", у вашего пользователя или service account недостаточно прав. Ephemeral containers требуют разрешения ",[23,2943,2944],{},"pods/ephemeralcontainers",". Обратитесь к администратору кластера, чтобы добавить роль, например:",[40,2947,2949],{"className":391,"code":2948,"language":393,"meta":45,"style":45},"apiVersion: rbac.authorization.k8s.io/v1\nkind: Role\nmetadata:\n  namespace: \u003Cnamespace>\n  name: pod-debugger\nrules:\n- apiGroups: [\"\"]\n  resources: [\"pods/ephemeralcontainers\"]\n  verbs: [\"create\", \"get\", \"list\"]\n",[23,2950,2951,2961,2971,2978,2988,2998,3005,3022,3034],{"__ignoreMap":45},[49,2952,2953,2956,2958],{"class":51,"line":52},[49,2954,2955],{"class":400},"apiVersion",[49,2957,423],{"class":219},[49,2959,2960],{"class":59},"rbac.authorization.k8s.io/v1\n",[49,2962,2963,2966,2968],{"class":51,"line":406},[49,2964,2965],{"class":400},"kind",[49,2967,423],{"class":219},[49,2969,2970],{"class":59},"Role\n",[49,2972,2973,2976],{"class":51,"line":414},[49,2974,2975],{"class":400},"metadata",[49,2977,315],{"class":219},[49,2979,2980,2983,2985],{"class":51,"line":429},[49,2981,2982],{"class":400},"  namespace",[49,2984,423],{"class":219},[49,2986,2987],{"class":59},"\u003Cnamespace>\n",[49,2989,2990,2993,2995],{"class":51,"line":440},[49,2991,2992],{"class":400},"  name",[49,2994,423],{"class":219},[49,2996,2997],{"class":59},"pod-debugger\n",[49,2999,3000,3003],{"class":51,"line":448},[49,3001,3002],{"class":400},"rules",[49,3004,315],{"class":219},[49,3006,3007,3010,3013,3016,3019],{"class":51,"line":456},[49,3008,3009],{"class":219},"- ",[49,3011,3012],{"class":400},"apiGroups",[49,3014,3015],{"class":219},": [",[49,3017,3018],{"class":59},"\"\"",[49,3020,3021],{"class":219},"]\n",[49,3023,3024,3027,3029,3032],{"class":51,"line":471},[49,3025,3026],{"class":400},"  resources",[49,3028,3015],{"class":219},[49,3030,3031],{"class":59},"\"pods/ephemeralcontainers\"",[49,3033,3021],{"class":219},[49,3035,3036,3039,3041,3044,3046,3049,3051,3054],{"class":51,"line":479},[49,3037,3038],{"class":400},"  verbs",[49,3040,3015],{"class":219},[49,3042,3043],{"class":59},"\"create\"",[49,3045,267],{"class":219},[49,3047,3048],{"class":59},"\"get\"",[49,3050,267],{"class":219},[49,3052,3053],{"class":59},"\"list\"",[49,3055,3021],{"class":219},[20,3057,3058],{},"Затем привяжите роль к вашему аккаунту.",[180,3060,3062],{"id":3061},"образ-отладки-недоступен","Образ отладки недоступен",[20,3064,3065,3066,3068],{},"Если образ ",[23,3067,2424],{}," или другой не может быть загружен, проверьте:",[277,3070,3071,3078,3081],{},[119,3072,3073,3074,3077],{},"Доступность образа: ",[23,3075,3076],{},"docker pull busybox"," локально.",[119,3079,3080],{},"Настройки imagePullSecret в namespace или pod, если используется приватный registry.",[119,3082,3083,3084,152],{},"Используйте полное имя образа, включая registry: ",[23,3085,3086],{},"kubectl debug -it \u003Cpod-name> --image=registry.example.com/busybox:latest",[180,3088,3090],{"id":3089},"под-не-поддерживает-ephemeral-containers","Под не поддерживает ephemeral containers",[20,3092,3093],{},"Ephemeral containers требуют Kubernetes 1.20+ и включенной фичи (обычно включена по умолчанию). Проверьте версию кластера:",[40,3095,3097],{"className":42,"code":3096,"language":44,"meta":45,"style":45},"kubectl version --short\n",[23,3098,3099],{"__ignoreMap":45},[49,3100,3101,3103,3106],{"class":51,"line":52},[49,3102,56],{"class":55},[49,3104,3105],{"class":59}," version",[49,3107,3108],{"class":308}," --short\n",[20,3110,3111,3112,3114],{},"Если версия ниже 1.20, ",[23,3113,2187],{}," может не работать. Альтернативы:",[277,3116,3117,3120,3127],{},[119,3118,3119],{},"Временно изменить Deployment, добавив sidecar-контейнер с отладочными инструментами.",[119,3121,3122,3123,3126],{},"Использовать ",[23,3124,3125],{},"kubectl exec"," в работающий контейнер (если он еще жив).",[119,3128,3129],{},"Запустить новый pod с тем же volumes и namespace для диагностики.",[180,3131,3133],{"id":3132},"конфликт-имен-контейнеров","Конфликт имен контейнеров",[20,3135,3136],{},"Если в pod уже есть контейнер с именем \"debug\" (стандартное имя для отладочного контейнера), команда завершится ошибкой. Укажите уникальное имя:",[40,3138,3140],{"className":42,"code":3139,"language":44,"meta":45,"style":45},"kubectl debug -it \u003Cpod-name> --image=busybox --name=debugger\n",[23,3141,3142],{"__ignoreMap":45},[49,3143,3144,3146,3148,3150,3152,3154,3156,3158,3160],{"class":51,"line":52},[49,3145,56],{"class":55},[49,3147,2450],{"class":59},[49,3149,2453],{"class":308},[49,3151,213],{"class":212},[49,3153,2298],{"class":59},[49,3155,2261],{"class":219},[49,3157,305],{"class":212},[49,3159,2540],{"class":308},[49,3161,3162],{"class":308}," --name=debugger\n",[180,3164,3166],{"id":3165},"отладочный-контейнер-не-видит-процессы-основного-контейнера","Отладочный контейнер не видит процессы основного контейнера",[20,3168,3169,3170,3172],{},"По умолчанию ephemeral container имеет отдельный PID namespace и не видит процессы основного контейнера. Чтобы поделиться PID namespace, используйте ",[23,3171,2502],{},". Однако, это работает только если основной контейнер также делит PID namespace (часто по умолчанию). Проверьте конфигурацию пода:",[40,3174,3176],{"className":42,"code":3175,"language":44,"meta":45,"style":45},"kubectl get pod \u003Cpod-name> -o yaml --template='{{.spec.containers[*].securityContext}}'\n",[23,3177,3178],{"__ignoreMap":45},[49,3179,3180,3182,3184,3186,3188,3190,3192,3194,3196,3198,3201],{"class":51,"line":52},[49,3181,56],{"class":55},[49,3183,60],{"class":59},[49,3185,209],{"class":59},[49,3187,213],{"class":212},[49,3189,2298],{"class":59},[49,3191,2261],{"class":219},[49,3193,305],{"class":212},[49,3195,797],{"class":308},[49,3197,1754],{"class":59},[49,3199,3200],{"class":308}," --template=",[49,3202,3203],{"class":59},"'{{.spec.containers[*].securityContext}}'\n",[20,3205,3206,3207,3210,3211,267,3214,3216,3217,3219],{},"Если ",[23,3208,3209],{},"shareProcessNamespace"," не установлен в ",[23,3212,3213],{},"true",[23,3215,2502],{}," может не сработать. В этом случае, для просмотра процессов основного контейнера используйте ",[23,3218,3125],{}," напрямую, если контейнер еще работает.",[877,3221,3222],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":45,"searchDepth":406,"depth":406,"links":3224},[3225,3226,3227,3234,3235],{"id":2180,"depth":406,"text":2181},{"id":2194,"depth":406,"text":2195},{"id":2228,"depth":406,"text":2229,"children":3228},[3229,3230,3231,3232,3233],{"id":2232,"depth":414,"text":2233},{"id":2411,"depth":414,"text":2412},{"id":2554,"depth":414,"text":2555},{"id":2741,"depth":414,"text":2742},{"id":2802,"depth":414,"text":2803},{"id":2868,"depth":406,"text":2869},{"id":2929,"depth":406,"text":2930,"children":3236},[3237,3238,3239,3240,3241],{"id":2933,"depth":414,"text":2934},{"id":3061,"depth":414,"text":3062},{"id":3089,"depth":414,"text":3090},{"id":3132,"depth":414,"text":3133},{"id":3165,"depth":414,"text":3166},"2026-02-16 10:28:55","Научитесь отлаживать поды в Kubernetes с помощью kubectl debug. Пошаговая инструкция по запуску отладочных контейнеров и анализу проблем. Решайте ошибки быстро!",[3245,3248,3251,3254],{"answer":3246,"question":3247},"kubectl debug — команда для запуска временного отладочного контейнера (ephemeral container) внутри существующего пода. Используйте её, когда нужно inspect файловую систему, процессы или сетевые настройки проблемного контейнера без изменения его конфигурации.","Что такое kubectl debug и когда его использовать?",{"answer":3249,"question":3250},"Запустите `kubectl debug -it \u003Cpod-name> --image=busybox`. В отладочном контейнере проверьте логи приложения, права доступа к файлам или конфигурацию. Используйте `kubectl logs --previous` для просмотра логов с предыдущего запуска.","Как отладить pod, который постоянно перезапускается (CrashLoopBackOff)?",{"answer":3252,"question":3253},"Да, но с осторожностью. Ephemeral container временно добавляет нагрузку на pod. Используйте минималистичные образы (busybox) и удаляйте контейнер после отладки. В production предпочтительно отлаживать на staging-среде.","Можно ли использовать kubectl debug в production?",{"answer":3255,"question":3256},"Альтернативы: `kubectl exec` для запуска shell в работающем контейнере, добавление sidecar-контейнера в Deployment для постоянного мониторинга, или использование `kubectl port-forward` для доступа к сервисам внутри пода.","Какие альтернативы kubectl debug для диагностики подов?",[3258,3261,3264,3267,3270],{"name":3259,"text":3260},"Проверка статуса пода","Используйте kubectl get pods и kubectl describe pod для получения информации о состоянии пода.",{"name":3262,"text":3263},"Запуск отладочного контейнера","Выполните kubectl debug -it \u003Cpod-name> --image=busybox чтобы добавить отладочный контейнер.",{"name":3265,"text":3266},"Диагностика внутри контейнера","В отладочном контейнере проверьте процессы, файловую систему и сетевые настройки.",{"name":3268,"text":3269},"Анализ логов","Используйте kubectl logs для просмотра логов контейнеров. Добавьте --previous если pod перезапускается.",{"name":3271,"text":3272},"Завершение отладки","Выйдите из отладочного контейнера (Ctrl+D или exit). Ephemeral container удалится автоматически при перезапуске пода.","PT15M",[3275,3276,3277,3278,3279,3280,3281,3282,3283,3284],"отладка подов kubernetes","kubectl debug pods","диагностика проблем kubernetes","как отладить pod в kubernetes","kubectl debug пример","kubernetes debug container","проблемы с подами kubernetes решение","kubectl exec vs debug","отладка контейнеров kubernetes","k8s debug pods",{},"linux",[3288,3289,3290],"/guides/linux/kubernetes-getting-started","/guides/linux/kubernetes-logs","/errors/linux/kubernetes-pod-crashloopbackoff","Гайды Kubernetes",{"title":2172,"description":3243},"guides/linux/kubernetes-debug-pods","Этот гайд подробно объясняет, как использовать команду kubectl debug для диагностики проблем с подами в Kubernetes. Вы освоите запуск временных контейнеров и сбор диагностических данных.",[953,957,958,3296,56,955,3297],"pods","devops","guide","W7fcsuf55jSy0Asjf81dSEow88yZyhkLys2FGqAoxAs",{"id":3301,"title":3302,"appliesTo":3303,"author":10,"body":3307,"canonical":892,"code":270,"createdAt":3925,"description":3926,"difficulty":895,"draft":896,"estimatedTime":3927,"extension":898,"faq":3928,"howToSteps":3941,"howToTotalTime":928,"image":892,"keywords":3960,"locale":938,"meta":3969,"navigation":940,"path":946,"platform":3286,"related":3970,"section":947,"seo":3974,"severity":949,"stem":3975,"summary":3976,"tags":3977,"twitterCreator":892,"twitterSite":892,"type":959,"updatedAt":3925,"__hash__":3982},"content_ru/errors/linux/k8s-oomkilled.md","OOMKilled в Kubernetes: причины и быстрое решение",[2174,3304,3305,3306],"K3s","OpenShift 4.x","Любое CNCF-совместимое распределение",{"type":12,"value":3308,"toc":3913},[3309,3313,3332,3335,3337,3408,3410,3414,3417,3585,3602,3606,3609,3680,3684,3687,3723,3731,3738,3744,3796,3812,3831,3833,3835,3910],[15,3310,3312],{"id":3311},"что-означает-ошибка-oomkilled","Что означает ошибка OOMKilled",[20,3314,3315,3317,3318,3320,3321,110,3323,3325,3326,3328,3329,152],{},[28,3316,270],{}," (Out Of Memory Killed) — это состояние контейнера в Kubernetes, означающее, что процесс внутри контейнера был принудительно завершён ядром Linux из-за превышения выделенного лимита памяти (cgroup memory limit). В выводе ",[23,3319,1210],{}," pod обычно переходит в статус ",[23,3322,25],{},[23,3324,266],{},", а в логах или событии ",[23,3327,86],{}," вы увидите последнюю причину завершения: ",[23,3330,3331],{},"State: Terminated Reason: OOMKilled",[20,3333,3334],{},"Это системная ошибка, а не ошибка приложения. Kubernetes (через контейнерный рантайм, например, containerd) просто выполняет политику лимитов ресурсов, установленную вами в манифесте.",[15,3336,99],{"id":98},[116,3338,3339,3355,3361,3379,3392,3402],{},[119,3340,3341,3347,3348,3351,3352,152],{},[28,3342,3343,3344,3346],{},"Слишком низкий лимит памяти (",[23,3345,1144],{},")",". Самая частая причина. В манифесте указано, например, ",[23,3349,3350],{},"512Mi",", а приложение в пике требует ",[23,3353,3354],{},"700Mi",[119,3356,3357,3360],{},[28,3358,3359],{},"Утечка памяти (memory leak) в приложении",". Приложение постепенно потребляет всё больше RAM, пока не достигнет лимита.",[119,3362,3363,3372,3373,3375,3376,3378],{},[28,3364,3365,3366,148,3369],{},"Несоответствие ",[23,3367,3368],{},"requests",[23,3370,3371],{},"limits",". Если ",[23,3374,3368],{}," сильно ниже ",[23,3377,3371],{},", pod может быть запланирован на узел с малым количеством свободной памяти, что приведёт к быстрому исчерпанию лимита.",[119,3380,3381,3384,3385,267,3388,3391],{},[28,3382,3383],{},"Неучтённые процессы внутри контейнера",". Фоновые процессы (например, ",[23,3386,3387],{},"cron",[23,3389,3390],{},"sidecar","-контейнеры) могут потреблять дополнительную память.",[119,3393,3394,3397,3398,3401],{},[28,3395,3396],{},"Проблемы с настройкой JVM/рантайма",". Для Java-приложений неправильно заданный ",[23,3399,3400],{},"-Xmx"," может привести к тому, что JVM попытается зарезервировать больше памяти, чем разрешено лимитом контейнера, и будет убита сразу.",[119,3403,3404,3407],{},[28,3405,3406],{},"Использование памяти ядром (kernel memory) или page cache",". В некоторых конфигурациях cgroup учитывается не только память пользовательского пространства (RSS), но и кэш. Интенсивная файловая операция может \"съесть\" лимит.",[15,3409,178],{"id":177},[180,3411,3413],{"id":3412},"способ-1-увеличение-лимита-памяти-в-манифесте","Способ 1: Увеличение лимита памяти в манифесте",[20,3415,3416],{},"Это прямое и часто самое быстрое решение.",[116,3418,3419,3422,3573,3579],{},[119,3420,3421],{},"Найдите манифест, управляющий pod'ом (Deployment, StatefulSet, DaemonSet).",[119,3423,3424,3425,3428,3429,3431,3432,3435,3436],{},"В секции ",[23,3426,3427],{},"spec.template.spec.containers[].resources"," увеличьте значения ",[23,3430,1144],{}," и, что важно, ",[23,3433,3434],{},"requests.memory",".\n",[40,3437,3439],{"className":391,"code":3438,"language":393,"meta":45,"style":45},"apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: myapp\nspec:\n  template:\n    spec:\n      containers:\n      - name: myapp-container\n        image: myapp:latest\n        resources:\n          requests:\n            memory: \"512Mi\"   # Увеличьте это значение\n          limits:\n            memory: \"1Gi\"     # Увеличьте это значение\n",[23,3440,3441,3450,3459,3465,3473,3479,3486,3493,3500,3512,3523,3531,3539,3552,3560],{"__ignoreMap":45},[49,3442,3443,3445,3447],{"class":51,"line":52},[49,3444,2955],{"class":400},[49,3446,423],{"class":219},[49,3448,3449],{"class":59},"apps/v1\n",[49,3451,3452,3454,3456],{"class":51,"line":406},[49,3453,2965],{"class":400},[49,3455,423],{"class":219},[49,3457,3458],{"class":59},"Deployment\n",[49,3460,3461,3463],{"class":51,"line":414},[49,3462,2975],{"class":400},[49,3464,315],{"class":219},[49,3466,3467,3469,3471],{"class":51,"line":429},[49,3468,2992],{"class":400},[49,3470,423],{"class":219},[49,3472,1698],{"class":59},[49,3474,3475,3477],{"class":51,"line":440},[49,3476,401],{"class":400},[49,3478,315],{"class":219},[49,3480,3481,3484],{"class":51,"line":448},[49,3482,3483],{"class":400},"  template",[49,3485,315],{"class":219},[49,3487,3488,3491],{"class":51,"line":456},[49,3489,3490],{"class":400},"    spec",[49,3492,315],{"class":219},[49,3494,3495,3498],{"class":51,"line":471},[49,3496,3497],{"class":400},"      containers",[49,3499,315],{"class":219},[49,3501,3502,3505,3507,3509],{"class":51,"line":479},[49,3503,3504],{"class":219},"      - ",[49,3506,420],{"class":400},[49,3508,423],{"class":219},[49,3510,3511],{"class":59},"myapp-container\n",[49,3513,3515,3518,3520],{"class":51,"line":3514},10,[49,3516,3517],{"class":400},"        image",[49,3519,423],{"class":219},[49,3521,3522],{"class":59},"myapp:latest\n",[49,3524,3526,3529],{"class":51,"line":3525},11,[49,3527,3528],{"class":400},"        resources",[49,3530,315],{"class":219},[49,3532,3534,3537],{"class":51,"line":3533},12,[49,3535,3536],{"class":400},"          requests",[49,3538,315],{"class":219},[49,3540,3542,3545,3547,3549],{"class":51,"line":3541},13,[49,3543,3544],{"class":400},"            memory",[49,3546,423],{"class":219},[49,3548,464],{"class":59},[49,3550,3551],{"class":467},"   # Увеличьте это значение\n",[49,3553,3555,3558],{"class":51,"line":3554},14,[49,3556,3557],{"class":400},"          limits",[49,3559,315],{"class":219},[49,3561,3563,3565,3567,3570],{"class":51,"line":3562},15,[49,3564,3544],{"class":400},[49,3566,423],{"class":219},[49,3568,3569],{"class":59},"\"1Gi\"",[49,3571,3572],{"class":467},"     # Увеличьте это значение\n",[119,3574,3575,3576,152],{},"Примените изменения: ",[23,3577,3578],{},"kubectl apply -f deployment.yaml",[119,3580,3581,3582,152],{},"Следите за перезапуском pod'а: ",[23,3583,3584],{},"kubectl rollout status deployment/myapp",[1444,3586,3587],{},[20,3588,1448,3589,3592,3593,3595,3596,835,3599,3601],{},[28,3590,3591],{},"Совет:"," Устанавливайте ",[23,3594,3371],{}," в 1.5-2 раза выше пикового потребления, которое вы оценили через ",[23,3597,3598],{},"kubectl top",[23,3600,3368],{}," должен быть близок к среднему потреблению для корректного планирования.",[180,3603,3605],{"id":3604},"способ-2-оптимизация-приложения-и-образа","Способ 2: Оптимизация приложения и образа",[20,3607,3608],{},"Если вы не хотите бесконечно увеличивать лимиты, нужно уменьшать потребление.",[116,3610,3611,3643,3661,3674],{},[119,3612,3613,3616,3617],{},[28,3614,3615],{},"Профилирование памяти",". Запустите контейнер с отладкой.\n",[277,3618,3619,3628,3634],{},[119,3620,3621,3622,110,3625,152],{},"Для Java: ",[23,3623,3624],{},"jcmd \u003CPID> VM.native_memory summary",[23,3626,3627],{},"jmap -histo",[119,3629,3630,3631,152],{},"Для Go: ",[23,3632,3633],{},"go tool pprof http://\u003Cpod-ip>:6060/debug/pprof/heap",[119,3635,3636,3637,110,3640,152],{},"Для Python: ",[23,3638,3639],{},"tracemalloc",[23,3641,3642],{},"memory-profiler",[119,3644,3645,3648,3649,3651,3652,3655,3656,3658,3659,152],{},[28,3646,3647],{},"Настройка JVM",". Если приложение на Java, явно задайте максимальный размер heap через ",[23,3650,3400],{},", например, ",[23,3653,3654],{},"-Xmx800m",". Убедитесь, что ",[23,3657,3400],{}," + метапространство + стек потока \u003C ",[23,3660,1144],{},[119,3662,3663,3666,3667,267,3670,3673],{},[28,3664,3665],{},"Уменьшение размера образа",". Используйте multi-stage сборки и легковесные базовые образы (",[23,3668,3669],{},"alpine",[23,3671,3672],{},"distroless","). Меньше слоёв — меньше накладных расходов на память.",[119,3675,3676,3679],{},[28,3677,3678],{},"Оптимизация кода и конфигурации",". Уменьшите размеры кэшей (Redis, встроенные), настройте пуллы соединений, проверьте на утечки (открытые файловые дескрипторы, неосвобождаемые объекты).",[180,3681,3683],{"id":3682},"способ-3-проверка-и-корректировка-конфигурации-узла-и-cgroup","Способ 3: Проверка и корректировка конфигурации узла и cgroup",[20,3685,3686],{},"Иногда проблема не в pod'е, а в конфигурации узла.",[116,3688,3689,3698,3710],{},[119,3690,3691,3694,3695,152],{},[28,3692,3693],{},"Проверьте swap на узле",". Kubernetes по умолчанию не рекомендует использовать swap. Если swap включён, система может \"подтормаживать\", а не убивать процессы, что сложнее диагностировать. Лучше отключить: ",[23,3696,3697],{},"sudo swapoff -a",[119,3699,3700,835,3703,3372,3706,3709],{},[28,3701,3702],{},"Узнайте версию cgroup",[23,3704,3705],{},"stat -fc %T /sys/fs/cgroup/",[23,3707,3708],{},"cgroup2",", убедитесь, что Docker/containerd корректно настроен для работы с ним. Некоторые старые версии рантаймов могут некорректно считать память в cgroup v2.",[119,3711,3712,3715,3716,3719,3720,152],{},[28,3713,3714],{},"Проверьте общую нагрузку на узел",". Возможно, на узле запущено слишком много pod'ов с высокими лимитами, и физической памяти просто не хватает. Используйте ",[23,3717,3718],{},"kubectl top node",". Рассмотрите увеличение узлов или настройку ",[23,3721,3722],{},"ResourceQuota",[180,3724,3726,3727,3730],{"id":3725},"способ-4-настройка-oomscoreadj-выживание-при-нехватке-на-узле","Способ 4: Настройка ",[23,3728,3729],{},"oomScoreAdj"," (выживание при нехватке на узле)",[20,3732,3733,3734,3737],{},"Этот шаг не решит проблему внутри контейнера, но поможет ",[28,3735,3736],{},"критически важным pod'ам"," выжить, если память на узле закончится и ядро начнёт убивать процессы.",[20,3739,3740,3741,194],{},"В манифесте pod'а добавьте ",[23,3742,3743],{},"securityContext",[40,3745,3747],{"className":391,"code":3746,"language":393,"meta":45,"style":45},"spec:\n  containers:\n  - name: myapp\n    # ...\n  securityContext:\n    oomScoreAdj: -999  # Минимальный приоритет на убийство (только для Linux)\n",[23,3748,3749,3755,3761,3771,3776,3783],{"__ignoreMap":45},[49,3750,3751,3753],{"class":51,"line":52},[49,3752,401],{"class":400},[49,3754,315],{"class":219},[49,3756,3757,3759],{"class":51,"line":406},[49,3758,409],{"class":400},[49,3760,315],{"class":219},[49,3762,3763,3765,3767,3769],{"class":51,"line":414},[49,3764,417],{"class":219},[49,3766,420],{"class":400},[49,3768,423],{"class":219},[49,3770,1698],{"class":59},[49,3772,3773],{"class":51,"line":429},[49,3774,3775],{"class":467},"    # ...\n",[49,3777,3778,3781],{"class":51,"line":440},[49,3779,3780],{"class":400},"  securityContext",[49,3782,315],{"class":219},[49,3784,3785,3788,3790,3793],{"class":51,"line":448},[49,3786,3787],{"class":400},"    oomScoreAdj",[49,3789,423],{"class":219},[49,3791,3792],{"class":308},"-999",[49,3794,3795],{"class":467},"  # Минимальный приоритет на убийство (только для Linux)\n",[20,3797,3798,3799,3802,3803,3805,3806,3808,3809,3811],{},"Чем ",[28,3800,3801],{},"меньше"," значение ",[23,3804,3729],{}," (от -1000 до 1000), тем ",[28,3807,3801],{}," шансов, что процесс будет убит первым. По умолчанию у контейнера 0. У ",[23,3810,34],{}," и системных процессов — отрицательные значения.",[1444,3813,3814],{},[20,3815,3816,3817,3820,3821,3827,3828,3830],{},"⚠️ ",[28,3818,3819],{},"Важно:"," Если pod всё равно получает OOMKilled, это значит, что ",[28,3822,3823,3824],{},"он превысил свой собственный ",[23,3825,3826],{},"limit",", а не был жертвой общей нехватки на узле. ",[23,3829,3729],{}," здесь не поможет.",[364,3832],{},[15,3834,807],{"id":806},[116,3836,3837,3854,3871,3884,3904],{},[119,3838,3839,3847,3848,3850,3851,138],{},[28,3840,3841,3842,3844,3845],{},"Всегда устанавливайте и ",[23,3843,3368],{},", и ",[23,3846,3371],{},". Никогда не оставляйте ",[23,3849,3371],{}," неограниченными (",[23,3852,3853],{},"unlimited",[119,3855,3856,3859,3860,3863,3864,148,3867,3870],{},[28,3857,3858],{},"Настройте мониторинг",". Используйте Prometheus + ",[23,3861,3862],{},"kube-state-metrics"," для сбора метрик ",[23,3865,3866],{},"kube_pod_container_resource_limits",[23,3868,3869],{},"container_memory_usage_bytes",". Настройте алерты (Alertmanager) на приближение использования к лимиту (например, >85%).",[119,3872,3873,3876,3877,110,3880,3883],{},[28,3874,3875],{},"Проводите нагрузочное тестирование",". Перед запуском в продакшене протестируйте приложение с инструментами вроде ",[23,3878,3879],{},"stress-ng",[23,3881,3882],{},"hey"," внутри контейнера, чтобы найти реальные пики потребления памяти.",[119,3885,3886,3895,3896,148,3898,835,3900,3903],{},[28,3887,3888,3889,110,3892],{},"Используйте вертикальный автоскейлинг (VPA) в режиме ",[23,3890,3891],{},"Auto",[23,3893,3894],{},"Initial",". VPA может автоматически анализировать историческое потребление и рекомендовать (или применять) оптимальные значения ",[23,3897,3368],{},[23,3899,3371],{},[28,3901,3902],{},"Внимание:"," VPA не должен использоваться вместе с HPA на CPU/Memory одновременно без осторожности.",[119,3905,3906,3909],{},[28,3907,3908],{},"Регулярно обновляйте образы",". Новые версии приложений и их зависимостей часто содержат исправления утечек памяти и оптимизации.",[877,3911,3912],{},"html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":45,"searchDepth":406,"depth":406,"links":3914},[3915,3916,3917,3924],{"id":3311,"depth":406,"text":3312},{"id":98,"depth":406,"text":99},{"id":177,"depth":406,"text":178,"children":3918},[3919,3920,3921,3922],{"id":3412,"depth":414,"text":3413},{"id":3604,"depth":414,"text":3605},{"id":3682,"depth":414,"text":3683},{"id":3725,"depth":414,"text":3923},"Способ 4: Настройка oomScoreAdj (выживание при нехватке на узле)",{"id":806,"depth":406,"text":807},"2026-02-16 10:29:17","Контейнер завершается с ошибкой OOMKilled? Узнайте, как правильно настроить лимиты памяти, оптимизировать приложение и предотвратить аварийные остановки pod'ов в кластере. Пошаговая инструкция.","15-25 мин",[3929,3932,3935,3938],{"question":3930,"answer":3931},"В чём разница между requests и limits памяти, и как они влияют на OOMKilled?","`requests` — это гарантированный объём памяти для pod'а, `limits` — жёсткий потолок. Если контейнер превысит `limits`, ядро Linux убьёт его с сигналом SIGKILL, что и фиксируется как OOMKilled.",{"question":3933,"answer":3934},"Можно ли полностью отключить лимиты памяти, чтобы избежать OOMKilled?","Технически можно не указывать `limits`, но это антипаттерн. Без лимитов один \"прожорливый\" pod может исчерпать память на узле, что приведёт к остановке других pod'ов и нестабильности кластера.",{"question":3936,"answer":3937},"Почему приложение в контейнере падает с OOMKilled, хотя на хосте много свободной RAM?","Возможные причины: 1) Слишком низкий `limit` в манифесте pod'а. 2) Узость cgroup v1/v2. 3) Учёт памяти ядром (kernel memory) или page cache. Проверьте `kubectl describe pod` на событие `OOMKilled` и метрики использования.",{"question":3939,"answer":3940},"Какой инструмент лучше всего использовать для анализа утечек памяти в pod'е?","Для Java-приложений — `jcmd`/`jmap`. Для Go — `pprof`. Универсальный вариант — запуск контейнера с утилитой `top`/`htop` или `cat /sys/fs/cgroup/memory/memory.usage_in_bytes` (cgroup v1) для мониторинга в реальном времени.",[3942,3945,3948,3951,3954,3957],{"name":3943,"text":3944},"Определите проблемный pod и проверьте его статус","Выполните `kubectl get pods` и найдите pod в статусе `CrashLoopBackOff` или `Error`. Затем посмотрите детали: `kubectl describe pod \u003Cимя-pod>`. В секции `Events` ищите строку `OOMKilled`.",{"name":3946,"text":3947},"Проанализируйте текущие лимиты памяти","В выводе `kubectl describe pod` найдите контейнер и его секцию `Limits`. Обратите внимание на значение `memory`. Также проверьте `requests`. Сравните фактические потребление (см. шаг 3).",{"name":3949,"text":3950},"Оцените фактическое потребление памяти","Используйте `kubectl top pod \u003Cимя-pod>` для получения текущих метрик. Для исторических данных настройте мониторинг (Prometheus + Grafana) или проверьте логи `kubectl logs \u003Cимя-pod> --previous` после перезапуска.",{"name":3952,"text":3953},"Корректируйте лимиты в манифесте","Откройте YAML-манифест pod/deployment/statefulset. Увеличьте значение `spec.containers[].resources.limits.memory` на 30-50% от текущего пикового потребления. Не забывайте увеличивать и `requests` для стабильности планирования.",{"name":3955,"text":3956},"Оптимизируйте приложение внутри контейнера","Если увеличение лимитов нежелательно, начните оптимизацию: уменьшите размер кэшей, настройте JVM-опции (`-Xmx`), используйте более легковесные базовые образы (alpine, distroless), проверьте на утечки памяти.",{"name":3958,"text":3959},"Настройте OOM Score Adjustment (опционально)","В манифесте добавьте `securityContext: { oomScoreAdj: -999 }` для критически важных pod'ов. Это повысит их \"шанс\" выжить при нехватке памяти на узле, но не решит проблему внутри контейнера.",[3961,3962,3963,3964,3965,3966,3967,3968],"oomkilled kubernetes","контейнер убит oomkilled","k8s oom killed ошибка","превышение лимита памяти pod","как исправить oomkilled","kubernetes memory limit exceeded","pod убит из-за памяти","oomkilled решение",{},[3971,3972,3973],"/errors/linux/k8s-pod-pending","/guides/linux/k8s-resource-quotas","/errors/linux/docker-oom",{"title":3302,"description":3926},"errors/linux/k8s-oomkilled","Статья подробно разбирает ошибку OOMKilled в Kubernetes, объясняет её причины (превышение лимитов памяти) и предлагает несколько практических способов решения: от корректировки ресурсов до оптимизации кода приложения.",[957,953,3978,3979,3980,955,1481,3981],"oom","память","ресурсы","cluster","lbR5_O4YMjLgeHCYKaEtXWG6ElXx8923D8BHpmm5hv8"]