Confd与Rancher-metadata结合的妙用

来源:互联网 发布:网络作家如何赚钱 编辑:程序博客网 时间:2024/06/05 17:58

我们在使用rancher时会发现catalog里面提供了很多常用的中间件,诸如Galera和Mongodb等还在rancher下实现了水平扩展,水平扩展意味着随着container数量的增减能够动态修改服务配置,这里面其实就用到了confd和rancher-metadata,当然也同样离不开基础的rancher-dns服务。

扩展Confd

Docker生态圈中有一个神奇的组合就是Haproxy+etcd+confd+Docker即”HECD”神奇四侠,整合了多种开源组件,看似松散的结构,事实上已经是一个有机的整体,它们互相联系、互相作用,是Docker生态圈中最理想的组合之一。它的优势不言而喻,自动、实时发现及无感知服务刷新,支持负载均衡、故障迁移,具备资源弹性,伸缩自如。

这里面confd是负责将etcd中存储的配置获取出来,并在各个服务节点上刷新配置,重载服务。而在rancher体系中并没有etcd,它用rancher-metadata服务来代替了etcd,rancher fork了confd项目,并在backends中加入了rancher-metadata。

重新编译的confd组件会加入到诸如rancher/galera-conf的镜像中,galera-conf对应的container是Sidekick-container,它会负责刷新配置,你会看到它所起的服务类似这样:

20160815170525

解析rancher-metadata

Confd的配置有两种,一种为Confd资源配置文件,默认路径为“/etc/confd/conf.d”目录,另一种为配置模板文件,默认路径为“/etc/confd/templates”。

其中“src”为指定模板文件名称(默认到路径/etc/confd/templates中查找);“dest”指定生成的Haproxy配置文件路径;“keys”指定关联Etcd中key的URI列表;“reload_cmd”指定服务重载的命令。以galera-conf的配置为例:

#/etc/confd/conf.d/galera.toml[template]src="galera.cnf.tmpl"dest="/etc/mysql/conf.d/001-galera.cnf"keys = [  "/self"  ]#/etc/confd/templates/galera.cnf.tmpl[mysqld]server-id = {{getv "/self/container/create_index"}}log-bin = /var/log/mysql/mariadb-bin.indexbind-address = {{getv "/self/container/primary_ip"}}max_connections = 1000report_host = {{getv "/self/container/name"}}wsrep_node_name = {{getv "/self/container/name"}}wsrep_cluster_name="{{getv "/self/stack/name"}}"# User supplied configs{{if exists "/self/service/metadata/mysqld"}}{{getv "/self/service/metadata/mysqld"}}{{end}}

我们可以通过curl来模拟confd-getv的取值结果,比如:

$ curl http://rancher-metadata/latest/self/container/primary_ip10.42.106.51$ curl http://rancher-metadata/latest/self/service/metadata/mysqldinnodb_file_per_table = 1innodb_autoinc_lock_mode=2query_cache_size=0query_cache_type=0innodb_flush_log_at_trx_commit=0binlog_format=ROWdefault-storage-engine=innodbwsrep_provider=/usr/lib/galera/libgalera_smm.sowsrep_provider_options="gcache.size = 2G"wsrep_sst_method=mysqldumpwsrep_sst_auth=root:123456progress=1

而这些metadata是如何配置进去的呢?目前提供的方式就是写在rancher-compose的文件中,比如galera的:

galera:scale: 3metadata:  mysqld: |    innodb_file_per_table = 1    innodb_autoinc_lock_mode=2    query_cache_size=0    query_cache_type=0    innodb_flush_log_at_trx_commit=0    binlog_format=ROW    default-storage-engine=innodb    wsrep_provider=/usr/lib/galera/libgalera_smm.so    wsrep_provider_options="gcache.size = 2G"    wsrep_sst_method=mysqldump    wsrep_sst_auth=root:${mysql_root_password}    progress=1

后记

能够很明显的感觉到,rancher准备会开始一些闭源的项目,在docker-hub上貌似没有找到rancher集成confd组件的基本镜像,后续rancher应该会提供更多的catalog,猜测很多使用高级特性的应用应该会采取闭源措施。

本文:Confd与Rancher-metadata结合的妙用

0 0
原创粉丝点击