我试图在AWS ECS (Fargate)中主持Elasticsearch和kibana。我创建了一个docker-compose.ym文件
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变量。
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节点容器中的日志
{
"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地址。
发布于 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将为您创建下面的日志记录)。
此文件适用于我(请参阅下面所示):
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文件中,并通过在图像下面添加本节来调整该部分:
"ulimits": [
{
"name": "nofile",
"softLimit": 65535,
"hardLimit": 65535
}
]因此,要想概括一下,您需要将我的文章放在上面,将其convert到CFN文件中,添加ulimits片段并在CFN中直接运行它。
您可以从这里向后工作,重新添加变量等。
HTH
https://stackoverflow.com/questions/70284140
复制相似问题