Docker consul容器服務更新和發現

Docker consul容器服務更新和發現

前言

  • docker consul容器服務更新和發現

在這裏插入圖片描述

  • docker consul的服務器的發現機制主要是依賴於consul服務,consul服務能夠自動的發現節點上的registrator,registrator能夠自適應的監控容器的狀態,然後反饋到consul,接着通過web的8500端口,以一種前端的頁面能夠直觀的看到在線的容器。

1.consul簡介

  • sonsul是hashicorp公司推出的開源工具,用於實現分佈式系統的服務發現與配置
  • consul的特性
    • consul支持健康檢查,允許存儲鍵值對
    • 一致性協議採用Raft算法,用來保證服務的高可用
    • 成員管理和消息廣播採用Gossip協議,支持ACL訪問能控制
  • 方便部署,與docker輕量級容器無縫配合

2.建立consul服務

  • 每個提供服務的節點上都要部署和運行Consul的agent
  • consul agent有兩種模式
    • server
    • client
  • server和client只是consul集羣層面的區分,與搭建在cluster之上的應用服務無關

3.gliderlabs/registrator

  • 檢查容器運行狀態
  • 自動註冊和註銷docker容器的服務到服務配置中心

4.consul-template

  • 是基於consul的自動替換配置文件的應用
  • 可以查詢consul中的服務目錄、key、key-values等
  • 特別適合動態的創建配置文件
  • Consul-Template 是一個守護進程,用於實時查詢Consul 集羣信息,並更新文件系統上任意數量的指定模板,生成配置文件。更新完成以後,可以選擇運行shell 命令執行更新操作,重新加載Nginx.、Consul-Template可以查詢Consul 中的服務目錄、Key、 Key- values 等。
    這種強大的抽象功能和查詢語言模板可以使Consul-Template特別適合動態的創建配置文件。

5.實驗過程

  • 將docker-ce都在虛擬機安裝上
#docker的部署
yum -y install yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce

#啓動docker
systemctl restart docker
systemctl enable docker

#配置鏡像加速
tee /etc/docker/daemon.json <<-'EOF'
{
    "registry-mirrors":["https://v8z6yng7.mirror.aliyuncs.com"]
}
EOF

#重啓docker
systemctl daemon-reload
systemctl restart docker

#網絡優化
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
sysctl -p
service netowrk restart
systemctl restart docker
  • 創建/root/consul
mkdir /root/consul
  • 複製並解壓consul服務
cp consul_0.9.2_linux_amd64.zip /root/consul
cd /root/consul
unzip consul_0.9.2_linux_amd64.zip
mv consul /usr/bin
  • 執行命令
consul agent \
-server \
-bootstrap \
-ui \
-data-dir=/var/lib/consul-data \
-bind=192.168.73.11 \
-client=0.0.0.0 \
-node=consul-server01 &> /var/log/consul.log &
  • 查看集羣信息
consul members
consul info | grep leader
  • 通過httpd api獲取集羣
curl 127.0.0.1:8500/v1/status/peers 
//查看集羣server成員
curl 127.0.0.1:8500/v1/status/leader 
//集羣Raf leader.
curl 127.0.0.1:8500/v1/catalog/services 
//註冊的所有服務
curl 127.0.0.1:8500/v1/catalog/nginx 
//查看nginx服務信息
  • 安裝Gliderlabs/Registrator Gliderlabs/Registrator
    可檢查容器運行狀態自動註冊,還可註銷docker容器的服務到服務配置中心。
    目前支持consul、etcd和skyDNS2.
    在192.168.73.12節點,執行以下操作:
docker run -d \
--name=registrator \
--net=host \
-v /var/run/docker.sock:/tmp/docker.sock \
--restart=always \
gliderlabs/registrator:latest \
-ip=192.168.73.12 \
consul://192.168.73.11:8500
  • 測試服務是否正常
docker run -itd -p:83:80 --name test-01 -h test01 nginx
docker run -itd -p:84:80 --name test-02 -h test02 nginx
docker run -itd -p:85:80 --name test-05 -h test05 nginx
  • 在瀏覽器中查看,輸入192168.73.11:8500

在這裏插入圖片描述

  • Consul-Template 是一個守護進程,用於實時查詢Consul 集羣信息,並更新文件系統上任意數量的指定模板,生成配置文件。更新完成以後,可以選擇運行shell 命令執行更新操作,重新加載Nginx. Consul-Template可以查詢Consul 中的服務目錄、Key、 Key- values 等。這種強大的抽象功能和查詢語言模板可以使Consul-Template特別適合動態的創建配置文件。例如:創建Apache/Nginx Proxy Balancers、 Haproxy Backends
  • 在consul上準備template nginx模板
vim /root/consul/nginx.ctmpl

upstream http_backend {
  {{range service "nginx"}}
   server {{.Address}}:{{.Port}};
   {{end}}
}

server {
  listen 83;
  server_name localhost 192.168.73.11;
  access_log /var/log/nginx/kgc.cn-access.log;
  index index.html index.php;
  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
 }
}
  • 編譯安裝nginx
yum -y install gcc gcc-c++ pcre pcre-devel zlib-devel
tar -zxvf nginx-1.12.2.tar.gz -C /opt

./configure 
--prefix=/usr/local/nginx

make && make install
  • 配置nginx
vim /usr/local/nginx/conf/nginx.conf

http {
     include        mime.types;
     include        vhost/*.conf;
     default_type   application/sctet-stream;
  • 創建虛擬主機目錄
mkdir /usr/local/nginx/conf/vhost
  • 創建日誌文件目錄
mkdir /var/log/nginx
  • 啓動nginx
/usr/local/nginx/sbin/nginx
  • 配置並啓動template
上傳consul-template_0.19.3_linux_amd64.zip 到/root目錄下
cp consul-template_0.19.3_linux_amd64.zip /root/
unzip consul-template_0.19.3_linux_amd64.zip
mv consul-template /usr/bin/

consul-template -consul-addr 192.168.73.11:8500 \
-template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kgc.conf:/usr/local/nginx/sbin/nginx -s reload" \
--log-level=info
  • 增加一個nginx的節點
增加一個nginx容器節點,測試服務發現及配置更新功能
//在regi strator服務端註冊
docker run -itd -p:86:80 --name test-06 -h test06 nginx
//在consu1服務器監控裝填會有提示自動更新
2020/04/23 05:34:00.432917 [INFO] consul-template v0.19.3 (ebf2d3d)
2020/04/23 05:34:00.432945 [INFO] (runner) creating new runner (dry: false, once: false)
2020/04/23 05:34:00.435178 [INFO] (runner) creating watcher
2020/04/23 05:34:00.435470 [INFO] (runner) starting
2020/04/23 05:34:00.435500 [INFO] (runner) initiating run
2020/04/23 05:34:00.441936 [INFO] (runner) initiating run
2020/04/23 05:34:00.562420 [INFO] (runner) rendered "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/kgc.conf"
2020/04/23 05:34:00.562515 [INFO] (runner) executing command "/usr/local/nginx/sbin/nginx -s reload" from "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/kgc.conf"
2020/04/23 05:34:00.562675 [INFO] (child) spawning: /usr/local/nginx/sbin/nginx -s reload
#下面是更新的內容
2020/04/23 05:36:26.146062 [INFO] (runner) initiating run
2020/04/23 05:36:26.150574 [INFO] (runner) rendered "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/kgc.conf"
2020/04/23 05:36:26.150633 [INFO] (runner) executing command "/usr/local/nginx/sbin/nginx -s reload" from "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/kgc.conf"
2020/04/23 05:36:26.150719 [INFO] (child) spawning: /usr/local/nginx/sbin/nginx -s reload
  • 在consul服務器上面查看vhost文件夾下面的信息
[root@localhost ~]# cd /usr/local/nginx/conf/vhost
[root@localhost vhost]# ls
kgc.conf
[root@localhost vhost]# vim kgc.conf 

upstream http_backend {

   server 192.168.73.12:83;

   server 192.168.73.12:84;

   server 192.168.73.12:85;

   server 192.168.73.12:86;

}

server {
  listen 83;
  server_name localhost 192.168.73.11;
  access_log /var/log/nginx/kgc.cn-access.log;
  index index.html index.php;
  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
 }
}
  • 在瀏覽器中查看,輸入192.168.73.11:8500

在這裏插入圖片描述

  • 刪除一個容器
docker rm 897ad786f003

#consul服務器中
2020/04/23 05:50:16.358956 [INFO] (runner) executing command "/usr/local/nginx/sbin/nginx -s reload" from "/root/consul/nginx.ctmpl" => "/usr/local/nginx/conf/vhost/kgc.conf"
2020/04/23 05:50:16.359250 [INFO] (child) spawning: /usr/local/nginx/sbin/nginx -s reload
  • 查看容器的日誌
[root@localhost ~]# docker logs -f test-02
192.168.73.11 - - [24/Apr/2020:05:52:13 +0000] "GET / HTTP/1.0" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
192.168.73.11 - - [24/Apr/2020:05:52:16 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
192.168.73.11 - - [24/Apr/2020:05:52:17 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
192.168.73.11 - - [24/Apr/2020:05:52:17 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
192.168.73.11 - - [24/Apr/2020:05:52:18 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
^C
[root@localhost ~]# docker logs -f test-05
2020/04/24 05:52:13 [error] 6#6: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.73.11, server: localhost, request: "GET /favicon.ico HTTP/1.0", host: "192.168.73.11", referrer: "http://192.168.73.11:83/"
192.168.73.11 - - [24/Apr/2020:05:52:13 +0000] "GET /favicon.ico HTTP/1.0" 404 556 "http://192.168.73.11:83/" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
192.168.73.11 - - [24/Apr/2020:05:52:16 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
192.168.73.11 - - [24/Apr/2020:05:52:17 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
192.168.73.11 - - [24/Apr/2020:05:52:17 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
192.168.73.11 - - [24/Apr/2020:05:52:18 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
^C
[root@localhost ~]# docker logs -f test-06
192.168.73.11 - - [24/Apr/2020:05:52:16 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
192.168.73.11 - - [24/Apr/2020:05:52:16 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
192.168.73.11 - - [24/Apr/2020:05:52:17 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
192.168.73.11 - - [24/Apr/2020:05:52:17 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
192.168.73.11 - - [24/Apr/2020:05:52:18 +0000] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36" "192.168.73.1"
^C
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章