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

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

Развёртывание и управление k3s прямо в Termux: от установки до масштабирования pods

Автор: Усачёв Денис Евгеньевич, ведущий эксперт РыбинскЛАБ.

Зачем запускать 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 в контуре разработки — обращайтесь в РыбинскЛАБ.

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

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

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

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