Автор: Усачёв Денис Евгеньевич, ведущий эксперт РыбинскЛАБ.
Зачем запускать k3s в Termux
Termux — это удобная среда для разработки и администрирования на Android, где можно собирать инструменты, запускать контейнерные приложения и тестировать сценарии оркестрации. k3s (лёгкая Kubernetes-сборка от Rancher) подходит для локальных стендов, учебных задач и проверки идей: он проще в установке и занимает меньше ресурсов, чем «классический» Kubernetes.
Важно: запуск k3s в Termux — это, как правило, локальный экспериментальный контур. Вы получаете практику по kubectl, манифестам, kubeconfig и масштабированию, но производственный режим на Android обычно требует отдельного аппаратного и сетевого проектирования.
Ограничения и ожидания
- Ресурсы: на телефоне/планшете Kubernetes будет упираться в CPU/RAM.
- Сеть: доступ к API-серверу и до pod’ов может зависеть от сетевых ограничений Android.
- Персистентность: для данных лучше использовать тома и монтирования в Termux.
- Перезапуски: удержание окружения при сворачивании/ограничениях питания — отдельная задача.
Ниже описан практичный сценарий «сделал — проверил — задеплоил», ориентированный на обучение и локальные тесты.
Подготовка Termux
Начните с обновления пакетов и установки базовых утилит. Команды ниже выполняйте в Termux.
pkg update && pkg upgrade -y
pkg install -y curl wget ca-certificates tar gnupg jq clang proot-distro
Далее установим контейнерный движок, если он доступен в вашей конфигурации. Для k3s критично наличие runtime контейнеров. На практике самый частый путь — опираться на сценарии, где k3s поднимается в режиме, совместимом с Android-окружением. В зависимости от версии Termux и окружения может потребоваться дополнительная настройка. Поэтому ниже приведён «универсальный» подход: устанавливаем kubectl и готовим основу, а запуск k3s сделаем через официальный установочный механизм.
Установка kubectl
kubectl поможет управлять кластером после запуска k3s.
KUBECTL_VERSION=$(curl -L -s https://dl.k8s.io/release/stable.txt)
curl -LO https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/arm64/kubectl || \
curl -LO https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/arm/kubectl
chmod +x kubectl
mv kubectl /data/data/com.termux/files/usr/bin/kubectl
Проверьте:
kubectl version --client --output=yaml
Установка k3s в Termux
k3s можно установить, используя официальный script. Смысл шага: запустить управляющую плоскость и получить доступ к API через kubeconfig.
Сделайте установку в отдельной папке проекта, чтобы было проще управлять конфигурацией:
mkdir -p ~/k3s-termux && cd ~/k3s-termux
Скачайте и выполните установщик k3s. В качестве демонстрационного сценария используем серверную роль.
curl -sfL https://get.k3s.io | sh -s - server --write-kubeconfig-mode 644
Проверьте, что k3s стартовал и появились файлы конфигурации. Типичное расположение kubeconfig в k3s — в /etc/rancher/k3s/k3s.yaml (права могут отличаться в Termux).
ls -la /etc/rancher/k3s/ || true
ls -la /etc/rancher/k3s/k3s.yaml || true
Настройка kubeconfig для kubectl
Скопируйте kubeconfig в удобную директорию и укажите переменную окружения KUBECONFIG:
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
chmod 600 ~/.kube/config
export KUBECONFIG=$HOME/.kube/config
Проверьте доступность кластера:
kubectl get nodes
Если nodes не отображаются, сначала смотрим логи службы k3s (в Termux доступ к служебным механизмам может зависеть от способа запуска). Попробуйте найти лог-файлы:
ls -la /var/log || true
ls -la /var/lib/rancher/k3s/agent || true
И проверьте процессы:
ps aux | grep -E "k3s|containerd" | grep -v grep
Базовая проверка: деплой тестового приложения
Чтобы убедиться, что план управления работает, задеплоим простое приложение. Например, nginx.
cat > nginx-deploy.yaml <<'YAML'
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-termux
spec:
replicas: 1
selector:
matchLabels:
app: nginx-termux
template:
metadata:
labels:
app: nginx-termux
spec:
containers:
- name: nginx
image: nginx:stable
ports:
- containerPort: 80
YAML
kubectl apply -f nginx-deploy.yaml
kubectl get deploy
kubectl get pods -o wide
Дальше создадим Service, чтобы обращаться к pod’ам внутри кластера (в пределах вашей локальной среды).
cat > nginx-svc.yaml <<'YAML'
apiVersion: v1
kind: Service
metadata:
name: nginx-termux-svc
spec:
selector:
app: nginx-termux
ports:
- port: 80
targetPort: 80
type: ClusterIP
YAML
kubectl apply -f nginx-svc.yaml
kubectl get svc
Экспонирование приложения: практический способ через port-forward
На Android без «идеальной» сетевой маршрутизации проще использовать kubectl port-forward — он создаёт туннель от вашей локальной среды к сервису в кластере. Например, пробросим Service на ваш порт 8080.
kubectl port-forward svc/nginx-termux-svc 8080:80
В другом окне/сессии Termux проверяйте:
curl -I http://localhost:8080
Масштабирование pods: от replicas до наблюдения за состоянием
Один из ключевых навыков при работе с Kubernetes — масштабирование. В случае Deployment это делается через изменение поля spec.replicas или с помощью команды kubectl scale.
Вариант 1: kubectl scale
kubectl scale deployment/nginx-termux --replicas=3
kubectl get pods -w
Ожидайте появление 3 pod’ов и переход в состояние Running.
Вариант 2: обновление манифеста
Отредактируйте replicas (например, поставьте 5) и примените изменения:
sed -i 's/replicas: 1/replicas: 5/' nginx-deploy.yaml
kubectl apply -f nginx-deploy.yaml
kubectl get deploy
kubectl get pods -o wide
Проверка распределения нагрузки
Service в режиме ClusterIP будет балансировать между pod’ами. Для оценки можно несколько раз выполнить запросы через port-forward и смотреть поведение (в простом nginx обычно достаточно убедиться, что pod’ы поднимаются, а ответы не «падают»).
for i in 1 2 3 4 5; do curl -s http://localhost:8080 | head -n 1; done
Для более наглядной демонстрации можно использовать образ, который печатает hostname, но для общей практики достаточно проверки работоспособности и количества replicas.
Масштабирование с учётом ресурсов Termux
На практике масштабирование ограничивается тем, что Android и Termux предоставляют ограниченный CPU/RAM. Если pod’ы начинают оставаться в Pending, стоит проверить события и описание:
kubectl get pods
kubectl describe pod <имя-pod>
kubectl get events --sort-by=.metadata.creationTimestamp | tail -n 30
Обратите внимание на причины: недостаток ресурсов, проблемы с pull образов, сетевые ограничения или сбои runtime контейнеров.
Удаление стенда и очистка
Когда тест завершён, можно удалить ресурсы:
kubectl delete -f nginx-svc.yaml
kubectl delete -f nginx-deploy.yaml
Если нужно полностью убрать k3s, удалите установленную среду (в зависимости от способа установки могут остаться каталоги). Прежде чем удалять — убедитесь, что важно ничего не потерять, в том числе kubeconfig:
cd ~
rm -rf ~/k3s-termux || true
# Осторожно: удаление k3s может потребовать ручной очистки каталогов.
# Если вы уверены — выполните удаление согласно вашей инструкции установки.
Локальная сеть и доступ к кластеру (опционально)
Если вы хотите обращаться к сервисам не только через kubectl port-forward, можно организовать локальную сеть средствами VPN/туннелирования, но строго для построения связности внутри вашей локальной среды (а не для обхода блокировок). Практика зависит от конкретной VPN-реализации и сетевой топологии. Для учебного стенда чаще всего хватает port-forward или доступа через локальный прокси.
Типовые ошибки и быстрые проверки
- kubectl не видит кластер: проверьте
KUBECONFIG, наличие~/.kube/configи права. - Nodes не готовы: проверьте логи и процесс k3s.
- Pod в Pending: проверьте
kubectl describe podи события. - Нет доступа к приложению: используйте
kubectl port-forwardи проверьте Service.
Заключение
Вы можете разворачивать и управлять k3s в Termux как практичный локальный стенд: подготовить окружение, установить k3s, настроить kubeconfig, задеплоить приложение, а затем масштабировать pods через replicas или kubectl scale. Несмотря на особенности Android-среды, подход остаётся «kubernetes-ориентированным»: проверяйте состояние ресурсов, смотрите события и используйте port-forward для простого доступа к сервисам.
Если вам нужна помощь с организацией стендов, настройкой кластеров под ваши сценарии или консультация по Kubernetes в контуре разработки — обращайтесь в РыбинскЛАБ.