Saltar al contenido
NyverraNyverra
⌘K
InicioArtículosSitio institucional
🇪🇸
Nyverra

Canal editorial

Artículos sobre tecnología, operaciones y partners — infraestructura, monitorización y entornos críticos.

Redes sociales

Explorar

  • Inicio
  • Artículos
  • Categorías
  • Etiquetas
  • Autores
  • Sobre
  • Contacto
  • RSS
  • Sitio institucional

Nyverra

  • Nuestros servicios
  • Casos de éxito
  • Socios

Contacto

Correo[email protected]WhatsApp(62) 99309-1592Portal del clienteITSM · tickets y SLA

Rua RB 18, S/N — Casa 01, Sala 01 · Residencial Buriti · Senador Canedo – GO, Brasil · CEP 75260-459

Horario: lun–vie, 08–18 h

© 2026 Nyverra. Todos los derechos reservados.

CNPJ: 61.571.209/0001-08 · Registro estatal: 20.291.265-5 · D-U-N-S®: 57-323-5796

blog.nyverra.com.br

Términos de usoPrivacidadCookies
Volver arriba

Elasticsearch no es una base de datos transaccional. Es un buscador distribuido: los datos se dividen en shards, cada shard tiene réplicas, y el cluster necesita quórum para elegir al master.

Confundir esto con “un Postgres que busca” es el camino más rápido hacia un cluster rojo.

Sello del curso: probado en Kubernetes 1.35 con ECK y Elasticsearch 8.x.

Conceptos que importan

Concepto Qué es
Índice colección de documentos
Shard primario parte del índice donde viven los datos
Réplica copia del shard para HA y lectura
Node proceso de Elasticsearch
Estado del cluster metadatos y asignación de shards

Salud:

  • green: todos los shards primarios y réplicas asignados.
  • yellow: primarios ok, réplicas no asignadas (común en nodo único).
  • red: algún primario no asignado — hay datos no disponibles.

ECK: el operador

apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: portal-es
spec:
  version: 8.19.0
  nodeSets:
    - name: default
      count: 3
      config:
        node.store.allow_mmap: false
      podTemplate:
        spec:
          affinity:
            podAntiAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                - labelSelector:
                    matchLabels:
                      elasticsearch.k8s.elastic.co/cluster-name: portal-es
                  topologyKey: kubernetes.io/hostname
          containers:
            - name: elasticsearch
              resources:
                requests:
                  memory: 1Gi
                  cpu: 250m
                limits:
                  memory: 1Gi
                  cpu: "1"
      volumeClaimTemplates:
        - metadata:
            name: elasticsearch-data
          spec:
            accessModes: ["ReadWriteOnce"]
            resources:
              requests:
                storage: 10Gi

El ECK crea StatefulSet, Services, secrets y configuración. Servicios típicos:

  • portal-es-es-http (9200).
  • portal-es-es-transport (9300, headless).
  • portal-es-es-internal-http.

Heap y memoria

Regla práctica: heap = 50% de la memoria del contenedor, con tope de ~31 GB (compressed oops). El resto es caché del sistema de archivos.

Si el contenedor tiene 1 GiB, deje -Xms512m -Xmx512m. Heap demasiado grande en contenedor pequeño = OOMKilled.

Monitoree:

  • elasticsearch_jvm_memory_used_bytes
  • elasticsearch_cluster_health_status
  • elasticsearch_indices_search_query_time_seconds
  • elasticsearch_indices_indexing_index_time_seconds

Shards: ni pocos, ni demasiados

  • Shards demasiado pequeños: overhead de metadatos.
  • Shards demasiado grandes: recuperación lenta.
  • Réplicas consumen espacio y CPU.

Para un índice de pocos GB, 1–3 shards primarios bastan. No copie “5 shards, 1 réplica” de un tutorial antiguo sin pensar.

Snapshots y restore

Snapshot es el backup de Elasticsearch. Configure un repositorio S3/MinIO:

curl -X PUT "localhost:9200/_snapshot/portal-backup" -H 'Content-Type: application/json' -d '{
  "type": "s3",
  "settings": {
    "bucket": "portal-k8s-backup",
    "endpoint": "http://minio-s3:9000",
    "path_style_access": true
  }
}'

Snapshot manual:

curl -X PUT "localhost:9200/_snapshot/portal-backup/snap-2026-10-30?wait_for_completion=true"

Restore para un índice nuevo:

curl -X POST "localhost:9200/_snapshot/portal-backup/snap-2026-10-30/_restore" \
  -H 'Content-Type: application/json' -d '{
    "indices": "portal-tickets",
    "rename_pattern": "(.+)",
    "rename_replacement": "restored-$1"
  }'

Los snapshots deben programarse (SLM) y probarse.

ILM: ciclo de vida

Los índices crecen. Use ILM para:

  • hot → warm → cold → delete.
  • rollover por tamaño/edad.
  • force merge y shrink.

Sin ILM, el disco se llena y el cluster se pone rojo.

Laboratorio

  1. Inspeccione el cluster:
kubectl -n portal get elasticsearch
kubectl -n portal get pods -l elasticsearch.k8s.elastic.co/cluster-name=portal-es
kubectl -n portal get pvc | grep elasticsearch
  1. Salud y shards:
kubectl get --raw "/api/v1/namespaces/portal/services/portal-es-es-http:9200/proxy/_cluster/health?pretty"
kubectl get --raw "/api/v1/namespaces/portal/services/portal-es-es-http:9200/proxy/_cat/shards?v"
  1. Snapshot y restore en un índice nuevo.

  2. Simule la pérdida de un pod y siga la reasignación de los shards.

Errores comunes

Síntoma Causa
yellow réplicas no asignadas (nodo único)
red primario no asignado; datos no disponibles
disco lleno watermark / sin ILM
OOMKilled heap demasiado grande en el contenedor
split brain quórum perdido (masters insuficientes)
snapshot falla credenciales/endpoint/bucket
búsqueda lenta shards grandes, heap pequeño, query mala

Checklist

  • [ ] 3 nodos con anti-affinity y PVCs.
  • [ ] Heap dimensionado (50% de la RAM, tope 31 GB).
  • [ ] Salud monitoreada (green/yellow/red).
  • [ ] ILM configurado.
  • [ ] Snapshot repository + SLM.
  • [ ] Restore probado en un índice nuevo.
  • [ ] Alertas de disco y JVM.

Glosario

  • shard: división del índice.
  • réplica: copia del shard.
  • watermark: límite de disco que bloquea la escritura.
  • ILM: index lifecycle management.
  • SLM: snapshot lifecycle management.
  • split brain: cluster con más de un master.

Próximo

Ahora vamos a cerrar la Temporada 2 con backup y restore de verdad: Velero, etcd y el drill que prueba que el backup funciona.

Próximo: Curso Kubernetes 19 — Backup y restore: Velero, etcd y drill

Compartir

Seguir leyendo

Lea también

  • Manual LSI / Broadcom MegaRAID — MegaCli y StorCLI
    Tutoriais

    Manual LSI / Broadcom MegaRAID — MegaCli y StorCLI

    Con esta guía, su equipo gana autonomía para diagnosticar rebuilds, resolver foreign configurations, gestionar BBU y CacheCade — con escenarios reales de producción documentados.

    31 de outubro de 202620 min de leitura
  • Nginx Cheatsheet

    Nginx Cheatsheet

    Guía de bolsillo con ejemplos listos para configurar Nginx en producción: desde instalación y virtual hosts hasta ajuste de rendimiento y resolución de problemas.

    31 de outubro de 202612 min de leitura
  • Curso Kubernetes 27 — SLO/SLI, on-call y postmortem sin culpa
    Kubernetes

    Curso Kubernetes 27 — SLO/SLI, on-call y postmortem sin culpa

    Qué prometer, cómo medir y qué hacer cuando el error se dispara: SLI, SLO, presupuesto de error, alertas que despiertan a alguien y postmortem sin caza de brujas.

    31 de outubro de 20265 min de leitura

Comentarios

Aún sin comentarios

Sea el primero en compartir su opinión sobre este artículo.

Deje un comentario

Newsletter

Reciba nuevos artículos

Suscríbase para recibir publicaciones del blog Nyverra en su correo. Enviaremos un enlace de confirmación.

​
  1. Inicio
  2. Kubernetes
  3. Curso Kubernetes 18 — Elasticsearch/ECK en la práctica
Kubernetes
#snapshots#Curso Kubernetes#K8S#Kubernetes

Curso Kubernetes 18 — Elasticsearch/ECK en la práctica

Wedson LopesWedson Lopes
31 de outubro de 20264 min de leitura