Служба Elasticsearch, запущенная на кластере Minikube, недоступна изнутри кластера - PullRequest
0 голосов
/ 10 июня 2019

Я использую 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) Не удалось подключиться к порту 9200 10.108.5.31: Соединение отклонено.Кто-нибудь знает, в чем причина этой проблемы и как ее исправить?

1 Ответ

0 голосов
/ 13 июня 2019

В разделе elasticsearch у вас есть команда оболочки на sleep.И после этого никогда не запускались экземпляры эластичного поиска.

command: ["/bin/sh", "-ec","sleep 1000"]

Итак, похоже, что в контейнере не работает эластичный поиск, и поэтому connection refused происходит.

Чтобы исправить:

Избавьтесь от command: от elasticsearch и es02, таким образом, будет использоваться значение по умолчанию command.

Примечание:

Теперь, когда запустится эластичный поиск, вы столкнетесь с двумя ошибками (описанными ниже) с этим compam 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]

Здесь

  1. вам необходимо обновить хост-систему для vm.max_map_count.Выполните в виртуальной коробке minikube minikube ssh и запустите sudo -s sysctl -w vm.max_map_count=262144, чтобы изменить количество_карт ядра ядра.Это будет работать, потому что докер / контейнер не обеспечивает изоляцию на уровне ядра .

Для мини-куба,

minikube ssh 'sudo -s sysctl -w vm.max_map_count=262144'
ulimit недоступен в kompose. Смотрите проблему здесь .Так что либо вы должны избавиться от обоих bootstrap.memory_lock=true из environment: разделов, либо вам может потребоваться обновить образ докера.Этот вопрос уже задается здесь в stackoverflow.

Итак, улучшенный компонент 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
    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.

...