一、基于文件的服务发现
基于文件的服务发现是仅仅略优于静态配置的服务发现方式,它不依赖于任何平台或第三方服务,因而也是最简单和通用的服务发现方式。Prometheus Server定期从文件中加载Target信息文件可使用JSON或YAML格式,它含有定义的Target列表,以及可选的标签信息。这些文件可由另一个系统生成,例如Puppet、Ansible或Saltstack等配置管理系统,也可能是由脚本基于CMDB定期查询生成。
1.1、修改Prometheus的配置文件
将Prometheus的配置文件修改为基于文件的服务发现
1.2、准备服务发现需要的文件
创建targets目录,并在targets目录下创建如下两个文件
1.3、检查Prometheus Server的发现结果
通过Prometheus的web界面,看到很快就发现了文件里写的target
在k8s-nodes.yaml文件中删掉一个k8s-node节点,在Prometheus页面上很快就体现出来
这样,有节点添加和删除,只需修改对应的target文件即可,不必修改Prometheus的配置,也不需要重启Prometheus Server
二、基于DNS的服务发现
基于DNS的服务发现针对一组DNS域名进行定期查询,以发现待监控的目标,查询时使用的DNS服务器由resolv.conf文件指定,该发现机制依赖于A/AAAA和SRV资源记录,且仅支持该类方法,尚不支持RFC6763中的高级DNS发现方式。
# A list of DNS domain names to be queried.
names:[ - <string> ]# The type of DNS query to perform. One of SRV,A,or AAAA
[ type: <string> | default = 'SRV' ]#The port number used if the query type is not SRV
[port: <int> ]#The time after which the provided names are refreshed
[ refresh_interval: <duration> | default = 30s ]
三、基于Consul服务发现
[!NOTE] Consul简介
一款基于golang开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能
提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能
3.1、部署Consul
下载地址
安装:
~# unzip consul_version_linux_amd64.zip -d /usr/local/bin/
启动开发者模式
~# mkdir -pv /consul/data/
~# consul agent -dev -ui -data-dir=/consul/data/ -config-dir=/etc/consul/ -client=0.0.0.0
正常应该使用server模式
3.2、服务注册到consul
编辑consul的配置文件,写入k8s集群的三个node节点信息,模仿服务注册到consul
准备好如上配置文件后,consul reload,通过consul页面就可以看到k8s的三个集群节点
3.3、修改Prometheus的配置文件
修改Prometheus的配置文件,k8s-nodes的服务发现配置从consul上发现,过滤tag为nodes的服务
[!NOTE] 核心思想
核心思想就是根据consul上服务注册时的tag,结合Prometheus的Job去发现对应的服务(target)
最多2分钟后在prometheus server页面上就可以看到通过consul发现的target信息
3.4、测试consul动态变化
在consul上注销一个节点的注册
~# consul services deregister -id="k8s-node01"
Prometheus Server上也会同步取消对应节点的指标采集
[!NOTE] 小结
今天先整理这三种服务发现方式,下一篇再统一整理一下基于Kubernetes的API-Server发现K8S集群内部多种target的实现方式,包含K8S集群内部的Prometheus发现本K8S集群内的资源和K8S集群外部Prometheus发现K8S集群内部资源的实现方式,如果对这一话题感兴趣的话,欢迎关注本人公众号,敬请期待我的笔记。
欢迎关注作者的公众号,公众号每天分享运维干货文章