Swarm 的安装和基本的服务编排调度
前提条件:
准备好三台测试用机器:
Ubuntu 18.04/ 1 CPU/ 2GB 内存/ 30GB磁盘
并且安装好Docker
安装Swarm
在master上执行
docker swarm init --advertise-addr 10.0.0.4
注意:复制docker swarm join --token 整段
在node上执行
docker swarm join --token xxxxxxxxxxxx
在master节点上查看node状态
docker node ls
部署可视化机架
docker service create
--name=viz
--publish=8000:8080/tcp
--constraint=node.role==manager
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock
dockersamples/visualizer
访问任一节点的8080端口即可看到visualizer的界面
部署第一个服务
docker service create --name web_server --publish 80:80 --replicas=3 yeasy/simple-web
在机架上观察副本和节点的对应情况
观察服务页面,对比docker第一个实验时该容器的行为,尤其是两段地址,多做几次F5
扩展服务
docker service scale web_server=9
同时观察机架上的变化
也可以访问前端页面,看看是否可以把访问请求定向到新的容器副本
排空一个节点,观察failover,如果是基于web的环境,(swarmVM02=worker1)
docker node update --availability drain swarmVM02
重新启动之前的节点,如果是基于web的环境,swarmVM02=worker1
docker node update --availability active swarmVM02
扩展服务规模,并且查看节点之间的负载均衡
docker service scale web_server=15
收缩服务
docker service scale web_server=3
查看服务
docker service ls
删除服务
docker service rm web_server
测试服务升级
创建测试服务
docker service create --name my_web --replicas=3 httpd:2.2.31
使用机架观察服务部署情况,需要特别注意容器的版本信息
2.2.31-->2.2.32
docker service update --image httpd:2.2.32 my_web
使用机架仔细观察升级过程
调整升级行为,服务规模增加到6个副本,每次更新2个副本,间隔时间45s
docker service update --replicas 6 --update-parallelism 2 --update-delay 45s my_web
2.2.32-->2.4.16
docker service update --image httpd:2.4.16 my_web
请仔细通过机架观察滚动更新过程
滚回
docker service update --rollback my_web
注意:swarm仅支持一次滚回
删除服务
docker service rm my_web
部署stack
创建yml文件
nano wordpress.yml
将以下内容拷贝到yml文件里
version: '3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:
使用stack创建wordpress服务
docker stack deploy -c wordpress.yml wpstack
扩展前端
docker service scale wpstack_wordpress=4
同时可以借助weavescope检查前端和后端之间的调用情况
Swarm可视化管理
部署portainer
curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml
docker stack deploy --compose-file=portainer-agent-stack.yml portainer
部署Prometheus + Grafana
git clone https://github.com/stefanprodan/swarmprom.git
cd swarmprom
ADMIN_USER=admin
ADMIN_PASSWORD=admin
SLACK_URL=https://hooks.slack.com/services/TOKEN
SLACK_CHANNEL=devops-alerts
SLACK_USER=alertmanager
docker stack deploy -c docker-compose.yml mon
照例访问3000端口的dashboard