Служба 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]

Вот,

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

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

minikube ssh 'sudo -s sysctl -w vm.max_map_count=262144'
  1. 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.

Другие вопросы по тегам