使用consul、consul-template、registrator进行容器负载

使用consul、consul-template、registrator进行容器负载

  • consul
  • consul-template
  • registrator

部署

部署consul:

docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h consul --name consul progrium/consul -server -advertise 172.18.18.10 -bootstrap

部署registrator:

docker run -d -v /var/run/docker.sock:/tmp/docker.sock --name registrator -h registrator  gliderlabs/registrator:latest consul://172.18.18.10:8500

启动consul-template

consul-template 模板内容如下:

consul-template cat tmpl/app.conf
{{range services}}
  upstream {{.Name}} {
    least_conn;{{range service .Name}}
    server {{.Address}}:{{.Port}};{{end}}
  }
{{end}}

server {
  listen 80 default_server;
  proxy_set_header            Host $host;
  proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;

  location / {
    proxy_pass http://cart/cart/;
  }

  location /cart {
    proxy_pass http://cart/cart;
  }

  {{range services}}
  location /api/{{.Name}} {
    proxy_read_timeout 180;
    proxy_pass http://{{.Name}}/{{.Name}};
  }
  {{end}}
}

启动:

consul-template -consul=172.18.18.10:8500 -template="/Users/goyoo/workspace/consul-template/tmpl/app.conf:/Users/goyoo/workspace/consul-template/conf/app.conf"

生成nginx配置如下:

consul-template cat conf/app.conf

  upstream alpine-nginx-1.8.0-80 {
    least_conn;
  }

  upstream consul {
    least_conn;
    server 172.18.18.10:8300;
  }

  upstream consul-53 {
    least_conn;
    server 172.17.0.4:8600;
  }

  upstream consul-8400 {
    least_conn;
    server 172.17.0.4:8400;
  }

  upstream consul-8500 {
    least_conn;
    server 172.17.0.4:8500;
  }


server {
  listen 80 default_server;
  proxy_set_header            Host $host;
  proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;

  location / {
    proxy_pass http://cart/cart/;
  }

  location /cart {
    proxy_pass http://cart/cart;
  }


  location /api/alpine-nginx-1.8.0-80 {
    proxy_read_timeout 180;
    proxy_pass http://alpine-nginx-1.8.0-80/alpine-nginx-1.8.0-80;
  }

  location /api/consul {
    proxy_read_timeout 180;
    proxy_pass http://consul/consul;
  }

  location /api/consul-53 {
    proxy_read_timeout 180;
    proxy_pass http://consul-53/consul-53;
  }

  location /api/consul-8400 {
    proxy_read_timeout 180;
    proxy_pass http://consul-8400/consul-8400;
  }

  location /api/consul-8500 {
    proxy_read_timeout 180;
    proxy_pass http://consul-8500/consul-8500;
  }

}

总结

现象

  1. registrator 获取当前机器上所有容器状况,并注册到consul 的service服务中(不是key/value)
  2. consul-template 读取consul 的service并渲染模块生成配置文件。

实际情况分析

  1. 我们现在的集群在实际使用过程中会有很多的辅助功能的容器,比如zabbix-agent 监控使用 etcd、k8s中dns cephfs挂载容器等。这些都是不需要暴露出去的。
  2. 统一注册后不方便针对某一个app服务的容器状态以及负载状态的查询与配置。

总结

不适合当前业务

你可能感兴趣的:(负载均衡)