当前位置: 首页 > 面试题库 >

docker swarm中的Prometheus DNS服务发现

范飞翰
2023-03-14
问题内容

我正在为我的服务寻找一些监控和警报解决方案。我发现以下不错的相关作品。

  • Prometheus监控docker swarm
  • 使用Prometheus监控docker swarm集群

两者都使用dns服务发现来监视服务的多个副本。

我尝试重播这些工作,但发现只能获得单个后端容器ip。

# dig A node-exporter

; <<>> DiG 9.10.4-P8 <<>> A node-exporter
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18749
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;node-exporter.         IN  A

;; ANSWER SECTION:
node-exporter.      600 IN  A   10.0.0.42

;; Query time: 0 msec
;; SERVER: 127.0.0.11#53(127.0.0.11)
;; WHEN: Mon Jan 29 02:57:51 UTC 2018
;; MSG SIZE  rcvd: 60

在检查服务时,我发现node-exporter的端点模式是vip。

> docker inspect 242pn4obqsly
...
"Endpoint": {
"Spec": {
    "Mode": "vip"
},
"VirtualIPs": [
    {
        "NetworkID": "61fn8hmgwg0n7rhg49ju2fdld",
        "Addr": "10.0.0.3/24"
    }
]
...

这意味着当与dns联系时,prometheus只能获得单个委托服务ip。然后,内部磅策略将收入请求路由到不同的后端实例。

那相关的工作如何成功呢?

谢谢!


问题答案:

对于PrometheusDNS服务发现,您不想使用通过使用docker swarm内部负载平衡Virtual IP (VIP)

您正在寻找的是 每任务 服务DNS。为了让每一个服务的IP不会忽略你的群,只是 前缀 与码头工人群的服务名称的DNS tasks.

例如,在具有3个节点的集群中,我得到:

$ nslookup tasks.node-exporter
Server:    127.0.0.11
Address 1: 127.0.0.11

Name:      tasks.node-exporter
Address 1: 10.210.0.x node-exporter.xxx.mynet
Address 2: 10.210.0.y node-exporter.yyy.mynet
Address 3: 10.210.0.z node-exporter.zzz.mynet

但是,当我查询不带前缀的服务名称时,会得到一个IP(VIP一个IP,它将对每个容器的请求进行负载均衡):

$ nslookup node-exporter
Server:    127.0.0.11
Address 1: 127.0.0.11

Name:      node-exporter
Address 1: 10.210.0.w ip-x-x-x-x

您可以查看SO上的[此Q/A,以了解在中获得DNS解析的3种不同方式docker swarm。基本上,一个服务命名myservicedocker swarm

  • myservice解析Virtual IP (VIP)为该服务的服务,该服务在内部 负载均衡 到各个任务IP地址。

  • tasks.myservice解析为群集中部署的每个容器的 每个私有IP

  • docker.com 不作为服务名称存在,因此请求将转发到已配置的默认DNS服务器(您可以自定义)。

注意:容器名称也可以解析,尽管直接解析为其IP地址。

查看您提供的链接,node-exporter配置使用了task获得服务的方式:

使用导出程序服务名称,可以配置DNS发现:

scrape_configs:
- job_name: 'node-exporter'
  dns_sd_configs:
  - names:
    - 'tasks.node-exporter'
    type: 'A'
    port: 9100

希望这可以帮助!



 类似资料:
  • 在单体架构时,因为服务不会经常和动态迁移,所有服务地址可以直接在配置文件中配置,所以也不会有服务发现的问题。但是对于微服务来说,应用的拆分,服务之间的解耦,和服务动态扩展带来的服务迁移,服务发现就成了微服务中的一个关键问题。 服务发现分为客户端服务发现和服务端服务发现两种,架构如下图所示。 这两种架构都各有利弊,我们拿客户端服务发现软件Eureka和服务端服务发现架构Kubernetes/SkyD

  • 问题内容: 我正在尝试使用JmDNS在客户端服务器应用程序中启用服务发现。我完全理解服务器端的服务注册表,其代码类似于以下内容: 但是,我在弄清楚如何让我的客户端从注册的服务中检索端口号和IP地址并使用此数据打开TCP连接时遇到了麻烦。我搜索了有关如何使用JmDNS的示例,但无济于事。这里有人可以给我一些基本的例子吗?或者,如果有人在JmDNS上有指向良好资源/教程的链接,可以请他们提供吗? 注意

  • 我有两个微服务, 在localhost:8081上运行的eureka-client-1 运行在localhost:8082上的eureka-client-2 客户端1的application.properties,与客户端2类似(只需更改名称,即eureka-client-2) eureka服务器的Application.Properties

  • 服务发现服务[架构概述]。 { "cluster": "{...}", "refresh_delay_ms": "{...}" } cluster (required, object) 承载服务发现服务的上游群集的标准定义。该群集必须实现和运行SDS HTTP API的REST服务。 refresh_delay_ms (required, integer) 每次访问SDS群集的API延迟

  • 如何包含Eureka服务器 要在项目中包含Eureka服务器,请使用组org.springframework.cloud和工件id spring-cloud-starter-eureka-server的启动器。有关 使用当前的Spring Cloud发布列表设置构建系统的详细信息,请参阅Spring Cloud项目页面。 如何运行Eureka服务器 示例eureka服务器; @SpringBoot

  • 使用“Spring service discovery Kubernetes”而不是直接使用来自Kubernetes的服务DNS有什么好处? 问题1。为了让服务-A能够使用服务DNS连接到服务-B,必须在服务-A之前部署服务-B? 问题2。使用spring Discovery的优点/缺点是什么?

  • Kubernetes中为了实现服务实例间的负载均衡和不同服务间的服务发现,创造了Serivce对象,同时又为从集群外部访问集群创建了Ingress对象。

  • 背景 当前有两个服务,分别是user-service和order-service,nacos服务列表中无法发现两个服务 排查 Nacos v2.2.3 依赖已引入,配置文件已配置addr 运行时未出现连接nacos的日志: 希望大佬们可以帮忙看看是什么问题 问题程序链接 https://oss-20001.oss-cn-qingdao.aliyuncs.com/cloud-demo.zip