Kubernetes 如何从k8s中的不同吊舱连接到容器?

Kubernetes 如何从k8s中的不同吊舱连接到容器?,kubernetes,Kubernetes,我在k8s中的两个pod中创建了两个容器,elasticsearch和kibana。 kibana容器需要访问端口9200上的elasticsearch端点。因此,我将env设置为http://es-cluster-1.elasticsearch.default.svc.local:9200基于此文档: 但在kibana日志中,我可以看到它无法到达这个终点。我做错了什么 {“type”:“log”,“timestamp”:“2020-12-31T07:44:05Z”,“tags”:[“error

我在k8s中的两个pod中创建了两个容器,
elasticsearch
kibana
kibana
容器需要访问端口9200上的elasticsearch端点。因此,我将env设置为
http://es-cluster-1.elasticsearch.default.svc.local:9200
基于此文档:

但在kibana日志中,我可以看到它无法到达这个终点。我做错了什么

{“type”:“log”,“timestamp”:“2020-12-31T07:44:05Z”,“tags”:[“error”,“elasticsearch”,“data”],“pid”:6,“message”:“[ConnectionError]:getaddrinfo ENOTFOUND es-cluster-1.elasticsearch-entrypoint.default.svc.local es-cluster-1.elasticsearch entrypoint.default.svc.local:9200”


您需要通过创建的服务访问它,以便在statefulset中的所有pod之间实现流量平衡
elasticsearch entrypoint.svc.cluster.local
(如果您的群集DNS是默认的,则为cluster.local) 您也不需要指定名称空间,除非您试图从同一名称空间进行通信(如果kibana和elasticsearch在默认情况下都是pod)


此服务将使用标签选择器向标签名称为:elasticsearch的任何pod发送流量。我尝试运行YAML配置,但无法运行,pod将继续重新启动

,您的服务应该在“elasticsearch entrypoint.svc.cluster.local”上可用,仅当您的pod正在运行时可用

有关DNS的更多信息,请阅读文档

也就是说,让我们修复YAML配置

既然你的吊舱没有运行,我们该怎么办?检查日志,我也发现了有趣的日志条目:

ERROR: [1] bootstrap checks failed
[1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
所以,elasticsearch发现服务一定有问题,好吗。 幸运的是,我找到了rancher实验室关于在k8s上运行elasticserach的博客,我阅读了他们的配置,并调整了您的原始配置,使其成为

apiVersion:v1 种类:配置地图 元数据: 名称:es配置 数据: elasticsearch.yml:| network.host:“0.0.0.0” cluster.initial_master_节点:es-cluster-0 discovery.zen.minimum_主节点:1 xpack.security.enabled:false xpack.monitoring.enabled:false --- apiVersion:apps/v1 种类:StatefulSet 元数据: 名称:es集群 规格: serviceName:elasticsearch入口点 副本:1份 选择器: 火柴标签: 名称:elasticsearch 模板: 元数据: 标签: 名称:elasticsearch 规格: 卷数: -名称:elasticsearch配置 配置映射: 名称:es配置 项目: -关键字:elasticsearch.yml 路径:elasticsearch.yml 容器: -名称:elasticsearch 图片:elasticsearch:7.10.1 端口: -集装箱港口:9200 姓名:rest -集装箱港口:9300 名称:节点间 体积数量: -名称:elasticsearch配置 挂载路径:/usr/share/elasticsearch/config/elasticsearch.yml 子路径:elasticsearch.yml --- apiVersion:apps/v1 种类:部署 元数据: 姓名:基巴纳 规格: 副本:1份 选择器: 火柴标签: 姓名:基巴纳 模板: 元数据: 标签: 姓名:基巴纳 规格: 容器: -姓名:基巴纳 图片:kibana:7.10.1 端口: -集装箱港口:5601 环境: -名称:ELASTICSEARCH_主机 价值:http://elasticsearch-entrypoint.default.svc.cluster.local:9200 --- 版本:v1 种类:服务 元数据: 名称:elasticsearch入口点 名称空间:默认值 规格: 集群:无 选择器: 名称:elasticsearch 端口: -港口:9200 姓名:rest -港口:9300 名称:节点间 --- 版本:v1 种类:服务 元数据: 名称:kibana入口点 名称空间:默认值 规格: 选择器: 姓名:基巴纳 端口: -港口:5601 不同之处在于,现在ES pod从指定的配置映射读取配置,为了确保服务正常运行,我们在YAML规范中指定livenessProbe,或者使用

/ > dig +search elasticsearch-entrypoint

; <<>> DiG 9.16.6 <<>> +search elasticsearch-entrypoint
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27045
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: ca540a28cfb103a8 (echoed)
;; QUESTION SECTION:
;elasticsearch-entrypoint.default.svc.cluster.local. IN A

;; ANSWER SECTION:
elasticsearch-entrypoint.default.svc.cluster.local. 30 IN A 10.244.82.52

;; Query time: 1 msec
;; SERVER: 10.96.0.10#53(10.96.0.10)
;; WHEN: Thu Dec 31 09:33:32 UTC 2020
;; MSG SIZE  rcvd: 157

/ #
/ > nc -vz elasticsearch-entrypoint.default.svc.cluster.local. 9200
elasticsearch-entrypoint.default.svc.cluster.local. (10.244.82.52:9200) open
/>挖掘+搜索弹性搜索入口点
;  挖掘9.16.6+搜索弹性搜索入口点
;; 全局选项:+cmd
;; 得到答案:
;; 警告:。本地为多播DNS保留
;; 您当前正在测试mDNS查询泄漏到DNS时会发生什么情况

;; ->>HEADER在复制问题时,我遇到了与kibana pod无法连接完全相同的问题,但原因是
es-cluster-0
pod因此错误而掉落:

[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
这是因为elasticsearch默认使用driectory存储其索引。默认操作系统对mmap计数的限制可能太低,这可能导致内存不足异常

可以使用以下命令更改此值:

sysctl -w vm.max_map_count=262144
为此,您必须执行到
minikube

minikube ssh
然后使用该命令:

docker@minikube:~$ sudo sysctl -w vm.max_map_count=262144
vm.max_map_count = 262144

您可以阅读有关vm最大映射计数的更多信息。

我尝试使用
elasticsearch entrypoint.svc.cluster.local
主机名,但仍然无法访问它。以及您提到的端点与本文档中的端点不同的原因:谢谢您的回答。我尝试了配置,但仍然出现以下错误:
请求错误,正在重试\n设置http://elasticsearch-entrypoint.default.svc.local:9200/_xpack =>getaddrinfo ENOTFOUND elasticsearch-entrypoint.default.svc.local elasticsearch entrypoint.default.svc.local:9200
用于重新启动问题,yaml文件中缺少一个env,我已在帖子中对其进行了更新。你能再次尝试配置文件吗?哎呀,我粘贴了错误的配置,我刚刚编辑了我的答案,你能重试配置吗?我从以前的“cluster.initial\u master\u nodes:ES-cluster-0 xpack.security.enabled:false xpack.monitoring.enabled:false”将此附加条目添加到ES配置中。我尝试了最新的配置,但仍然出现以下错误:
GEThttp://elasticsearch-entrypoint.default.svc.cluster.local:9200/_xpack =>getaddrinfo
docker@minikube:~$ sudo sysctl -w vm.max_map_count=262144
vm.max_map_count = 262144