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

Отримати VPS arrow_forward
eco Початковий Туторіал

Розгортання легкова

calendar_month Jun 15, 2026 schedule 17 хв. читання visibility 25 переглядів
Развёртывание легковесного 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 496

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


# На вашій локальній машині (замініть 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'ів.

Завжди тестуйте оновлення на тестовому стенді, перш ніж застосовувати їх до продакшн-сервера.

Вирішення проблем + 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.