Установка Kubernetes с K3s: Лёгкая оркестрация контейнеров
Настройка одно- и многоузлового кластера Kubernetes с K3s, использование kubectl, создание deployments и services, управление приложениями с Helm. Руководство по Kubernetes для VPS.
Содержание
Установка Kubernetes с K3s: Лёгкая оркестрация контейнеров
Kubernetes — отраслевой стандарт оркестрации контейнеров. Однако полная установка Kubernetes может быть ресурсоёмкой и сложной. K3s — это лёгкий дистрибутив Kubernetes от Rancher, предоставляющий все функции Kubernetes в одном бинарном файле и отлично работающий в ресурсоограниченных средах, таких как VPS.
Почему стоит выбрать K3s?
| Характеристика | Полный Kubernetes | K3s |
|---|---|---|
| Размер бинарного файла | ~500MB+ | ~100MB |
| Минимальный RAM | 2GB+ | 512MB |
| Время установки | 30-60 мин | 5 мин |
| Зависимости | Много | Минимальные |
| Совместимость с Kubernetes | Полная | Полная |
| Использование в production | Да | Да |
K3s полностью совместим с Kubernetes API. kubectl, Helm и другие инструменты Kubernetes работают с K3s без проблем. Идеален для небольших и средних production-окружений.
Системные требования
# Минимальные требования
# CPU: 1 ядро
# RAM: 512MB (рекомендуется: 1GB+)
# Disk: 5GB
# OS: Ubuntu 20.04+, Debian 11+, CentOS 8+
# Обновление системы
apt update && apt upgrade -y
# Установка необходимых инструментов
apt install -y curl wget
Установка K3s на одном узле (Server)
# Установить K3s (режим сервера)
curl -sfL https://get.k3s.io | sh -
# Проверить статус сервиса после установки
systemctl status k3s
# Проверить состояние кластера
kubectl get nodes
# Вывести список всех подов
kubectl get pods -A
Настройка Kubeconfig
# Скопировать kubeconfig для kubectl
mkdir -p ~/.kube
cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
chmod 600 ~/.kube/config
# Установить переменную окружения KUBECONFIG
export KUBECONFIG=~/.kube/config
echo 'export KUBECONFIG=~/.kube/config' >> ~/.bashrc
# Просмотр информации о кластере
kubectl cluster-info
Настройка многоузлового кластера
Мастер-узел (Server)
# Установить мастер-узел и сохранить токен
curl -sfL https://get.k3s.io | sh -
# Получить токен узла (необходим для рабочих узлов)
cat /var/lib/rancher/k3s/server/node-token
Рабочий узел (Agent)
# Подключить рабочий узел к мастеру
curl -sfL https://get.k3s.io | K3S_URL=https://MASTER_IP:6443 K3S_TOKEN=NODE_TOKEN sh -
# Проверить на мастере, что рабочий узел присоединился
kubectl get nodes
Основные команды kubectl
# Список узлов
kubectl get nodes
kubectl get nodes -o wide
# Список подов
kubectl get pods
kubectl get pods -n kube-system
kubectl get pods -A
# Список deployments
kubectl get deployments
# Список services
kubectl get services
# Список namespaces
kubectl get namespaces
# Просмотр деталей ресурса
kubectl describe pod POD_NAME
kubectl describe node NODE_NAME
# Просмотр логов пода
kubectl logs POD_NAME
kubectl logs -f POD_NAME
# Выполнить команду в поде
kubectl exec -it POD_NAME -- /bin/bash
Создание первого Deployment
NGINX Deployment
# nginx-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "250m"
limits:
memory: "128Mi"
cpu: "500m"
# Применить deployment
kubectl apply -f nginx-deployment.yaml
# Проверить статус deployment
kubectl get deployments
kubectl rollout status deployment/nginx-deployment
Создание Service
# nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
type: NodePort
kubectl apply -f nginx-service.yaml
kubectl get services
# Доступ: http://SERVER_IP:30080
Управление приложениями с Helm
# Установить Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Добавить репозиторий Bitnami
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# Установить WordPress
helm install my-wordpress bitnami/wordpress \
--set wordpressUsername=admin \
--set wordpressPassword=StrongPass123! \
--set service.type=NodePort
# Список установленных charts
helm list
# Удалить chart
helm uninstall my-wordpress
Управление K3s
# Обновить K3s
curl -sfL https://get.k3s.io | INSTALL_K3S_VERSION=v1.28.0+k3s1 sh -
# Управление сервисом K3s
systemctl stop k3s
systemctl start k3s
systemctl restart k3s
# Просмотр логов K3s
journalctl -u k3s -f
# Удалить K3s
/usr/local/bin/k3s-uninstall.sh
Заключение
K3s предоставляет всю мощь Kubernetes при минимальном потреблении ресурсов. Это идеальное решение для production-grade оркестрации контейнеров в VPS-окружениях. С K3s на серверах REXE вы можете легко масштабировать приложения, обеспечивать высокую доступность и внедрять современные DevOps-практики.
Связанные статьи
Управление Docker Volume и сетями: Постоянное хранилище и сетевая конфигурация
Типы Docker volume (named, bind mount, tmpfs), управление volumes, режимы Docker-сетей (bridge, host, overlay), создание пользовательских сетей и взаимодействие контейнеров. Полное руководство.
Логирование контейнеров: Управление логами Docker и Kubernetes
Драйверы логов Docker, команда docker logs, логи подов Kubernetes, централизованный сбор логов (Loki, ELK Stack), ротация логов и лучшие практики управления логами в production.
Безопасность Docker: Усиление защиты контейнерной среды
Лучшие практики безопасности Docker: пользователь без root, файловая система только для чтения, профили seccomp, сканирование образов, безопасность Docker socket, сетевая изоляция и управление секретами.