Ошибки при запуске пода ingress-nginx-controller
После переноса образов контейнеров на отдельный диск и восстановления работоспособности worker-узла может не запускаться под ingress-nginx-controller.
Может возникнуть ошибка, при которой сбросились разрешения (capabilities) бинарных файлов после переноса содержимого containerd. Работа по исправлению ошибки делится на следующие этапы:
Подтверждение ошибки с разрешениями бинарных файлов
Чтобы подтвердить ошибку:
-
Подключитесь к кластеру.
-
Проверьте логи пода
ingress-nginx-controller. Для этого:-
Получите полное название пода с информацией по worker-узлам, выполнив команду:
kubectl get pods -n ingress-nginx -o wideОтобразится список всех подов
ingress-nginx-controller.Пример вывода списка всех подов
NAME READY STATUS RESTARTS AGE IP NODE ingress-nginx-controller-j25z6 1/1 Running 9 (5d15h ago) 9d 00.000.1.000 siem-testing-w03 ingress-nginx-controller-ppp6c 1/1 Pending 15 (5d15h ago) 41d 00.000.2.000 siem-testing-w02 ingress-nginx-controller-wltdd 1/1 Running 7 (5d15h ago) 41d 00.000.3.000 siem-testing-w01
-
Скопируйте название пода на worker-узле, с которым производились работы.
-
Откройте логи пода
ingress-nginx-controller, выполнив команду:kubectl logs -n ingress-nginx <pod_name>Здесь:
-
<pod_name>— название пода, полученное на предыдущем шаге.
-
-
-
Найдите в логах следующую запись:
port 80 is already in use. Please check the flag --http-port
Если вы не нашли в логах упомянутую выше запись, то ошибка запуска пода ingress-nginx-controllerвозникла не из-за сброса разрешения бинарных файлов. Для решения проблемы обратитесь в службу поддержки по адресу support@rvision.ru. -
Проверьте разрешения бинарных файлов, выполнив команду:
getcap $(find /var/lib/containerd/ -name nginx-ingress-controller -type f)Если в разрешении
ingress-nginx-controllerотображается значениеcap_net_bind_service+ep, то он работает корректно. Если отображается любое другое значение, то у подаingress-nginx-controllerсбросились разрешения бинарных файлов.
Исправление ошибки разрешений бинарных файлов пода ingress-nginx-controller
Чтобы исправить ошибку:
-
Подключитесь к кластеру.
-
Установите метку
marked-for-drainдля worker-узла, выполнив команду:kubectl label nodes <node_name> marked-for-drain=trueЗдесь:
-
<node_name>— название выбранного worker-узла.
Предварительно необходимо скорректировать конфигурации контроллеров DaemonSet. Подробности приведены в разделе Настройка отдельного диска под образы контейнеров. Объединенная файловая система (OverlayFS) запущенного пода
ingress-nginx-controllerпримонтирована к файловой системе worker-узла. Это блокирует возможность удаления и перезаписывания слоев образа.Установка метки
marked-for-drainзапрещает планировать на worker-узел поды контроллеров DaemonSet. Тогда Docker-образingress-nginx-controllerне будет задействован ни одним запущенным контейнером на выбранном worker-узле. Блокировка замены и удаления образа будет снята. -
-
Удалите под
ingress-nginx-controller, выполнив команду:kubectl delete pod <pod_name> -n ingress-nginx --field-selector spec.nodeName=<node_name>Здесь:
-
<pod_name>— название пода, полученное на этапе подтверждения ошибки.
-
-
Подключитесь к выбранному worker-узлу.
-
Удалите образ пода
ingress-nginx-controller, выполнив команду:crictl rmi harbor.rvision.pro/third_party/ingress-nginx/controller:1.11.3-distroless-20250428 -
Проверьте, что образ корректно удалился и не отображается в общем списке, с помощью команды:
crictl images | grep ingress -
Подключитесь к серверу, на котором производилась установка системы.
-
Распространите образ пода
ingress-nginx-controllerпо всему кластеру, выполнив команду:/opt/r-vision/common/bin/evoctl instance upload --archive ingress-nginx.img -
Проверьте наличие нового образа, выполнив команду:
crictl images | grep ingress -
Проверьте корректность разрешений бинарных файлов, выполнив команду:
getcap $(find /var/lib/containerd/ -name nginx-ingress-controller -type f) -
Снимите метку
marked-for-drainс выбранного worker-узла, выполнив команду:kubectl label nodes <node_name> marked-for-drain-Здесь:
-
<node_name>— название выбранного worker-узла.
-
-
Дождитесь запуска пода
ingress-nginx-controllerи проверьте его статус, выполнив команду:kubectl get pods -n ingress-nginx --field-selector spec.nodeName=<node_name>Здесь:
-
<node_name>— название выбранного worker-узла.
-
Была ли полезна эта страница?