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

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

Блог MAATRIX · 2026-07-07

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.
', 'Минимум для комфортной работы — 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 -\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 достаточно.