bolt Valebyte VPS от $4/мес — NVMe, запуск за 60 секунд.

Получить VPS arrow_forward
eco Начальный Туториал

Развёртывание легковесного Kubernetes кластера K3s на одном VPS: от установки до первого приложения

calendar_month Jun 15, 2026 schedule 17 мин. чтения visibility 27 просмотров
Развёртывание легковесного Kubernetes кластера K3s на одном VPS: от установки до первого приложения
info

Нужен сервер для этого гайда? Мы предлагаем выделенные серверы и VPS в 50+ странах с мгновенной настройкой.

Нужен сервер для этого гайда?

Разверните VPS или выделенный сервер за минуты.

Развёртывание легковесного Kubernetes кластера K3s на одном VPS: от установки до первого приложения

TL;DR

В этом подробном гайде мы шаг за шагом настроим легковесный Kubernetes кластер K3s на одном виртуальном приватном сервере (VPS). Вы узнаете, как подготовить сервер, установить K3s, развернуть первое тестовое приложение и обеспечить его доступность через Ingress-контроллер с TLS. Материал ориентирован на владельцев VPS, которым нужен простой и эффективный способ оркестрации контейнеризированных приложений без избыточных ресурсов или сложности полномасштабного Kubernetes.

  • Подготовка VPS: установка базовых утилит, настройка безопасности (SSH, Fail2ban, Firewall).
  • Установка K3s: развёртывание сервера K3s версии 1.31.x на Ubuntu 24.04 LTS.
  • Конфигурация: настройка доступа к кластеру, развёртывание Ingress-контроллера Traefik и автоматического TLS с Caddy.
  • Развёртывание приложения: запуск тестового веб-приложения и его публикация во внешний мир.
  • Обслуживание: рекомендации по бэкапам, обновлениям и устранению типичных проблем.

Что мы настраиваем и зачем

Схема: Что мы настраиваем и зачем
Схема: Что мы настраиваем и зачем

Мы будем развёртывать K3s — легковесный, сертифицированный Kubernetes дистрибутив, разработанный Rancher Labs. В отличие от "большого" Kubernetes, K3s спроектирован для работы в условиях ограниченных ресурсов, таких как IoT-устройства, периферийные вычисления (edge computing) или, в нашем случае, одиночный VPS. Он идеально подходит для разработчиков, стартапов и энтузиастов, которым нужен надёжный инструмент для оркестрации контейнеров без сложности и ресурсоёмкости, присущей стандартным Kubernetes-инсталляциям.

В итоге вы получите полностью функционирующий Kubernetes кластер на одном сервере, способный запускать и управлять вашими контейнеризированными приложениями. Это позволит вам использовать все преимущества Kubernetes (самовосстановление, декларативное управление, масштабирование) без необходимости вкладываться в дорогостоящие облачные сервисы или поддерживать сложную инфраструктуру из нескольких серверов. Вы сможете легко развёртывать веб-сервисы, базы данных, игровые серверы и другие приложения, обеспечивая их стабильную работу и доступность.

Существуют альтернативы, такие как полностью управляемые облачные Kubernetes-сервисы (EKS, GKE, AKS) или традиционные инсталляции Kubernetes с помощью kubeadm на нескольких VPS. Облачные сервисы удобны, но дороги и привязывают вас к конкретному провайдеру. Традиционный Kubernetes требует больше ресурсов, времени на настройку и глубоких знаний для поддержания. K3s на собственном VPS предлагает золотую середину: вы сохраняете полный контроль над инфраструктурой, минимизируете затраты и получаете значительно упрощённый, но при этом полнофункциональный Kubernetes-опыт. Это отличный выбор для тех, кто хочет изучить Kubernetes или развернуть небольшие/средние проекты, где каждый доллар и мегабайт ОЗУ на счету.

Какой VPS-конфиг нужен под эту задачу

Схема: Какой VPS-конфиг нужен под эту задачу
Схема: Какой VPS-конфиг нужен под эту задачу

Выбор подходящего VPS-конфига критичен для стабильной работы K3s и ваших приложений. K3s сам по себе довольно легковесен, но приложения, которые вы будете на нём запускать, могут требовать значительных ресурсов.

Минимальные требования для K3s (без приложений):

  • CPU: 1 ядро (например, Intel Xeon E3/E5).
  • RAM: 1 ГБ (для K3s и базовой ОС).
  • Диск: 20 ГБ NVMe/SSD (для ОС, K3s и хранения базовых контейнерных образов).
  • Сеть: 100 Мбит/с.

Рекомендуемый VPS-план для одного K3s кластера с несколькими приложениями (например, веб-сервис + БД):

  • CPU: 2-4 ядра (например, Intel Xeon E3/E5 или AMD EPYC).
  • RAM: 4-8 ГБ.
  • Диск: 50-100 ГБ NVMe/SSD (для ОС, K3s, контейнерных образов, логов и данных приложений).
  • Сеть: 1 Гбит/с или выше.

VPS с указанными характеристиками можно взять у различных провайдеров. Например, VPS с указанными характеристиками подойдёт для большинства задач. Если вы планируете запускать ресурсоёмкие базы данных, высоконагруженные веб-сервисы или игровые серверы с большим количеством игроков, рассмотрите вариант с 8+ ГБ RAM и 4+ CPU ядрами.

Когда нужен dedicated, а не VPS

Dedicated-сервер становится оправданным, когда ваши приложения требуют максимальной производительности, гарантированных ресурсов, очень большого объема дискового пространства (например, для хранения бэкапов или медиафайлов), или когда вы запускаете множество K3s кластеров (например, для разных клиентов). Если вы видите, что ваш VPS постоянно загружен на 80-90% по CPU или RAM, или вам нужно более 100-200 ГБ быстрого хранилища, то переход на dedicated-сервер, такой как подходящий dedicated, будет логичным шагом. Для большинства одиночных K3s инсталляций на старте VPS будет более чем достаточно.

Локация: на что влияет

Выбор локации VPS влияет на задержку (latency) между вашим сервером и конечными пользователями. Чем ближе сервер к вашей целевой аудитории, тем быстрее будут загружаться страницы и откликаться сервисы. Например, для пользователей из Европы лучше выбирать VPS в Германии, Нидерландах или Финляндии. Для Азии — Сингапур или Гонконг. Также учитывайте юридические аспекты и законы о защите данных в выбранной стране.

Подготовка сервера

Схема: Подготовка сервера
Схема: Подготовка сервера

Перед установкой K3s необходимо выполнить минимальную настройку сервера для обеспечения безопасности и удобства работы. Мы будем использовать Ubuntu Server 24.04 LTS.

1. Подключение по SSH и создание пользователя

Подключитесь к вашему VPS как пользователь root, используя IP-адрес и пароль, предоставленные провайдером. Затем создайте нового пользователя с правами sudo для повседневной работы:


# Создаём нового пользователя (замените 'ваш_пользователь' на желаемое имя)
sudo adduser ваш_пользователь

# Добавляем пользователя в группу sudo
sudo usermod -aG sudo ваш_пользователь

Выйдите из сессии root и войдите под новым пользователем.

2. Настройка SSH-ключей

Для повышения безопасности и удобства используйте SSH-ключи вместо паролей. На вашей локальной машине сгенерируйте ключ (если его нет):


# На вашей локальной машине
ssh-keygen -t rsa -b 4096

Скопируйте публичный ключ на сервер:


# На вашей локальной машине (замените IP и имя пользователя)
ssh-copy-id ваш_пользователь@ваш_ip_сервера

Теперь вы можете отключить аутентификацию по паролю для SSH. Отредактируйте файл /etc/ssh/sshd_config:


# Открываем файл конфигурации SSH
sudo nano /etc/ssh/sshd_config

Найдите и измените следующие строки (или добавьте, если отсутствуют):


# /etc/ssh/sshd_config
PasswordAuthentication no
PermitRootLogin no

Перезапустите SSH-сервис:


# Перезапускаем SSH-сервис
sudo systemctl restart sshd

3. Обновление системы и установка базовых утилит

Обязательно обновите все пакеты и установите необходимые утилиты, такие как curl, wget, git, unzip, net-tools, которые могут понадобиться для установки и отладки.


# Обновление списка пакетов
sudo apt update

# Обновление всех установленных пакетов
sudo apt upgrade -y

# Установка базовых утилит
sudo apt install -y curl wget git unzip net-tools htop

4. Настройка файрвола (UFW)

Включите UFW (Uncomplicated Firewall) и разрешите только необходимые порты. Для K3s и SSH:

  • SSH: 22/tcp
  • K3s Server: 6443/tcp (API-сервер Kubernetes)
  • HTTP/HTTPS: 80/tcp, 443/tcp (для Ingress-контроллера и приложений)

# Разрешаем SSH
sudo ufw allow ssh

# Разрешаем порт K3s API
sudo ufw allow 6443/tcp

# Разрешаем HTTP и HTTPS для веб-приложений
sudo ufw allow http
sudo ufw allow https

# Включаем файрвол
sudo ufw enable
# Подтвердите 'y'

Проверьте статус файрвола:


# Проверяем статус UFW
sudo ufw status verbose

5. Установка Fail2ban

Fail2ban защищает сервер от атак методом подбора паролей, блокируя IP-адреса, с которых происходит слишком много неудачных попыток входа.


# Установка Fail2ban
sudo apt install -y fail2ban

# Запуск и включение автозапуска Fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

Базовая конфигурация Fail2ban уже достаточно эффективна. Для более тонкой настройки можно скопировать и отредактировать файл /etc/fail2ban/jail.conf в /etc/fail2ban/jail.local.


# Копируем базовый конфиг для изменений
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

# Открываем для редактирования (опционально, для настройки)
sudo nano /etc/fail2ban/jail.local

Убедитесь, что секция [sshd] активна (enabled = true).

Установка ПО — пошагово

Схема: Установка ПО — пошагово
Схема: Установка ПО — пошагово

В этом разделе мы установим K3s на наш подготовленный VPS. Мы будем использовать последнюю стабильную версию K3s на 2026 год, предполагая, что это будет версия в диапазоне 1.31.x - 1.32.x, совместимая с Kubernetes 1.31.x - 1.32.x. Для удобства мы используем официальный установочный скрипт.

1. Установка K3s сервера

K3s можно установить одной командой. Скрипт автоматически скачает бинарники, настроит системные сервисы и запустит K3s. По умолчанию K3s использует контейнерный движок containerd, который будет установлен автоматически.


# Устанавливаем K3s сервер (предполагаем версию 1.31.x для 2026 года)
# Используем INSTALL_K3S_VERSION для фиксации версии, чтобы избежать автоматических обновлений до мажорных версий.
# INSTALL_K3S_EXEC="--disable traefik" отключает встроенный Traefik, так как мы будем использовать Caddy/Ingress.
# K3S_TOKEN - это токен, который будет использоваться для добавления агентов, если вы решите расширить кластер.
# Скопируйте его после установки.
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="v1.31.5+k3s1" K3S_TOKEN="SUPERSECRETTOKEN12345" sh -s - --disable traefik

Эта команда установит K3s, отключит встроенный Ingress-контроллер Traefik (мы будем использовать другой), и запустит все необходимые компоненты. Процесс может занять несколько минут.

2. Проверка статуса K3s

После установки убедитесь, что K3s запущен и работает корректно. K3s устанавливается как системный сервис.


# Проверяем статус сервиса K3s
sudo systemctl status k3s

Вы должны увидеть статус active (running).

3. Настройка переменной окружения KUBECONFIG

Для взаимодействия с кластером Kubernetes (через kubectl) необходимо указать путь к файлу конфигурации. K3s размещает его по адресу /etc/rancher/k3s/k3s.yaml.


# Создаём директорию для kubeconfig
mkdir -p ~/.kube/

# Копируем kubeconfig файл
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config

# Устанавливаем правильные права доступа
sudo chmod 600 ~/.kube/config

# Настраиваем переменную окружения KUBECONFIG для текущей сессии
export KUBECONFIG=~/.kube/config

# Добавляем KUBECONFIG в .bashrc для постоянного использования
echo "export KUBECONFIG=~/.kube/config" >> ~/.bashrc

# Применяем изменения .bashrc
source ~/.bashrc

4. Установка kubectl

kubectl — это утилита командной строки для управления кластерами Kubernetes. K3s по умолчанию не устанавливает kubectl в PATH, поэтому его нужно установить отдельно или создать символическую ссылку.


# Создаём символическую ссылку на k3s kubectl
sudo ln -s /usr/local/bin/k3s /usr/local/bin/kubectl

Теперь можно использовать kubectl для взаимодействия с кластером.

5. Проверка работоспособности кластера

Убедитесь, что кластер видит ноду и все системные поды запущены.


# Проверяем статус нод
kubectl get nodes

# Проверяем статус системных подов в namespace kube-system
kubectl get pods -n kube-system

Вы должны увидеть одну ноду со статусом Ready и все поды в kube-system со статусом Running.

6. Получение K3s токена (для добавления агентов, если понадобится)

Если в будущем вы решите добавить другие ноды в кластер K3s, вам понадобится токен, который был сгенерирован при установке.


# Получаем K3s токен
sudo cat /var/lib/rancher/k3s/server/node-token

Сохраните этот токен в безопасном месте. Он понадобится для присоединения новых рабочих нод к вашему K3s кластеру.

Конфигурация

Схема: Конфигурация
Схема: Конфигурация

После установки K3s кластер готов к работе, но для публикации приложений во внешний мир и обеспечения их безопасности (HTTPS) потребуется дополнительная настройка. Мы развернём Ingress-контроллер и настроим автоматическое получение TLS-сертификатов с помощью Caddy.

1. Развёртывание Ingress-контроллера (Nginx Ingress Controller)

Хотя K3s по умолчанию включает Traefik, мы его отключили, чтобы иметь больше контроля. Вместо него мы установим популярный Nginx Ingress Controller, который хорошо себя зарекомендовал.


# Устанавливаем Nginx Ingress Controller через Helm
# Сначала добавляем репозиторий Helm
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

# Устанавливаем Ingress Controller в namespace ingress-nginx
# Предполагаем версию 4.10.x для 2026 года
helm install ingress-nginx ingress-nginx/ingress-nginx \
    --namespace ingress-nginx --create-namespace \
    --set controller.service.type=NodePort \
    --set controller.service.nodePorts.http=30080 \
    --set controller.service.nodePorts.https=30443 \
    --version 4.10.1

Мы используем NodePort для публикации Ingress-контроллера на портах 30080 (HTTP) и 30443 (HTTPS) на VPS. Это позволит нам проксировать трафик через Caddy.

Проверьте, что поды Ingress-контроллера запущены:


# Проверяем поды Ingress-контроллера
kubectl get pods -n ingress-nginx

Убедитесь, что все поды в статусе Running.

2. Установка Caddy как Reverse Proxy и ACME-клиента

Caddy — это мощный веб-сервер с автоматическим HTTPS. Мы будем использовать его как внешний reverse proxy, который будет принимать трафик с портов 80/443, автоматически получать и обновлять TLS-сертификаты, а затем проксировать запросы на Ingress-контроллер K3s.

Создайте файл конфигурации Caddy по пути /etc/caddy/Caddyfile:


# Создаём директорию для конфига Caddy
sudo mkdir -p /etc/caddy

# Открываем файл Caddyfile для редактирования
sudo nano /etc/caddy/Caddyfile

Вставьте следующее содержимое, заменив your-domain.com на ваш домен:


# /etc/caddy/Caddyfile
{
    email [email protected]
    # Включаем логирование для отладки
    log {
        output file /var/log/caddy/caddy.log
        level INFO
    }
}

your-domain.com {
    # Автоматический HTTPS
    reverse_proxy localhost:30080 {
        # Необходимо для корректной работы Ingress-контроллера
        header_up Host {http.request.host}
        header_up X-Real-IP {http.request.remote}
        header_up X-Forwarded-For {http.request.remote}
        header_up X-Forwarded-Proto {http.request.scheme}
    }
}

Сохраните файл (Ctrl+X, Y, Enter).

Создайте директорию для логов Caddy:


# Создаём директорию для логов Caddy и устанавливаем права
sudo mkdir -p /var/log/caddy
sudo chown caddy:caddy /var/log/caddy

Установите Caddy. Мы будем использовать официальный репозиторий для Ubuntu:


# Устанавливаем зависимости
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https

# Добавляем ключ GPG Caddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

# Добавляем репозиторий Caddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list

# Обновляем список пакетов и устанавливаем Caddy
sudo apt update
sudo apt install -y caddy

Включите и запустите сервис Caddy:


# Запускаем Caddy
sudo systemctl enable caddy
sudo systemctl start caddy
sudo systemctl status caddy

Убедитесь, что Caddy работает и не выдаёт ошибок. Если есть проблемы, проверьте логи Caddy: sudo journalctl -u caddy --no-pager.

Важно: убедитесь, что ваш домен (your-domain.com) указывает на IP-адрес вашего VPS в DNS-записях (A-запись).

3. Развёртывание первого приложения (Nginx)

Развернём простое веб-приложение Nginx, чтобы проверить работу кластера и Ingress-контроллера.

Создайте файл nginx-app.yaml:


# Создаём файл манифеста Nginx
nano nginx-app.yaml

Вставьте следующее содержимое:


# nginx-app.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25.4-alpine # Актуальная версия на 2026 год
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx # Указываем, что это Ingress для Nginx Ingress Controller
  rules:
  - host: your-domain.com # Замените на ваш домен
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80

Сохраните файл и примените его к кластеру:


# Применяем манифест Nginx
kubectl apply -f nginx-app.yaml

Проверьте статус развёртывания:


# Проверяем поды Nginx
kubectl get pods -l app=nginx

# Проверяем сервис Nginx
kubectl get service nginx-service

# Проверяем Ingress Nginx
kubectl get ingress nginx-ingress

Убедитесь, что под Nginx запущен, сервис и Ingress существуют.

4. Проверка работоспособности

Теперь, когда всё настроено, откройте ваш домен (https://your-domain.com) в браузере. Вы должны увидеть стандартную приветственную страницу Nginx. Если вы видите её, значит, K3s, Nginx Ingress Controller и Caddy работают корректно, и HTTPS-сертификат был автоматически выпущен и установлен.

Если возникли проблемы, проверьте:

  • Логи подов Nginx Ingress Controller: kubectl logs -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx
  • Логи Caddy: sudo journalctl -u caddy --no-pager
  • DNS-записи вашего домена.
  • Статус K3s: sudo systemctl status k3s

Вы также можете использовать curl для проверки доступности:


# Проверяем HTTP-доступ
curl http://your-domain.com

# Проверяем HTTPS-доступ
curl -k https://your-domain.com # -k игнорирует проверку сертификата, если есть проблемы

Бэкапы и обслуживание

Схема: Бэкапы и обслуживание
Схема: Бэкапы и обслуживание

Регулярные бэкапы и своевременное обслуживание — залог стабильности и безопасности вашего K3s кластера.

Что бэкапить

Для K3s на одном узле, ключевые данные для бэкапа:

  • Конфигурация K3s: Файлы /etc/rancher/k3s/k3s.yaml и /var/lib/rancher/k3s/server/node-token.
  • Состояние кластера (etcd): K3s использует SQLite по умолчанию, поэтому файл базы данных находится по пути /var/lib/rancher/k3s/server/db/state.db. Если вы перенастроили K3s на использование внешнего etcd, вам нужно бэкапить etcd.
  • Данные приложений: Если ваши приложения используют постоянные тома (Persistent Volumes), убедитесь, что их данные бэкапятся. Для K3s по умолчанию используется локальный провизионер PV, что означает, что данные хранятся на диске самого VPS. Путь обычно /var/lib/rancher/k3s/storage/....
  • Конфигурационные файлы Caddy/Nginx: /etc/caddy/Caddyfile.

Простой скрипт автобэкапа

Вы можете создать простой скрипт для бэкапа ключевых файлов и базы данных K3s. Пример с использованием rsync и tar:


# Создайте файл /usr/local/bin/backup_k3s.sh
sudo nano /usr/local/bin/backup_k3s.sh

Содержимое скрипта (замените /path/to/backup/destination на ваш путь):


#!/bin/bash

BACKUP_DIR="/tmp/k3s_backup_$(date +%Y%m%d%H%M%S)"
DESTINATION="/path/to/backup/destination" # Смените на реальный путь или S3 бакет

mkdir -p $BACKUP_DIR
mkdir -p $DESTINATION

echo "Starting K3s backup at $(date)"

# Бэкап K3s конфигурации
cp /etc/rancher/k3s/k3s.yaml $BACKUP_DIR/k3s.yaml
cp /var/lib/rancher/k3s/server/node-token $BACKUP_DIR/node-token

# Бэкап SQLite базы данных K3s
# K3s предоставляет команду для создания снэпшота базы данных
sudo k3s etcd-snapshot --etcd-snapshot-dir $BACKUP_DIR

# Бэкап данных Persistent Volumes (если используются локально)
# Внимание: для реальных PV нужна более сложная стратегия (например, Velero)
# cp -R /var/lib/rancher/k3s/storage/ $BACKUP_DIR/k3s-storage/

# Бэкап конфигов Caddy
cp /etc/caddy/Caddyfile $BACKUP_DIR/Caddyfile

# Архивируем все бэкапы
tar -czvf $DESTINATION/k3s_backup_$(date +%Y%m%d%H%M%S).tar.gz -C $BACKUP_DIR .

# Очищаем временную директорию
rm -rf $BACKUP_DIR

echo "K3s backup finished at $(date)"

Сделайте скрипт исполняемым:


# Делаем скрипт исполняемым
sudo chmod +x /usr/local/bin/backup_k3s.sh

Добавьте его в cron для ежедневного выполнения (например, в 3:00 ночи):


# Открываем crontab для редактирования
sudo crontab -e

Добавьте строку:


# Ежедневный бэкап K3s в 03:00
0 3   * /usr/local/bin/backup_k3s.sh >> /var/log/k3s_backup.log 2>&1

Куда складывать бэкапы

Никогда не храните бэкапы на том же сервере, который бэкапите. Рассмотрите следующие варианты:

  • Внешнее S3-совместимое хранилище: Дешёвое и надёжное решение (например, Backblaze B2, DigitalOcean Spaces). Используйте s3cmd или rclone для загрузки.
  • Отдельный VPS: Вы можете арендовать небольшой VPS только для хранения бэкапов и использовать rsync с SSH-ключами для их передачи.
  • NFS-шара: Если у вас есть сетевое хранилище.

Обновления: rolling vs maintenance window

Для K3s на одном узле концепция "rolling update" неприменима, так как нет других узлов, на которые можно перенести нагрузку. Обновление K3s всегда будет означать простой кластера на короткое время.

  • Обновление K3s: Регулярно проверяйте новые версии K3s (например, каждые 3-6 месяцев). Обновление K3s осуществляется путём повторного запуска установочного скрипта с новой версией или с помощью утилиты k3s-upgrade.
    
    # Пример обновления K3s до новой версии
    curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="v1.32.0+k3s1" sh -s - --disable traefik
    

    Это приведёт к перезапуску K3s и кратковременному простою.

  • Обновление ОС и пакетов: Регулярно обновляйте операционную систему: sudo apt update && sudo apt upgrade -y. Планируйте эти обновления в период низкого трафика, так как они могут потребовать перезагрузки сервера.
  • Обновление приложений: Обновляйте свои контейнерные образы и Helm-чарты. Kubernetes позволяет делать это без простоя, используя rolling updates для Deployment'ов.

Всегда тестируйте обновления на тестовом стенде, прежде чем применять их к продакшн-серверу.

Troubleshooting + FAQ

В этом разделе мы рассмотрим типичные проблемы, с которыми можно столкнуться при работе с K3s, и дадим ответы на часто задаваемые вопросы.

Не могу подключиться к кластеру с помощью kubectl

Что проверить: Убедитесь, что переменная окружения KUBECONFIG установлена правильно (echo $KUBECONFIG должно вернуть /home/ваш_пользователь/.kube/config). Проверьте права на файл ~/.kube/config (должны быть 600). Убедитесь, что K3s сервис запущен (sudo systemctl status k3s) и файрвол (UFW) разрешает порт 6443/tcp.

Как фиксить: Перезапустите K3s: sudo systemctl restart k3s. Проверьте логи K3s: sudo journalctl -u k3s --no-pager. Убедитесь, что в файле ~/.kube/config IP-адрес сервера указан корректно.

Моё приложение не доступно через домен, Caddy выдаёт ошибку

Что проверить: Проверьте DNS-запись для вашего домена (A-запись должна указывать на IP вашего VPS). Убедитесь, что Caddy запущен (sudo systemctl status caddy) и его Caddyfile настроен правильно, указывая на localhost:30080. Проверьте логи Caddy (sudo journalctl -u caddy --no-pager) на предмет ошибок с Let's Encrypt или проксированием. Убедитесь, что Ingress-контроллер запущен и его поды в статусе Running (kubectl get pods -n ingress-nginx).

Как фиксить: Исправьте DNS-записи. Проверьте синтаксис Caddyfile командой sudo caddy validate --config /etc/caddy/Caddyfile. Перезапустите Caddy: sudo systemctl reload caddy. Убедитесь, что ваш Ingress-ресурс в Kubernetes (kubectl get ingress) имеет правильный хост и ссылается на существующий сервис и порт.

Поды приложений находятся в статусе Pending или CrashLoopBackOff

Что проверить: Если под в статусе Pending, это часто означает нехватку ресурсов (CPU/RAM) или проблемы с Persistent Volume. Если CrashLoopBackOff, это значит, что приложение внутри контейнера постоянно падает. Проверьте логи пода: kubectl logs <имя_пода> и описание пода: kubectl describe pod <имя_пода>.

Как фиксить: Для Pending: увеличьте ресурсы VPS или уменьшите запросы ресурсов в манифесте пода. Для CrashLoopBackOff: изучите логи приложения, возможно, проблема в его конфигурации, переменных окружения или отсутствии необходимых зависимостей.

Какой VPS-конфиг минимально подойдёт?

Для K3s без тяжёлых приложений достаточно 1 CPU ядра, 1 ГБ RAM и 20-30 ГБ SSD. Этого хватит для запуска самого K3s и нескольких очень легковесных сервисов. Однако, если вы планируете запускать реальные веб-приложения или базы данных, рекомендуется минимум 2 CPU ядра, 4 ГБ RAM и 50 ГБ SSD для комфортной работы и возможности масштабирования.

Что выбрать — VPS или dedicated для этой задачи?

Для развёртывания K3s на одном узле для большинства личных проектов, стартапов или тестовых сред VPS является оптимальным выбором по соотношению цена/производительность. Dedicated-серверы оправданы, когда требуются максимальная производительность, гарантированные ресурсы, очень большой объём дискового пространства или если вы планируете запускать множество ресурсоёмких кластеров/приложений, где VPS уже не справляется с нагрузкой или ограничениями по CPU/RAM/IOPS.

K3s не запускается после перезагрузки сервера

Что проверить: Убедитесь, что сервис K3s включен для автозапуска: sudo systemctl is-enabled k3s. Если он не включен, выполните sudo systemctl enable k3s. Проверьте логи сервиса: sudo journalctl -u k3s --no-pager.

Как фиксить: Если в логах есть ошибки, связанные с файрволом или сетью, убедитесь, что UFW разрешает все необходимые порты, а сетевые интерфейсы подняты. Если это ошибка базы данных, возможно, повреждён файл /var/lib/rancher/k3s/server/db/state.db. В таком случае может потребоваться восстановление из бэкапа.

Как обновить K3s до новой версии?

Что проверить: Перед обновлением обязательно сделайте бэкап кластера. Проверьте официальную документацию K3s на предмет изменений в новой версии, которые могут повлиять на ваши приложения или конфигурацию.

Как фиксить: Обновление K3s на одном узле выполняется путём повторного запуска установочного скрипта с указанием новой версии: curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION="vX.Y.Z+k3s1" sh -. Это автоматически скачает новую версию, обновит бинарники и перезапустит K3s. Ваши приложения временно будут недоступны во время обновления K3s.

Выводы и следующие шаги

Схема: Выводы и следующие шаги
Схема: Выводы и следующие шаги

Поздравляем! Вы успешно развернули легковесный Kubernetes кластер K3s на своём VPS, настроили Ingress-контроллер с автоматическим HTTPS и опубликовали первое приложение. Теперь у вас есть мощная и гибкая платформа для хостинга ваших контейнеризированных приложений, управляемая декларативно и с минимальными накладными расходами.

Куда двигаться дальше?

  1. Мониторинг и логирование: Установите системы мониторинга, такие как Prometheus и Grafana, а также централизованное логирование (например, Loki или ELK стек) для отслеживания состояния кластера и приложений.
  2. Управление секретами: Изучите инструменты для безопасного хранения и управления секретами в Kubernetes (например, HashiCorp Vault, Sealed Secrets) вместо использования переменных окружения или файлов.
  3. Масштабирование и отказоустойчивость: Если ваш проект вырастет, рассмотрите возможность добавления дополнительных рабочих нод K3s или миграцию на полноценный многоузловой Kubernetes кластер для повышения отказоустойчивости и производительности.

Поделиться этой записью:

развёртывание легковесного kubernetes кластера k3s на одном vps: от установки до первого приложения
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.