Установка K3s — самый короткий путь к настоящему Kubernetes на VPS: одна команда, 30–60 секунд, и у вас работающий кластер на единственном сервере. K3s — это сертифицированный CNCF дистрибутив Kubernetes от SUSE (изначально Rancher Labs), упакованный в один бинарник размером около 70 МБ. Он создавался для edge-устройств и небольших инсталляций, поэтому идеально ложится на одиночный VPS: без ритуалов с kubeadm, без отдельного etcd, со встроенным Ingress-контроллером. В статье установим K3s на Ubuntu 24.04, честно посчитаем ресурсы и задеплоим первое приложение — от манифеста до проверки в браузере.
Что такое K3s и чем он отличается от «большого» Kubernetes
Полноценный кластер Kubernetes — это набор компонентов (API-сервер, etcd, scheduler, controller-manager, kubelet, container runtime), каждый из которых нужно установить, связать сертификатами и обслуживать. K3s собирает всё это в один процесс и агрессивно упрощает:
- SQLite вместо etcd по умолчанию — для одного узла этого достаточно (etcd можно включить при расширении);
- containerd встроен — отдельный Docker не нужен;
- Traefik в комплекте — Ingress-контроллер работает из коробки;
- ServiceLB — простой балансировщик, который публикует сервисы на IP самого узла;
- вырезаны легаси-драйверы и облачные провайдеры, которые на VPS не нужны.
При этом API полностью совместим: те же манифесты, тот же kubectl, те же Helm-чарты. Всё, чему вы научитесь на K3s, работает в любом «взрослом» кластере — поэтому K3s так популярен для обучения и pet-проектов. Если вы ещё не работали с контейнерами, начните со статей про Docker на VPS и Docker Compose — понимание образов и контейнеров сильно упростит знакомство с Kubernetes.
Требования к серверу: честно про RAM
Маркетинг K3s говорит «512 МБ достаточно», и формально пустой кластер действительно стартует. Но правда для практики другая: сам K3s с системными подами съедает около 1 ГБ, а дальше начинаются ваши приложения, Ingress, cert-manager, мониторинг. Реалистичная таблица:
| Сценарий | RAM | Подходящий тариф Cheap-Host |
|---|---|---|
| Попробовать K3s, 1–2 тестовых пода | от 4 ГБ | Start (8 ГБ, 450 ₽/мес) — с запасом |
| Pet-проекты, staging, несколько приложений с базой | 8–16 ГБ | Pro (16 ГБ, 750 ₽/мес) — разумный минимум для работы |
| Рабочие нагрузки, мониторинг, CI-раннеры | 16–32 ГБ | Ultra (32 ГБ, 1500 ₽/мес) — комфортно |
Итого: отправная точка — от 4 ГБ RAM, для рабочих задач берите минимум Pro, а комфортно K3s живёт на Ultra — 20 vCPU и 32 ГБ RAM позволяют не думать о вытеснении подов. Важна и дисковая подсистема: Kubernetes постоянно пишет состояние и тянет образы, поэтому NVMe-диски (они стоят во всех тарифах Cheap-Host) заметно ускоряют и запуск подов, и работу SQLite-базы кластера. Подробнее о расчёте памяти под задачи — в статье сколько RAM нужно серверу.
Установка K3s одной командой
На свежем VPS с Ubuntu 24.04 обновите систему и запустите официальный установщик:
sudo apt update && sudo apt upgrade -y
curl -sfL https://get.k3s.io | sh -
Скрипт скачает бинарник, создаст systemd-службу k3s с автозапуском и стартует кластер. Через 30–60 секунд проверяем:
sudo k3s kubectl get node
Ожидаемый вывод — ваш сервер в статусе Ready:
NAME STATUS ROLES AGE VERSION
myvps Ready control-plane,master 40s v1.33.3+k3s1
Чтобы не писать sudo k3s kubectl каждый раз, настройте обычный kubectl для своего пользователя:
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
echo 'export KUBECONFIG=~/.kube/config' >> ~/.bashrc
source ~/.bashrc
kubectl get pods -A
Последняя команда покажет системные поды: coredns, traefik, metrics-server, local-path-provisioner. Все в статусе Running — кластер готов. Не забудьте про файрвол: наружу достаточно открыть 80, 443 и ваш SSH-порт; порт API 6443 открывайте только если планируете управлять кластером с локальной машины.
Деплой первого приложения
Задеплоим веб-приложение по канону Kubernetes: Deployment (управляет подами), Service (внутренний адрес) и Ingress (маршрутизация снаружи через встроенный Traefik). Создайте файл app.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo-web
spec:
replicas: 2
selector:
matchLabels:
app: demo-web
template:
metadata:
labels:
app: demo-web
spec:
containers:
- name: web
image: nginx:1.27-alpine
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "128Mi"
cpu: "250m"
---
apiVersion: v1
kind: Service
metadata:
name: demo-web
spec:
selector:
app: demo-web
ports:
- port: 80
targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: demo-web
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: demo-web
port:
number: 80
Применяем и наблюдаем:
kubectl apply -f app.yaml
kubectl get pods
kubectl get ingress
Через несколько секунд оба пода будут Running, и по адресу http://IP_СЕРВЕРА откроется страница nginx — Traefik принял запрос на 80-м порту и направил его в поды. Вместо nginx подставьте свой образ — и это уже настоящий деплой вашего приложения.
Что вы получили по сравнению с ручным запуском контейнеров:
- самовосстановление — убейте под (
kubectl delete pod имя), и Deployment тут же создаст новый; - масштабирование одной командой —
kubectl scale deployment demo-web --replicas=4; - rolling-обновления —
kubectl set image deployment/demo-web web=nginx:1.28-alpineобновит поды по одному, без даунтайма; - лимиты ресурсов — блок
resourcesне даёт одному приложению съесть весь сервер.
Что поставить следом: полезный минимум
- Helm — пакетный менеджер Kubernetes:
curl -fsSL https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash. Тысячи готовых чартов — от PostgreSQL до Grafana; - cert-manager — автоматические TLS-сертификаты Let's Encrypt для ваших Ingress;
- k9s — консольный интерфейс для кластера, сильно ускоряет повседневную работу;
- локальные тома — встроенный local-path-provisioner создаёт PersistentVolume на диске сервера: для одиночного узла этого достаточно.
K3s также удобен как площадка для self-hosted CI: например, раннеры для собственного GitLab хорошо живут в кластере и масштабируются под нагрузку.
Ограничения одного узла: о чём помнить
Честность требует сказать: кластер из одного VPS — это не про отказоустойчивость. Упал сервер — упало всё, никакой магии Kubernetes здесь не спасёт. Один узел стоит выбирать для обучения, staging, внутренних инструментов и pet-проектов; для продакшена со строгим SLA нужны минимум три узла. Хорошая новость — K3s изначально рассчитан на рост: токен из /var/lib/rancher/k3s/server/node-token позволяет присоединять новые серверы командой:
curl -sfL https://get.k3s.io | K3S_URL=https://IP_ПЕРВОГО:6443 \
K3S_TOKEN=ВАШ_ТОКЕН sh -
А пока узел один, подстрахуйтесь бэкапами: снапшот состояния кластера лежит в /var/lib/rancher/k3s/server/db/, манифесты храните в git. У Cheap-Host при этом можно апгрейдить CPU/RAM/диск без потери данных — если кластер упёрся в ресурсы, переход со Start на Pro или Ultra не потребует переустановки.
FAQ
Сколько RAM реально нужно для K3s?
Пустой кластер — около 1 ГБ, но с приложениями и Ingress закладывайте от 4 ГБ. Для рабочих нагрузок разумный минимум — 16 ГБ (тариф Pro), комфортно — 32 ГБ (Ultra).
Чем K3s отличается от полного Kubernetes?
Один бинарник ~70 МБ: SQLite вместо etcd, встроенные containerd и Traefik, вырезаны облачные и легаси-компоненты. API полностью совместим — манифесты и kubectl те же.
Есть ли смысл в Kubernetes на одном сервере?
Для обучения, staging и pet-проектов — да: декларативные деплои, самовосстановление, опыт с настоящим API. Для продакшена с жёстким SLA — нет: один узел остаётся единой точкой отказа.
Можно ли потом добавить узлы в кластер?
Да: возьмите токен с первого сервера и запустите установщик на новом VPS с переменными K3S_URL и K3S_TOKEN — узел присоединится как agent.
K3s или Docker Compose для одного VPS?
Compose проще и легче, если нужно просто запустить несколько контейнеров. K3s выбирают ради экосистемы Kubernetes: Helm, декларативные манифесты, масштабирование — и ради переносимого опыта.
Вывод
K3s снимает главный барьер входа в Kubernetes — сложность установки: одна команда, минута ожидания, и у вас кластер с Ingress и метриками из коробки. Дальше — обычный kubectl, манифесты и вся экосистема. Главное — не экономить на памяти: от 4 ГБ RAM для знакомства, тариф Pro (16 ГБ) как рабочий минимум и Ultra (32 ГБ, 20 vCPU, 192 ГБ NVMe за 1500 ₽/мес) для комфортной работы с реальными нагрузками. У Cheap-Host такой сервер разворачивается за 45–60 секунд — KVM, полный root, безлимитный трафик. Тарифы — на cheap-host.onl.