Kubernetes на VPS: минимальный кластер с k3s
k3s — лёгкая дистрибуция Kubernetes от Rancher Labs, требующая всего 512 МБ RAM. Идеальна для изучения K8s и запуска небольших production-кластеров на VPS от 4 ГБ RAM.
Установка k3s (Master нода)
curl -sfL https://get.k3s.io | sh -
systemctl status k3s
# Проверить кластер
kubectl get nodes
kubectl get pods -AДобавление Worker ноды
# Получить токен на Master
cat /var/lib/rancher/k3s/server/node-token
# На Worker ноде
curl -sfL https://get.k3s.io | K3S_URL=https://MASTER_IP:6443 K3S_TOKEN=TOKEN sh -Деплой приложения
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: webapp
spec:
replicas: 3
selector:
matchLabels:
app: webapp
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: nginx:alpine
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "500m"
---
apiVersion: v1
kind: Service
metadata:
name: webapp-service
spec:
selector:
app: webapp
ports:
- port: 80
targetPort: 80
type: LoadBalancerkubectl apply -f deployment.yaml
kubectl get pods
kubectl get servicesHelm: пакетный менеджер K8s
# Установить Helm
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
# Установить приложение из Helm Chart (например, cert-manager)
helm repo add jetstack https://charts.jetstack.io
helm install cert-manager jetstack/cert-manager --namespace cert-manager --create-namespace --set installCRDs=trueIngress + авто-SSL
# Traefik (входит в k3s по умолчанию)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: webapp-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- app.yourdomain.com
secretName: webapp-tls
rules:
- host: app.yourdomain.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: webapp-service
port:
number: 80Рекомендации: Для одного VPS с 4-8 ГБ RAM k3s — отличный выбор. Для production-кластера с высокой доступностью используйте минимум 3 Master ноды (нечётное количество для etcd quorum).