Перейти к основному содержимому
Вернуться в категорию

Установка Kubernetes с K3s: Лёгкая оркестрация контейнеров

Настройка одно- и многоузлового кластера Kubernetes с K3s, использование kubectl, создание deployments и services, управление приложениями с Helm. Руководство по Kubernetes для VPS.

Время чтения: 20 dk Контейнеры и оркестрация
k3skubernetesконтейнероркестрациякластерkubectlhelmvps

Содержание

Установка Kubernetes с K3s: Лёгкая оркестрация контейнеров

Kubernetes — отраслевой стандарт оркестрации контейнеров. Однако полная установка Kubernetes может быть ресурсоёмкой и сложной. K3s — это лёгкий дистрибутив Kubernetes от Rancher, предоставляющий все функции Kubernetes в одном бинарном файле и отлично работающий в ресурсоограниченных средах, таких как VPS.

Почему стоит выбрать K3s?

ХарактеристикаПолный KubernetesK3s
Размер бинарного файла~500MB+~100MB
Минимальный RAM2GB+512MB
Время установки30-60 мин5 мин
ЗависимостиМногоМинимальные
Совместимость с KubernetesПолнаяПолная
Использование в productionДаДа

K3s полностью совместим с Kubernetes API. kubectl, Helm и другие инструменты Kubernetes работают с K3s без проблем. Идеален для небольших и средних production-окружений.

Системные требования

hljs bash
# Минимальные требования
# 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)

hljs bash
# Установить K3s (режим сервера)
curl -sfL https://get.k3s.io | sh -

# Проверить статус сервиса после установки
systemctl status k3s

# Проверить состояние кластера
kubectl get nodes

# Вывести список всех подов
kubectl get pods -A

Настройка Kubeconfig

hljs bash
# Скопировать 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)

hljs bash
# Установить мастер-узел и сохранить токен
curl -sfL https://get.k3s.io | sh -

# Получить токен узла (необходим для рабочих узлов)
cat /var/lib/rancher/k3s/server/node-token

Рабочий узел (Agent)

hljs bash
# Подключить рабочий узел к мастеру
curl -sfL https://get.k3s.io | K3S_URL=https://MASTER_IP:6443 K3S_TOKEN=NODE_TOKEN sh -

# Проверить на мастере, что рабочий узел присоединился
kubectl get nodes

Основные команды kubectl

hljs bash
# Список узлов
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

hljs yaml
# 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"
hljs bash
# Применить deployment
kubectl apply -f nginx-deployment.yaml

# Проверить статус deployment
kubectl get deployments
kubectl rollout status deployment/nginx-deployment

Создание Service

hljs yaml
# 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
hljs bash
kubectl apply -f nginx-service.yaml
kubectl get services
# Доступ: http://SERVER_IP:30080

Управление приложениями с Helm

hljs bash
# Установить 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

hljs bash
# Обновить 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-практики.