首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >船坞组合中两种服务的通信方式

船坞组合中两种服务的通信方式
EN

Stack Overflow用户
提问于 2021-12-09 02:45:33
回答 1查看 331关注 0票数 0

我试图在AWS ECS (Fargate)中主持Elasticsearch和kibana。我创建了一个docker-compose.ym文件

代码语言:javascript
复制
version: '2.2'
services:
  es-node:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.0
    deploy:
          resources:
            limits:
              memory: 8Gb
    command: > 
        bash -c 
          'bin/elasticsearch-plugin install analysis-smartcn https://github.com/medcl/elasticsearch-analysis-stconvert/releases/download/v7.9.0/elasticsearch-analysis-stconvert-7.9.0.zip;
          /usr/local/bin/docker-entrypoint.sh'
    container_name: es-$ENV
    environment:
      - node.name=es-$ENV
      - cluster.name=es-docker-cluster
      - discovery.type=single-node
      # - discovery.seed_hosts=es02,es03
      # - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - ELASTIC_PASSWORD=$ES_DB_PASSWORD
      - xpack.security.enabled=true
    logging:
      driver: awslogs
      options:
         awslogs-group: we-two-works-db-ecs-context
         awslogs-region: us-east-1
         awslogs-stream-prefix: es-node
    volumes:
      - elastic_data:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic

  kibana-node:
    image: docker.elastic.co/kibana/kibana:7.9.0
    container_name: kibana-$ENV
    ports:
      - 5601:5601
    environment:
      ELASTICSEARCH_URL: $ES_DB_URL
      ELASTICSEARCH_HOSTS: '["http://es-$ENV:9200"]'
      ELASTICSEARCH_USERNAME: elastic
      ELASTICSEARCH_PASSWORD: $ES_DB_PASSWORD
    networks:
      - elastic
    logging:
      options:
        awslogs-group: we-two-works-db-ecs-context
        awslogs-region: us-east-1
        awslogs-stream-prefix: "kibana-node"

volumes: 
  elastic_data:
    driver_opts:
      performance-mode: maxIO
      throughput-mode: bursting
      uid: 0
      gid: 0

networks:
  elastic:
    driver: bridge

并使用.env.development文件传入env变量。

代码语言:javascript
复制
ENV="development"

ES_DB_URL="localhost"
ES_DB_PORT=9200
ES_DB_USER="elastic"
ES_DB_PASSWORD="****"

在创建指向ECS docker compose --env-file ./.env.development up的停靠器上下文之后,使用此命令在ECS中的堆栈上,但是,在创建堆栈之后,kibana节点无法与elasticsearch节点建立通信。检查kibana节点容器中的日志

代码语言:javascript
复制
{
    "type": "log",
    "@timestamp": "2021-12-09T02:07:04Z",
    "tags": [
        "warning",
        "plugins-discovery"
    ],
    "pid": 7,
    "message": "Expect plugin \"id\" in camelCase, but found: beats_management"
}
{
    "type": "log",
    "@timestamp": "2021-12-09T02:07:04Z",
    "tags": [
        "warning",
        "plugins-discovery"
    ],
    "pid": 7,
    "message": "Expect plugin \"id\" in camelCase, but found: triggers_actions_ui"
}
[BABEL] Note: The code generator has deoptimised the styling of /usr/share/kibana/x-pack/plugins/canvas/server/templates/pitch_presentation.js as it exceeds the max of 500KB.

在进行研究后,我发现ecs不支持service.networks坞编写文件字段,并给出了这些说明Communication between services is implemented by SecurityGroups within the application VPC.。我想知道如何在docker-compose.yml文件中设置这些指令,因为在创建堆栈之后会分配IP地址。

EN

回答 1

Stack Overflow用户

发布于 2021-12-09 07:47:46

这些容器应该能够通过它们的组合服务名称相互通信。因此,例如,kibana容器应该能够使用es-node到达ES节点。我想这需要您设置ELASTICSEARCH_HOSTS: '["http://es-node:9200"]'

我对ELASTICSEARCH_URL: $ES_DB_URL也不太确定。我看到您设置了ES_DB_URL="localhost",但这意味着kibana容器将调用localhost来尝试访问ES服务(这可能在膝上型计算机上工作,其中所有容器都运行在一个平面网络上,但这不是ECS上的工作方式--在ECS上,每个组合服务都是单独的ECS服务)。

我对提供的撰写文件进行了更新。请注意,我已经将其简化为删除了一些变量,如env文件、日志条目(为什么需要它们?撰写/ECS将为您创建下面的日志记录)。

此文件适用于我(请参阅下面所示):

代码语言:javascript
复制
services:
  es-node:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.0
    deploy:
      resources:
        reservations:
          memory: 8Gb
    command: > 
        bash -c 
          'bin/elasticsearch-plugin install analysis-smartcn https://github.com/medcl/elasticsearch-analysis-stconvert/releases/download/v7.9.0/elasticsearch-analysis-stconvert-7.9.0.zip;
          /usr/local/bin/docker-entrypoint.sh'
    container_name: es-node
    environment:
      - node.name=es-node
      - cluster.name=es-docker-cluster
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - ELASTIC_PASSWORD=thisisawesome
      - xpack.security.enabled=true
    volumes:
      - elastic_data:/usr/share/elasticsearch/data
    ports:
      - 9200:9200

  kibana-node:
    image: docker.elastic.co/kibana/kibana:7.9.0
    deploy:
      resources:
        reservations:
          memory: 8Gb
    container_name: kibana-node
    ports:
      - 5601:5601
    environment:
      ELASTICSEARCH_URL: es-node
      ELASTICSEARCH_HOSTS: http://es-node:9200
      ELASTICSEARCH_USERNAME: elastic
      ELASTICSEARCH_PASSWORD: thisisawesome

volumes: 
  elastic_data:
    driver_opts:
      performance-mode: maxIO
      throughput-mode: bursting
      uid: 0
      gid: 0

有两件事我必须解决:

1-基巴纳任务需要更多的马力( 0.5 vCPU和512 of内存(默认)是不够的)。我将内存设置为8GB (这将CPU设置为1),然后出现了Kibana容器。

2-我不得不增加ES容器的ulimits。日志中的一些错误消息-- pointed到max文件打开和vm.max_map_count --都指向需要调整的ulimits。对于Fargate,您需要任务定义中的一个特殊部分。我知道有一种方法可以通过overlays将CFN代码嵌入到撰写文件中,但我发现可以更容易地/快速地将撰写嵌入到CFN文件中,并通过在图像下面添加本节来调整该部分:

代码语言:javascript
复制
        "ulimits": [
          {
            "name": "nofile",
            "softLimit": 65535,
            "hardLimit": 65535
          }
        ]

因此,要想概括一下,您需要将我的文章放在上面,将其convert到CFN文件中,添加ulimits片段并在CFN中直接运行它。

您可以从这里向后工作,重新添加变量等。

HTH

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70284140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档