博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker Swarm部署应用的总结
阅读量:6495 次
发布时间:2019-06-24

本文共 3688 字,大约阅读时间需要 12 分钟。

大纲

本文只是一种实际部署方案的例子,涉及到的技术有(除Docker/Docker Swarm外):

  1. Docker
  2. Prometheus stack

步骤大纲:

  1. 部署Docker machine

    1. 基本配置
    2. 配置网络
    3. 启动Fluentd日志服务
  2. 部署Docker swarm集群

    1. 配置网络
    2. 添加Node
  3. 部署Prometheus stack

    1. 给Node打Label
    2. 创建监控网络
    3. 启动service
  4. 部署应用

    1. 识别stateless与stateful
    2. 创建应用网络
    3. 给Node打Label
    4. 启动service

1 部署Docker machine

1.1 基本配置

准备若干Linux服务器(本例使用Ubuntu 16.04),参照提到的步骤安装Docker CE。

参照。

1.2 配置bridge网络

参照中的mtu和子网章节。

1.3 启动Fluentd日志服务

参考。

2 部署Docker swarm集群

到一台机器上执行docker swarm init,这个机器将作为manager node。

执行docker node ls会看到类似下面的结果:

$ docker node lsID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUSdxn1zf6l61qsb1josjja83ngz *  manager1  Ready   Active        Leader

如果你计划不会把工作负载跑在manager node上,那么使用docker drain

docker node update --availability drain 

可参考。

2.1 配置网络MTU和子网

参考。

特别注意

观察docker_gwbridgeingress的子网是否与已有网络冲突:

$ 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"}]}

如果有冲突则参考中的方法修改子网。

2.2 添加Node

参考。

3 部署Prometheus stack

使用的是。

整个监控方案包含一下几个组件:

  1. Prometheus
  2. Node-exporter,运行在每个node上
  3. Alertmanager
  4. cAdvisor,运行在每个node上
  5. Grafana

3.1 给Node打Label

挑选一台Node作为运行监控服务的机器。给这个node打上label:

$ docker node update --label-add for-monitor-stack=1 

3.2 创建监控网络

$ docker network create -d overlay --attachable monitor-net

参考参考检查子网与MTU是否配置正确。

3.3 启动service

clone 项目代码。

使用我修改过的

启动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你自问以下三个问题:

  1. 这个service崩溃之后,是不是只需要重启它就可以了,而不需要关心数据恢复?
  2. 这个service是否可以在node之间任意迁移,且不需要分布式存储?
  3. 这个service是否无需固定IP?

如果上述回答都是Yes,那么这个service就是stateless的,只要有一个是No,则这个service是stateful的。

对于stateless service,你可以:

  1. docker stack deploy部署
  2. docker service create部署

对于stateful service,你可以:

  1. docker run部署
  2. docker-compose up部署
  3. 如果没有固定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

参考检查子网与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.
== 1

4.4 启动service

对于stateless service,编写docker-compose.yaml,里面写了同时挂载app-netmonitor-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的名字默认是<stack-name>_busybox,这样对于prometheus而言此名字不稳定,不便于配置详见。

然后用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

转载地址:http://dxuyo.baihongyu.com/

你可能感兴趣的文章
ifconfig命令总结
查看>>
我的友情链接
查看>>
面试IT公司的见闻
查看>>
F(x) - NU ABO 韩中(繁)ass字幕
查看>>
排序算法之插入排序
查看>>
AJAX 跨域请求
查看>>
Python的Web开发利器——Django安装使用经验谈
查看>>
现代中小企业IT基础平台建设 - 完整案例实战(09_附录B)
查看>>
二分查找
查看>>
js 函数
查看>>
成为贵网站会员快八年了
查看>>
58数据库3_transaction
查看>>
MySQL--------基于binlog实现闪回最佳实战
查看>>
01-查询Oracle中所有用户信息
查看>>
每次打开Microsoft office word2010时都要显示安装配置文件的问题
查看>>
Windows 2008(X64)安装32位SQL2005的ASP.NET注册警告解决方法
查看>>
树讲解(3)——联合权值
查看>>
BigDecimal
查看>>
use the purchases page to try again
查看>>
批处理用WINRAR只压缩某类型的文件
查看>>