[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/errors/linux/k8s-pod-crashloopbackoff":3,"mdc-om5auj-key":1399,"mdc-oxenyq-key":1408,"mdc--1o5nvt-key":1433,"mdc-rqipmu-key":1450,"mdc--j6ud3d-key":1458,"mdc-v61209-key":1481,"mdc-p1fuij-key":1502,"mdc--7zxa31-key":1525,"mdc--go3frt-key":1571,"related-/errors/linux/k8s-pod-pending,/guides/linux/k8s-debug-pod,/errors/linux/docker-container-exited":1608},{"id":4,"title":5,"appliesTo":6,"author":10,"body":11,"canonical":1330,"code":44,"createdAt":1331,"description":1332,"difficulty":1333,"draft":1334,"estimatedTime":1335,"extension":1336,"faq":1337,"howToSteps":1350,"howToTotalTime":1366,"image":1330,"keywords":1367,"locale":1377,"meta":1378,"navigation":1379,"path":1380,"platform":1381,"related":1382,"section":1386,"seo":1387,"severity":1388,"stem":1389,"summary":1390,"tags":1391,"twitterCreator":1330,"twitterSite":1330,"type":1397,"updatedAt":1331,"__hash__":1398},"content_ru/errors/linux/k8s-pod-crashloopbackoff.md","CrashLoopBackOff в Kubernetes: причины и способы исправления",[7,8,9],"Kubernetes 1.20+","Docker, containerd","kubelet","FixPedia Team",{"type":12,"value":13,"toc":1320},"minimark",[14,19,27,35,45,52,56,116,120,123,327,331,334,537,541,544,752,756,759,962,966,969,1202,1206,1306,1316],[15,16,18],"h2",{"id":17},"что-означает-ошибка-crashloopbackoff","Что означает ошибка CrashLoopBackOff",[20,21,22,26],"p",{},[23,24,25],"strong",{},"CrashLoopBackOff"," — это состояние Kubernetes пода, когда контейнер внутри него постоянно завершается с ошибкой (exit code ≠ 0), а kubelet безуспешно пытается его перезапустить. После каждой неудачной попытки задержка перед следующим запуском экспоненциально увеличивается (10s, 20s, 40s и т.д.), что и отражено в названии состояния.",[20,28,29,30,34],{},"Ошибка появляется в выводе ",[31,32,33],"code",{},"kubectl get pods",":",[36,37,42],"pre",{"className":38,"code":40,"language":41},[39],"language-text","NAME                     READY   STATUS             RESTARTS   AGE\nmy-app-5d89d7c8b9-xyz   0/1     CrashLoopBackOff   5          2m\n","text",[31,43,40],{"__ignoreMap":44},"",[20,46,47,48,51],{},"Это не ошибка самого Kubernetes, а индикатор того, что ",[23,49,50],{},"контейнер не может запуститься устойчиво",". Проблема всегда в конфигурации пода или в самом приложении.",[15,53,55],{"id":54},"причины-возникновения","Причины возникновения",[57,58,59,66,72,86,92,98,104,110],"ol",{},[60,61,62,65],"li",{},[23,63,64],{},"Ошибка в приложении"," — приложение падает при старте (например, из-за неверных аргументов, отсутствия переменных окружения, ошибок в коде).",[60,67,68,71],{},[23,69,70],{},"Нехватка ресурсов"," — контейнеру не хватает памяти (OOMKilled) или CPU, что приводит к аварийному завершению.",[60,73,74,77,78,81,82,85],{},[23,75,76],{},"Неправильная команда запуска"," — в манифесте пода указаны некорректные ",[31,79,80],{},"command"," или ",[31,83,84],{},"args",", или отсутствует точка входа (ENTRYPOINT) в образе.",[60,87,88,91],{},[23,89,90],{},"Проблемы с образом"," — несуществующий тег образа, ошибка аутентификации в приватном реестре, повреждённый образ.",[60,93,94,97],{},[23,95,96],{},"Недоступные тома"," — том (PersistentVolumeClaim) не смounted, недоступен или имеет неправильные права.",[60,99,100,103],{},[23,101,102],{},"Недостаток прав"," — контейнеру не хватает прав (SecurityContext, ServiceAccount) для доступа к ресурсам (например, к порту \u003C1024).",[60,105,106,109],{},[23,107,108],{},"Конфликт портов"," — приложение пытается слушать порт, который уже занят другим процессом в контейнере или хосте.",[60,111,112,115],{},[23,113,114],{},"Проблемы с инициализацией"," — init-контейнеры завершились с ошибкой, не предоставив необходимые ресурсы.",[15,117,119],{"id":118},"способ-1-диагностика-через-логи-и-описание-пода","Способ 1: Диагностика через логи и описание пода",[20,121,122],{},"Первый и самый важный шаг — собрать информацию об ошибке.",[57,124,125,164,210,276],{},[60,126,127,34,130,153,156,157,159,160,163],{},[23,128,129],{},"Узнайте имя пода",[36,131,135],{"className":132,"code":133,"language":134,"meta":44,"style":44},"language-bash shiki shiki-themes github-light github-dark","kubectl get pods\n","bash",[31,136,137],{"__ignoreMap":44},[138,139,142,146,150],"span",{"class":140,"line":141},"line",1,[138,143,145],{"class":144},"sScJk","kubectl",[138,147,149],{"class":148},"sZZnC"," get",[138,151,152],{"class":148}," pods\n",[154,155],"br",{},"Найдите под с статусом ",[31,158,25],{},". Запишите его полное имя (например, ",[31,161,162],{},"my-app-5d89d7c8b9-xyz",").",[60,165,166,34,169,199,201,202,205,206,209],{},[23,167,168],{},"Просмотрите логи предыдущего экземпляра контейнера",[36,170,172],{"className":132,"code":171,"language":134,"meta":44,"style":44},"kubectl logs \u003Cpod-name> --previous\n",[31,173,174],{"__ignoreMap":44},[138,175,176,178,181,185,188,192,195],{"class":140,"line":141},[138,177,145],{"class":144},[138,179,180],{"class":148}," logs",[138,182,184],{"class":183},"szBVR"," \u003C",[138,186,187],{"class":148},"pod-nam",[138,189,191],{"class":190},"sVt8B","e",[138,193,194],{"class":183},">",[138,196,198],{"class":197},"sj4cs"," --previous\n",[154,200],{},"Ключ ",[31,203,204],{},"--previous"," показывает логи контейнера, который уже завершился. Если под многоконтейнерный, укажите имя контейнера: ",[31,207,208],{},"-c \u003Ccontainer-name>",".",[60,211,212,34,215,239,241,242,245,246],{},[23,213,214],{},"Изучите события (Events) пода",[36,216,218],{"className":132,"code":217,"language":134,"meta":44,"style":44},"kubectl describe pod \u003Cpod-name>\n",[31,219,220],{"__ignoreMap":44},[138,221,222,224,227,230,232,234,236],{"class":140,"line":141},[138,223,145],{"class":144},[138,225,226],{"class":148}," describe",[138,228,229],{"class":148}," pod",[138,231,184],{"class":183},[138,233,187],{"class":148},[138,235,191],{"class":190},[138,237,238],{"class":183},">\n",[154,240],{},"В выводе найдите раздел ",[31,243,244],{},"Events",". Частые ошибки:",[247,248,249,255,264,270],"ul",{},[60,250,251,254],{},[31,252,253],{},"OOMKilled"," — нехватка памяти.",[60,256,257,81,260,263],{},[31,258,259],{},"Failed",[31,261,262],{},"ErrImagePull"," — проблемы с образом.",[60,265,266,269],{},[31,267,268],{},"FailedMount"," — ошибка монтирования тома.",[60,271,272,275],{},[31,273,274],{},"Exited"," с кодом — ошибка приложения.",[60,277,278,281,282,285,286,315,317,318,320,321,323,324,163],{},[23,279,280],{},"Если приложение выводит логи в stdout/stderr",", они появятся в ",[31,283,284],{},"kubectl logs",". Если логи пишутся в файл внутри контейнера, подключитесь к упавшему контейнеру (если возможно):",[36,287,289],{"className":132,"code":288,"language":134,"meta":44,"style":44},"kubectl exec -it \u003Cpod-name> -- /bin/sh\n",[31,290,291],{"__ignoreMap":44},[138,292,293,295,298,301,303,305,307,309,312],{"class":140,"line":141},[138,294,145],{"class":144},[138,296,297],{"class":148}," exec",[138,299,300],{"class":197}," -it",[138,302,184],{"class":183},[138,304,187],{"class":148},[138,306,191],{"class":190},[138,308,194],{"class":183},[138,310,311],{"class":197}," --",[138,313,314],{"class":148}," /bin/sh\n",[154,316],{},"Но при ",[31,319,25],{}," контейнер может быть недоступен для exec. В этом случае используйте ",[31,322,204],{}," для логов или временно измените манифест, чтобы контейнер не завершался (например, запустите ",[31,325,326],{},"sleep infinity",[15,328,330],{"id":329},"способ-2-проверка-и-увеличение-ресурсов-памятьcpu","Способ 2: Проверка и увеличение ресурсов (память/CPU)",[20,332,333],{},"Частая причина — контейнеру не хватает памяти, и ядро завершает процесс (OOMKilled).",[57,335,336,358,490,504],{},[60,337,338,34,345,351,353,354,357],{},[23,339,340,341,344],{},"В ",[31,342,343],{},"kubectl describe pod \u003Cpod-name>"," найдите",[36,346,349],{"className":347,"code":348,"language":41},[39],"Limits:\n  memory:  256Mi\nRequests:\n  memory:  128Mi\n",[31,350,348],{"__ignoreMap":44},[154,352],{},"Если ",[31,355,356],{},"memory"," в Limits слишком мало (например, 128Mi) для Java-приложения или базы данных, увеличьте.",[60,359,360,363,364,469,471,472],{},[23,361,362],{},"Измените манифест пода"," (deployment/statefulset):",[36,365,369],{"className":366,"code":367,"language":368,"meta":44,"style":44},"language-yaml shiki shiki-themes github-light github-dark","spec:\n  containers:\n  - name: my-app\n    resources:\n      limits:\n        memory: \"512Mi\"\n        cpu: \"500m\"\n      requests:\n        memory: \"256Mi\"\n        cpu: \"250m\"\n","yaml",[31,370,371,380,388,403,411,419,430,441,449,459],{"__ignoreMap":44},[138,372,373,377],{"class":140,"line":141},[138,374,376],{"class":375},"s9eBZ","spec",[138,378,379],{"class":190},":\n",[138,381,383,386],{"class":140,"line":382},2,[138,384,385],{"class":375},"  containers",[138,387,379],{"class":190},[138,389,391,394,397,400],{"class":140,"line":390},3,[138,392,393],{"class":190},"  - ",[138,395,396],{"class":375},"name",[138,398,399],{"class":190},": ",[138,401,402],{"class":148},"my-app\n",[138,404,406,409],{"class":140,"line":405},4,[138,407,408],{"class":375},"    resources",[138,410,379],{"class":190},[138,412,414,417],{"class":140,"line":413},5,[138,415,416],{"class":375},"      limits",[138,418,379],{"class":190},[138,420,422,425,427],{"class":140,"line":421},6,[138,423,424],{"class":375},"        memory",[138,426,399],{"class":190},[138,428,429],{"class":148},"\"512Mi\"\n",[138,431,433,436,438],{"class":140,"line":432},7,[138,434,435],{"class":375},"        cpu",[138,437,399],{"class":190},[138,439,440],{"class":148},"\"500m\"\n",[138,442,444,447],{"class":140,"line":443},8,[138,445,446],{"class":375},"      requests",[138,448,379],{"class":190},[138,450,452,454,456],{"class":140,"line":451},9,[138,453,424],{"class":375},[138,455,399],{"class":190},[138,457,458],{"class":148},"\"256Mi\"\n",[138,460,462,464,466],{"class":140,"line":461},10,[138,463,435],{"class":375},[138,465,399],{"class":190},[138,467,468],{"class":148},"\"250m\"\n",[154,470],{},"Примените изменения:",[36,473,475],{"className":132,"code":474,"language":134,"meta":44,"style":44},"kubectl apply -f deployment.yaml\n",[31,476,477],{"__ignoreMap":44},[138,478,479,481,484,487],{"class":140,"line":141},[138,480,145],{"class":144},[138,482,483],{"class":148}," apply",[138,485,486],{"class":197}," -f",[138,488,489],{"class":148}," deployment.yaml\n",[60,491,492,495,496,499,500,503],{},[23,493,494],{},"Если проблема в CPU",", увеличьте ",[31,497,498],{},"limits.cpu"," и ",[31,501,502],{},"requests.cpu",". Но учтите, что CPU-лимиты могут вызывать throttling, но не OOMKilled.",[60,505,506,509,510],{},[23,507,508],{},"Для диагностики"," можно временно убрать лимиты (не для продакшена!), чтобы проверить, исчезнет ли ошибка:",[36,511,513],{"className":366,"code":512,"language":368,"meta":44,"style":44},"resources:\n  limits: {}\n  requests: {}\n",[31,514,515,522,530],{"__ignoreMap":44},[138,516,517,520],{"class":140,"line":141},[138,518,519],{"class":375},"resources",[138,521,379],{"class":190},[138,523,524,527],{"class":140,"line":382},[138,525,526],{"class":375},"  limits",[138,528,529],{"class":190},": {}\n",[138,531,532,535],{"class":140,"line":390},[138,533,534],{"class":375},"  requests",[138,536,529],{"class":190},[15,538,540],{"id":539},"способ-3-проверка-команды-запуска-и-аргументов","Способ 3: Проверка команды запуска и аргументов",[20,542,543],{},"Если приложение требует конкретных аргументов или переменных окружения, а они не переданы, оно может упасть.",[57,545,546,612,628,742],{},[60,547,548,34,551,609,611],{},[23,549,550],{},"Проверьте, какая команда выполняется в контейнере",[36,552,554],{"className":132,"code":553,"language":134,"meta":44,"style":44},"kubectl describe pod \u003Cpod-name> | grep -A5 \"Command:\"\nkubectl describe pod \u003Cpod-name> | grep -A5 \"Args:\"\n",[31,555,556,584],{"__ignoreMap":44},[138,557,558,560,562,564,566,568,570,572,575,578,581],{"class":140,"line":141},[138,559,145],{"class":144},[138,561,226],{"class":148},[138,563,229],{"class":148},[138,565,184],{"class":183},[138,567,187],{"class":148},[138,569,191],{"class":190},[138,571,194],{"class":183},[138,573,574],{"class":183}," |",[138,576,577],{"class":144}," grep",[138,579,580],{"class":197}," -A5",[138,582,583],{"class":148}," \"Command:\"\n",[138,585,586,588,590,592,594,596,598,600,602,604,606],{"class":140,"line":382},[138,587,145],{"class":144},[138,589,226],{"class":148},[138,591,229],{"class":148},[138,593,184],{"class":183},[138,595,187],{"class":148},[138,597,191],{"class":190},[138,599,194],{"class":183},[138,601,574],{"class":183},[138,603,577],{"class":144},[138,605,580],{"class":197},[138,607,608],{"class":148}," \"Args:\"\n",[154,610],{},"Если команда или аргументы неверны, контейнер завершится сразу.",[60,613,614,34,617,619,620,623,624,627],{},[23,615,616],{},"Пример проблемы",[154,618],{},"\nВ Dockerfile указано ",[31,621,622],{},"ENTRYPOINT [\"java\", \"-jar\", \"app.jar\"]",", а в манифесте пода переопределён ",[31,625,626],{},"command: [\"python\"]"," — это вызовет ошибку.",[60,629,630,34,633,739,741],{},[23,631,632],{},"Исправьте манифест",[36,634,636],{"className":366,"code":635,"language":368,"meta":44,"style":44},"spec:\n  containers:\n  - name: my-app\n    image: my-image:latest\n    command: [\"java\"]          # опционально, если хотите переопределить ENTRYPOINT\n    args: [\"-jar\", \"app.jar\"] # опционально, если хотите переопределить CMD\n    env:\n    - name: DB_HOST\n      value: \"postgres\"\n",[31,637,638,644,650,660,670,688,710,717,729],{"__ignoreMap":44},[138,639,640,642],{"class":140,"line":141},[138,641,376],{"class":375},[138,643,379],{"class":190},[138,645,646,648],{"class":140,"line":382},[138,647,385],{"class":375},[138,649,379],{"class":190},[138,651,652,654,656,658],{"class":140,"line":390},[138,653,393],{"class":190},[138,655,396],{"class":375},[138,657,399],{"class":190},[138,659,402],{"class":148},[138,661,662,665,667],{"class":140,"line":405},[138,663,664],{"class":375},"    image",[138,666,399],{"class":190},[138,668,669],{"class":148},"my-image:latest\n",[138,671,672,675,678,681,684],{"class":140,"line":413},[138,673,674],{"class":375},"    command",[138,676,677],{"class":190},": [",[138,679,680],{"class":148},"\"java\"",[138,682,683],{"class":190},"]          ",[138,685,687],{"class":686},"sJ8bj","# опционально, если хотите переопределить ENTRYPOINT\n",[138,689,690,693,695,698,701,704,707],{"class":140,"line":421},[138,691,692],{"class":375},"    args",[138,694,677],{"class":190},[138,696,697],{"class":148},"\"-jar\"",[138,699,700],{"class":190},", ",[138,702,703],{"class":148},"\"app.jar\"",[138,705,706],{"class":190},"] ",[138,708,709],{"class":686},"# опционально, если хотите переопределить CMD\n",[138,711,712,715],{"class":140,"line":432},[138,713,714],{"class":375},"    env",[138,716,379],{"class":190},[138,718,719,722,724,726],{"class":140,"line":443},[138,720,721],{"class":190},"    - ",[138,723,396],{"class":375},[138,725,399],{"class":190},[138,727,728],{"class":148},"DB_HOST\n",[138,730,731,734,736],{"class":140,"line":451},[138,732,733],{"class":375},"      value",[138,735,399],{"class":190},[138,737,738],{"class":148},"\"postgres\"\n",[154,740],{},"Убедитесь, что команда существует в образе (проверьте Dockerfile).",[60,743,744,747,748,751],{},[23,745,746],{},"Если приложение зависит от переменных окружения",", добавьте все необходимые в секции ",[31,749,750],{},"env",". Проверьте, что нет опечаток.",[15,753,755],{"id":754},"способ-4-проверка-образа-и-его-доступности","Способ 4: Проверка образа и его доступности",[20,757,758],{},"Проблемы с образом — одна из самых частых причин CrashLoopBackOff.",[57,760,761,805,826,949],{},[60,762,763,34,766,797,799,800,81,802,209],{},[23,764,765],{},"Проверьте, что образ существует и доступен",[36,767,769],{"className":132,"code":768,"language":134,"meta":44,"style":44},"kubectl describe pod \u003Cpod-name> | grep -i \"image\"\n",[31,770,771],{"__ignoreMap":44},[138,772,773,775,777,779,781,783,785,787,789,791,794],{"class":140,"line":141},[138,774,145],{"class":144},[138,776,226],{"class":148},[138,778,229],{"class":148},[138,780,184],{"class":183},[138,782,187],{"class":148},[138,784,191],{"class":190},[138,786,194],{"class":183},[138,788,574],{"class":183},[138,790,577],{"class":144},[138,792,793],{"class":197}," -i",[138,795,796],{"class":148}," \"image\"\n",[154,798],{},"Ищите события ",[31,801,262],{},[31,803,804],{},"ImagePullBackOff",[60,806,807,34,810],{},[23,808,809],{},"Убедитесь, что тег образа корректен",[247,811,812,819],{},[60,813,814,815,818],{},"Не используйте ",[31,816,817],{},"latest"," в продакшене (он может меняться).",[60,820,821,822,825],{},"Проверьте, что образ есть в реестре: ",[31,823,824],{},"docker pull \u003Cimage:tag>"," (если у вас есть доступ).",[60,827,828,831,832,34,835,849,851,852,917,919,920],{},[23,829,830],{},"Если образ в приватном реестре",", убедитесь, что создан ",[31,833,834],{},"imagePullSecret",[36,836,838],{"className":132,"code":837,"language":134,"meta":44,"style":44},"kubectl get secret\n",[31,839,840],{"__ignoreMap":44},[138,841,842,844,846],{"class":140,"line":141},[138,843,145],{"class":144},[138,845,149],{"class":148},[138,847,848],{"class":148}," secret\n",[154,850],{},"Если секрета нет, создайте:",[36,853,855],{"className":132,"code":854,"language":134,"meta":44,"style":44},"kubectl create secret docker-registry regcred \\\n  --docker-server=\u003Cregistry-server> \\\n  --docker-username=\u003Cusername> \\\n  --docker-password=\u003Cpassword>\n",[31,856,857,876,891,905],{"__ignoreMap":44},[138,858,859,861,864,867,870,873],{"class":140,"line":141},[138,860,145],{"class":144},[138,862,863],{"class":148}," create",[138,865,866],{"class":148}," secret",[138,868,869],{"class":148}," docker-registry",[138,871,872],{"class":148}," regcred",[138,874,875],{"class":197}," \\\n",[138,877,878,881,884,887,889],{"class":140,"line":382},[138,879,880],{"class":197},"  --docker-server=",[138,882,883],{"class":183},"\u003C",[138,885,886],{"class":197},"registry-server",[138,888,194],{"class":183},[138,890,875],{"class":197},[138,892,893,896,898,901,903],{"class":140,"line":390},[138,894,895],{"class":197},"  --docker-username=",[138,897,883],{"class":183},[138,899,900],{"class":197},"username",[138,902,194],{"class":183},[138,904,875],{"class":197},[138,906,907,910,912,915],{"class":140,"line":405},[138,908,909],{"class":197},"  --docker-password=",[138,911,883],{"class":183},[138,913,914],{"class":197},"password",[138,916,238],{"class":183},[154,918],{},"И добавьте в под/деплоймент:",[36,921,923],{"className":366,"code":922,"language":368,"meta":44,"style":44},"spec:\n  imagePullSecrets:\n  - name: regcred\n",[31,924,925,931,938],{"__ignoreMap":44},[138,926,927,929],{"class":140,"line":141},[138,928,376],{"class":375},[138,930,379],{"class":190},[138,932,933,936],{"class":140,"line":382},[138,934,935],{"class":375},"  imagePullSecrets",[138,937,379],{"class":190},[138,939,940,942,944,946],{"class":140,"line":390},[138,941,393],{"class":190},[138,943,396],{"class":375},[138,945,399],{"class":190},[138,947,948],{"class":148},"regcred\n",[60,950,951,954,955,958,959,209],{},[23,952,953],{},"Проверьте, что образ совместим с архитектурой нод",". Например, образ для ",[31,956,957],{},"amd64"," не запустится на ноде ",[31,960,961],{},"arm64",[15,963,965],{"id":964},"способ-5-проверка-томов-и-securitycontext","Способ 5: Проверка томов и SecurityContext",[20,967,968],{},"Если контейнеру не удаётся смонтировать том или получить доступ к ресурсу из-за прав, он упадёт.",[57,970,971,1017,1039,1101],{},[60,972,973,34,976,1007,1009,1010,81,1013,1016],{},[23,974,975],{},"Проверьте события FailedMount",[36,977,979],{"className":132,"code":978,"language":134,"meta":44,"style":44},"kubectl describe pod \u003Cpod-name> | grep -A10 \"Events\"\n",[31,980,981],{"__ignoreMap":44},[138,982,983,985,987,989,991,993,995,997,999,1001,1004],{"class":140,"line":141},[138,984,145],{"class":144},[138,986,226],{"class":148},[138,988,229],{"class":148},[138,990,184],{"class":183},[138,992,187],{"class":148},[138,994,191],{"class":190},[138,996,194],{"class":183},[138,998,574],{"class":183},[138,1000,577],{"class":144},[138,1002,1003],{"class":197}," -A10",[138,1005,1006],{"class":148}," \"Events\"\n",[154,1008],{},"Ошибки типа ",[31,1011,1012],{},"MountVolume.SetUp",[31,1014,1015],{},"failed to mount volumes"," указывают на проблемы с PVC или конфигурацией тома.",[60,1018,1019,34,1025],{},[23,1020,1021,1022],{},"Убедитесь, что PVC существует и в статусе ",[31,1023,1024],{},"Bound",[36,1026,1028],{"className":132,"code":1027,"language":134,"meta":44,"style":44},"kubectl get pvc\n",[31,1029,1030],{"__ignoreMap":44},[138,1031,1032,1034,1036],{"class":140,"line":141},[138,1033,145],{"class":144},[138,1035,149],{"class":148},[138,1037,1038],{"class":148}," pvc\n",[60,1040,1041,34,1044],{},[23,1042,1043],{},"Проверьте SecurityContext",[247,1045,1046,1056,1094],{},[60,1047,1048,1049,1052,1053,209],{},"Если контейнер запускается от ",[31,1050,1051],{},"root"," (UID 0), но приложение требует не-привилегированного пользователя, настройте ",[31,1054,1055],{},"runAsUser",[60,1057,1058,1059,379,1062],{},"Если нужно слушать порт \u003C1024, требуется ",[31,1060,1061],{},"CAP_NET_BIND_SERVICE",[36,1063,1065],{"className":366,"code":1064,"language":368,"meta":44,"style":44},"securityContext:\n  capabilities:\n    add: [\"NET_BIND_SERVICE\"]\n",[31,1066,1067,1074,1081],{"__ignoreMap":44},[138,1068,1069,1072],{"class":140,"line":141},[138,1070,1071],{"class":375},"securityContext",[138,1073,379],{"class":190},[138,1075,1076,1079],{"class":140,"line":382},[138,1077,1078],{"class":375},"  capabilities",[138,1080,379],{"class":190},[138,1082,1083,1086,1088,1091],{"class":140,"line":390},[138,1084,1085],{"class":375},"    add",[138,1087,677],{"class":190},[138,1089,1090],{"class":148},"\"NET_BIND_SERVICE\"",[138,1092,1093],{"class":190},"]\n",[60,1095,1096,1097,1100],{},"Проверьте, что ",[31,1098,1099],{},"fsGroup"," установлен правильно для доступа к томам.",[60,1102,1103,34,1106,1195,1197,1198,1201],{},[23,1104,1105],{},"Пример исправления для тома",[36,1107,1109],{"className":366,"code":1108,"language":368,"meta":44,"style":44},"spec:\n  containers:\n  - name: my-app\n    volumeMounts:\n    - name: data\n      mountPath: /data\n  volumes:\n  - name: data\n    persistentVolumeClaim:\n      claimName: my-pvc\n",[31,1110,1111,1117,1123,1133,1140,1151,1161,1168,1178,1185],{"__ignoreMap":44},[138,1112,1113,1115],{"class":140,"line":141},[138,1114,376],{"class":375},[138,1116,379],{"class":190},[138,1118,1119,1121],{"class":140,"line":382},[138,1120,385],{"class":375},[138,1122,379],{"class":190},[138,1124,1125,1127,1129,1131],{"class":140,"line":390},[138,1126,393],{"class":190},[138,1128,396],{"class":375},[138,1130,399],{"class":190},[138,1132,402],{"class":148},[138,1134,1135,1138],{"class":140,"line":405},[138,1136,1137],{"class":375},"    volumeMounts",[138,1139,379],{"class":190},[138,1141,1142,1144,1146,1148],{"class":140,"line":413},[138,1143,721],{"class":190},[138,1145,396],{"class":375},[138,1147,399],{"class":190},[138,1149,1150],{"class":148},"data\n",[138,1152,1153,1156,1158],{"class":140,"line":421},[138,1154,1155],{"class":375},"      mountPath",[138,1157,399],{"class":190},[138,1159,1160],{"class":148},"/data\n",[138,1162,1163,1166],{"class":140,"line":432},[138,1164,1165],{"class":375},"  volumes",[138,1167,379],{"class":190},[138,1169,1170,1172,1174,1176],{"class":140,"line":443},[138,1171,393],{"class":190},[138,1173,396],{"class":375},[138,1175,399],{"class":190},[138,1177,1150],{"class":148},[138,1179,1180,1183],{"class":140,"line":451},[138,1181,1182],{"class":375},"    persistentVolumeClaim",[138,1184,379],{"class":190},[138,1186,1187,1190,1192],{"class":140,"line":461},[138,1188,1189],{"class":375},"      claimName",[138,1191,399],{"class":190},[138,1193,1194],{"class":148},"my-pvc\n",[154,1196],{},"Убедитесь, что ",[31,1199,1200],{},"my-pvc"," существует и имеет достаточный размер.",[15,1203,1205],{"id":1204},"профилактика","Профилактика",[57,1207,1208,1255,1261,1271,1277,1283,1292],{},[60,1209,1210,1213,1214,1252,1254],{},[23,1211,1212],{},"Тестируйте образ локально"," перед деплоем:",[36,1215,1217],{"className":132,"code":1216,"language":134,"meta":44,"style":44},"docker run --rm -it \u003Cimage:tag> \u003Ccommand>\n",[31,1218,1219],{"__ignoreMap":44},[138,1220,1221,1224,1227,1230,1232,1234,1237,1240,1242,1244,1247,1250],{"class":140,"line":141},[138,1222,1223],{"class":144},"docker",[138,1225,1226],{"class":148}," run",[138,1228,1229],{"class":197}," --rm",[138,1231,300],{"class":197},[138,1233,184],{"class":183},[138,1235,1236],{"class":148},"image:ta",[138,1238,1239],{"class":190},"g",[138,1241,194],{"class":183},[138,1243,184],{"class":183},[138,1245,1246],{"class":148},"comman",[138,1248,1249],{"class":190},"d",[138,1251,238],{"class":183},[154,1253],{},"Убедитесь, что контейнер запускается и не падает.",[60,1256,1257,1260],{},[23,1258,1259],{},"Указывайте явные команды и аргументы"," в манифесте, даже если они совпадают с Dockerfile. Это исключит неявные зависимости.",[60,1262,1263,1266,1267,1270],{},[23,1264,1265],{},"Настройвайте разумные лимиты ресурсов"," на основе мониторинга (например, через ",[31,1268,1269],{},"kubectl top pod","). Начинайте с запасом 20-30%.",[60,1272,1273,1276],{},[23,1274,1275],{},"Используйте readiness/liveness probes"," — они не предотвратят CrashLoopBackOff, но помогут отличить проблемы запуска от проблем работоспособности.",[60,1278,1279,1282],{},[23,1280,1281],{},"Включайте логирование в stdout/stderr"," и собирайте их через DaemonSet (Fluentd, Filebeat) — это упростит диагностику.",[60,1284,1285,1291],{},[23,1286,1287,1288],{},"Проверяйте манифесты через ",[31,1289,1290],{},"kubectl apply --dry-run=client"," перед применением.",[60,1293,1294,1297,1298,1301,1302,1305],{},[23,1295,1296],{},"Для критичных приложений"," рассмотрите использование ",[31,1299,1300],{},"restartPolicy: OnFailure"," (для Job) или настройку ",[31,1303,1304],{},"backoffLimit"," в Job, чтобы ограничить число перезапусков.",[1307,1308,1309],"blockquote",{},[20,1310,1311,1312,1315],{},"💡 ",[23,1313,1314],{},"Совет",": Если приложение падает только в Kubernetes, но работает локально, сравнивайте окружение: переменные, тома, сеть, архитектуру ноды. Часто проблема в различиях между Docker run и Kubernetes pod.",[1317,1318,1319],"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":44,"searchDepth":382,"depth":382,"links":1321},[1322,1323,1324,1325,1326,1327,1328,1329],{"id":17,"depth":382,"text":18},{"id":54,"depth":382,"text":55},{"id":118,"depth":382,"text":119},{"id":329,"depth":382,"text":330},{"id":539,"depth":382,"text":540},{"id":754,"depth":382,"text":755},{"id":964,"depth":382,"text":965},{"id":1204,"depth":382,"text":1205},null,"2026-02-17 16:30:14","Подробное руководство по устранению ошибки CrashLoopBackOff в Kubernetes. Диагностика, проверка логов и ресурсов, настройка пода. Решение за 10-15 минут!","medium",false,"10-15 мин","md",[1338,1341,1344,1347],{"question":1339,"answer":1340},"Что означает CrashLoopBackOff в Kubernetes?","CrashLoopBackOff — состояние пода, когда контейнер внутри него аварийно завершается, а kubelet повторяет попытки запуска с экспоненциальной задержкой. Показатель серьёзной проблемы в контейнере.",{"question":1342,"answer":1343},"Как посмотреть логи пода в CrashLoopBackOff?","Используйте `kubectl logs \u003Cpod-name> --previous` для логов предыдущего экземпляра контейнера или `kubectl logs \u003Cpod-name> -c \u003Ccontainer-name> --previous` для многоконтейнерных подов.",{"question":1345,"answer":1346},"Можно ли отключить автоматические перезапуски при CrashLoopBackOff?","Да, установите `restartPolicy: Never` в spec пода, но это лишь скроет симптом. Лучше исправить первопричину падения контейнера, иначе приложение не будет работать.",{"question":1348,"answer":1349},"Частые причины CrashLoopBackOff в Kubernetes?","Основные причины: ошибки в приложении, нехватка памяти/CPU, неправильная команда запуска (CMD/ENTRYPOINT), отсутствие файлов/томов, проблемы с правами (SecurityContext), недоступность образа.",[1351,1354,1357,1360,1363],{"name":1352,"text":1353},"Получите имя пода и проверьте его статус","Выполните `kubectl get pods` и найдите под в состоянии `CrashLoopBackOff`. Запомните его полное имя.",{"name":1355,"text":1356},"Просмотрите логи контейнера","Используйте `kubectl logs \u003Cpod-name> --previous`, чтобы увидеть логи упавшего экземпляра. Для многоконтейнерных подов укажите `-c \u003Ccontainer-name>`.",{"name":1358,"text":1359},"Проанализируйте описание пода","Запустите `kubectl describe pod \u003Cpod-name>` и изучите раздел `Events` на наличие ошибок (OOMKilled, ImagePullBackOff, FailedMount).",{"name":1361,"text":1362},"Проверьте ресурсы и команды запуска","В `kubectl describe pod` найдите `Limits` и `Requests`. Убедитесь, что памяти/CPU достаточно. Проверьте `Command` и `Args` в манифесте пода.",{"name":1364,"text":1365},"Увеличьте ресурсы или исправьте конфигурацию","Если причина в нехватке памяти, увеличьте `limits.memory`. Если ошибка в команде запуска — исправьте `command` или `args` в манифесте и примените `kubectl apply -f \u003Cfile>`.","PT15M",[1368,1369,1370,1371,1372,1373,1374,1375,1376],"CrashLoopBackOff Kubernetes","ошибка CrashLoopBackOff","под в CrashLoopBackOff","Kubernetes под перезапускается","как исправить CrashLoopBackOff","CrashLoopBackOff причины","Kubernetes CrashLoopBackOff решение","контейнер постоянно завершается","kubectl logs CrashLoopBackOff","ru_RU",{},true,"/errors/linux/k8s-pod-crashloopbackoff","linux",[1383,1384,1385],"/errors/linux/k8s-pod-pending","/guides/linux/k8s-debug-pod","/errors/linux/docker-container-exited","Ошибки Kubernetes",{"title":5,"description":1332},"high","errors/linux/k8s-pod-crashloopbackoff","Статья объясняет, что означает состояние CrashLoopBackOff в Kubernetes, и предоставляет пошаговые инструкции по диагностике и исправлению проблемы с постоянными перезапусками пода.",[1392,25,1393,1394,1395,1381,1396],"Kubernetes","k8s","контейнер","ошибка","pod","error","oGRdCdy_uJEdNla5mtSspRW7zDtE6j148o1zjVtqsAw",{"data":1400,"body":1401},{},{"type":1051,"children":1402},[1403],{"type":1404,"tag":20,"props":1405,"children":1406},"element",{},[1407],{"type":41,"value":1340},{"data":1409,"body":1410},{},{"type":1051,"children":1411},[1412],{"type":1404,"tag":20,"props":1413,"children":1414},{},[1415,1417,1423,1425,1431],{"type":41,"value":1416},"Используйте ",{"type":1404,"tag":31,"props":1418,"children":1420},{"className":1419},[],[1421],{"type":41,"value":1422},"kubectl logs \u003Cpod-name> --previous",{"type":41,"value":1424}," для логов предыдущего экземпляра контейнера или ",{"type":1404,"tag":31,"props":1426,"children":1428},{"className":1427},[],[1429],{"type":41,"value":1430},"kubectl logs \u003Cpod-name> -c \u003Ccontainer-name> --previous",{"type":41,"value":1432}," для многоконтейнерных подов.",{"data":1434,"body":1435},{},{"type":1051,"children":1436},[1437],{"type":1404,"tag":20,"props":1438,"children":1439},{},[1440,1442,1448],{"type":41,"value":1441},"Да, установите ",{"type":1404,"tag":31,"props":1443,"children":1445},{"className":1444},[],[1446],{"type":41,"value":1447},"restartPolicy: Never",{"type":41,"value":1449}," в spec пода, но это лишь скроет симптом. Лучше исправить первопричину падения контейнера, иначе приложение не будет работать.",{"data":1451,"body":1452},{},{"type":1051,"children":1453},[1454],{"type":1404,"tag":20,"props":1455,"children":1456},{},[1457],{"type":41,"value":1349},{"data":1459,"body":1460},{},{"type":1051,"children":1461},[1462],{"type":1404,"tag":20,"props":1463,"children":1464},{},[1465,1467,1472,1474,1479],{"type":41,"value":1466},"Выполните ",{"type":1404,"tag":31,"props":1468,"children":1470},{"className":1469},[],[1471],{"type":41,"value":33},{"type":41,"value":1473}," и найдите под в состоянии ",{"type":1404,"tag":31,"props":1475,"children":1477},{"className":1476},[],[1478],{"type":41,"value":25},{"type":41,"value":1480},". Запомните его полное имя.",{"data":1482,"body":1483},{},{"type":1051,"children":1484},[1485],{"type":1404,"tag":20,"props":1486,"children":1487},{},[1488,1489,1494,1496,1501],{"type":41,"value":1416},{"type":1404,"tag":31,"props":1490,"children":1492},{"className":1491},[],[1493],{"type":41,"value":1422},{"type":41,"value":1495},", чтобы увидеть логи упавшего экземпляра. Для многоконтейнерных подов укажите ",{"type":1404,"tag":31,"props":1497,"children":1499},{"className":1498},[],[1500],{"type":41,"value":208},{"type":41,"value":209},{"data":1503,"body":1504},{},{"type":1051,"children":1505},[1506],{"type":1404,"tag":20,"props":1507,"children":1508},{},[1509,1511,1516,1518,1523],{"type":41,"value":1510},"Запустите ",{"type":1404,"tag":31,"props":1512,"children":1514},{"className":1513},[],[1515],{"type":41,"value":343},{"type":41,"value":1517}," и изучите раздел ",{"type":1404,"tag":31,"props":1519,"children":1521},{"className":1520},[],[1522],{"type":41,"value":244},{"type":41,"value":1524}," на наличие ошибок (OOMKilled, ImagePullBackOff, FailedMount).",{"data":1526,"body":1527},{},{"type":1051,"children":1528},[1529],{"type":1404,"tag":20,"props":1530,"children":1531},{},[1532,1533,1539,1541,1547,1548,1554,1556,1562,1563,1569],{"type":41,"value":340},{"type":1404,"tag":31,"props":1534,"children":1536},{"className":1535},[],[1537],{"type":41,"value":1538},"kubectl describe pod",{"type":41,"value":1540}," найдите ",{"type":1404,"tag":31,"props":1542,"children":1544},{"className":1543},[],[1545],{"type":41,"value":1546},"Limits",{"type":41,"value":499},{"type":1404,"tag":31,"props":1549,"children":1551},{"className":1550},[],[1552],{"type":41,"value":1553},"Requests",{"type":41,"value":1555},". Убедитесь, что памяти/CPU достаточно. Проверьте ",{"type":1404,"tag":31,"props":1557,"children":1559},{"className":1558},[],[1560],{"type":41,"value":1561},"Command",{"type":41,"value":499},{"type":1404,"tag":31,"props":1564,"children":1566},{"className":1565},[],[1567],{"type":41,"value":1568},"Args",{"type":41,"value":1570}," в манифесте пода.",{"data":1572,"body":1573},{},{"type":1051,"children":1574},[1575],{"type":1404,"tag":20,"props":1576,"children":1577},{},[1578,1580,1586,1588,1593,1594,1599,1601,1607],{"type":41,"value":1579},"Если причина в нехватке памяти, увеличьте ",{"type":1404,"tag":31,"props":1581,"children":1583},{"className":1582},[],[1584],{"type":41,"value":1585},"limits.memory",{"type":41,"value":1587},". Если ошибка в команде запуска — исправьте ",{"type":1404,"tag":31,"props":1589,"children":1591},{"className":1590},[],[1592],{"type":41,"value":80},{"type":41,"value":81},{"type":1404,"tag":31,"props":1595,"children":1597},{"className":1596},[],[1598],{"type":41,"value":84},{"type":41,"value":1600}," в манифесте и примените ",{"type":1404,"tag":31,"props":1602,"children":1604},{"className":1603},[],[1605],{"type":41,"value":1606},"kubectl apply -f \u003Cfile>",{"type":41,"value":209},[1609],{"id":1610,"title":1611,"appliesTo":1612,"author":10,"body":1616,"canonical":1330,"code":1627,"createdAt":2523,"description":2524,"difficulty":1333,"draft":1334,"estimatedTime":2525,"extension":1336,"faq":2526,"howToSteps":2538,"howToTotalTime":1366,"image":1330,"keywords":2551,"locale":1377,"meta":2562,"navigation":1379,"path":1383,"platform":2563,"related":2564,"section":1386,"seo":2567,"severity":1388,"stem":2568,"summary":2569,"tags":2570,"twitterCreator":1330,"twitterSite":1330,"type":1397,"updatedAt":2523,"__hash__":2575},"content_ru/errors/linux/k8s-pod-pending.md","K8s Pod Pending: причины и быстрые решения",[7,1613,1614,1615],"Minikube 1.25+","k3s 1.20+","OpenShift 4.6+",{"type":12,"value":1617,"toc":2511},[1618,1622,1633,1636,1687,1690,1692,1695,1797,1801,1809,1815,1931,1934,1938,1945,2050,2054,2057,2268,2271,2287,2291,2294,2454,2456,2459,2505,2508],[15,1619,1621],{"id":1620},"что-означает-состояние-pending-у-pod-в-kubernetes","Что означает состояние Pending у Pod в Kubernetes?",[20,1623,1624,1625,1628,1629,1632],{},"Состояние ",[23,1626,1627],{},"Pending"," — это начальный этап жизненного цикла Pod в Kubernetes. Когда вы создаёте Pod (например, через ",[31,1630,1631],{},"kubectl apply -f pod.yaml","), система принимает его, но планировщик (scheduler) ещё не нашёл подходящую ноду для запуска контейнеров. Pod остаётся в этом состоянии, пока не будут выполнены все условия для размещения.",[20,1634,1635],{},"Обычно это выглядит так:",[36,1637,1639],{"className":132,"code":1638,"language":134,"meta":44,"style":44},"$ kubectl get pods\nNAME                     READY   STATUS    RESTARTS   AGE\nmyapp-5d89d7c8b9-abcde   0/1     Pending   0          2m\n",[31,1640,1641,1653,1670],{"__ignoreMap":44},[138,1642,1643,1646,1649,1651],{"class":140,"line":141},[138,1644,1645],{"class":144},"$",[138,1647,1648],{"class":148}," kubectl",[138,1650,149],{"class":148},[138,1652,152],{"class":148},[138,1654,1655,1658,1661,1664,1667],{"class":140,"line":382},[138,1656,1657],{"class":144},"NAME",[138,1659,1660],{"class":148},"                     READY",[138,1662,1663],{"class":148},"   STATUS",[138,1665,1666],{"class":148},"    RESTARTS",[138,1668,1669],{"class":148},"   AGE\n",[138,1671,1672,1675,1678,1681,1684],{"class":140,"line":390},[138,1673,1674],{"class":144},"myapp-5d89d7c8b9-abcde",[138,1676,1677],{"class":148},"   0/1",[138,1679,1680],{"class":148},"     Pending",[138,1682,1683],{"class":197},"   0",[138,1685,1686],{"class":148},"          2m\n",[20,1688,1689],{},"Если Pod завис в Pending надолго (несколько минут и более), это указывает на проблему, которая мешает планировщику выбрать ноду. Давайте разберём основные причины и решения.",[15,1691,55],{"id":54},[20,1693,1694],{},"Вот наиболее частые причины, по которым Pod не покидает состояние Pending:",[57,1696,1697,1709,1721,1739,1758,1770,1782],{},[60,1698,1699,1702,1704,1705,1708],{},[23,1700,1701],{},"Недостаток ресурсов на нодах",[154,1703],{},"\nPod запрашивает через ",[31,1706,1707],{},"resources.requests"," больше CPU или памяти, чем доступно на любых нодах в кластере. Например, если все ноды имеют 2 ГБ свободной памяти, а Pod запрашивает 4 ГБ, он не будет запланирован.",[60,1710,1711,1714,1716,1717,1720],{},[23,1712,1713],{},"Несоответствие taints и tolerations",[154,1715],{},"\nНоды могут иметь taints (например, ",[31,1718,1719],{},"dedicated=production:NoSchedule","), которые repel Pod без соответствующих tolerations в манифесте. Если Pod не имеет tolerations для таких taints, планировщик его не разместит.",[60,1722,1723,1726,1728,1729,499,1732,1735,1736,1738],{},[23,1724,1725],{},"Проблемы с PersistentVolumeClaim (PVC)",[154,1727],{},"\nЕсли Pod требует тома через ",[31,1730,1731],{},"volumeMounts",[31,1733,1734],{},"persistentVolumeClaim.claimName",", а соответствующий PVC находится в состоянии ",[31,1737,1627],{}," (например, нет доступного PV или класс хранения недоступен), то Pod тоже останется в Pending.",[60,1740,1741,1744,1746,1747,700,1750,1753,1754,1757],{},[23,1742,1743],{},"Node selector, affinity, или anti-affinity",[154,1745],{},"\nУсловия в ",[31,1748,1749],{},"spec.nodeSelector",[31,1751,1752],{},"spec.affinity"," могут быть слишком строгими. Например, если вы указали ",[31,1755,1756],{},"nodeSelector: {disktype: ssd}",", но ни одна нода не имеет такой метки, Pod не будет запланирован.",[60,1759,1760,1763,1765,1766,1769],{},[23,1761,1762],{},"Исчерпание ResourceQuota",[154,1764],{},"\nВ namespace может быть установлен ",[31,1767,1768],{},"ResourceQuota",", который ограничивает общее количество Pod, CPU или памяти. Если квота превышена, новые Pod останутся в Pending.",[60,1771,1772,1775,1777,1778,1781],{},[23,1773,1774],{},"Ограничение на количество Pod на ноде",[154,1776],{},"\nПараметр ",[31,1779,1780],{},"maxPods"," в конфигурации kubelet (обычно 110 по умолчанию) может быть достигнут на нодах, и планировщик не сможет добавить ещё Pod.",[60,1783,1784,1787,1789,1790,1793,1794,209],{},[23,1785,1786],{},"Отсутствие подходящих нод",[154,1788],{},"\nВсе ноды могут быть заблокированы для обслуживания (например, через ",[31,1791,1792],{},"kubectl cordon",") или находятся в состоянии ",[31,1795,1796],{},"NotReady",[15,1798,1800],{"id":1799},"способы-решения","Способы решения",[1802,1803,1805,1806],"h3",{"id":1804},"способ-1-анализ-событий-pod-с-помощью-kubectl-describe","Способ 1: Анализ событий Pod с помощью ",[31,1807,1808],{},"kubectl describe",[20,1810,1811,1812,1814],{},"Это первый и самый важный шаг. Команда ",[31,1813,1538],{}," показывает события (Events), где scheduler объясняет, почему не может разместить Pod.",[57,1816,1817,1844,1886],{},[60,1818,1819,1820],{},"Найдите имя Pod и namespace:",[36,1821,1823],{"className":132,"code":1822,"language":134,"meta":44,"style":44},"kubectl get pods --all-namespaces | grep Pending\n",[31,1824,1825],{"__ignoreMap":44},[138,1826,1827,1829,1831,1834,1837,1839,1841],{"class":140,"line":141},[138,1828,145],{"class":144},[138,1830,149],{"class":148},[138,1832,1833],{"class":148}," pods",[138,1835,1836],{"class":197}," --all-namespaces",[138,1838,574],{"class":183},[138,1840,577],{"class":144},[138,1842,1843],{"class":148}," Pending\n",[60,1845,1846,1847,499,1850,34,1853],{},"Описайте Pod, заменив ",[31,1848,1849],{},"\u003Cpod-name>",[31,1851,1852],{},"\u003Cnamespace>",[36,1854,1856],{"className":132,"code":1855,"language":134,"meta":44,"style":44},"kubectl describe pod \u003Cpod-name> -n \u003Cnamespace>\n",[31,1857,1858],{"__ignoreMap":44},[138,1859,1860,1862,1864,1866,1868,1870,1872,1874,1877,1879,1882,1884],{"class":140,"line":141},[138,1861,145],{"class":144},[138,1863,226],{"class":148},[138,1865,229],{"class":148},[138,1867,184],{"class":183},[138,1869,187],{"class":148},[138,1871,191],{"class":190},[138,1873,194],{"class":183},[138,1875,1876],{"class":197}," -n",[138,1878,184],{"class":183},[138,1880,1881],{"class":148},"namespac",[138,1883,191],{"class":190},[138,1885,238],{"class":183},[60,1887,241,1888,1890,1891,1897,1899,1900,1903,1904,1906,1907,1924],{},[23,1889,244],{},". Пример сообщения:",[36,1892,1895],{"className":1893,"code":1894,"language":41},[39],"Events:\n  Type    Reason            Age   From               Message\n  ----    ------            ----  ----               -------\n  Normal  Scheduled         5m    default-scheduler  Successfully assigned default/myapp-5d89d7c8b9-abcde to node-1\n  Warning FailedScheduling  4m    default-scheduler  0/3 nodes are available: 3 Insufficient cpu.\n",[31,1896,1894],{"__ignoreMap":44},[154,1898],{},"Здесь ",[31,1901,1902],{},"Insufficient cpu"," указывает на нехватку CPU.",[154,1905],{},"Другие возможные сообщения:",[247,1908,1909,1914,1919],{},[60,1910,1911],{},[31,1912,1913],{},"0/3 nodes are available: 3 node(s) had taint {key:value}, that the pod didn't tolerate.",[60,1915,1916],{},[31,1917,1918],{},"0/3 nodes are available: 2 node(s) had volume node affinity conflict.",[60,1920,1921],{},[31,1922,1923],{},"persistentvolumeclaim \"my-pvc\" not found",[1307,1925,1926],{},[20,1927,1311,1928,1930],{},[23,1929,1314],{},": Если событий нет, возможно, Pod ещё не обработан scheduler. Подождите 1-2 минуты и повторите.",[1932,1933],"in-article-ad",{},[1802,1935,1937],{"id":1936},"способ-2-проверка-доступности-ресурсов-на-нодах","Способ 2: Проверка доступности ресурсов на нодах",[20,1939,1940,1941,1944],{},"После того как вы узнали причину из событий (например, ",[31,1942,1943],{},"Insufficient memory","), проверьте, сколько ресурсов действительно доступно.",[57,1946,1947,1981,2015],{},[60,1948,1949,1950,1965,1967,1968,1974,1976,1977,1980],{},"Посмотрите общее использование ресурсов нодами:",[36,1951,1953],{"className":132,"code":1952,"language":134,"meta":44,"style":44},"kubectl top nodes\n",[31,1954,1955],{"__ignoreMap":44},[138,1956,1957,1959,1962],{"class":140,"line":141},[138,1958,145],{"class":144},[138,1960,1961],{"class":148}," top",[138,1963,1964],{"class":148}," nodes\n",[154,1966],{},"Вывод:",[36,1969,1972],{"className":1970,"code":1971,"language":41},[39],"NAME     CPU(cores)   MEMORY(bytes)\nnode-1   150m         1900Mi\nnode-2   200m         2100Mi\n",[31,1973,1971],{"__ignoreMap":44},[154,1975],{},"Обратите внимание на ",[31,1978,1979],{},"MEMORY(bytes)"," — если близко к лимиту ноды, это может быть причиной.",[60,1982,1983,1984,1987,1988,2005,2007,2008,2011,2012,209],{},"Подробно опишите конкретную ноду (например, ",[31,1985,1986],{},"node-1","):",[36,1989,1991],{"className":132,"code":1990,"language":134,"meta":44,"style":44},"kubectl describe node node-1\n",[31,1992,1993],{"__ignoreMap":44},[138,1994,1995,1997,1999,2002],{"class":140,"line":141},[138,1996,145],{"class":144},[138,1998,226],{"class":148},[138,2000,2001],{"class":148}," node",[138,2003,2004],{"class":148}," node-1\n",[154,2006],{},"В разделе ",[31,2009,2010],{},"Allocated resources"," вы увидите, сколько ресурсов уже выделено Pod'ам. Сравните с ",[31,2013,2014],{},"Capacity",[60,2016,2017,2018],{},"Если ресурсы исчерпаны, у вас есть варианты:",[247,2019,2020,2030],{},[60,2021,2022,2025,2026,2029],{},[23,2023,2024],{},"Увеличить ресурсы кластера",": добавить новую ноду (например, через ",[31,2027,2028],{},"kubectl scale --replicas=2 deployment/\u003Cdeployment-name>"," если используется Deployment с автоматическим масштабированием, или вручную в облачном провайдере).",[60,2031,2032,2035,2036,499,2039,2042,2043,2046,2047,209],{},[23,2033,2034],{},"Уменьшить запросы ресурсов в Pod",": отредактируйте манифест Pod, снизьте значения ",[31,2037,2038],{},"resources.requests.cpu",[31,2040,2041],{},"resources.requests.memory",". Например, с ",[31,2044,2045],{},"2Gi"," до ",[31,2048,2049],{},"1Gi",[1802,2051,2053],{"id":2052},"способ-3-проверка-и-корректировка-манифеста-pod","Способ 3: Проверка и корректировка манифеста Pod",[20,2055,2056],{},"Часто проблема кроется в самом манифесте Pod или Deployment. Проверьте следующие разделы:",[57,2058,2059,2139,2188,2256],{},[60,2060,2061,2067,2069,2070],{},[23,2062,2063,2064,2066],{},"Запросы ресурсов (",[31,2065,1707],{},")",[154,2068],{},"\nУбедитесь, что запросы не превышают типичные ресурсы нод. Например, если у вас ноды по 2 ГБ RAM, не запрашивайте 1.5 ГБ на контейнер, если планируете запускать несколько контейнеров.",[36,2071,2073],{"className":366,"code":2072,"language":368,"meta":44,"style":44},"spec:\n  containers:\n  - name: myapp\n    image: myapp:latest\n    resources:\n      requests:\n        memory: \"256Mi\"   # ↓ уменьшите, если нужно\n        cpu: \"250m\"\n",[31,2074,2075,2081,2087,2098,2107,2113,2119,2131],{"__ignoreMap":44},[138,2076,2077,2079],{"class":140,"line":141},[138,2078,376],{"class":375},[138,2080,379],{"class":190},[138,2082,2083,2085],{"class":140,"line":382},[138,2084,385],{"class":375},[138,2086,379],{"class":190},[138,2088,2089,2091,2093,2095],{"class":140,"line":390},[138,2090,393],{"class":190},[138,2092,396],{"class":375},[138,2094,399],{"class":190},[138,2096,2097],{"class":148},"myapp\n",[138,2099,2100,2102,2104],{"class":140,"line":405},[138,2101,664],{"class":375},[138,2103,399],{"class":190},[138,2105,2106],{"class":148},"myapp:latest\n",[138,2108,2109,2111],{"class":140,"line":413},[138,2110,408],{"class":375},[138,2112,379],{"class":190},[138,2114,2115,2117],{"class":140,"line":421},[138,2116,446],{"class":375},[138,2118,379],{"class":190},[138,2120,2121,2123,2125,2128],{"class":140,"line":432},[138,2122,424],{"class":375},[138,2124,399],{"class":190},[138,2126,2127],{"class":148},"\"256Mi\"",[138,2129,2130],{"class":686},"   # ↓ уменьшите, если нужно\n",[138,2132,2133,2135,2137],{"class":140,"line":443},[138,2134,435],{"class":375},[138,2136,399],{"class":190},[138,2138,468],{"class":148},[60,2140,2141,2144,2146,2147,2178,2180,2181,2184,2185,209],{},[23,2142,2143],{},"Node selector и affinity",[154,2145],{},"\nПроверьте, не задаёте ли вы слишком специфичные селекторы:",[36,2148,2150],{"className":366,"code":2149,"language":368,"meta":44,"style":44},"spec:\n  nodeSelector:\n    disktype: ssd   # Убедитесь, что ноды имеют такую метку: kubectl get nodes --show-labels\n",[31,2151,2152,2158,2165],{"__ignoreMap":44},[138,2153,2154,2156],{"class":140,"line":141},[138,2155,376],{"class":375},[138,2157,379],{"class":190},[138,2159,2160,2163],{"class":140,"line":382},[138,2161,2162],{"class":375},"  nodeSelector",[138,2164,379],{"class":190},[138,2166,2167,2170,2172,2175],{"class":140,"line":390},[138,2168,2169],{"class":375},"    disktype",[138,2171,399],{"class":190},[138,2173,2174],{"class":148},"ssd",[138,2176,2177],{"class":686},"   # Убедитесь, что ноды имеют такую метку: kubectl get nodes --show-labels\n",[154,2179],{},"Если метки нет, Pod не будет запланирован. Либо удалите ",[31,2182,2183],{},"nodeSelector",", либо добавьте метку на ноду: ",[31,2186,2187],{},"kubectl label node \u003Cnode-name> disktype=ssd",[60,2189,2190,2193,2195,2196],{},[23,2191,2192],{},"Tolerations",[154,2194],{},"\nЕсли ноды имеют taints (например, для выделенных рабочих нагрузок), Pod должен иметь соответствующие tolerations:",[36,2197,2199],{"className":366,"code":2198,"language":368,"meta":44,"style":44},"spec:\n  tolerations:\n  - key: \"dedicated\"\n    operator: \"Equal\"\n    value: \"production\"\n    effect: \"NoSchedule\"\n",[31,2200,2201,2207,2214,2226,2236,2246],{"__ignoreMap":44},[138,2202,2203,2205],{"class":140,"line":141},[138,2204,376],{"class":375},[138,2206,379],{"class":190},[138,2208,2209,2212],{"class":140,"line":382},[138,2210,2211],{"class":375},"  tolerations",[138,2213,379],{"class":190},[138,2215,2216,2218,2221,2223],{"class":140,"line":390},[138,2217,393],{"class":190},[138,2219,2220],{"class":375},"key",[138,2222,399],{"class":190},[138,2224,2225],{"class":148},"\"dedicated\"\n",[138,2227,2228,2231,2233],{"class":140,"line":405},[138,2229,2230],{"class":375},"    operator",[138,2232,399],{"class":190},[138,2234,2235],{"class":148},"\"Equal\"\n",[138,2237,2238,2241,2243],{"class":140,"line":413},[138,2239,2240],{"class":375},"    value",[138,2242,399],{"class":190},[138,2244,2245],{"class":148},"\"production\"\n",[138,2247,2248,2251,2253],{"class":140,"line":421},[138,2249,2250],{"class":375},"    effect",[138,2252,399],{"class":190},[138,2254,2255],{"class":148},"\"NoSchedule\"\n",[60,2257,2258,2261,2263,2264,2267],{},[23,2259,2260],{},"Affinity/anti-affinity",[154,2262],{},"\nСложные правила affinity могут не находить подходящих нод. Временно упростите или удалите ",[31,2265,2266],{},"affinity"," раздел, чтобы проверить.",[20,2269,2270],{},"После изменений примените манифест:",[36,2272,2274],{"className":132,"code":2273,"language":134,"meta":44,"style":44},"kubectl apply -f pod.yaml\n",[31,2275,2276],{"__ignoreMap":44},[138,2277,2278,2280,2282,2284],{"class":140,"line":141},[138,2279,145],{"class":144},[138,2281,483],{"class":148},[138,2283,486],{"class":197},[138,2285,2286],{"class":148}," pod.yaml\n",[1802,2288,2290],{"id":2289},"способ-4-проверка-persistentvolumeclaim-pvc-и-resourcequota","Способ 4: Проверка PersistentVolumeClaim (PVC) и ResourceQuota",[20,2292,2293],{},"Если Pod использует хранилище, убедитесь, что PVC готово.",[57,2295,2296,2384],{},[60,2297,2298,2299,2323,2325,2326,2328,2329,2361,2363,2364,2378,2380,2381,2383],{},"Проверьте статус PVC:",[36,2300,2302],{"className":132,"code":2301,"language":134,"meta":44,"style":44},"kubectl get pvc -n \u003Cnamespace>\n",[31,2303,2304],{"__ignoreMap":44},[138,2305,2306,2308,2310,2313,2315,2317,2319,2321],{"class":140,"line":141},[138,2307,145],{"class":144},[138,2309,149],{"class":148},[138,2311,2312],{"class":148}," pvc",[138,2314,1876],{"class":197},[138,2316,184],{"class":183},[138,2318,1881],{"class":148},[138,2320,191],{"class":190},[138,2322,238],{"class":183},[154,2324],{},"Если PVC в состоянии ",[31,2327,1627],{},", проблема с томом. Описайте его:",[36,2330,2332],{"className":132,"code":2331,"language":134,"meta":44,"style":44},"kubectl describe pvc \u003Cpvc-name> -n \u003Cnamespace>\n",[31,2333,2334],{"__ignoreMap":44},[138,2335,2336,2338,2340,2342,2344,2347,2349,2351,2353,2355,2357,2359],{"class":140,"line":141},[138,2337,145],{"class":144},[138,2339,226],{"class":148},[138,2341,2312],{"class":148},[138,2343,184],{"class":183},[138,2345,2346],{"class":148},"pvc-nam",[138,2348,191],{"class":190},[138,2350,194],{"class":183},[138,2352,1876],{"class":197},[138,2354,184],{"class":183},[138,2356,1881],{"class":148},[138,2358,191],{"class":190},[138,2360,238],{"class":183},[154,2362],{},"Возможные причины:",[247,2365,2366,2372,2375],{},[60,2367,2368,2369,163],{},"Нет доступного PersistentVolume (PV) с подходящим классом хранения (",[31,2370,2371],{},"storageClassName",[60,2373,2374],{},"PV существует, но уже привязан к другому PVC.",[60,2376,2377],{},"Класс хранения не поддерживается в кластере.",[154,2379],{},"Решение: создать соответствующий PV, изменить ",[31,2382,2371],{}," в PVC или использовать динамическое provisioning.",[60,2385,2386,2387,2438,2440,2441,499,2444,2447,2448,2450,2451,2453],{},"Проверьте ResourceQuota в namespace:",[36,2388,2390],{"className":132,"code":2389,"language":134,"meta":44,"style":44},"kubectl get resourcequota -n \u003Cnamespace>\nkubectl describe resourcequota \u003Cquota-name> -n \u003Cnamespace>\n",[31,2391,2392,2411],{"__ignoreMap":44},[138,2393,2394,2396,2398,2401,2403,2405,2407,2409],{"class":140,"line":141},[138,2395,145],{"class":144},[138,2397,149],{"class":148},[138,2399,2400],{"class":148}," resourcequota",[138,2402,1876],{"class":197},[138,2404,184],{"class":183},[138,2406,1881],{"class":148},[138,2408,191],{"class":190},[138,2410,238],{"class":183},[138,2412,2413,2415,2417,2419,2421,2424,2426,2428,2430,2432,2434,2436],{"class":140,"line":382},[138,2414,145],{"class":144},[138,2416,226],{"class":148},[138,2418,2400],{"class":148},[138,2420,184],{"class":183},[138,2422,2423],{"class":148},"quota-nam",[138,2425,191],{"class":190},[138,2427,194],{"class":183},[138,2429,1876],{"class":197},[138,2431,184],{"class":183},[138,2433,1881],{"class":148},[138,2435,191],{"class":190},[138,2437,238],{"class":183},[154,2439],{},"В выводе ищите ",[31,2442,2443],{},"hard",[31,2445,2446],{},"used"," limits. Если ",[31,2449,2446],{}," близко к ",[31,2452,2443],{},", новые Pod не будут создаваться. Увеличьте квоту или удалите лишние ресурсы.",[15,2455,1205],{"id":1204},[20,2457,2458],{},"Чтобы избежать состояния Pending в будущем:",[247,2460,2461,2471,2477,2487,2493,2499],{},[60,2462,2463,2466,2467,2470],{},[23,2464,2465],{},"Настраивайте запросы ресурсов реалистично",": тестируйте приложение и устанавливайте ",[31,2468,2469],{},"requests"," на основе фактического использования, а не с запасом 100%.",[60,2472,2473,2476],{},[23,2474,2475],{},"Используйте автоматическое масштабирование кластера",": если вы в облаке, настройте Cluster Autoscaler, который добавляет ноды при нехватке ресурсов.",[60,2478,2479,2482,2483,2486],{},[23,2480,2481],{},"Регулярно мониторьте использование ресурсов",": инструменты вроде ",[31,2484,2485],{},"kubectl top",", Prometheus + Grafana помогут увидеть тренды и предсказать нехватку.",[60,2488,2489,2492],{},[23,2490,2491],{},"Правильно настраивайте taints/tolerations и affinity",": документируйте, какие ноды для каких workloads предназначены, и проверяйте соответствие.",[60,2494,2495,2498],{},[23,2496,2497],{},"Управляйте квотами ресурсов",": устанавливайте ResourceQuota в namespace с запасом, но не слишком высоким, чтобы избежать \"штурма\" ресурсов.",[60,2500,2501,2504],{},[23,2502,2503],{},"Проверяйте статус хранилища",": убедитесь, что классы хранения (StorageClass) доступны и PV создаются корректно.",[20,2506,2507],{},"Следуя этим рекомендациям, вы значительно снизите вероятность зависания Pod в состоянии Pending и обеспечите стабильную работу ваших приложений в Kubernetes.",[1317,2509,2510],{},"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 .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 .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":44,"searchDepth":382,"depth":382,"links":2512},[2513,2514,2515,2522],{"id":1620,"depth":382,"text":1621},{"id":54,"depth":382,"text":55},{"id":1799,"depth":382,"text":1800,"children":2516},[2517,2519,2520,2521],{"id":1804,"depth":390,"text":2518},"Способ 1: Анализ событий Pod с помощью kubectl describe",{"id":1936,"depth":390,"text":1937},{"id":2052,"depth":390,"text":2053},{"id":2289,"depth":390,"text":2290},{"id":1204,"depth":382,"text":1205},"2026-02-16 18:45:46","Pod в Kubernetes остаётся в состоянии Pending? Узнайте, как диагностировать и исправить проблему за 5-10 минут. Пошаговые инструкции для Linux.","10-20 мин",[2527,2529,2532,2535],{"question":1621,"answer":2528},"Состояние Pending означает, что Pod был принят системой, но ещё не запланирован на выполнение на любой ноде. Это обычно связано с нехваткой ресурсов или ограничениями.",{"question":2530,"answer":2531},"Как быстро узнать, почему Pod не запускается?","Используйте команду `kubectl describe pod \u003Cимя-пода>` и посмотрите раздел 'Events'. Там будут указаны причины, по которым планировщик не может разместить Pod.",{"question":2533,"answer":2534},"Может ли нехватка памяти на нодах вызвать Pending?","Да, если Pod запрашивает больше памяти, чем доступно на нодах, или если квоты ресурсов исчерпаны, Pod останется в Pending.",{"question":2536,"answer":2537},"Как предотвратить Pending состояние для Pod?","Настройте запросы ресурсов (requests) в манифесте Pod в соответствии с доступными ресурсами, используйте автоматическое масштабирование нод и регулярно проверяйте квоты ресурсов.",[2539,2542,2545,2548],{"name":2540,"text":2541},"Проверьте статус Pod","Выполните `kubectl get pods` и найдите Pod в состоянии Pending. Запишите его имя и namespace.",{"name":2543,"text":2544},"Изучите события Pod","Используйте `kubectl describe pod \u003Cимя-пода> -n \u003Cnamespace>` и посмотрите на раздел 'Events' в выводе. Ищите сообщения от scheduler.",{"name":2546,"text":2547},"Проверьте ресурсы нод","Запустите `kubectl describe nodes` или `kubectl top nodes` чтобы увидеть доступные ресурсы (CPU, memory) на каждой ноде.",{"name":2549,"text":2550},"Анализируйте манифест Pod","Откройте YAML-манифест Pod и проверьте разделы `resources.requests`, `nodeSelector`, `tolerations`, `affinity`. Убедитесь, что запросы реалистичны.",[2552,2553,2554,2555,2556,2557,2558,2559,2560,2561],"k8s pod pending","kubernetes pod pending ошибка","pod pending состояние","как исправить pod pending","kubectl describe pod pending","k8s pod не планируется","pending pod reasons kubernetes","kubernetes pod pending ресурсы","minikube pod pending","k3s pod pending",{},"general",[1380,2565,2566],"/errors/linux/k8s-imagepullbackoff","/guides/linux/k8s-troubleshooting-pods",{"title":1611,"description":2524},"errors/linux/k8s-pod-pending","Эта статья объясняет, почему Pod не переходит из состояния Pending в Running, и предоставляет проверенные способы устранения.",[2571,1393,1396,2572,2573,1381,145,2574],"kubernetes","pending","ошибки","scheduler","jklyAMc51wr58eLVduZK19uIflFenuz7ziRNXNGF-BY"]