We detected you are likely not from a Russian-speaking region. Would you like to switch to the international version of the site?

  Назад к списку статей

Развёртывание Kubernetes‑кластера в Termux с помощью k3s: управление подами и сервисами с Android‑устройства

Практическое руководство: как развернуть минимальный Kubernetes‑кластер на Android в Termux с k3s, развернуть приложения, управлять подами и сервисами, а также проверить работу через kubectl.

Развёртывание 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 или разбору ошибок по логам/событиям — обратитесь в РыбинскЛАБ: поможем настроить стенд и ускорить путь от “запуска” до стабильной работы.

* Текст статьи подготовлен и структурирован с использованием технологий искусственного интеллекта. Проверен и доработан перед публикацией.

Нужна помощь с настройкой Termux, Linux и серверов?

Я оказываю ИТ-услуги: настройка серверов, автоматизация, безопасность, помощь с Linux и инфраструктурой. Материалы сайта — только в ознакомительных и образовательных целях.

Связаться со мной
Поддержать проект