Docker基础学习(11)-容器集群平台Docker Swarm

12 篇文章 0 订阅

容器集群平台Docker Swarm

准备工作
配置网络

由docker1完整克隆另外两台并配置网络

主机网络docker0
docker1192.168.200.200172.17.0.1/24
docker2192.168.200.201172.17.1.1/24
docker3192.168.200.202172.17.2.1/24

docker1上

修改Docker0地址(docker0默认是172.17.0.1/16
/etc/docker/daemon.json文件的{}中添加,注意 前一项后面加逗号,

"bip":"172.17.0.1/24"

docker2上(docker3同理

修改主机名

hostnamectl set-hostname docker2

修改IP(如果用DHCP,不需要改

sed -i 's/IPADDR=.*/IPADDR=192.168.200.201/' /etc/sysconfig/network-scripts/ifcfg-eth0
systemctl restart network

修改Docker0地址
/etc/docker/daemon.json文件的{}中添加,注意 前一项后面加逗号,

"bip":"172.17.1.1/24"

重启docker

 systemctl daemon-reload
 systemctl restart docker 
配置容器互联
#找不到route命令则yum install net-tools
#查看路由表 route -n
#写错需要删除的话route del -net 172.17.0.0/24
[root@docker1 ~]# route add -net 172.17.1.0/24 gw 192.168.200.201
[root@docker1 ~]# route add -net 172.17.2.0/24 gw 192.168.200.202

[root@docker2 ~]# route add -net 172.17.0.0/24 gw 192.168.200.200
[root@docker2 ~]# route add -net 172.17.2.0/24 gw 192.168.200.202

[root@docker3 ~]# route add -net 172.17.0.0/24 gw 192.168.200.200
[root@docker3 ~]# route add -net 172.17.1.0/24 gw 192.168.200.201

设置SELinux、防火墙

setenforce 0
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/tcp --permanent
firewall-cmd --add-port=4789/udp --permanent
firewall-cmd --reload

2377 管理端口

7946 通信端口

4789 overlay网络

配置swarm集群
创建集群

docker1作为管理节创建集群

[root@docker1 ~]# docker swarm init --advertise-addr 192.168.200.200

–advertise-addr可以省略,默认当前节点为管理节点

image-20200518092900852

#记住返回的token值
SWMTKN-1-0z02ghn0ikd0xm2zr5ao0n9edf45m8y334h4yk6oxjec8siqmd-67yok2reiw6c66iurds1o0tts
加入集群

另外两个节点作为work节点加入集群。

docker swarm join --token <token值> 192.168.200.200:2377

在管理节点查看集群中节点情况

docker node ls

image-20200518093505015

使用集群服务

实验:构建一个web服务

构建web镜像
[root@docker1 ~]# mkdir cl_web
[root@docker1 ~]# cd cl_web/
[root@docker1 cl_web]# vi Dockerfile
FROM centos:7
MAINTAINER kdl<304xxx1765@qq.com>
RUN yum install httpd -y && echo "docker1.kdl.com" > /var/www/html/index.html
EXPOSE 80
CMD ["/usr/sbin/apachectl","-D","FOREGROUND"]
[root@docker1 cl_web]# docker build -t cl_web:1.0 .
复制到另外两个集群
scp -r /root/cl_web root@192.168.200.201:/root
scp -r /root/cl_web root@192.168.200.202:/root

cd /root/cl_web
分别修改dockerfile中网页内容,三个网页不同的网页内容以验证集群负载均衡
"docker2.kdl.com"
"docker3.kdl.com"

docker build -t cl_web:1.0 .
创建服务

管理节点创建名为``scl`(随意)的服务

docker service  create --name scl --replicas=3 -p 80:80 cl_web:1.0
#--replicas 参数设置副本数量(工作节点个数,管理节点也可以作为工作节点)。如果少于全部的工作节点数会随机选择其中几个。
#-p 公共端口:容器端口 公共端口可以在集群中任意节点上进行访问,即使该节点上没有运行服务实例,会通过路由机制将请求转发给实际执行了服务容器的工作节点

image-20200518100449085

测试

多次执行``curl 127.0.0.1`测试集群的调度负载均衡

image-20200518112034599

其它
关于swarm的网络

https://www.jianshu.com/p/cacdd5ff0f14
warm的三个网络
docker_gwbridge和ingress是swarm自动创建的,当用户执行了docker swarm init/connect之后。
docker_gwbridge是bridge类型的负责本机container和主机直接的连接
ingress负责service在多个主机container之间的路由。
<custom-network>是用户自己创建的overlay网络,通常我们都需要创建自己的network并把service挂在上面。
swarm service的路由办法通常有两种,VIP和DSN
VIP是缺省情况设置,当用户创建service的时候,这个service会被分配一个VIP,然后每一个具体的container都有一个独立的IP,ingress会负责从VIP到各个container之间的路由。
发布service的时候:
如果指定了–publish端口,那么会在ingress网络中创建接口,并产生路由信息。
如果指定了–network网络,那么会在指定网络里面创建接口,并产业路由信息。
如果都没有指定,实际上相当于没有通信,不和主机通信,互相之间也不通信。
如果两者都指定了,那么在两处均创建接口。
如果没有指定–network网络,那么无法通过service名字寻址,例如curl my-web:80将无法访问;所以通常来说创建swarm service都需要指定一个overlay网络。

关于swarm的服务类型和调度策略

服务类型分为两种(可以通过-mode 指定)

复制服务( replicated services)模式: 默认模式,每个任务在集群中会存在若干副本, 这些副本会被管理节点按照调度策略分发到集群中的工作节点上。 此模式下可以使 用-replicas 参数设置副本数量;

全局服务( global services)模式: 调度器将在每个可用节点都执行一个相同的任务。 该模式适合运行节点的检查,如监控应用等。

调度策略有三个:

spread: 默认策略,尽量均匀分布,找容器数少的结点调度

binpack: 和spread相反,尽量把一个结点占满再用其他结点

random: 随机

其它命令

查看集群中服务列表

docker service ls

查看服务的详情

docker service inspect 服务 --pretty

查看服务中进程

docker service ps 服务

扩展服务

docker service scale 服务=复制个数
#对服务进行伸缩(工作节点个数), 例如docker service scale=2将服务“scl”的复制个数从3改为 2

删除服务

 docker service rm 服务

提升一个工作节点为管理节点

docker node promote

将一个管理节点降级为工作节点

docker node demote

节点离开集群

docker swarm leave
#支持-f,强制离开集群
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值