摘要:配置网络参照生产环境配置中的和子网章节。特别注意观察和的子网是否与已有网络冲突如果有冲突则参考网络的中的方法修改子网。部署使用的是的监控方案。创建应用网络创建你也可以改成自己的名字参考网络的检查子网与是否配置正确。
原文
大纲本文只是一种实际部署方案的例子,涉及到的技术有(除Docker/Docker Swarm外):
Docker overlay network
Fluentd
Prometheus stack
vegasbrianc的Prometheus监控方案
步骤大纲:
部署Docker machine
基本配置
配置网络
启动Fluentd日志服务
部署Docker swarm集群
配置网络
添加Node
部署Prometheus stack
给Node打Label
创建监控网络
启动service
部署应用
识别stateless与stateful
创建应用网络
给Node打Label
启动service
1 部署Docker machine 1.1 基本配置准备若干Linux服务器(本例使用Ubuntu 16.04),参照Docker CE 镜像源站提到的步骤安装Docker CE。
参照Docker Daemon生产环境配置。
1.2 配置bridge网络参照Docker Daemon生产环境配置中的mtu和子网章节。
1.3 启动Fluentd日志服务参考使用Fluentd收集Docker容器日志。
2 部署Docker swarm集群到一台机器上执行docker swarm init,这个机器将作为manager node。
执行docker node ls会看到类似下面的结果:
$ docker node ls ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS dxn1zf6l61qsb1josjja83ngz * manager1 Ready Active Leader
如果你计划不会把工作负载跑在manager node上,那么使用docker drain:
docker node update --availability drain
可参考Docker Swarm基本命令清单。
2.1 配置网络MTU和子网参考Docker Overlay网络的MTU。
特别注意
观察docker_gwbridge和ingress的子网是否与已有网络冲突:
$ docker network inspect -f "{{json .IPAM}}" docker_gwbridge {"Driver":"default","Options":null,"Config":[{"Subnet":"172.18.0.0/16","Gateway":"172.18.0.1"}]} $ docker network inspect -f "{{json .IPAM}}" ingress {"Driver":"default","Options":null,"Config":[{"Subnet":"10.255.0.0/16","Gateway":"10.255.0.1"}]}
如果有冲突则参考Docker Overlay网络的MTU中的方法修改子网。
2.2 添加Node参考Docker Swarm基本命令清单。
3 部署Prometheus stack使用的是vegasbrianc的Prometheus监控方案。
整个监控方案包含一下几个组件:
Prometheus
Node-exporter,运行在每个node上
Alertmanager
cAdvisor,运行在每个node上
Grafana
3.1 给Node打Label挑选一台Node作为运行监控服务的机器。给这个node打上label:
$ docker node update --label-add for-monitor-stack=13.2 创建监控网络
$ docker network create -d overlay --attachable monitor-net
参考参考Docker Overlay网络的MTU检查子网与MTU是否配置正确。
3.3 启动serviceclone vegasbrianc的Prometheus监控方案 项目代码。
使用我修改过的docker-stack.yml
启动service:
$ docker stack deploy --with-registry-auth --prune -c docker-stack.yml p8s-monitor-stack
访问地址:
Prometheus:http://<任意swarm node ip>:9000
Node-exporter:http://<任意swarm node ip>:9010
Alertmanager:http://<任意swarm node ip>:9020
cAdvisor:http://<任意swarm node ip>:9030
Grafana:http://<任意swarm node ip>:9040,用户名admin,密码foobar
4 部署应用 4.1 识别stateless与stateful如果你的应用由多个组件(service)组成,那么在部署它们之前你得识别出哪些是stateless service哪些是stateful service。
针对每个service你自问以下三个问题:
这个service崩溃之后,是不是只需要重启它就可以了,而不需要关心数据恢复?
这个service是否可以在node之间任意迁移,且不需要分布式存储?
这个service是否无需固定IP?
如果上述回答都是Yes,那么这个service就是stateless的,只要有一个是No,则这个service是stateful的。
对于stateless service,你可以:
用docker stack deploy部署
用docker service create部署
对于stateful service,你可以:
用docker run部署
用docker-compose up部署
如果没有固定IP的要求,那么你也可以用docker stack deploy/docker service create部署,前提是你得保证这个service只会固定在一台机器上运行。
有时候你的应用既有stateless service又有stateful service,这时需要把他们挂载到同一个overlay网络里,这样它们之间就能够互相通信了。
4.2 创建应用网络创建app-net(你也可以改成自己的名字)
$ docker network create -d overlay --attachable app-net
参考Docker Overlay网络的MTU检查子网与MTU是否配置正确。
4.3 给Node打Label如果你对于Service部署在哪个Node上有要求,那么你得给Node打上Label:
$ docker node update --label-add=1
然后在docker-compose.yaml里添加约束条件:
version: "3.7" services: busybox: image: busybox deploy: placement: constraints: - node.labels.4.4 启动service== 1
对于stateless service,编写docker-compose.yaml,里面写了同时挂载app-net和monitor-net,比如:
version: "3.7" services: busybox: image: busybox networks: app-net: monitor-net: aliases: - busybox ... networks: app-net: external: true monitor-net: external: true
注意上面设置了busybox service在monitor-net中的别名,这是因为如果你用docker stack deploy部署,那么busybox的名字默认是
然后用docker stack deploy部署:
$ docker stack deploy --with-registry-auth --prune -c docker-compose.yaml
如果用docker service create则:
$ docker service create --network app-net --network monitor-net --name... 其他参数
下面举例docker run启动stateful service的方法:
$ docker run -d --name--network app-net ... 其他参数 # 然后再挂载到monitor-net上 $ docker network connect monitor-net
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28093.html
摘要:当然此时的局限性较大,比如没有副本和负载均衡的概念,这导致服务无法高可用当然也更不存在什么服务网络管理和跨节点数据存储这些东西没有服务模型集群中服务间关系和启动顺序编排也很复杂于是就有了下面的的诞生。 showImg(https://segmentfault.com/img/remote/1460000015317037?w=1885&h=1153); 概述 在我的《Docker S...
摘要:虽然可以使用相同的方式部署应用到云端,使用外部负载均衡器,但动态添加或者减少负载均衡节点依旧是痛点。这对使用外部负载均衡器帮助巨大。 数人云今天带来的本篇文章将分享Docker在应用程序生命周期每个阶段中所扮演的角色,以及迁移到Swarm集群时需要考虑的问题。 利用Docker来开发 Docker让工作更轻松。如需要一个部署安装MySQL数据库,或者安装Ghost,又或者Redis数据...
摘要:其一将用于代理与面向公开的服务之间的通信。数据库上线并开始运行后,我们接下来部署后端。现在,会帮助我们完成全部负载均衡工作。这样所有来自代理的请求都将指向网络,并由后者跨越全部实例执行负载均衡。 七夕大家过得怎么样?今天数人云带大家回归技术和干货。虽然我们能够在Swarm集群当中部署任意数量的服务,但这并不代表各项服务全部可为用户所访问。而新的Swarm网络使得各项服务之间能够更为轻松...
摘要:本文将以多主机网络环境为基础,探讨如何利用内置编排工具模式对各主机上的容器加以管理。在本文中,我们将立足于台主机与在负载均衡之上部署应用程序容器,同时将其接入一套覆盖网络。管理节点会利用负载均衡以将服务公布至集群之外。 本文将以多主机网络环境为基础,探讨如何利用内置编排工具 Docker Swarm模式对各主机上的容器加以管理。 Docker Engine – Swarm模式 在...
阅读 2200·2019-08-30 15:53
阅读 2380·2019-08-30 12:54
阅读 1103·2019-08-29 16:09
阅读 706·2019-08-29 12:14
阅读 730·2019-08-26 10:33
阅读 2438·2019-08-23 18:36
阅读 2922·2019-08-23 18:30
阅读 2090·2019-08-22 17:09