Развёртывание Kubernetes‑кластера в Termux с помощью k3s — это удобный способ познакомиться с оркестрацией контейнеров прямо с Android‑устройства. В рамках этой статьи мы построим минимальную инфраструктуру на базе k3s, научимся управлять Pods и Services, а также проверим доступность приложения через проброс портов.
Почему k3s в Termux
Обычно Kubernetes требует значительных ресурсов и полноценной инфраструктуры. k3s — облегчённая реализация Kubernetes, которая:
- быстрее разворачивается;
- работает с минимальными компонентами;
- удобна для обучения и локальных сценариев.
Termux позволяет запускать Linux‑окружение на Android и использовать стандартные инструменты для подготовки кластера и управления им.
Ограничения и ожидания
- Это учебный/локальный сценарий. На Android не стоит ожидать производительности, сопоставимой с сервером.
- Память и CPU ограничены. Подбирайте небольшой размер контейнеров и минимум реплик.
- Сеть может требовать настройки. Часто удобнее работать с устройством как с узлом в локальной сети или через проброс портов.
Подготовка Android и Termux
Начните с установки Termux из официального источника. Далее выполните базовую настройку окружения. В Termux используйте команды:
pkg update
pkg upgrade -y
pkg install -y curl wget tar git proot util-linux clang make nano
Для контейнеров в Termux обычно применяют один из вариантов:
- либо пользовательский способ запуска контейнеров, доступный в вашей сборке Termux/Android;
- либо специализированные решения (например, запуск k3s в режиме, где контейнеры могут запускаться через доступный runtime).
Поскольку совместимость зависит от версии Android и доступного runtime, ниже мы сосредоточимся на правильной логике развертывания и управлении кластером, а отдельные детали runtime при необходимости адаптируются под вашу среду.
Установка k3s и запуск control-plane
Скачайте бинарный файл k3s для вашей архитектуры и запустите кластер в режиме single-node. Примерно это выглядит так (версии уточняйте по текущим релизам k3s):
# Уточните версию по официальной странице k3s
K3S_VERSION="v1.29.*/k3s"
# Создайте рабочую директорию
mkdir -p ~/k3s
cd ~/k3s
# В зависимости от архитектуры и подхода к установке команды могут отличаться.
# Ниже пример с curl. Версия/URL должны соответствовать официальным данным.
curl -L -o k3s https://github.com/k3s-io/k3s/releases/download/"${K3S_VERSION}"/k3s-arm64
chmod +x k3s
Далее запускаем k3s. Для учебного режима удобно явно указать параметры и использовать минимальные настройки:
./k3s server \
--write-kubeconfig-mode=644 \
--disable=traefik \
--disable=servicelb \
--disable=metrics-server \
--node-taint="node-role.kubernetes.io/control-plane=true:NoSchedule"
Примечание: флаги и доступность отключаемых компонентов могут отличаться. Используйте только то, что доступно в вашей сборке k3s. Если вы планируете запускать приложения без taint‑обходов, можно не выставлять taint, либо применять tolerations в манифестах.
Настройка kubectl
k3s обычно создаёт kubeconfig. В Termux путь может отличаться, но типовой сценарий — получить конфигурацию и экспортировать переменную KUBECONFIG.
# Примерный вариант. Проверьте наличие файла в директориях k3s.
# Часто это "/etc/rancher/k3s/k3s.yaml" или "~/.kube/config".
ls -la /etc/rancher/k3s/ || true
ls -la ~/.kube/ || true
# Если файл найден, например k3s.yaml:
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml
# Проверка доступа
kubectl version --client
kubectl get nodes
Если kubectl ещё не установлен, установите его в Termux. Пример (в зависимости от архитектуры и доступности):
pkg install -y kubectl
Если версия из репозиториев не подходит — скачайте конкретный релиз kubectl и положите в PATH (по аналогии с k3s). При необходимости подскажите свою архитектуру Android (arm64/armeabi-v7a), и я адаптирую команды.
Развёртывание приложения: Deployment и Pod
Создадим простой Deployment и убедимся, что Pod поднимается в кластере.
Файл манифеста deployment.yaml:
cat > deployment.yaml <<'EOF'
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-android
labels:
app: hello-android
spec:
replicas: 1
selector:
matchLabels:
app: hello-android
template:
metadata:
labels:
app: hello-android
spec:
containers:
- name: web
image: nginx:stable
ports:
- containerPort: 80
EOF
Применение:
kubectl apply -f deployment.yaml
kubectl get deployments
kubectl get pods -o wide
Проверка логов (если требуется):
kubectl logs -f <pod-name>
Управление подами: обновления, масштабирование, удаление
Для учебного режима полезно освоить базовые операции:
- Масштабирование:
kubectl scale deployment hello-android --replicas=2
kubectl get pods
- Обновление образа:
kubectl set image deployment/hello-android web=nginx:1.27
kubectl rollout status deployment/hello-android
- Перезапуск:
kubectl rollout restart deployment/hello-android
- Удаление ресурсов:
kubectl delete -f deployment.yaml
Service: экспонирование приложения внутри кластера
Для доступа к подам используйте Service. Он выбирает поды по меткам и обеспечивает стабильный адрес/порт.
Файл service.yaml:
cat > service.yaml <<'EOF'
apiVersion: v1
kind: Service
metadata:
name: hello-android-svc
spec:
selector:
app: hello-android
ports:
- name: http
port: 80
targetPort: 80
type: ClusterIP
EOF
Применение и проверка:
kubectl apply -f service.yaml
kubectl get svc
# Проверка конечных точек (эндпоинтов) сервисов
kubectl get endpoints hello-android-svc
ClusterIP означает доступ только внутри кластера. Чтобы увидеть результат извне, обычно используют один из вариантов: NodePort или проброс портов. Ниже — практичный путь через проброс.
Доступ к приложению: проброс портов
Чтобы проверить, что контейнер отдаёт страницу, можно сделать порт‑форвардинг с помощью kubectl. Этот способ удобен для локального управления и диагностики.
# Проброс порта сервиса/подов на ваш локальный порт в Termux
kubectl port-forward svc/hello-android-svc 8080:80
Откройте в браузере http://localhost:8080 на устройстве, где запущен Termux (или проверьте через curl):
curl -I http://localhost:8080
Если хотите открыть доступ с другого устройства в локальной сети, удобнее создать локальную сеть (например, через VPN как инструмент для формирования виртуальной локальной сети) и затем пробросить/настроить маршрутизацию в пределах вашей локальной сети. Главное — использовать VPN только для создания локальной сети, а не для обхода блокировок.
Пошаговая диагностика: почему Pod не стартует
Если Pod в статусе Pending или CrashLoopBackOff, используйте стандартные команды:
kubectl get pods -o wide
kubectl describe pod <pod-name>
kubectl get events --sort-by=.metadata.creationTimestamp
Частые причины на Android:
- ограничения ресурсов;
- несовместимость image с архитектурой;
- проблемы сети/iptables/рантайма.
Хранение конфигураций: ConfigMap и окружение
Для демонстрации практики управления параметрами добавим ConfigMap и подадим переменные окружения в контейнер.
Пример configmap.yaml:
cat > configmap.yaml <<'EOF'
apiVersion: v1
kind: ConfigMap
metadata:
name: hello-android-config
data:
GREETING: "Hello from Termux + k3s"
EOF
kubectl apply -f configmap.yaml
kubectl get configmap
Затем в Deployment можно добавить переменную окружения через env или envFrom. Например, для демонстрации (в реальных примерах лучше выбирать image, поддерживающую чтение переменной окружения):
# Пример фрагмента для Deployment (замените container на подходящий сценарий)
# env:
# - name: GREETING
# valueFrom:
# configMapKeyRef:
# name: hello-android-config
# key: GREETING
Практика “быстро и правильно”: чек-лист
- Проверьте, что
kubectl get nodesпоказывает узел и статус. - Разворачивайте приложение через
Deployment. - Экспонируйте через
Service(обычноClusterIP+port-forward). - При проблемах — смотрите
kubectl describe podиkubectl get events.
Безопасность и дисциплина ресурсов
Даже для учебного стенда стоит помнить:
- ограничивайте ресурсы в контейнерах (requests/limits), если кластера становится “тесно”;
- не запускайте тяжёлые образы;
- контролируйте логи и события.
Заключение
Развёртывание Kubernetes‑кластера в Termux с помощью k3s — практичный способ быстро освоить управление Pods и Services прямо с Android‑устройства. Мы рассмотрели базовую установку и запуск, подключение через kubectl, развертывание приложения через Deployment, экспонирование через Service и проверку доступности с помощью kubectl port-forward, а также типовую диагностику проблем с подами.
Если вам нужна консультация по запуску на конкретной модели Android, подбору параметров k3s или разбору ошибок по логам/событиям — обратитесь в РыбинскЛАБ: поможем настроить стенд и ускорить путь от “запуска” до стабильной работы.