kubernetes - Metricbeat kubernetes 模块无法连接到 kubelet

标签 kubernetes elastic-stack metricbeat

我们有一个设置,其中 Metricbeat 作为 DaemonSet 部署在 Kubernetes 集群(特别是 AWS EKS)上。

一切似乎都正常运行,但 kubelet 联系。

为了澄清,以下模块:

- module: kubernetes
  enabled: true
  metricsets:
    - state_pod
  period: 10s
  hosts: ["kube-state-metrics.system:8080"]

工作正常(事件流入logstash/elastic)。

但是,此模块配置不适用于主机值的任何变体(localhost/kubernetes.default/whatever):
- module: kubernetes
  period: 10s
  metricsets:
    - pod
  hosts: ["localhost:10255"]
  enabled: true
  add_metadata: true
  in_cluster: true

NOTE: using cluster IP instead of localhost (so that it goes to control plane) also works (although doesn't retrieve the needed information, of course).

The configuration above was taken directly from the Metricbeat documentation and immediately struck me as odd -- how does localhost get translated (from within Metricbeat docker) to corresponding kubelet?



正如人们所预料的那样,鉴于上述情况,该错误是:
error making http request: Get http://localhost:10255/stats/summary: 
dial tcp [::1]:10255: connect: cannot assign requested address

这表明某种连接问题。

但是,当 SSH-ing 到任何部署 Metricbeat 的节点时,http://localhost:10255/stats/summary提供正确的输出:
{
  "node": {
   "nodeName": "...",
   "systemContainers": [
    {
     "name": "pods",
     "startTime": "2018-12-06T11:22:07Z",
     "cpu": {
      "time": "2018-12-23T06:54:06Z",
      ...
     },
     "memory": {
      "time": "2018-12-23T06:54:06Z",
      "availableBytes": 17882275840,
      ....

我一定遗漏了一些非常明显的东西。任何建议都可以。

注意:我在 Elasticsearch Forums 上交叉发布(并且几天没有回复)相同的内容

最佳答案

通过 valueFrom 注入(inject) Pod 的节点 IP env: 中的提供者列表:

env:
- name: HOST_IP
  valueFrom:
    fieldRef: status.hostIP

然后更新 metricbeat 配置文件以使用主机的 IP:
hosts: ["${HOST_IP}:10255"]

哪个 metricbeat 将通过其 environment variable config injection 解析

关于kubernetes - Metricbeat kubernetes 模块无法连接到 kubelet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53910022/

相关文章:

docker - 在 Kubernetes 中使用 fluentd 读取容器日志时的权限问题

kubernetes - 如何更改Kubernetes主机路径配置器的安装路径?

kubernetes - 在自定义 Helm chart 中禁用子图

kubernetes - 一个 Metricbeat Pod 来监控多个 RabbitMQ 容器

kubernetes - Kubernetes Pod内部通信

kubernetes - GCP-如何使用Ingress在负载均衡器上服务多个应用程序?

elasticsearch - elasticsearch中的文档被自动删除?

kubernetes - 使用外部ELK堆栈记录Kubernetes

elasticsearch - 在Metricbeat中设置beat.hostname

elasticsearch - 如何在ElasticSearch中读取最新索引