Перейти к содержанию

TrueCharts Advanced FAQ

·684 слова·4 минуты

Цель данной статьи - ответить на наиболее часто встречающиеся вопросы по работе приложений от TrueCharts и помочь с решением некоторых проблем. FAQ будет дополняться и обновляться.

1. Я раньше все делал через Docker, а тут все по другому и ничего не понятно. #

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

Основная единица - это кластер (cluster). В нашем кластере размещаются ноды (nodes) - это рабочие узлы на которых запускаются контейнеризированные приложения. А в рабочих узлах размещены поды (pods). Под (pod) - это наши компоненты приложения. Внутри пода помимо контейнера(ов) с нашим приложением размещается kubelet, kube-proxy и среда выполнения контейнера (docker, containerd, CRI-O). Ресурсы в кластере разделяются с помощью Пространств имён (Namespaces).

Все команды в этом FAQ выполняем от пользователя root в консоли вашего TrueNAS SCALE сервера.

ВАЖНО!!! Все команды из пунктов 1-6 выполняем только если другие способы заставить приложение работать не помогли. Автор FAQ не несет ответственность за ваши действия. Все что вы делаете - вы делаете на свой страх и риск.

Когда мы осуществляем установку нового приложения (деплой), то получаем новое пространство имен с названием ix-<имя приложения>, например ix-traefik. Если мы хотим увидеть все пространства имен на нашем кластере, то выполняем команду:

k3s kubectl get ns

Поды внутри нашего пространства имён будут иметь вид: <имя приложения>-aaaaaaaaa-aaaaa, например traefik-8665b8466c-h6c9g. Если мы хотим увидеть все поды на нашем кластере, то выполняем команду:

k3s kubectl get pods -A

Помимо подов, пространств имён есть еще Сервисы (Services) - сервисы это методы позволяющие выставить наружу ваше сетевое приложение развернутое как один или несколько подов в кластере. Например у Traefik мы видим три сервиса: traefik, traefik-metrics и traefik-tcp. Чтобы посмотреть сервисы выполняем команду:

k3s kubectl get svc -A

А если хотим ограничить вывод только нужным приложением, то есть два варианта. Ограничиваем вывод только нужным нам пространством имён:

k3s kubectl get svc -n ix-traefik

Или выводим все сервисы из всех пространств имен и фильтруем по имени нашего приложения:

k3s kubectl get svc -A | grep traefik

2. Что-то все сложно. Хочу увидеть все и сразу, что у меня там на кластере? #

Используем команду:

k3s kubectl get pods,svc,ns -A

Получаем все пространства имен, сервисы и поды сразу.

3. Я пытался удалить приложение - оно пропало из списка Apps в TrueNAS, но я вижу его поды/сервисы в списке, а само пространство имен в статусе terminating. #

Для начала пробуем удалить наши поды командой:

k3s kubectl delete pods <имя пода> -n <имя пространства имен>

Если поды не удаляются, то мы можем попробовать удалить наше пространство имен следующим образом:

k3s kubectl delete namespace <имя пространства имен>

ВНИМАНИЕ!!! Удаление пространства имен ведет к удалению всех данных и настроек вашего приложения.

4. Что-то все долго удаляется, наверно зависло. #

Наш кластер Кубернетис - асинхронный. Удаление подов, нодов и т.д. может занять некоторое время. Если мы хотим убить все как можно скорее, то добавляем ключи –force –grace-period=0. Например:

k3s kubectl delete pods --grace-period=0 --force <имя пода>

5. А не хочет мое пространство имен удаляться. #

Скорее всего у вас остались сервисы/поды, которые “возрождаются” через DaemonSet. DaemonSet - гарантирует, что все или некоторые ноды все еще выполняют копию подов. Ноды добавляются в кластер, поды добавляются в ноды. В момент удаления нод из кластера может остаться мусор в виде подов/сервисов. В таком случае удаление DaemonSet позволит избавиться от таких “мертвых” ресурсов. Получаем список DaemonSet:

k3s kubectl get daemonset -A

Удаляем ненужные нам daemonset командой:

k3s kubectl delete daemonset <имя demonset> -n <пространство имён>

6. После последнего обновления сломались какие-то statefulsets. Это что? #

Иногда поды должны иметь постоянную идентификацию в сети - StatefulSet контроллер назначает таким подам постоянные уникальные значения для идентификации в сети. Есть ли на вашем кластере такие ресурсы? Давайте узнаем:

k3s kubectl get statefulsets -A

Если нам надо удалить statefulset для какого-то приложения, то выполняем команду:

k3s kubectl delete statefulset <имя statefulset> -n <имя пространства имен>

7. А может можно проще починить вечный деплой приложения? #

Иногда может помочь следующая команда:

systemctl restart middlewared.service

И если после этого проблема не исчезла. Пробуем озвученные выше методы.