TrueCharts Advanced FAQ
Содержание
Цель данной статьи - ответить на наиболее часто встречающиеся вопросы по работе приложений от 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
И если после этого проблема не исчезла. Пробуем озвученные выше методы.