[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"page-ru-/errors/linux/k8s-image-pull-error":3,"mdc-q63a5q-key":579,"mdc--ta5m35-key":590,"mdc--boufgy-key":607,"mdc-sjs83f-key":624,"mdc-64bj8c-key":641,"mdc-4kry4l-key":649,"mdc--1477ry-key":666,"related-/guides/linux/k8s-private-registry,/errors/linux/k8s-crashloopbackoff,/guides/linux/k8s-node-diagnostics":683},{"id":4,"title":5,"appliesTo":6,"author":11,"body":12,"canonical":518,"code":27,"createdAt":519,"description":520,"difficulty":521,"draft":522,"estimatedTime":523,"extension":524,"faq":525,"howToSteps":535,"howToTotalTime":548,"image":518,"keywords":549,"locale":557,"meta":558,"navigation":399,"path":559,"platform":560,"related":561,"section":565,"seo":566,"severity":567,"stem":568,"summary":569,"tags":570,"twitterCreator":518,"twitterSite":518,"type":577,"updatedAt":519,"__hash__":578},"content_ru/errors/linux/k8s-image-pull-error.md","Исправляем ErrImagePull в Kubernetes: проверенные способы",[7,8,9,10],"Kubernetes v1.24+","Containerd 1.6+","Docker Container Runtime","Ubuntu 22.04 / RHEL 9 ноды","FixPedia Team",{"type":13,"value":14,"toc":507},"minimark",[15,20,37,47,51,88,92,97,100,121,131,135,138,167,180,183,187,190,259,262,344,351,355,358,442,445,449,503],[16,17,19],"h2",{"id":18},"что-означает-ошибка-errimagepull","Что означает ошибка ErrImagePull",[21,22,23,24,28,29,32,33,36],"p",{},"Ошибка ",[25,26,27],"code",{},"ErrImagePull"," (и её производная ",[25,30,31],{},"ImagePullBackOff",") появляется, когда kubelet на узле кластера не может скачать указанный контейнерный образ из реестра. В логах вы увидите сообщение вида: ",[25,34,35],{},"Failed to pull image \"registry.example.com/app:v1\": rpc error: code = Unknown desc = failed to pull and unpack image",".",[21,38,39,40,43,44,46],{},"Проблема блокирует запуск пода на этапе инициализации (",[25,41,42],{},"Pending"," → ",[25,45,31],{},"). Сервис остаётся недоступным, а оркестратор продолжает бесконечно ретраить операцию, постепенно увеличивая интервалы между попытками.",[16,48,50],{"id":49},"причины-возникновения","Причины возникновения",[52,53,54,62,72,75,78],"ul",{},[55,56,57,58,61],"li",{},"Опечатка в имени образа или указание несуществующего тега (реестр возвращает ",[25,59,60],{},"404 Not Found",").",[55,63,64,65,68,69,61],{},"Отсутствие авторизации для приватного реестра (",[25,66,67],{},"403 Forbidden"," или ",[25,70,71],{},"401 Unauthorized",[55,73,74],{},"Блокировка исходящих соединений файрволом, отсутствие маршрутизации или некорректная настройка HTTP/HTTPS-прокси на нодах.",[55,76,77],{},"Сбой локального DNS-резолвера, из-за которого домен реестра не преобразуется в IP-адрес.",[55,79,80,81,68,84,87],{},"Нехватка свободного места на разделе ",[25,82,83],{},"/var/lib/containerd",[25,85,86],{},"/var/lib/docker",". Кэширование обрывается, и загрузка отменяется.",[16,89,91],{"id":90},"способы-решения","Способы решения",[93,94,96],"h3",{"id":95},"способ-1-валидация-имени-и-тега-образа","Способ 1: Валидация имени и тега образа",[21,98,99],{},"Частая причина — человеческий фактор при редактировании манифеста. Убедитесь, что путь к репозиторию, имя образа и тег совпадают с реально опубликованной версией.",[101,102,103,109,115],"ol",{},[55,104,105,106],{},"Найдите проблемный под: ",[25,107,108],{},"kubectl get pods -n \u003Cnamespace> | grep ErrImagePull",[55,110,111,112],{},"Посмотрите текущую конфигурацию: ",[25,113,114],{},"kubectl get pod \u003Cpod-name> -n \u003Cnamespace> -o jsonpath='{.spec.containers[*].image}'",[55,116,117,118],{},"Исправьте деплоймент: ",[25,119,120],{},"kubectl set image deployment/\u003Cname> \u003Ccontainer-name>=registry.example.com/app:v1.2.3",[122,123,124],"blockquote",{},[21,125,126,127,130],{},"💡 Совет: Всегда используйте конкретные теги или SHA-дайджесты. Тег ",[25,128,129],{},"latest"," усложняет отладку и может привести к загрузке нестабильной сборки.",[93,132,134],{"id":133},"способ-2-диагностика-сетевых-ограничений","Способ 2: Диагностика сетевых ограничений",[21,136,137],{},"Если образ публичный, но не грузится, проблема почти наверняка в сети узла. Kubelet использует системный стек ноды, а не сеть пода.",[101,139,140,146,152,158],{},[55,141,142,143],{},"Подключитесь к ноде по SSH: ",[25,144,145],{},"ssh user@k8s-node-01",[55,147,148,149],{},"Проверьте резолв: ",[25,150,151],{},"nslookup registry.example.com",[55,153,154,155],{},"Попробуйте скачать образ напрямую: ",[25,156,157],{},"crictl pull registry.example.com/app:v1.2.3",[55,159,160,161,68,164],{},"Если команда падает, проверьте прокси: ",[25,162,163],{},"systemctl show docker | grep -i proxy",[25,165,166],{},"env | grep -i proxy",[21,168,169,170,173,174,68,177,36],{},"Для корпоративных сред добавьте домены реестра в ",[25,171,172],{},"noProxy"," конфигурации systemd для ",[25,175,176],{},"containerd.service",[25,178,179],{},"docker.service",[181,182],"in-article-ad",{},[93,184,186],{"id":185},"способ-3-настройка-imagepullsecrets-для-приватных-реестров","Способ 3: Настройка imagePullSecrets для приватных реестров",[21,188,189],{},"Без корректного секрета kubelet не сможет аутентифицироваться в Docker Hub, GitLab Registry или AWS ECR. Секрет должен создаваться в том же неймспейсе, где разворачивается приложение.",[191,192,197],"pre",{"className":193,"code":194,"language":195,"meta":196,"style":196},"language-bash shiki shiki-themes github-light github-dark","kubectl create secret docker-registry regcred \\\n  --docker-server=https://registry.example.com \\\n  --docker-username=deploy-bot \\\n  --docker-password=$CI_TOKEN \\\n  --namespace=production\n","bash","",[25,198,199,225,233,241,253],{"__ignoreMap":196},[200,201,204,208,212,215,218,221],"span",{"class":202,"line":203},"line",1,[200,205,207],{"class":206},"sScJk","kubectl",[200,209,211],{"class":210},"sZZnC"," create",[200,213,214],{"class":210}," secret",[200,216,217],{"class":210}," docker-registry",[200,219,220],{"class":210}," regcred",[200,222,224],{"class":223},"sj4cs"," \\\n",[200,226,228,231],{"class":202,"line":227},2,[200,229,230],{"class":223},"  --docker-server=https://registry.example.com",[200,232,224],{"class":223},[200,234,236,239],{"class":202,"line":235},3,[200,237,238],{"class":223},"  --docker-username=deploy-bot",[200,240,224],{"class":223},[200,242,244,247,251],{"class":202,"line":243},4,[200,245,246],{"class":223},"  --docker-password=",[200,248,250],{"class":249},"sVt8B","$CI_TOKEN",[200,252,224],{"class":223},[200,254,256],{"class":202,"line":255},5,[200,257,258],{"class":223},"  --namespace=production\n",[21,260,261],{},"Привяжите секрет к деплойменту:",[191,263,267],{"className":264,"code":265,"language":266,"meta":196,"style":196},"language-yaml shiki shiki-themes github-light github-dark","spec:\n  template:\n    spec:\n      containers:\n        - name: app\n          image: registry.example.com/app:v1.2.3\n      imagePullSecrets:\n        - name: regcred\n","yaml",[25,268,269,278,285,292,299,313,324,332],{"__ignoreMap":196},[200,270,271,275],{"class":202,"line":203},[200,272,274],{"class":273},"s9eBZ","spec",[200,276,277],{"class":249},":\n",[200,279,280,283],{"class":202,"line":227},[200,281,282],{"class":273},"  template",[200,284,277],{"class":249},[200,286,287,290],{"class":202,"line":235},[200,288,289],{"class":273},"    spec",[200,291,277],{"class":249},[200,293,294,297],{"class":202,"line":243},[200,295,296],{"class":273},"      containers",[200,298,277],{"class":249},[200,300,301,304,307,310],{"class":202,"line":255},[200,302,303],{"class":249},"        - ",[200,305,306],{"class":273},"name",[200,308,309],{"class":249},": ",[200,311,312],{"class":210},"app\n",[200,314,316,319,321],{"class":202,"line":315},6,[200,317,318],{"class":273},"          image",[200,320,309],{"class":249},[200,322,323],{"class":210},"registry.example.com/app:v1.2.3\n",[200,325,327,330],{"class":202,"line":326},7,[200,328,329],{"class":273},"      imagePullSecrets",[200,331,277],{"class":249},[200,333,335,337,339,341],{"class":202,"line":334},8,[200,336,303],{"class":249},[200,338,306],{"class":273},[200,340,309],{"class":249},[200,342,343],{"class":210},"regcred\n",[21,345,346,347,350],{},"Проверьте статус: ",[25,348,349],{},"kubectl get secret regcred -o yaml"," и убедитесь, что токен не истёк.",[93,352,354],{"id":353},"способ-4-очистка-повреждённого-кэша-рантайма","Способ 4: Очистка повреждённого кэша рантайма",[21,356,357],{},"Иногда частичная загрузка оставляет «битые» слои, которые блокируют повторные попытки. Рантайм не может распознать их и постоянно возвращает ошибку.",[191,359,361],{"className":193,"code":360,"language":195,"meta":196,"style":196},"# Останавливаем проблемный под, чтобы kubelet перестал его трогать\nkubectl scale deployment \u003Cname> --replicas=0\n\n# Очищаем локальный кэш на ноде\nsudo crictl rmi registry.example.com/app:v1.2.3\n\n# Перезапускаем runtime\nsudo systemctl restart containerd\n",[25,362,363,369,395,401,406,420,424,429],{"__ignoreMap":196},[200,364,365],{"class":202,"line":203},[200,366,368],{"class":367},"sJ8bj","# Останавливаем проблемный под, чтобы kubelet перестал его трогать\n",[200,370,371,373,376,379,383,386,389,392],{"class":202,"line":227},[200,372,207],{"class":206},[200,374,375],{"class":210}," scale",[200,377,378],{"class":210}," deployment",[200,380,382],{"class":381},"szBVR"," \u003C",[200,384,385],{"class":210},"nam",[200,387,388],{"class":249},"e",[200,390,391],{"class":381},">",[200,393,394],{"class":223}," --replicas=0\n",[200,396,397],{"class":202,"line":235},[200,398,400],{"emptyLinePlaceholder":399},true,"\n",[200,402,403],{"class":202,"line":243},[200,404,405],{"class":367},"# Очищаем локальный кэш на ноде\n",[200,407,408,411,414,417],{"class":202,"line":255},[200,409,410],{"class":206},"sudo",[200,412,413],{"class":210}," crictl",[200,415,416],{"class":210}," rmi",[200,418,419],{"class":210}," registry.example.com/app:v1.2.3\n",[200,421,422],{"class":202,"line":315},[200,423,400],{"emptyLinePlaceholder":399},[200,425,426],{"class":202,"line":326},[200,427,428],{"class":367},"# Перезапускаем runtime\n",[200,430,431,433,436,439],{"class":202,"line":334},[200,432,410],{"class":206},[200,434,435],{"class":210}," systemctl",[200,437,438],{"class":210}," restart",[200,440,441],{"class":210}," containerd\n",[21,443,444],{},"После запуска снова масштабируйте деплоймент до нужного количества реплик. Загрузка начнётся с чистого листа.",[16,446,448],{"id":447},"профилактика","Профилактика",[52,450,451,465,479,489],{},[55,452,453,457,458,68,461,464],{},[454,455,456],"strong",{},"Синхронизация времени",": Настройте ",[25,459,460],{},"chrony",[25,462,463],{},"systemd-timesyncd"," на всех нодах. Расхождение системных часов более чем на 5 минут ломает TLS-рукопожатия с реестрами.",[55,466,467,470,471,474,475,478],{},[454,468,469],{},"Мониторинг места на дисках",": Поднимите ",[25,472,473],{},"node-exporter"," и алерты на ",[25,476,477],{},"NodeDiskPressure",". Забитый диск — самая тихая причина отказа загрузки.",[55,480,481,484,485,488],{},[454,482,483],{},"Ротация токенов",": Для CI/CD используйте short-lived credentials и автоматизируйте обновление ",[25,486,487],{},"imagePullSecrets"," через External Secrets Operator или HashiCorp Vault.",[55,490,491,494,495,498,499,502],{},[454,492,493],{},"Локальные зеркала",": Для крупных кластеров настройте ",[25,496,497],{},"registry-mirror"," в конфигурации ",[25,500,501],{},"containerd",". Это снизит нагрузку на публичные реестры и уберет сетевые таймауты.",[504,505,506],"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 pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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 .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}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}",{"title":196,"searchDepth":227,"depth":227,"links":508},[509,510,511,517],{"id":18,"depth":227,"text":19},{"id":49,"depth":227,"text":50},{"id":90,"depth":227,"text":91,"children":512},[513,514,515,516],{"id":95,"depth":235,"text":96},{"id":133,"depth":235,"text":134},{"id":185,"depth":235,"text":186},{"id":353,"depth":235,"text":354},{"id":447,"depth":227,"text":448},null,"2026-04-05 22:34:48","Поды не загружают образы? Пошаговая инструкция по диагностике и устранению ErrImagePull в k8s. Проверьте реестр, секреты и сеть за 10 минут.","medium",false,"10-15 мин","md",[526,529,532],{"question":527,"answer":528},"Чем отличается ImagePullBackOff от ErrImagePull?","ErrImagePull фиксирует первичный сбой загрузки. ImagePullBackOff означает, что kubelet автоматически повторяет попытки с экспоненциальной задержкой, чтобы не перегружать реестр или сеть.",{"question":530,"answer":531},"Как вручную проверить доступ к реестру с ноды?","Подключитесь к ноде по SSH и выполните `crictl pull \u003Cимя_образа>`. Если команда завершается ошибкой, проблема лежит в сети, прокси или учетных данных, а не в конфигурации пода.",{"question":533,"answer":534},"Требуется ли перезапуск кластера после исправления?","Нет. Достаточно удалить проблемный под командой `kubectl delete pod` или обновить манифест. Контроллер автоматически создаст новую копию с корректными параметрами загрузки.",[536,539,542,545],{"name":537,"text":538},"Диагностика статуса пода","Выполните `kubectl describe pod \u003Cpod-name>` и изучите секцию Events. Найдите точную причину отказа: Access Denied, Not Found или Network Unreachable.",{"name":540,"text":541},"Проверка доступа к реестру","Убедитесь, что образ существует по указанному адресу. Проверьте имя и тег, а также доступность реестра из сети кластера без использования Kubernetes.",{"name":543,"text":544},"Настройка imagePullSecrets","Для приватных репозиториев создайте секрет `kubectl create secret docker-registry` и привяжите его к манифесту деплоймента или сервисному аккаунту.",{"name":546,"text":547},"Очистка кэша и перезапуск","Удалите повреждённые образы локально через `crictl rmi` и перезапустите containerd, чтобы сбросить состояние рантайма и инициировать чистую загрузку.","PT15M",[550,551,552,553,554,555,556],"kubernetes image pull error","ImagePullBackOff исправление","ErrImagePull kubectl","не грузится образ в k8s","настройка imagePullSecrets","ошибка загрузки docker образов","диагностика подов kubernetes","ru_RU",{},"/errors/linux/k8s-image-pull-error","general",[562,563,564],"/guides/linux/k8s-private-registry","/errors/linux/k8s-crashloopbackoff","/guides/linux/k8s-node-diagnostics","Ошибки Kubernetes",{"title":5,"description":520},"high","errors/linux/k8s-image-pull-error","Статья объясняет причины сбоя загрузки контейнерных образов в кластере Kubernetes и предлагает проверенные методы их устранения. Вы быстро восстановите работу сервисов без перезапуска нод.",[571,572,573,574,501,575,576],"kubernetes","k8s","ошибки оркестрации","docker","imagepullbackoff","devops","error","h4xMBZkPjf7n0nbN-1MD_7iEYnXWrXK9X_aSOhPDdhM",{"data":580,"body":581},{},{"type":582,"children":583},"root",[584],{"type":585,"tag":21,"props":586,"children":587},"element",{},[588],{"type":589,"value":528},"text",{"data":591,"body":592},{},{"type":582,"children":593},[594],{"type":585,"tag":21,"props":595,"children":596},{},[597,599,605],{"type":589,"value":598},"Подключитесь к ноде по SSH и выполните ",{"type":585,"tag":25,"props":600,"children":602},{"className":601},[],[603],{"type":589,"value":604},"crictl pull \u003Cимя_образа>",{"type":589,"value":606},". Если команда завершается ошибкой, проблема лежит в сети, прокси или учетных данных, а не в конфигурации пода.",{"data":608,"body":609},{},{"type":582,"children":610},[611],{"type":585,"tag":21,"props":612,"children":613},{},[614,616,622],{"type":589,"value":615},"Нет. Достаточно удалить проблемный под командой ",{"type":585,"tag":25,"props":617,"children":619},{"className":618},[],[620],{"type":589,"value":621},"kubectl delete pod",{"type":589,"value":623}," или обновить манифест. Контроллер автоматически создаст новую копию с корректными параметрами загрузки.",{"data":625,"body":626},{},{"type":582,"children":627},[628],{"type":585,"tag":21,"props":629,"children":630},{},[631,633,639],{"type":589,"value":632},"Выполните ",{"type":585,"tag":25,"props":634,"children":636},{"className":635},[],[637],{"type":589,"value":638},"kubectl describe pod \u003Cpod-name>",{"type":589,"value":640}," и изучите секцию Events. Найдите точную причину отказа: Access Denied, Not Found или Network Unreachable.",{"data":642,"body":643},{},{"type":582,"children":644},[645],{"type":585,"tag":21,"props":646,"children":647},{},[648],{"type":589,"value":541},{"data":650,"body":651},{},{"type":582,"children":652},[653],{"type":585,"tag":21,"props":654,"children":655},{},[656,658,664],{"type":589,"value":657},"Для приватных репозиториев создайте секрет ",{"type":585,"tag":25,"props":659,"children":661},{"className":660},[],[662],{"type":589,"value":663},"kubectl create secret docker-registry",{"type":589,"value":665}," и привяжите его к манифесту деплоймента или сервисному аккаунту.",{"data":667,"body":668},{},{"type":582,"children":669},[670],{"type":585,"tag":21,"props":671,"children":672},{},[673,675,681],{"type":589,"value":674},"Удалите повреждённые образы локально через ",{"type":585,"tag":25,"props":676,"children":678},{"className":677},[],[679],{"type":589,"value":680},"crictl rmi",{"type":589,"value":682}," и перезапустите containerd, чтобы сбросить состояние рантайма и инициировать чистую загрузку.",[684],{"id":685,"title":686,"appliesTo":687,"author":11,"body":692,"canonical":518,"code":1176,"createdAt":1177,"description":1178,"difficulty":521,"draft":522,"estimatedTime":523,"extension":524,"faq":1179,"howToSteps":1189,"howToTotalTime":548,"image":518,"keywords":1202,"locale":557,"meta":1211,"navigation":399,"path":563,"platform":560,"related":1212,"section":565,"seo":1216,"severity":567,"stem":1217,"summary":1218,"tags":1219,"twitterCreator":518,"twitterSite":518,"type":577,"updatedAt":1177,"__hash__":1226},"content_ru/errors/linux/k8s-crashloopbackoff.md","CrashLoopBackOff в Kubernetes: диагностика и решение",[688,689,690,691],"Kubernetes 1.24+","OpenShift 4.10+","Rancher 2.7+","Linux-ноды (Ubuntu 20.04/22.04)",{"type":13,"value":693,"toc":1166},[694,698,709,719,721,778,780,784,791,829,840,891,911,913,917,924,1061,1064,1068,1071,1097,1110,1119,1121,1124,1163],[16,695,697],{"id":696},"что-означает-ошибка-crashloopbackoff","Что означает ошибка CrashLoopBackOff",[21,699,700,701,704,705,708],{},"Статус ",[25,702,703],{},"CrashLoopBackOff"," в выводе ",[25,706,707],{},"kubectl get pods"," сигнализирует, что контейнер внутри пода завершает работу с ошибкой сразу после запуска, а kubelet пытается автоматически его перезапустить. После нескольких неудачных попыток Kubernetes включает механизм экспоненциальной задержки: пауза между рестартами увеличивается, чтобы избежать бесконечной нагрузки на ноду.",[21,710,711,712,715,716,36],{},"Ошибка появляется в кластере на базе Linux-нод, когда приложение, скрипт инициализации или runtime-среда не могут корректно стартовать. Сопутствующий текст в событиях пода обычно содержит фразу ",[25,713,714],{},"Back-off restarting failed container"," и указывает на конкретный ",[25,717,718],{},"exit code",[16,720,50],{"id":49},[101,722,723,729,742,748,764],{},[55,724,725,728],{},[454,726,727],{},"Критическая ошибка приложения"," — паника в коде, некорректные аргументы запуска или отсутствие обязательных файлов конфигурации в рабочем каталоге.",[55,730,731,734,735,738,739,36],{},[454,732,733],{},"Нехватка оперативной памяти (OOMKilled)"," — контейнер потребляет больше RAM, чем разрешено в ",[25,736,737],{},"limits",". Ядро Linux принудительно завершает процесс с кодом ",[25,740,741],{},"137",[55,743,744,747],{},[454,745,746],{},"Агрессивные Liveness/Readiness пробы"," — приложение не успевает загрузиться, а kubelet уже считает его «мёртвым» и убивает контейнер, запуская цикл заново.",[55,749,750,753,754,757,758,68,761,61],{},[454,751,752],{},"Ошибки монтирования томов или секретов"," — неверные пути, отсутствующие PersistentVolume или проблемы с правами доступа (например, ",[25,755,756],{},"Permission denied"," для ",[25,759,760],{},"/var/run",[25,762,763],{},"/app/config",[55,765,766,769,770,773,774,777],{},[454,767,768],{},"Несовместимый или повреждённый образ"," — архитектура образа не совпадает с архитектурой ноды (например, ",[25,771,772],{},"arm64"," на ",[25,775,776],{},"amd64",") или базовый слой повреждён при сборке.",[16,779,91],{"id":90},[93,781,783],{"id":782},"способ-1-анализ-логов-и-метаданных-пода","Способ 1: Анализ логов и метаданных пода",[21,785,786,787,790],{},"Начните с просмотра вывода приложения именно до момента его падения. Флаг ",[25,788,789],{},"--previous"," показывает логи предыдущей упавшей инстанции:",[191,792,794],{"className":193,"code":793,"language":195,"meta":196,"style":196},"kubectl logs \u003Cимя_пода> -n \u003Cпространство_имён> --previous\n",[25,795,796],{"__ignoreMap":196},[200,797,798,800,803,805,808,811,813,816,818,821,824,826],{"class":202,"line":203},[200,799,207],{"class":206},[200,801,802],{"class":210}," logs",[200,804,382],{"class":381},[200,806,807],{"class":210},"имя_под",[200,809,810],{"class":249},"а",[200,812,391],{"class":381},[200,814,815],{"class":223}," -n",[200,817,382],{"class":381},[200,819,820],{"class":210},"пространство_имё",[200,822,823],{"class":249},"н",[200,825,391],{"class":381},[200,827,828],{"class":223}," --previous\n",[21,830,831,832,835,836,839],{},"Если логи пусты или обрываются, запросите детальное описание пода. Ищите секцию ",[25,833,834],{},"State"," и ",[25,837,838],{},"Last State",":",[191,841,843],{"className":193,"code":842,"language":195,"meta":196,"style":196},"kubectl describe pod \u003Cимя_пода> -n \u003Cпространство_имён> | grep -A 10 -E \"State|Events|Reason\"\n",[25,844,845],{"__ignoreMap":196},[200,846,847,849,852,855,857,859,861,863,865,867,869,871,873,876,879,882,885,888],{"class":202,"line":203},[200,848,207],{"class":206},[200,850,851],{"class":210}," describe",[200,853,854],{"class":210}," pod",[200,856,382],{"class":381},[200,858,807],{"class":210},[200,860,810],{"class":249},[200,862,391],{"class":381},[200,864,815],{"class":223},[200,866,382],{"class":381},[200,868,820],{"class":210},[200,870,823],{"class":249},[200,872,391],{"class":381},[200,874,875],{"class":381}," |",[200,877,878],{"class":206}," grep",[200,880,881],{"class":223}," -A",[200,883,884],{"class":223}," 10",[200,886,887],{"class":223}," -E",[200,889,890],{"class":210}," \"State|Events|Reason\"\n",[122,892,893],{},[21,894,895,896,899,900,903,904,906,907,910],{},"💡 Совет: Обратите внимание на ",[25,897,898],{},"Exit Code",". Код ",[25,901,902],{},"1"," обычно указывает на программную ошибку, а ",[25,905,741],{}," — на ",[25,908,909],{},"SIGKILL"," от OOM-менеджера ядра.",[181,912],{},[93,914,916],{"id":915},"способ-2-корректировка-проб-и-лимитов-ресурсов","Способ 2: Корректировка проб и лимитов ресурсов",[21,918,919,920,923],{},"Если диагностика показала ",[25,921,922],{},"OOMKilled"," или ложные срабатывания проб, отредактируйте манифест Deployment. Увеличьте лимиты памяти и добавьте задержку перед первой проверкой:",[191,925,927],{"className":264,"code":926,"language":266,"meta":196,"style":196},"resources:\n  limits:\n    memory: \"512Mi\"\n    cpu: \"500m\"\n  requests:\n    memory: \"256Mi\"\n    cpu: \"250m\"\nlivenessProbe:\n  httpGet:\n    path: /healthz\n    port: 8080\n  initialDelaySeconds: 30  # Дайте приложению время на загрузку зависимостей\n  periodSeconds: 10\n  failureThreshold: 3\n",[25,928,929,936,943,953,963,970,979,988,995,1003,1014,1025,1039,1050],{"__ignoreMap":196},[200,930,931,934],{"class":202,"line":203},[200,932,933],{"class":273},"resources",[200,935,277],{"class":249},[200,937,938,941],{"class":202,"line":227},[200,939,940],{"class":273},"  limits",[200,942,277],{"class":249},[200,944,945,948,950],{"class":202,"line":235},[200,946,947],{"class":273},"    memory",[200,949,309],{"class":249},[200,951,952],{"class":210},"\"512Mi\"\n",[200,954,955,958,960],{"class":202,"line":243},[200,956,957],{"class":273},"    cpu",[200,959,309],{"class":249},[200,961,962],{"class":210},"\"500m\"\n",[200,964,965,968],{"class":202,"line":255},[200,966,967],{"class":273},"  requests",[200,969,277],{"class":249},[200,971,972,974,976],{"class":202,"line":315},[200,973,947],{"class":273},[200,975,309],{"class":249},[200,977,978],{"class":210},"\"256Mi\"\n",[200,980,981,983,985],{"class":202,"line":326},[200,982,957],{"class":273},[200,984,309],{"class":249},[200,986,987],{"class":210},"\"250m\"\n",[200,989,990,993],{"class":202,"line":334},[200,991,992],{"class":273},"livenessProbe",[200,994,277],{"class":249},[200,996,998,1001],{"class":202,"line":997},9,[200,999,1000],{"class":273},"  httpGet",[200,1002,277],{"class":249},[200,1004,1006,1009,1011],{"class":202,"line":1005},10,[200,1007,1008],{"class":273},"    path",[200,1010,309],{"class":249},[200,1012,1013],{"class":210},"/healthz\n",[200,1015,1017,1020,1022],{"class":202,"line":1016},11,[200,1018,1019],{"class":273},"    port",[200,1021,309],{"class":249},[200,1023,1024],{"class":223},"8080\n",[200,1026,1028,1031,1033,1036],{"class":202,"line":1027},12,[200,1029,1030],{"class":273},"  initialDelaySeconds",[200,1032,309],{"class":249},[200,1034,1035],{"class":223},"30",[200,1037,1038],{"class":367},"  # Дайте приложению время на загрузку зависимостей\n",[200,1040,1042,1045,1047],{"class":202,"line":1041},13,[200,1043,1044],{"class":273},"  periodSeconds",[200,1046,309],{"class":249},[200,1048,1049],{"class":223},"10\n",[200,1051,1053,1056,1058],{"class":202,"line":1052},14,[200,1054,1055],{"class":273},"  failureThreshold",[200,1057,309],{"class":249},[200,1059,1060],{"class":223},"3\n",[21,1062,1063],{},"После сохранения изменений примените манифест. Kubernetes автоматически выполнит rolling update и создаст новые поды с обновлённой конфигурацией.",[93,1065,1067],{"id":1066},"способ-3-проверка-конфигурации-и-переменных-окружения","Способ 3: Проверка конфигурации и переменных окружения",[21,1069,1070],{},"Частая причина краша — отсутствие обязательных переменных окружения или битых ConfigMap. Убедитесь, что все ссылки валидны:",[191,1072,1074],{"className":193,"code":1073,"language":195,"meta":196,"style":196},"kubectl get configmap,secret -n \u003Cпространство_имён>\n",[25,1075,1076],{"__ignoreMap":196},[200,1077,1078,1080,1083,1086,1088,1090,1092,1094],{"class":202,"line":203},[200,1079,207],{"class":206},[200,1081,1082],{"class":210}," get",[200,1084,1085],{"class":210}," configmap,secret",[200,1087,815],{"class":223},[200,1089,382],{"class":381},[200,1091,820],{"class":210},[200,1093,823],{"class":249},[200,1095,1096],{"class":381},">\n",[21,1098,1099,1100,1103,1104,68,1107,36],{},"Если приложение зависит от внешней БД или кэша, проверьте доступность этих сервисов изнутри кластера. Для временной отладки можно запустить облегчённый образ ",[25,1101,1102],{},"busybox"," в том же поде, чтобы протестировать сетевую связность и доступность портов через ",[25,1105,1106],{},"nc",[25,1108,1109],{},"curl",[122,1111,1112],{},[21,1113,1114,1115,1118],{},"⚠️ Важно: Не храните чувствительные данные прямо в манифестах. Используйте ",[25,1116,1117],{},"Secret"," и монтируйте их как файлы или переменные окружения с корректными правами доступа.",[16,1120,448],{"id":447},[21,1122,1123],{},"Чтобы избежать повторения цикла перезагрузок, внедряйте следующие практики на этапе разработки и деплоя:",[52,1125,1126,1135,1145,1151,1156],{},[55,1127,1128,1129,835,1132,1134],{},"Всегда указывайте ",[25,1130,1131],{},"resources.requests",[25,1133,737],{}," на основе реальных метрик нагрузки.",[55,1136,1137,1138,835,1141,1144],{},"Используйте ",[25,1139,1140],{},"initialDelaySeconds",[25,1142,1143],{},"timeoutSeconds"," в пробах, отталкиваясь от времени холодного старта приложения.",[55,1146,1147,1148,36],{},"Тестируйте Docker-образы локально перед отправкой в реестр: ",[25,1149,1150],{},"docker run --rm -p 8080:8080 \u003Cваш_образ>",[55,1152,1153,1154,36],{},"Настройте мониторинг событий кластера (например, через Prometheus Alertmanager) для мгновенного оповещения при появлении ",[25,1155,703],{},[55,1157,1158,1159,1162],{},"Регулярно используйте ",[25,1160,1161],{},"kubectl rollout undo deployment/\u003Cимя>"," для быстрого отката к стабильной версии при неудачном обновлении.",[504,1164,1165],{},"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}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":196,"searchDepth":227,"depth":227,"links":1167},[1168,1169,1170,1175],{"id":696,"depth":227,"text":697},{"id":49,"depth":227,"text":50},{"id":90,"depth":227,"text":91,"children":1171},[1172,1173,1174],{"id":782,"depth":235,"text":783},{"id":915,"depth":235,"text":916},{"id":1066,"depth":235,"text":1067},{"id":447,"depth":227,"text":448},"CrashLoop","2026-04-08 00:09:03","Поды постоянно перезагружаются? Найдите точную причину статуса CrashLoopBackOff. Проверенная методика диагностики и исправления за 10 минут.",[1180,1183,1186],{"question":1181,"answer":1182},"Почему под переходит в статус CrashLoopBackOff?","kubelet зафиксировал несколько последовательных падений контейнера. Чтобы не перегружать ноду постоянными попытками запуска, система включает экспоненциальную задержку между рестартами, отображая этот статус.",{"question":1184,"answer":1185},"Как быстро найти причину сбоя без глубокого анализа логов?","Запустите `kubectl describe pod \u003Cимя_пода>` и изучите секции `Last State` и `Events`. Там часто указан конкретный `Exit Code` (например, 1 или 137) или причина ошибки монтирования/проб.",{"question":1187,"answer":1188},"Влияет ли CrashLoopBackOff на другие поды в том же Deployment?","Нет, каждый под перезапускается изолированно. Однако если причина кроется в общей конфигурации (неверный ConfigMap, недоступная БД), проблема проявится у всех реплик.",[1190,1193,1196,1199],{"name":1191,"text":1192},"Проверка логов контейнера","Выполните `kubectl logs \u003Cpod-name> --previous`, чтобы увидеть вывод приложения до его аварийного завершения.",{"name":1194,"text":1195},"Анализ метаданных и событий","Используйте `kubectl describe pod \u003Cpod-name>` для поиска exit-кодов, ошибок монтирования томов или проблем с readiness/liveness проб.",{"name":1197,"text":1198},"Коррекция конфигурации приложения","Исправьте переменные окружения, пути к файлам или увеличьте лимиты ресурсов (CPU/RAM) в манифесте Deployment.",{"name":1200,"text":1201},"Перезапуск и мониторинг","Примените обновлённый манифест через `kubectl apply -f deployment.yaml` и убедитесь, что статус сменился на Running.",[1203,1204,1205,1206,1207,1208,1209,1210],"CrashLoopBackOff kubernetes исправление","поды перезагружаются k8s","статус CrashLoopBackOff причины","k8s pod restart loop","ошибка запуска контейнера kubernetes","диагностика краша пода","kubectl logs crashloopbackoff","исправить цикл перезагрузки k8s",{},[1213,1214,1215],"/guides/linux/k8s-pod-debugging","/errors/linux/docker-container-exit-code","/guides/linux/k8s-resource-limits",{"title":686,"description":1178},"errors/linux/k8s-crashloopbackoff","Статус CrashLoopBackOff означает циклический перезапуск пода из-за критической ошибки на старте. Вы получите чёткий алгоритм диагностики и рабочие способы устранения неполадки.",[1220,572,1221,1222,1223,1224,1225],"Kubernetes","контейнеры","DevOps","Linux","troubleshooting","pod","3TBRg1RKbc577WDUL0gNCXXfRkWHsxpioyYdRubxIoQ"]