Служба Elasticsearch, запущенная на кластере Minikube, недоступна изнутри кластера
Я использую kompose для развертывания этого docker-compose.yaml
version: '3'
services:
webapp:
build:
context: ../../../
dockerfile: config/docker/dev/Dockerfile-dev
container_name: myWebApp-dev
command: ["/bin/sh", "-ec","sleep 1000"]
image: 'localhost:5002/webapp:1'
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
- ELASTICSEARCH_HOST=elasticsearch
labels:
kompose.image-pull-policy: 'IfNotPresent'
kompose.service.type: nodeport
ports:
- "4000:4000"
- "3000:3000"
depends_on:
- elasticsearch
links:
- elasticsearch
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.0.1
container_name: elasticsearch
command: ["/bin/sh", "-ec","sleep 1000"]
environment:
- node.name=elasticsearch
- discovery.seed_hosts=es02
- cluster.initial_master_nodes=elasticsearch,es02
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata01:/usr/share/elasticsearch/data
ports:
- 9200:9200
- 9300:9300
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.0.1
container_name: es02
command: ["/bin/sh", "-ec","sleep 1000"]
environment:
- node.name=es02
- discovery.seed_hosts=elasticsearch
- cluster.initial_master_nodes=elasticsearch,es02
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata02:/usr/share/elasticsearch/data
в миникубе. Эластичная поисковая система и сервис работают. Тем не менее, веб-приложение не может получить доступ к кластеру asticsearch, так как я получаю сообщение об ошибке отказа в соединении при керлинге из модуля веб-приложения -> curl: (7) Не удалось подключиться к порту 10200 10.58.5.31: Соединение отклонено. Кто-нибудь знает, в чем причина этой проблемы и как ее исправить?
1 ответ
В elasticsearch
раздел, у вас есть команда оболочки sleep
, И, после этого, никогда не запускалось ни одного экземпляра эластичного поиска.
command: ["/bin/sh", "-ec","sleep 1000"]
Итак, похоже, что в контейнере не работает эластичный поиск, и поэтому connection refused
это происходит.
Чинить:
Избавляться от command:
из elasticsearch
а также es02
таким образом, по умолчанию command
будет использован.
Примечание:
Теперь, когда запустится эластичный поиск, вы столкнетесь с двумя ошибками (описанными ниже) с этим compose yaml в kubernetes. Они не связаны с этим постом, но я постараюсь дать вам направление, где искать.
ERROR: [2] bootstrap checks failed
[1]: memory locking requested for elasticsearch process but memory is not locked
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
Вот,
- вам нужно обновить хост-систему для
vm.max_map_count
, Exec в виртуальную коробку Minikubeminikube ssh
и бегиsudo -s sysctl -w vm.max_map_count=262144
изменить map_count ядра хоста. Это будет работать, потому что докер / контейнер не обеспечивает изоляцию на уровне ядра.
Для миникуба,
minikube ssh 'sudo -s sysctl -w vm.max_map_count=262144'
- Ulimit недоступен в
kompose
, Смотрите проблему здесь. Так что либо вы должны избавиться от обоих,bootstrap.memory_lock=true
изenvironment:
разделы, или вам может потребоваться обновить образ докера. Этот вопрос уже задавался здесь в stackru.
Итак, улучшенный компосе ямл (хорошо работает на миникубе):
version: '3'
services:
webapp:
build:
context: ../../../
dockerfile: config/docker/dev/Dockerfile-dev
container_name: myWebApp-dev
command: ["/bin/sh", "-ec","sleep 1000"]
image: 'localhost:5002/webapp:1'
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
- ELASTICSEARCH_HOST=elasticsearch
labels:
kompose.image-pull-policy: 'IfNotPresent'
kompose.service.type: nodeport
ports:
- "4000:4000"
- "3000:3000"
depends_on:
- elasticsearch
links:
- elasticsearch
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.0.1
container_name: elasticsearch
environment:
- node.name=elasticsearch
- discovery.seed_hosts=es02
- cluster.initial_master_nodes=elasticsearch,es02
- cluster.name=docker-cluster
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- esdata01:/usr/share/elasticsearch/data
ports:
- 9200:9200
- 9300:9300
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.0.1
container_name: es02
environment:
- node.name=es02
- discovery.seed_hosts=elasticsearch
- cluster.initial_master_nodes=elasticsearch,es02
- cluster.name=docker-cluster
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- esdata02:/usr/share/elasticsearch/data
Тем не менее, я бы предложил следовать официальному документу эластичного поиска вместо использования compose для установки эластичного поиска в kubernetes.