Termux — удобная среда для запуска и тестирования инструментов на Android. При наличии ресурсов устройства и правильной настройки можно развернуть локальный Kubernetes‑кластер для обучения, отладки и экспериментов. В этой статье мы рассмотрим создание кластера в Termux с помощью k3s (лёгкая Kubernetes‑реализация) и управления через kubectl.
Материал ориентирован на локальные сценарии: без обхода ограничений и без «прикладных» схем, где важна сетейая прозрачность. Основная цель — показать управляемый, повторяемый процесс развёртывания и работы с кластером.
Что потребуется
- Android‑устройство с установленным Termux
- Доступ к пакетному менеджеру Termux (обычно
pkg) - Достаточно памяти/CPU для запуска k3s (на слабых устройствах кластер может работать медленно)
- Терминальные права для установки пакетов и запуска сервисов
Рекомендуется подготовить локальный доступ к кластеру через маршрутизацию в вашей локальной сети (например, через VPN, если вы используете его только для создания локальной сети). Это позволит обращаться к API сервера kubectl из других узлов/устройств без выхода в публичный интернет.
Установка зависимостей в Termux
Начнём с обновления репозиториев и установки базовых компонентов.
pkg update -y
pkg upgrade -yУстановим утилиты, необходимые для работы с контейнерами и загрузками.
pkg install -y curl wget tar jq procps coreutilsДля k3s обычно подходит встроенный подход, но для kubectl нам понадобится отдельный бинарь. Также полезно иметь iptables и сетевые компоненты — в зависимости от версии Android/ядра они могут быть ограничены. В любом случае начнём с базовой установки и затем перейдём к конфигурации.
Подготовка директории для k3s
Создадим рабочую директорию и каталог для хранения конфигурации.
mkdir -p $HOME/k3s
cd $HOME/k3sСкачивание и установка k3s
k3s можно устанавливать в режиме, где он скачивает бинарник самостоятельно. В Termux нередко используют установочные скрипты, но для воспроизводимости лучше явно контролировать параметры.
Сначала определим переменную окружения для INSTALL_K3S_EXEC (например, для настройки прослушивания API). Начнём с минимального control-plane на одном устройстве.
export INSTALL_K3S_EXEC="--disable traefik --write-kubeconfig-mode 644"Далее установим k3s. В зависимости от архитектуры и текущих ограничений окружения команда может потребовать корректировок, но базовый сценарий выглядит так:
curl -sfL https://get.k3s.io | sh -После установки проверьте, что сервис поднялся (в Termux это может быть реализовано по-разному в зависимости от способа запуска). Начните с поиска процессов:
ps aux | grep -i k3s | headТакже полезно проверить наличие kubeconfig.
ls -la $HOME/.kube
ls -la /etc/rancher/k3s/k3s.yaml 2>/dev/null || trueНастройка kubectl
kubectl можно установить скачиванием бинарника. Возьмём подходящий дистрибутив для Linux/ARM в зависимости от вашей архитектуры. Самый практичный путь — использовать рекомендуемый метод от Kubernetes/или провайдера k3s.
Вариант: взять kubectl, который часто поставляется вместе с k3s. Для некоторых конфигураций он доступен по пути:
ls -la /usr/local/bin/kubectl 2>/dev/null || true
ls -la $HOME/.local/bin/kubectl 2>/dev/null || trueЕсли kubectl не найден, скачайте его вручную (пример с актуальной стабильной версией — при необходимости подставьте нужную):
KUBECTL_VERSION="$(curl -L -s https://dl.k8s.io/release/stable.txt)"
curl -LO "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/$(uname -m)/kubectl"
chmod +x kubectl
mv kubectl $HOME/.local/bin/
export PATH="$HOME/.local/bin:$PATH"Теперь проверьте:
kubectl version --client --output=yamlДалее — настраиваем подключение к кластеру. Если k3s создал kubeconfig, используйте его. Часто kubeconfig лежит в:
export KUBECONFIG=/etc/rancher/k3s/k3s.yamlЕсли файл располагается иначе, найдите его:
find / -name "k3s.yaml" 2>/dev/null | head -n 20Затем задайте найденный путь в KUBECONFIG и проверьте доступ:
kubectl get nodesПри первом подключении могут потребоваться правки адреса API в kubeconfig (особенно если вы планируете обращаться к API не локально). Если вы обращаетесь из Termux на том же устройстве, обычно достаточно локальных значений.
Проверка состояния control-plane
Выполним основные диагностические команды:
kubectl get nodes -o wide
kubectl get pods -A
kubectl get componentstatuses 2>/dev/null || trueДля анализа системных ресурсов используйте:
kubectl describe node <имя_ноды>
kubectl logs -n kube-system <pod> --tail=200Добавление worker‑узла (подход для локального кластера)
Чтобы расширить кластер, можно поднять второй процесс k3s в режиме worker на другом Termux/устройстве или на этой же машине в отдельных окружениях (на Android это зависит от возможностей запуска нескольких экземпляров). Самый простой учебный сценарий — отдельный узел worker на другом устройстве в вашей локальной сети.
На control-plane получите token для worker:
cat /var/lib/rancher/k3s/server/node-token 2>/dev/null ||
cat $HOME/.k3s/node-token 2>/dev/nullДалее на worker‑узле экспортируйте переменные и запустите k3s в режиме worker. Понадобится IP контрольного узла (доступный в локальной сети) и token.
На control-plane определите адрес API/узла (пример):
ip addr show | grep -E "inet " | headПредположим, IP control-plane равен 192.168.1.10. На worker:
export K3S_URL="https://192.168.1.10:6443"
export K3S_TOKEN="<PASTE_NODE_TOKEN>"
curl -sfL https://get.k3s.io | sh -s - --agent --disable traefikПосле поднятия worker на control-plane проверьте список нод:
kubectl get nodes -o wideБазовое управление ресурсами: Deployment, Service, Namespace
Рассмотрим типовой поток: создадим namespace, развернём приложение через Deployment и предоставим доступ через Service.
Создадим namespace:
kubectl create namespace demoСоздадим Deployment (пример Nginx):
kubectl -n demo create deployment web --image=nginx:stable --replicas=2Создадим Service типа ClusterIP (внутренний доступ внутри кластера):
kubectl -n demo expose deployment web --port=80 --type=ClusterIPПроверим:
kubectl -n demo get all
kubectl -n demo get pods -o wideЕсли нужно получить доступ извне кластера в локальной сети, в зависимости от возможностей Android/NAT/сетевых правил можно использовать:
- порт‑форвардинг:
kubectl port-forward - NodePort: когда сетевой стек позволяет обратиться по портам ноды
Для порт‑форвардинга:
kubectl -n demo port-forward svc/web 8080:80После этого откройте http://localhost:8080 в Termux на том же узле, где выполнялась команда. Если нужно с другого устройства — лучше делать доступ через локальную сеть и соответствующую маршрутизацию.
Полезные команды администрирования
Ниже — набор команд, которые часто нужны при работе с k3s и kubectl:
- Получить список кластерных событий:
kubectl get events -A --sort-by=.lastTimestamp | tail -n 50- Смотреть логи pod:
kubectl logs -n <namespace> <pod> --tail=200- Проверить ресурсы:
kubectl top pods -A 2>/dev/null || true
kubectl describe pod -n <namespace> <pod>- Очистить namespace (удалить ресурсы):
kubectl delete namespace demoУстойчивость, обновления и остановка
На практике k3s удобен тем, что можно производить обновления управляемо. Однако в Termux важно учитывать:
- ограничения по фоновой работе и процессам в Android
- требования к правам и стабильности сетевого стека
Остановка кластера обычно выполняется через системный механизм запуска. В Termux может отсутствовать классическая systemd‑логика, поэтому ориентируйтесь на то, как вы запускали процесс. Если вы запускали k3s как сервис — используйте соответствующие команды вашего метода. Для базового сценария можно остановить процесс через сигнал:
ps aux | grep -i k3s | grep -v grep
# далее остановить процесс по PID (пример):
kill <PID>После остановки важно убедиться, что порты освободились и состояние кластера не оставило зависших компонентов.
Типовые проблемы и диагностика
1) kubectl не видит ноды
Проверьте kubeconfig ($KUBECONFIG) и доступность API по IP/порту. Выполните:
echo $KUBECONFIG
kubectl cluster-info
kubectl get nodes2) Pods в статусе Pending
Проверьте события:
kubectl get events -A --sort-by=.lastTimestamp | tail -n 1003) Сетевые проблемы
Termux зависит от особенностей Android. Если вы используете Worker на другом устройстве, убедитесь, что IP доступен в локальной сети и что ваше сетевое взаимодействие не блокируется.
Если вы используете VPN, то только для создания локальной сети и корректной маршрутизации (а не для обхода блокировок). Это поможет сохранить предсказуемость работы и диагностику.
Заключение
Мы рассмотрели практический путь создания локального Kubernetes‑кластера в Termux на Android с использованием k3s и управления через kubectl: от подготовки окружения и установки k3s до проверки nodes и базового деплоя приложений, а также сценария добавления worker‑узла в рамках локальной сети.
Если вы хотите ускорить старт, подобрать оптимальные параметры под ваше устройство, настроить устойчивый запуск или помочь с сетевой схемой для нескольких узлов в локальной сети — команда РыбинскЛАБ готова предоставить консультации и услуги по внедрению и сопровождению Kubernetes‑инфраструктуры и инструментария под Termux.