Часто встречающиеся проблемы и пути их устранения#

В данном разделе приведены сценарии для решения частых проблем, возникающих при работе кластера DropApp.

Решение проблемы: простой контейнера в случае сбоя#

В DropApp проблема простоя в случае сбоя решается с помощью модуля Deployments.

# Стандартные поля для всех ресурсов DropApp: apiVersion, kind, metadata, spec
apiVersion: apps/v1
kind: Deployment
metadata:
name: dropapp-backend-deployment
labels:
app: dropapp-backend

# Определите настройки для развертывания.
spec:
replicas: 3

# `selector` определяет, какие модули будут управляться этим развертыванием.
# настройка репликации модуля, соответствующего метке `app: dropapp`.
selector:
matchLabels:
app: dropapp
role: backend

# `template` определяет модуль, которым будет управлять это развертывание.
template:
metadata:
# Убедитесь, что метки модуля соответствуют меткам развертывания. 
labels:
app: dropapp
role: backend
# Pod имеет свою собственную спецификацию внутри спецификации Deployment.
# Определите какие контейнеры должен запускать pod.
spec:
containers:
- name: dropapp-backend
image: dropapp-backend:1.14.2
ports:
- containerPort: 80

Deployments управляет набором pods с меткой app: dropapp. Также можно поставить метки для pod внутри самих deployments. Модуль гарантирует наличие трех реплик pod с такой меткой в любой момент времени.

Важно

При применении манифеста выше, будет создан deployments. Однако при этом не создаются необходимые pods, поэтому кратковременно не будет работать ни одна реплика: кластер не будет соответствует задекларированному состоянию и предпримет действия, чтобы это исправить — запустит новую реплику. Далее DropApp снова оценит состояние кластера и создаст новую реплику. Действия будут повторятся, пока система не будет соответствовать задекларированному состоянию.

Решение проблем: ebtables или аналогичный исполняемый файл, не найден во время установки#

Следующие редупреждения от kubeadm init:

[preflight] WARNING: ebtables not found in system path
[preflight] WARNING: ethtool not found in system path

Результат отсутствия ebtables, ethtool или аналогичного исполняемого файла на node кластера.

Данные файлы можно установить с помощью следующих команд:

yum install ebtables ethtool.

Решение проблем: gathering logs#

Отследить причину возникновения данной проблемы можно с использование команды:

journalctl --identifier=ignition --all

Где:

  • --identifier=ignition - выводим логи связанные с ignition;

  • --all - отображаем все поля при выводе, включая длинные и непечатаемые.

ignition — это утилита подготовки, которая считывает файл конфигурации (в формате JSON) и подготавливает систему на основе этой конфигурации. Настраиваемые компоненты включают в себя хранилища и файловые системы, модули systemd и пользователей.

Если результат не получен, может помочь запуск от имени root, когда журнал не принадлежит группе systemd-journal или текущий пользователь не является частью этой группы.

Решение проблем: защищенное соединение в кластере с сертификатами#

Для обеспечения безопасности веб-приложений, работающих через Ingress в DropApp, важно использовать зашифрованное HTTPS-соединение, для которого необходим SSL/TLS-сертификат. Поскольку внутреннего доступа к публичному CA Let’s Encrypt может не быть, а отключение TLS-соединения небезопасно, рекомендуется использовать самоподписанный сертификат. Его можно создать с помощью команды:

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=домен.ru"