k3s: лёгкий Kubernetes на VPS
k3s — сертифицированный дистрибутив Kubernetes весом меньше 100 МБ. Он ставится одной командой и отлично живёт на одном VPS. Развернём кластер, задеплоим приложение и откроем его через встроенный Ingress.
Содержание
Почему k3s, а не ванильный Kubernetes
['Полноценный Kubernetes требователен: несколько компонентов control-plane, etcd, минимум пара гигабайт RAM только под систему. k3s от Rancher собирает всё в один бинарник, заменяет etcd на SQLite и включает Traefik как Ingress «из коробки».', '- Один бинарник, старт за секунды.
- SQLite вместо etcd для single-node — меньше накладных расходов.
- Встроенные Traefik, local-path storage и servicelb.
- Полная совместимость с kubectl и Helm.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для KubernetesУстановка кластера
['Ставим k3s одной командой. Скрипт скачает бинарник, создаст systemd-сервисk3s и запустит его.', 'curl -sfL https://get.k3s.io | sh -\nsudo systemctl status k3s\nsudo kubectl get nodes', 'Через минуту нода должна быть в состоянии Ready. kubeconfig лежит в /etc/rancher/k3s/k3s.yaml — скопируйте его на свою машину, заменив 127.0.0.1 на публичный IP сервера, чтобы работать с кластером локально.', 'sudo cat /etc/rancher/k3s/k3s.yaml\n# на локальной машине правим server: https://<VPS_IP>:6443']
Деплой приложения
['Опишем Deployment и Service. Сохраните вapp.yaml и примените через kubectl.', 'apiVersion: apps/v1\nkind: Deployment\nmetadata:\n name: web\nspec:\n replicas: 2\n selector:\n matchLabels: { app: web }\n template:\n metadata:\n labels: { app: web }\n spec:\n containers:\n - name: web\n image: nginx:alpine\n ports:\n - containerPort: 80\n---\napiVersion: v1\nkind: Service\nmetadata:\n name: web\nspec:\n selector: { app: web }\n ports:\n - port: 80\n targetPort: 80', 'kubectl apply -f app.yaml\nkubectl get pods\nkubectl get svc', 'Здесь replicas: 2 держит два экземпляра nginx: если один под упадёт, второй продолжит обслуживать трафик, а k3s поднимет замену упавшему. Selector по метке app: web связывает Service с подами — Service стабилен по имени, а поды за ним могут пересоздаваться сколько угодно.', 'Проверить, что приложение отвечает изнутри кластера, можно временным подом:', 'kubectl run tmp --rm -it --image=curlimages/curl -- \\\n curl -s http://web/']
Ingress через Traefik
['Traefik уже установлен, поэтому достаточно описать Ingress-ресурс. Он направит трафик с домена на сервис web.', 'apiVersion: networking.k8s.io/v1\nkind: Ingress\nmetadata:\n name: web\nspec:\n rules:\n - host: app.example.com\n http:\n paths:\n - path: /\n pathType: Prefix\n backend:\n service:\n name: web\n port:\n number: 80', 'kubectl apply -f ingress.yaml\nkubectl get ingress', "Направьте A-запись домена на IP VPS — и приложение откроется по app.example.com. Для HTTPS добавьте cert-manager или используйте встроенный ACME-резолвер Traefik. В большинстве случаев cert-manager с ClusterIssuer для Let's Encrypt — самый чистый путь: сертификаты выпускаются и продлеваются автоматически, а вам достаточно указать аннотацию на Ingress.", 'Полезная привычка — следить за событиями кластера при выкате. Команда kubectl get events --sort-by=.lastTimestamp показывает, что происходит с подами в реальном времени: скачивание образа, провал healthcheck, нехватку ресурсов. Это первое место, куда стоит смотреть, если под не переходит в Ready.']
Частые ошибки
['- kubectl требует sudo — kubeconfig принадлежит root. Экспортируйте
KUBECONFIG=/etc/rancher/k3s/k3s.yamlили скопируйте в~/.kube/configс правкой прав. - Под в CrashLoopBackOff — смотрите
kubectl logs <pod>иkubectl describe pod <pod>. - Ingress не отвечает — не проброшены порты 80/443 или домен указывает не на тот IP.
- Нехватка RAM — на 1 ГБ k3s душит поды по OOM. Берите минимум 2 ГБ.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK и США. Оплата картой РФ и по СБП.
Арендовать VPS для KubernetesЧастые вопросы
k3s — это настоящий Kubernetes?
Да, k3s сертифицирован CNCF как соответствующий дистрибутив Kubernetes. Манифесты, kubectl и Helm работают без изменений.
Можно добавить вторую ноду?
Да. Установите k3s-agent на втором VPS с указанием URL сервера и node-token — нода присоединится к кластеру.
Чем заменить SQLite для HA?
Для отказоустойчивости запускают embedded etcd на трёх нодах или внешнюю БД. Для одного VPS SQLite достаточно.