MAATRIX / Блог / k3s: лёгкий Kubernetes на VPS

k3s: лёгкий Kubernetes на VPS

k3s: лёгкий Kubernetes на одном VPS за 5 минут
Блог MAATRIX · 2026-07-07

k3s — сертифицированный дистрибутив Kubernetes весом меньше 100 МБ. Он ставится одной командой и отлично живёт на одном VPS. Развернём кластер, задеплоим приложение и откроем его через встроенный Ingress.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Почему k3s, а не ванильный Kubernetes

Полноценный Kubernetes требователен: несколько компонентов control-plane, etcd, минимум пара гигабайт RAM только под систему. k3s от Rancher собирает всё в один бинарник, заменяет etcd на SQLite и включает Traefik как Ingress «из коробки».

  • Один бинарник, старт за секунды.
  • SQLite вместо etcd для single-node — меньше накладных расходов.
  • Встроенные Traefik, local-path storage и servicelb.
  • Полная совместимость с kubectl и Helm.

Минимум для комфортной работы — 2 ГБ RAM, лучше 4. На тарифах MAATRIX с AMD EPYC + NVMe control-plane отвечает быстро, а local-path тома пишутся на NVMe без просадок. etcd (когда вы перейдёте на HA) особенно чувствителен к задержкам диска, и медленный HDD там становится узким местом всего кластера.

k3s удобен и как учебный полигон: вы получаете настоящий Kubernetes API за минуту и можете отрабатывать манифесты, Helm-чарты и Ingress ровно так, как они будут работать в большом кластере, но за деньги одного VPS.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для Kubernetes

Установка кластера

Ставим k3s одной командой. Скрипт скачает бинарник, создаст systemd-сервис k3s и запустит его.

curl -sfL https://get.k3s.io | sh -
sudo systemctl status k3s
sudo kubectl get nodes

Через минуту нода должна быть в состоянии Ready. kubeconfig лежит в /etc/rancher/k3s/k3s.yaml — скопируйте его на свою машину, заменив 127.0.0.1 на публичный IP сервера, чтобы работать с кластером локально.

sudo cat /etc/rancher/k3s/k3s.yaml
# на локальной машине правим server: https://<VPS_IP>:6443

Деплой приложения

Опишем Deployment и Service. Сохраните в app.yaml и примените через kubectl.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 2
  selector:
    matchLabels: { app: web }
  template:
    metadata:
      labels: { app: web }
    spec:
      containers:
        - name: web
          image: nginx:alpine
          ports:
            - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: web
spec:
  selector: { app: web }
  ports:
    - port: 80
      targetPort: 80
kubectl apply -f app.yaml
kubectl get pods
kubectl get svc

Здесь replicas: 2 держит два экземпляра nginx: если один под упадёт, второй продолжит обслуживать трафик, а k3s поднимет замену упавшему. Selector по метке app: web связывает Service с подами — Service стабилен по имени, а поды за ним могут пересоздаваться сколько угодно.

Проверить, что приложение отвечает изнутри кластера, можно временным подом:

kubectl run tmp --rm -it --image=curlimages/curl -- \
  curl -s http://web/

Ingress через Traefik

Traefik уже установлен, поэтому достаточно описать Ingress-ресурс. Он направит трафик с домена на сервис web.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web
spec:
  rules:
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web
                port:
                  number: 80
kubectl apply -f ingress.yaml
kubectl 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

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

k3s — это настоящий Kubernetes?

Да, k3s сертифицирован CNCF как соответствующий дистрибутив Kubernetes. Манифесты, kubectl и Helm работают без изменений.

Можно добавить вторую ноду?

Да. Установите k3s-agent на втором VPS с указанием URL сервера и node-token — нода присоединится к кластеру.

Чем заменить SQLite для HA?

Для отказоустойчивости запускают embedded etcd на трёх нодах или внешнюю БД. Для одного VPS SQLite достаточно.