Tutorial de despliegue de Kubernetes en Hetzner con Hetzner Kubernetes Service

·

·

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

Your email address will not be published. Required fields are marked *