Confd通过读取后端存储的配置信息来动态更新对应的配置文件,对应的后端存储可以是ETCD,REDIS等,其中ETCD的v3版本对应的存储后端为ETCDV3。 Confd是一个轻量级的配置管理工具。
接下来要说一下confd,它提供了一种新的集成思路。confd的存在有点类似于快递员,买了东西不需要自己到店去取货了,confd这个快递员回把货取过来,然后送到家里,并且通知你货已经送到了。 加入confd之后的架构大致是这样的: ? 二、confd是如何工作的 confd使用时有几个概念需要熟悉,并且熟悉他们之间的依赖关系,才能理解如何配置confd,不然会比较懵。 这里我们先看一下confd配置的几个概念之间是如何交互的: ? 三、confd的部署 以下Linux系统为例。 x /usr/local/bin/confd # 验证是否安装成功 confd --help 四、confd的配置 Confd通过读取后端存储的配置信息来动态更新对应的配置文件,对应的后端存储可以是etcd -1 confd[35808]: INFO Starting confd 2018-05-11T18:04:59+08:00 k8s-dbg-master-1 confd[35808]: INFO Backend
安装confd插件 confd的安装可以通过源码安装方式,confd基于Go语言编写,其编译安装依赖Go,首先需要确保本地安装了Go,版本不低于v1.10。 /nacos-group/confd/archive/v0.18.0.tar.gz tar -xvf v0.18.0.tar.gz mv confd-0.18.0 confd cd confd make 复制confd文件到bin目录下,启动confd sudo cp bin/confd /usr/local/bin confd confd结合Nacos实现Nginx配置管理示例 本文介绍使用Nacos 1.创建confd所需目录 confd配置文件默认在/etc/confd中,可以通过参数-confdir指定。 5.启动confd 启动confd,从Nacos获取配置文件,渲染Nginx配置文件。
Confd是什么 Confd是一个轻量级的配置管理工具。通过查询后端存储,结合配置模板引擎,保持本地配置最新,同时具备定期探测机制,配置变更自动reload。 # 安装 mv confd-0.16.0-linux-amd64 /usr/local/bin/confd chmod +x /usr/local/bin/confd #检查是否安装成功 root @Ubuntu:/home/chenqionghe/test/confd# confd --version confd 0.16.0 (Git SHA: 7217b0ca, Go Version: go1.10.2 ) confd配置文件默认在/etc/confd中,可以通过参数-confdir指定。 三.配置使用confd 1.
confd可监听多种数据源,并根据模板生成相应的指定的文件。 快速开始 可参见:quick-start-guide 基本参数查看:confd -h 创建配置文件目录(confdir) sudo mkdir -p /etc/confd/{conf.d,templates = {{getv "/myapp/database/user"}} 处理模板 confd支持两次操作模式:守护或仅一次。 在守护模式下,confd会轮询后端的修改并在必要时对目的配置文件进行更新。 由于confd支持很多后端模式,当前仅示例file和redis。 file 需先创建数据源文件。 redis-cli set /myapp/database/user rob 启动confd,并指定后端为redis, 并指定-interval 为2秒间隔轮询。
对比了Disconf、Apollo等方案,最终选择了Etcd+Confd的方案,基本符合上边的原则,且Etcd我们在部署Kubernetes的时候已经有过使用,算是轻车熟路。 配置中心架构图 ? 1.下载confd并放到/usr/bin/目录下方便使用 # wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0 /confd-0.16.0-linux-amd64 # mv confd-0.16.0-linux-amd64 /usr/bin/confd # chmod +x /usr/bin/confd 2.新建 confd配置文件目录 # mkdir /etc/confd/{conf.d,templates} 3.新建资源文件,.toml文件结尾已经成了固定格式 # cat /etc/confd/conf.d/ set to etcd 2018-08-23T13:46:13+08:00 onlinegame.i.nease.net confd[17084]: INFO Starting confd 2018-
对比了Disconf、Apollo等方案,最终选择了Etcd+Confd的方案,基本符合上边的原则,且Etcd我们在部署Kubernetes的时候已经有过使用,算是轻车熟路。 配置中心架构图 ? 1.下载confd并放到/usr/bin/目录下方便使用 # wget https://github.com/kelseyhightower/confd/releases/download/v0.16.0 /confd-0.16.0-linux-amd64 # mv confd-0.16.0-linux-amd64 /usr/bin/confd # chmod +x /usr/bin/confd 2.新建 confd配置文件目录 # mkdir /etc/confd/{conf.d,templates} 3.新建资源文件,.toml文件结尾已经成了固定格式 # cat /etc/confd/conf.d/ set to etcd 2018-08-23T13:46:13+08:00 onlinegame.i.nease.net confd[17084]: INFO Starting confd 2018-
下载地址https://github.com/kelseyhightower/confd/releases 下载完毕丢到系统里面 # cp confd /usr/bin/confd # which confd /usr/bin/confd 4)创建配置文件目录 # mkdir -p /etc/confd/{conf.d,templates} conf.d # 资源模板, 下面文件必须以toml后缀 templates # 配置文件模板,下面文件必须以tmpl后缀 5)创建 confd 配置文件 # vi /etc/confd/conf.d/app01.conf.toml 并设置开机启动 开机启动脚本会给大家分享 拷贝至 /etc/init.d/confd ,只需要更改 etcd 的连接地址即可 #/etc/init.d/confd start && chkconfig --add confd && chkconfig confd on 配置平台部署 1)Github 克隆平台代码安装平台依赖 # git clone https://github.com
答案是通过服务注册+confd,自动生成配置文件。 首先讲下怎么安装,根据官方文档: wget https://github.com/kelseyhightower/confd/releases/download/v0.14.0/confd-0.14.0 -linux-amd64 mkdir -p /opt/confd/bin mv confd-0.14.0-linux-amd64 /opt/confd/bin/confd chmod +x /opt/confd /bin/confd export PATH="$PATH:/opt/confd/bin" 为了方便使用,最好修改下/etc/profile,加入export PATH="$PATH:/opt/confd 然后启动confd,需要指定etcd的地址: nohup confd -backend etcd -node http://192.168.86.11:2379 & 搞定!
consul+confd实现动态负载均衡 ? sudo mkdir -p /etc/confd/{conf.d,templates} 在/etc/confd/conf.d/config.toml [template] src = "config.conf.tmpl /confd -onetime -backend consul -node 192.168.33.10:8500 docker run -d -p 5003:5000 runseb/hostname /confd -onetime -backend consul -node 192.168.33.10:8500 . /confd -backend consul -interval 5 -node 192.168.33.10:8500
简单:支持 curl 方式的用户 API (HTTP+JSON) 安全:可选 SSL 客户端证书认证 快速:单实例可达每秒 1000 次写操作 可靠:使用 Raft 实现分布式 2、 Confd介绍 Confd /confd/releases/download/v0.6.3/confd-0.6.3-linux-amd64 # mv confd /usr/local/bin/confd # chmod +x /usr /local/bin/confd # /usr/local/bin/confd -version confd 0.6.2 1.3 etcd安装 SSH终端登录192.168.1.21服务器,执行以下命令 +Haproxy配置 由于Haproxy的配置文件是由Confd组件生成,要求Confd务必要与haproxy安装在同一台主机上,Confd的配置有两种,一种为Confd资源配置文件,默认路径为“/etc /confd/conf.d”目录,另一种为配置模板文件,默认路径为“/etc/confd/templates”。
所以统一化管理配置文件显得尤为重要,经过研究发现,confd软件非常适合此场景,助力配置化高效率改造,具体用法如下: Confd简介: Confd是一个轻量级的配置管理工具。 不过一般使用Confd和etcd的配合使用比较多。 Aura系统用不着后端配合,只需要使用它的模板渲染,进行统一配置管理即可。 Confdg使用步骤如下: 1) confdg下载 下载confd的二进制文件,下载地址为:https://github.com/kelseyhightower/confd/releases 2)将confd /confd /usr/bin \ && chmod a+x /usr/bin/confd 3)创建confd配置文件和模板文件 ? 例如在Confd章节中举例的的前端域名配置。 6) K8S编排文件 镜像文件生成之后,接下来就该编写K8S的编排文件了,然后就可以将镜像部署到K8S平台上了。
和大多数部署方式一样,我们把 confd 部署在 web server 所在的 ECS 上,便于 confd 在监测到数据变化后及时更新配置文件和重启程序。 confd 的相关配置文件和模板文件部署在默认路径 /etc/confd 下,目录结构如下: /etc/confd/ ├── conf.d ├── confd.toml └── templates confd.toml 是 confd 的主配置文件,使用 TOML 格式编写,因为我们 etcd 是集群部署,有多个节点,而我又不想把 confd 的指令搞的又臭又长,所以将 interval、nodes 等选项写到了这个配置文件里 服务发现 通过 supervisor 管理 confd 进程。 confd 在运行后会每隔5秒对 etcd 进行轮询,当某个应用服务的 K/V 更新后,confd 会读取该应用存储在 etcd 中的数据,写入到模板配置文件中,生成这个应用配置文件,最后由 confd
CLIENT_PORT 9000 int main(int argc, char *argv[]) { struct sockaddr_in serveraddr, localaddr; int confd ; ssize_t len; char buf[MAXLINE]; //1.创建一个socket confd = socket(AF\_INET, SOCK\_DGRAM, 0); / localaddr.sin\_addr.s\_addr); localaddr.sin\_port = htons(CLIENT\_PORT); // 广播客户端也要绑定固定的端口,否则接收不到 bind(confd sizeof(localaddr)); socklen\_t slen; while (1) { slen = sizeof(serveraddr); len = recvfrom(confd INET, &serveraddr.sin\_addr.s\_addr, buf, sizeof(buf))); write(STDOUT\_FILENO, buf, len); } close(confd
目录 一、基本文件展示 1.confd-general-config.conf文件展示 2.相关数据展示 二、相关修改变更值代码展示 ---- 一、基本文件展示 1.confd-general-config.conf 文件展示 # cat confd-general-config.conf ETCD_SERVER_HOSTIP=192.168.3.103 ETCD_SERVER_PORT=2379 innernetworksegement function writeConfigValue() { K8SCONFIGDIR=/home/zyf/confdconfig K8SCONFIGFILE=${K8SCONFIGDIR}/confd-general-config.conf
172.218.4.0/26 communities: - bgp-large-community - 63400:120 Calico BGP 功能实现 简单来说,Calico 是通过 confd 其中,为了使 confd 支持 Calico 后端存储,在原生的 confd 上,添加了类型为 Calico 的 backend,主要逻辑是 watch 后端 BGPPeer、BGPConfiguration 、Node 资源(由 libcalico-go 中的bgpsyncer实现),缓存到内存中,供 confd 渲染使用。 参考 https://github.com/projectcalico/confd/pull/322[4] https://github.com/projectcalico/confd[5] https /pull/322: https://github.com/projectcalico/confd/pull/322 [5]https://github.com/projectcalico/confd:
; ssize_t len; char buf[MAXLINE]; /* 定义组播结构体 */ struct ip_mreqn group; confd = socket(AF_INET AF_INET, "0.0.0.0" , &localaddr.sin_addr.s_addr); localaddr.sin_port = htons(CLIENT_PORT); bind(confd --> 编号 命令:ip ad */ group.imr_ifindex = if_nametoindex("eth0"); /*设置client 加入多播组 */ setsockopt(confd , IPPROTO_IP, IP_ADD_MEMBERSHIP, &group, sizeof(group)); while (1) { len = recvfrom(confd, buf , sizeof(buf), 0, NULL, 0); write(STDOUT_FILENO, buf, len); } close(confd); return 0; }
Calico 组件 Calico API server Felix BIRD confd Dikastes CNI plugin Datastore plugin IPAM plugin kube-controllers 注意:calico/node 可以在仅策略模式下运行,其中 Felix 在没有 BIRD 和 confd 的情况下运行。这提供了无需在主机之间分配路由的策略管理,并用于托管云提供商等部署。 confd 主要任务:监控 Calico 数据存储以了解 BGP 配置和全局默认值(例如 AS 编号、日志记录级别和 IPAM 信息)的更改。开源、轻量级的配置管理工具。 Confd 根据数据存储中数据的更新动态生成 BIRD 配置文件。当配置文件发生变化时,confd 会触发 BIRD 加载新文件。配置confd和confd项目。 Typha 代表其所有客户端(如 Felix 和 confd)维护单个数据存储连接。它缓存数据存储状态并删除重复事件,以便可以将它们分散到许多侦听器。
struct sockaddr_in sin; socklen_t len = sizeof(struct sockaddr_in); bzero(&sin, len); int confd = accept(srvfd, (struct sockaddr*)&sin, &len); if (confd < 0) { printf("bad accept\ n"); return; }else { printf("Accept Connection: %d", confd); } //将新建立的连接添加到 EPOLL的监听中 struct epoll_event event; event.data.fd = confd; event.events = EPOLLIN|EPOLLET ; epoll_ctl(epollfd, EPOLL_CTL_ADD, confd, &event); } //读取数据 void RecvData(int fd) { int ret
; ssize_t len; char buf[MAXLINE]; /* 定义组播结构体 */ struct ip_mreqn group; confd = socket(AF_INET AF_INET, "0.0.0.0" , &localaddr.sin_addr.s_addr); localaddr.sin_port = htons(CLIENT_PORT); bind(confd --> 编号 命令:ip ad */ group.imr_ifindex = if_nametoindex("eth0"); /*设置client 加入多播组 */ setsockopt(confd , IPPROTO_IP, IP_ADD_MEMBERSHIP, &group, sizeof(group)); while (1) { len = recvfrom(confd, buf , sizeof(buf), 0, NULL, 0); write(STDOUT_FILENO, buf, len); } close(confd); return 0; }