Tutorial de despliegue de Kubernetes en Hetzner con Hetzner Kubernetes Service
En este extenso y detallado artículo exploraremos paso a paso cómo desplegar un clúster de Kubernetes usando el Hetzner Kubernetes Service (HKS). Abordaremos desde los requisitos previos, creando y configurando el clúster, hasta la implementación de componentes críticos como ingress, almacenamiento persistente y sistemas de monitoreo y seguridad.
1. Introducción a Hetzner Kubernetes Service
Hetzner Kubernetes Service (HKS) es un servicio administrado que facilita el despliegue y la operación de clústeres de Kubernetes en la infraestructura de Hetzner Cloud. Ofrece:
- Simplicidad: Creación de clústeres con unos pocos comandos.
- Escalabilidad automática: Ajuste de nodos según la demanda.
- Integración de red y balanceadores de carga: Listos para producción.
- Actualizaciones y mantenimiento: Gestionadas por Hetzner.
2. Requisitos previos
Antes de comenzar, asegúrate de contar con:
- Una cuenta activa en Hetzner Cloud.
- Instalación de hcloud CLI (versión 1.33.0 o superior).
- Instalación de kubectl (versión 1.27 o superior).
- Token de API de Hetzner (HETZNER_TOKEN).
- Conocimiento básico de Kubernetes y redes.
2.1 Instalación de hcloud CLI
Descarga e instala siguiendo la guía oficial:
- Linux/macOS: curl -O https://github.com/hetznercloud/cli/releases/download/v1.33.0/hcloud-linux-amd64.tar.gz y descomprimir.
- Windows: Descarga el binario y añádelo a tu PATH.
2.2 Configuración del token
export HCLOUD_TOKEN=TU_HETZNER_API_TOKEN
3. Creación del clúster con HKS
Utilizaremos hcloud para crear un clúster de Kubernetes con parámetros personalizados.
3.1 Selección de la versión de Kubernetes
Revisar versiones disponibles:
hcloud k8s versions
Ejemplo de salida:
| VERSIÓN | ESTADO |
|---|---|
| 1.27.6 | stable |
| 1.26.10 | deprecated |
3.2 Comando de creación del clúster
Ejecuta:
hcloud k8s create
--name mi-cluster
--location nbg1
--version 1.27.6
--node-pool name=pool-nodes,type=cx31,nodes=3,auto-scale=true,min-nodes=3,max-nodes=6
--private-networks default
Explicación:
- –location: Región de Hetzner (p.ej. nbg1, fsn1, hel1).
- node-pool: Tipo y cantidad de nodos, con autoescalado.
- private-networks: Conexión a redes privadas para seguridad.
3.3 Configuración de kubectl
Una vez creado, descarga el contexto:
hcloud k8s kubeconfig download --name mi-cluster > kubeconfig-mi-cluster.yaml
export KUBECONFIG=./kubeconfig-mi-cluster.yaml
Verifica la conexión:
kubectl get nodes
4. Configuración de redes y servicios de carga
El uso de load balancers y redes privadas mejora la disponibilidad y seguridad.
4.1 Creación de un Load Balancer
Si necesitas exponer servicios con balanceo de carga:
hcloud load-balancer create
--name my-lb
--type lb11
--location nbg1
--network-zone eu-central
--private-network default
Luego, anota la IP asignada para usar en tus recursos de Kubernetes.
4.2 Configuración de Services en Kubernetes
Ejemplo de Service tipo LoadBalancer:
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
type: LoadBalancer
loadBalancerIP: IP_ASIGNADA_POR_HELZNER
selector:
app: web
ports:
- port: 80
targetPort: 8080
5. Almacenamiento persistente (CSI)
Hetzner ofrece un plugin CSI oficial para gestionar volúmenes de Block Storage.
5.1 Instalación del CSI Driver
Aplica el manifiesto oficial:
kubectl apply -f https://raw.githubusercontent.com/hetznercloud/csi-driver/v1.14.0/deploy/kubernetes/hcloud-csi.yml
5.2 Creación de un StorageClass
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: hcloud-volumes
provisioner: csi.hetzner.cloud
parameters:
type: ssd
volumeBindingMode: Immediate
reclaimPolicy: Delete
5.3 Uso en un PersistentVolumeClaim
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: hcloud-volumes
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
6. Ingress y Controladores HTTP
Para gestionar tráfico HTTP(s) de forma avanzada, desplegaremos un Ingress Controller.
6.1 Despliegue de NGINX Ingress Controller
Aplica el manifiesto oficial de helm o YAML:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.1/deploy/static/provider/cloud/deploy.yaml
6.2 Definición de un recurso Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: example-ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- host: miapp.midominio.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web-service
port:
number: 80
7. Autoscaling y Gestión de Recursos
7.1 Horizontal Pod Autoscaler
Habilita el HPA para escalar pods según CPU/memoria:
kubectl autoscale deployment web
--cpu-percent=60 --min=2 --max=10
7.2 Cluster Autoscaler
Integra Cluster Autoscaler para escalar nodos:
- Utiliza la imagen oficial: registry.gitlab.com/hetznercloud/cluster-autoscaler:v1.27.3.
- Configura roles y permisos mediante RBAC.
8. Monitoreo y Logging
Implementa herramientas como Prometheus y Grafana para monitoreo, y Fluentd o Loki para logs.
8.1 Despliegue de Prometheus y Grafana
- Instala prometheus-operator con Helm:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prom-stack prometheus-community/kube-prometheus-stack
8.2 Logging con Loki y Grafana
Para simplificar:
- Despliega loki-stack con Helm:
helm install loki-stack grafana/loki-stack --set promtail.enabled=true
9. Seguridad y Buenas Prácticas
- Network Policies: Define políticas para aislar pods.
- Pod Security Standards: Aplica restricciones de seguridad.
- Gestión de secretos: Usa sealed-secrets o external-secrets.
- Actualizaciones controladas: Planifica actualizaciones de versión con mínimos tiempos de inactividad.
10. Operaciones y Mantenimiento
- Realiza backups periódicos de etcd (HKS proporciona backups automáticos).
- Monitorea la salud del clúster y ajusta autoescalado según uso real.
- Revisa logs de eventos con kubectl get events y kubectl describe.
Conclusiones
El Hetzner Kubernetes Service ofrece una solución sólida, escalable y gestionada para ejecutar cargas de trabajo en Kubernetes. Siguiendo este tutorial, habrás desplegado un clúster con alta disponibilidad, balanceo de carga, almacenamiento persistente, ingress, autoscaling, monitoreo y prácticas de seguridad. Ahora, tu infraestructura está lista para albergar aplicaciones desde entornos de desarrollo hasta producción a gran escala.
Documento generado el 07/2024. Para más información y actualizaciones visita docs.hetzner.com/kubernetes.
Leave a Reply