Сбой подов в кластере Kubernetes

Мой Pod зависает и перезапускается несколько раз при развертывании моего Java-приложения с использованием кластера Kubernetes.

Я могу запускать небольшие микросервисы, используя модуль kubernetes.

При создании модуля я получаю следующее исключение:

Warning BackOff         Back-off restarting failed docker container
    24s   10s     2       {kubelet 192.168.1.31}
Warning FailedSync      Error syncing pod, skipping: failed to "StartContainer" for
    "enliven" with CrashLoopBackOff: "Back-off 1m20s restarting failed
    container=enliven pod=enliven_default(75d49b7a-d36f-11e7-9800-0021f6220722)"

Любое предложение?


person sanjay    schedule 27.11.2017    source источник
comment
Получите вывод из kubectl logs -f podname, как описано другими. И что kubectl получает события -n YourNameSpace show?   -  person Kuberchaun    schedule 27.11.2017


Ответы (2)


Вы можете начать с проверки журналов на модуле, чтобы узнать, не запускается ли приложение по какой-либо причине. Вы можете сделать это, используя

kubectl logs your_pod_name --previous

Одна потенциальная проблема, на которую я хотел бы обратить внимание, заключается в том, что ваше приложение Java использует больше ресурсов, чем доступно / разрешено в кластере. Здесь вы можете увидеть, как работают запросы и ограничения. Но ваш под мог быть убит Kubernetes именно по этой причине: слишком много ресурсов.

person Jose Armesto    schedule 27.11.2017
comment
Где будет храниться журнал. Когда я набираю kubectl logs MyPODName, он не показывает никаких журналов. Во-вторых, размер моего изображения составляет около 750 МБ, что является причиной сбоя моего модуля. - person sanjay; 28.11.2017
comment
Ресурсы не имеют ничего общего с размером изображения. Речь идет о требованиях вашего Java-приложения к процессору и памяти. Перейдите по этой ссылке, чтобы получить журналы убитого модуля stackoverflow.com/a/34097447/563072 - person Jose Armesto; 28.11.2017
comment
Моя капсула все еще разбивается. журналы, которые он не генерирует. Но когда я описываю модуль, он приближается к модулю синхронизации с ошибкой FailedSync, пропуск: сбой в StartContainer для httpd с CrashLoopBackOff: откат 20-секундный перезапуск сбойного контейнера = httpd pod = httpd_default (f8ae7061-d4fb-11e7-9800-0021f6220722) - person sanjay; 29.11.2017
comment
Как вы создаете капсулу? - person Jose Armesto; 29.11.2017
comment
Я создаю модуль через файл YAML. Это мой файл apiVersion: v1 kind: Pod metadata: # name of Pod name: httpd labels: # rabel of Pod app: web_server spec: container: # name of Container - name: httpd # Изображение изображения контейнера: dockeratramyam / kubernetes-publisher ports: # Контейнерный порт - containerPort: 80 - person sanjay; 30.11.2017
comment
Пожалуйста, добавьте его в свой вопрос с правильным форматированием и добавьте команду, которую вы используете для его создания. - person Jose Armesto; 30.11.2017
comment
# kubectl create -f pod.yaml В этом YAML-файле я упомянул свой образ докера. - person sanjay; 30.11.2017
comment
Проблема была решена, когда я добавил следующую команду в свой файл yaml. команда: [/ bin / bash, -c, -] args: [while true; спать 30; сделано; ] - person sanjay; 06.12.2017

В случае контейнера пода вам необходимо поддерживать активный основной процесс для запуска пода или контейнера. Если основной процесс умер или завершился, модуль будет перезапущен или аварийно завершен. Если у вас есть двоичный файл вашего приложения, просто используйте его в точке входа в файлы докеров. в противном случае вы можете продолжить работу с командой сна, но если вы используете сервер, лучше всего оставить его в качестве основного процесса, введя его в точку входа. в случае использования сна добавьте это в спецификацию контейнера пода

containers:
  command: [ "/bin/bash", "-c", "--" ] 
  args: [ "while true; do sleep 5; done;" ]
person Emon46    schedule 08.01.2021