Aller au contenu

OpenSearch

Aperçu

OpenSearch fournit la recherche plein texte et l'indexation pour AKKO, servant principalement de backend de recherche pour OpenMetadata. Il indexe les entités de métadonnées (tables, pipelines, dashboards, utilisateurs, tags) et alimente la barre de recherche, les requêtes de graphe de lignage et les fonctionnalités de découverte de données de la couche de gouvernance.

Architecture

  OpenMetadata Server ──→ OpenSearch (:9200)
       │                    (index de recherche)
  PostgreSQL (stockage des métadonnées)

OpenMetadata écrit les métadonnées des entités dans PostgreSQL pour la persistance et les indexe simultanément dans OpenSearch pour une recherche plein texte rapide. OpenSearch est un composant principalement en lecture — toutes les écritures proviennent du pipeline d'indexation d'OpenMetadata.

Ports

Port Fonction Exposé
9200 API REST — requêtes de recherche et gestion des index Interne uniquement
9300 Transport inter-noeud (inutilisé en mode noeud unique) Interne uniquement

Interne uniquement

OpenSearch n'est jamais exposé en dehors du cluster. Seul OpenMetadata communique directement avec lui.

Configuration

Mode noeud unique

En développement et pour les petits déploiements, OpenSearch fonctionne en cluster à noeud unique, ce qui évite la surcharge de coordination de cluster :

discovery.type: single-node

Plugin de sécurité

Le plugin de sécurité est désactivé en développement pour simplifier la mise en place. En production, activez-le et configurez TLS + authentification :

plugins.security.disabled: true    # dev uniquement

Sécurité en production

En environnement de production, activez le plugin de sécurité OpenSearch avec des certificats TLS et l'authentification des utilisateurs internes. La configuration de développement avec plugins.security.disabled: true n'est pas adaptée à la production.

Mémoire

OpenSearch nécessite une quantité significative de mémoire pour l'indexation et les opérations de recherche :

OPENSEARCH_JAVA_OPTS: "-Xms512m -Xmx512m"

Le heap par défaut de 512 Mo est suffisant pour le développement. Pour la production avec de grands catalogues de métadonnées (plus de 10 000 entités), augmentez à 1-2 Go.

Chart Helm

OpenSearch est déployé via le sous-chart personnalisé akko-opensearch :

helm/akko/charts/akko-opensearch/
├── Chart.yaml
├── values.yaml
└── templates/
    ├── statefulset.yaml
    ├── service.yaml
    └── configmap.yaml

Valeurs clés

values.yaml
akko-opensearch:
  image:
    repository: opensearchproject/opensearch
    tag: "2.19.1"
  replicas: 1
  config:
    discovery.type: single-node
    plugins.security.disabled: "true"
  resources:
    requests:
      memory: 512Mi
    limits:
      memory: 1Gi
  persistence:
    enabled: true
    size: 5Gi

Intégration avec OpenMetadata

OpenMetadata nécessite OpenSearch pour ses fonctionnalités de recherche. La connexion est configurée dans les valeurs d'OpenMetadata :

openmetadata:
  config:
    elasticsearch:
      host: akko-opensearch
      port: 9200
      scheme: http

API compatible Elasticsearch

OpenMetadata utilise la bibliothèque client Elasticsearch, mais OpenSearch maintient la compatibilité API. La clé de configuration est nommée elasticsearch bien que le backend soit OpenSearch.

Vérification de santé

OpenSearch expose un point de santé du cluster :

GET http://akko-opensearch:9200/_cluster/health

Renvoie une réponse JSON avec status: "green" (ou "yellow" en mode noeud unique, ce qui est normal).

Dépannage

Problèmes courants

  • La recherche OpenMetadata ne renvoie aucun résultat : Vérifiez qu'OpenSearch fonctionne et que l'index existe. Lancez kubectl exec deploy/akko-opensearch -- curl -s localhost:9200/_cat/indices pour lister les index. Si vide, déclenchez une réindexation depuis l'UI d'administration d'OpenMetadata (Settings > Event Publishers > Elasticsearch).
  • Pod OOMKilled : OpenSearch est gourmand en mémoire. Si le pod est tué avec OOMKilled, augmentez la limite mémoire dans values.yaml et assurez-vous que la taille du heap OPENSEARCH_JAVA_OPTS correspond (le heap doit être ~50% de la limite mémoire du conteneur).
  • Démarrage lent (>60s) : OpenSearch effectue une récupération d'index au démarrage. Si le timeout de la sonde de disponibilité est trop court, le pod peut redémarrer en boucle. Augmentez initialDelaySeconds à 90s pour la sonde de disponibilité.