3
votes

Conteneur Docker Elasticsearch en mode non-prod pour éliminer l'exigence vm.max_map_count = 262144

Comment puis-je configurer les conteneurs Docker elasticsearch (elasticsearch: 7.5.0) pour utiliser moins de ressources et s'exécuter en mode de non-production?

Je souhaite exécuter des conteneurs dans Jenkins et sur mon bureau et répond aux exigences de ce document élastique pour exécuter des images docker en production

Je voudrais savoir comment je peux modifier mon elasticsearch.yml que je copie dans le conteneur pour le configurer pour mettre le conteneur dans un mode moins gourmand en ressources.

Quelqu'un sait-il comment faire ça?


5 commentaires

Je n'ai pas encore. Je devrais pouvoir revenir pour tester dans quelques jours. Merci pour l'info


Non seulement cela fonctionne, mais c'est aussi ainsi que nos scripts d'environnement de laboratoire de test le font ... et j'ai écrit l'orchestration de ceux-ci et je l'ai manqué. Ce contexte est pour notre machine de construction et les tests de bureau. Merci


Merci d'avoir accepté la réponse, je suis heureux que cela vous ait aidé :)


Je vous en prie. Espérons que cela aide aussi la personne suivante


Merci pour ces mots gentils :)


3 Réponses :


2
votes

Vous pouvez exécuter votre docker en mode développement et créer un cluster ES à nœud unique en suivant le lien ES officiel sur le cluster ES à nœud unique . Comme mentionné dans ce lien.

Pour démarrer un cluster Elasticsearch à nœud unique à des fins de développement ou de test, spécifiez la découverte de nœud unique pour contourner les contrôles d'amorçage:

En bref, tout ce que vous avez à faire est d'ajouter -e "discovery.type=single-node" dans votre commande docker, ce qui activerait le mode dev et vous n'aurez pas à satisfaire les limites strictes des environnements de production, c'est- à- dire qu'il contournera vérifications de bootstrap .

Vous trouverez plus d'informations sur vos paramètres et comment les désactiver ici

node.store.allow_mmap. Il s'agit d'un paramètre booléen indiquant si le mappage mémoire est autorisé ou non. La valeur par défaut est de l'autoriser.

Ainsi, si -e "discovery.type=single-node env. Ne le désactive pas, vous pouvez le définir explicitement sur false dans votre elasticsearch.yml .


0 commentaires

0
votes

J'ai également rencontré ce problème lorsque j'utilisais cette image docker.elastic.co/elasticsearch/elasticsearch:7.6.2 élastique-search pour un cluster à un seul nœud.

L'erreur que j'obtenais est:

FROM docker.elastic.co/elasticsearch/elasticsearch:7.6.2
RUN echo discovery.seed_hosts : 127.0.0.1:9300 >> /usr/share/elasticsearch/config/elasticsearch.yml 
RUN cat /usr/share/elasticsearch/config/elasticsearch.yml

Pour démarrer un cluster Elasticsearch à nœud unique avec Docker

Solution1

La solution serait donc d'exécuter une image docker avec une variable d'environnement -e "discovery.type=single-node" dans la commande docker run.

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.6.2

Solution2

Ajoutez ce "discovery.seed_hosts : 127.0.0.1:9300" dans le fichier eleasticsearch.yml. Et créez votre propre image de docker et utilisez-la.

Dockerfile ressemblera à ceci.

ERROR: [1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured

Pour plus de détails, cliquez ici .


3 commentaires

J'ai déjà fourni la solution 1 dans ma réponse et à propos de la solution 2, je ne sais pas comment cela fonctionne, pouvez-vous expliquer pourquoi il évite les contrôles de production et l'exécute en mode développement?


@OpsterElasticsearchNinja Je viens de mettre à jour la réponse et de fournir le Dockerfile alors Dockerfile un œil. Ici, nous utilisons l'adresse de bouclage comme seed_hosts afin que la recherche élastique ne soit alors accessible qu'à partir de la machine hôte elle-même. J'espère que c'est plus clair maintenant.


pourquoi le rendre complexe ?, utiliser simplement discovery.type=single-node ignore les contrôles de production et est mentionné dans la configuration elasticsearch et contient beaucoup de documentation.



1
votes

Si vous lisez ceci, essayez de savoir comment le faire lorsque vous utilisez docker-compose :

Avec une clé d'environnement

docker-compose.yml:

  elasticsearch:
    volumes:
      - /path-to/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro

Avec un elasticsearch.yml personnalisé

Créez elasticsearch.yml :

discovery:
  type: single-node

Montez-le en tant que volume sur votre conteneur dans docker-compose.yml:

  elasticsearch:
    environment:
      - discovery.type=single-node

Assurez-vous que la première partie est en fait un chemin, elle doit commencer par / ou ./ sinon elle va la traiter comme un volume nommé. La deuxième partie est le chemin à l'intérieur du conteneur afin qu'il puisse être laissé tel quel.

Le fichier doit se trouver à un emplacement pour lequel vous avez activé le partage de fichiers dans votre application Docker. Configurez cela dans Préférences> Ressources> Partage de fichiers si vous ne l'avez pas fait.


0 commentaires