Kubernetes 中使用consul-template渲染配置 当前公司使用consul来实现服务发现,如Prometheue配置中的target和alertmanager注册都采用了consul服务发现的方式 本文中描述如何使用consul-template来渲染配置文件。 使用方式 consul-template是hashicorp开发的一个模板渲染工具,它采用了Go template语法。 命令行使用方式如下: $ consul-template -log-level debug -consul-addr==<consul-address>:<consul-port> -consul-token 服务端主要用于配置到服务端(Consul、Vault和Nomad)的连接;Templates可以指定多个模板(source)和渲染结果(destination);Modes用于配置consul-template 编写模板 consul-template使用的Go template的语法,除此之外,它还提供了丰富的内置方法,用于支持Consul(文章中搜索关键字Query Consul )、Vault(文章中搜索关键字
【转载请注明出处】:https://cloud.tencent.com/developer/article/1627963 Consul-Template简介 Consul-Template是基于Consul Consul-Template提供了一个便捷的方式从Consul中获取存储的值,Consul-Template守护进程会查询Consul实例来更新系统上指定的任何模板。 Consul-Template的使用场景 Consul-Template可以查询Consul中的服务目录、Key、Key-values等。 因为Consul-Template还有Dry模式。在Dry模式,Consul-Template会将结果呈现在STDOUT,所以操作员可以检查输出是否正常,以决定更换模板是否安全。 项目地址:https://github.com/hashicorp/consul-template Consul-Template安装 Consul-Template和Consul一样,也是用Golang
实验背景 在服务发现和注册的基础上,本文将引入 Nginx反向代理服务器和 Consul-template[1] 组件,实现动态的服务负载均衡。 Consul-template Consul-template 是 HashiCorp 基于 Consul 所提供的可扩展的工具,通过监听 Consul 中的数据变化,动态地修改一些配置文件中地模板。 Nginx 配置文件的模板,并重新加载配置文件; Consul-template 和 nginx 必须安装在同一台机器上,因为 Consul-template 需要动态修改 nginx 的配置文件 nginx.conf Consul-template 自动去修改和替换 Nginx 服务器下的 nginx配置文件中的模板,并重新加载服务达到自动负载均衡的目的。 查看正常启动的容器进程,观察Consul、Registrator 和 Nginx/Consul-template的容器都正常启动。 ? 检查服务运行 (d).
前言 consul-template 是 Consul 的一个守护程序,使用 consul-template 可以方便快速的实现对 Consul Key/Value 存储系统的访问,可以从 KV 系统中读取数据 consul-template 的特点 智能发现:一旦开始运行 consul-template ,consul-template 将会自动的发现 Consul 中的 Key/Value 变更,并自动更新到本地模板文件 重复过滤:consul-template 内部可以跨实例对数据进行重复筛选,多个 consul-template 实例进行选举,确定只有一个 consul-template 执行 KV 查询,然后将结果同步到其它 文件内容 在 consul-template 本地建立 tpl 文件 回到 consul-template 服务器上的目录 /usr/local/bin/consul-template ,创建一个 find_adress.tpl 启动 consul-template 终于可以启动了 consul-template 了,激动人心哪,consul-template 提供两种启动方式,命令行参数/加载配置文件 方式启动,就便利性来说,
Docker一键部署Consul集群原文 安装consul-template以及基础环境 此处,安装下consul-template,然后运行一个nginx容器,并且把nginx配置文件挂载到宿主机上: consul-template_0.20.0_linux_amd64.zip chmod +x consul-template mv consul-template /usr/local/bin/ docker 要监听的模板文件backend_nginx.ctmpl,consul-template可以同时指定多个模板文件,如下所示: consul-template \ -consul $consul_cluster_address 这说明consul-template按照预期完成了工作。 ? Access Backend server by consul-template 到这里,基本上完成了使用consul-template与consul实现nginx配置文件的自动更新。
官网下载地址 consul-template version 0.19.0 consul-template基于consul的自动替换配置文件的应用。 consul-template 下载地址 nginx version 1.21.6 地球人都知道的嘛!!! web server 通过 registrator 注册到consul服务里,然后consul-template订阅consul实现nginx配置更新重载,达到动态扩容(增加/减少),保证服务稳定可靠运行的目的 format=text'); echo '
';
print_r($res);
die;
搭建nginx转发服务,安装consul-template并关联订阅服务consul集群更新nginx 目录结构
consul-template文档地址
模板文件
{{range services}} {{$name := .Name}} {{$service := service .Name}}
upstream此外Consul还可以结合Consul-Template或者在代码中引入Consul Client的相关依赖创建Watcher来实时Watch K/V的变化,是配置管理的不二之选。 1.用Node和Lua实现的微服务的配置更新,使用Consul-Template来实现; 2.用Java实现的微服务的配置更新,通过Consul-Template工具(需要重启应用)和在代码中引入Consul Consul-Template如何使用? Consul-Template是一个后台进程,它可以根据Watch Consul上K/V的变化,更新任意数量的模板,同时生成对应的文件,之后还可以运行任意的命令。 要使用Consul-Template一般需要定义两个文件: 1.模板文件 模板文件一般按照Go Template的格式进行编写,示例如下: config-tree.ctmpl: {{ tree /consul
在docker01上部署Nginx,提供反向代理服务,docker02、docker03主机上基于Nginx镜像,各运行两个web容器,提供不同的网页文件,以便测试效果; 5、在docker01上安装consul-template 命令工具,并编写模板 consul-template的作用:将收集到的信息(把registrator收集到容器的信息)写入template模板中,并且最终写入Nginx的配置文件中。 1、生成consul-template命令工具(若要安装新版本的可以到Consul模板发布页面,下载最新版本使用) [root@docker01 ~]# unzip consul-template_0.19.5 _linux_amd64.zip [root@docker01 ~]# mv consul-template /usr/local/bin/ # 移动到命令搜索路径 [root@ docker01 ~]# chmod +x /usr/local/bin/consul-template # 赋予权限 2、在Nginx安装目录下,编写模板供consul-template
动态配置服务 # 安装Consul-template 下载地址:https://releases.hashicorp.com/consul-template/ wget https://releases.hashicorp.com .zip mv consul-template /usr/local/bin/ # 查看版本 consul-template -v consul-template v0.22.0 (6cae10fe) {{end}} {{end}} EOF # 调用模板渲染 consul-template -consul-addr 192.168.1.153:8500 -template "/data/consul /consul-template/conf/tmpltest.ctmpl:result" -once # 查看模板渲染的输出结果,返回的结果:consul是系统自带的服务,nginx是刚才注册的服务, /bin/bash #prom cd /data/consul/consul-template/ && nohup /usr/local/bin/consul-template -config=/data
/conf.d:/etc/nginx/conf.d consul-template: image: hashicorp/consul-template:alpine volumes /conf.d:/etc/nginx/conf.d command: consul-template --consul-addr 192.168.99.103:8500 --template "
-p:83:80 --name test-01 -h test01 nginx docker run -itd -p:84:80 --name test-02 -h test02 nginx # 安装Consul-Template conf/vhost # 启动nginx /usr/local/nginx/sbin/nginx # 查看是否启动 ps -C nginx -o pid # 配置并启动temlate 服务 # 上传consul-template 压缩包到 /root目录 unzip consul-template_0.19.3_linux_amd64.zip mv consul-template /usr/bin/ # 在前台启动,启动后不要Ctrl +C终止 consul-template -consul-addr 192.168.10.253:8500 -template "/root/consul/nginx.ctmpl:/usr/local/
部署单节点consul 1、拓扑图如下 2、nginx代理服务器部署consul服务 3、通过HTTP api获取集群信息 4、web服务器上连接consul,创建nginx容器服务 5、反向代理服务器安装consul-template 集群信息 并且运维人员可以在consul服务器上,定制任意的模板,生成配置文件 compose可以查询consul中的服务目录、key、key-values等 这种强大的抽象功能和查询语言模板使得consul-template 特别适合动态的创建配置文件,也就是自动化增加服务 [root@localhost consul]# rz -E '//上传consul-template软件包' rz waiting to receive _linux_amd64.zip -d /usr/bin Archive: consul-template_0.19.3_linux_amd64.zip inflating: /usr/bin/consul-template 浏览器使用192.168.110.132:88访问,查看日志会发现是轮询出现的 测试consul-template自动在线更新 [root@localhost ~]# docker run -itd -
这里已经把最重要的一部分,自动监听注册docker实例的ip和端口完成了,接下来需要借助consul-template将consul-server中注册的服务拉去同步并写到nginx配置中,再重新启动nginx consul-template会实时监控consul-server中的服务和状态,将新添加的服务和已经移除的服务,通过一个配置的模板写到一个指定的文件中,这里我们指定的文件就是nginx的配置了。 :1.0.0 consul://0.0.0.0:8500 5.部署一个order镜像 docker run -d -p 8088:80 --name order1 order 6.配置模板,启动consul-template
//127.0.0.1:8500,就能够看到Consul被成功启动来,如图所示: 接下来,我们从Consul Template官方地址:https://releases.hashicorp.com/consul-template 并将其解压到/usr/local/bin/目录即可,之后运行:“consul-template -h”命令,如果能够正常执行则说明Consul Template在本机就安装成功了! 反向代理服务器中,这里为了模拟测试,我们在Mac笔记本的/private/etc/hosts文件中加一个模拟的域名映射,如下: 127.0.0.1 api.wudimanong.com 接下来我们创建一个consul-template Address}}:{{.Port}}; {{end}}} {{ end }} , 以上文件模板的内容基本上就是和Nginx的配置语法类似,接下来我们启动Consul Template,命令如下: sudo consul-template
网关的配置均为热更新,通过Consul和Consul-Template来实现,配置在Consul上进行更新后,Consul-Template会将其实时地拉取下来,然后通过以下两种方式进行更新。 A/B测试 在A/B测试的实现中,有以下几个关键点: (1)所有的策略信息都配置在Consul上,并通过Consul-Template实时生效到各个微服务的内存中; (2)每条策略均有指明,调用一个微服务时应调用
Consul-Template可实时监测Consul配置和服务的变化。 ? -服务注册发现和配置更新流程- 在API网关中,服务注册通过Consul-Agent来实现,配置更新通过Consul-Template实现。 Consul-Template主要更新3类配置,包括:Services:代理的所有微服务的服务地址;Products:简言之即请求到微服务的映射表,如左上所示,所有请求都有统一个规范,从Host中可以获取 首先,服务通过容器内部运行的Consul Agent将服务注册到Consul上,其次通过Consul-Template来监测观察 Consul上配置的变化,并更新配置文件。
网关的配置均为热更新,通过Consul和Consul-Template来实现,配置在Consul上进行更新后,Consul-Template会将其实时地拉取下来,然后通过以下两种方式进行更新。 A/B测试 在A/B测试的实现中,有以下几个关键点: (1)所有的策略信息都配置在Consul上,并通过Consul-Template实时生效到各个微服务的内存中; (2)每条策略均有指明,调用一个微服务时应调用
5)最后在测试机上安装 consul-template 来从 consul 获取数据,更新本地的某个模板配置文件。 安装consul-template: $ curl https://releases.hashicorp.com/consul-template/0.15.0/consul-template_0.15.0 /consul-template /usr/bin/ 生成模板文件: $ echo -e '{{range service "httpd"}}\nserver {{.Address}}:{{.Port} 填写模板: $consul-template -consul 192.168.133.137:8500 -template "/tmp/consul.ctmpl:/tmp/consul.result"
Hazel规则 这里规则很简单,根据下载的文件名称过滤,如果满足dmg结尾,说明是APP安装包,然后触发Automator 工作流,进行同名文件新建和安装包移动 Automator CICD Consul Consul-template
Consul-template confd可以像和etce搭配一样用于Consul,不过Consul有自己的模板服务,其更适配Consul。 通过从Consul获得的信息,Consul-template是一个非常方便的创建文件的途径,还有一个额外的好处就是在文件更新后可以运行任意命令,正如confd,Consul-template也可以使用Go 除此之外,Registrator很好地实现了Consul的两个协议,使其合二为一,特别是添加Consul-template到了拼图中。