05)容器编排docker swarm

在这里插入图片描述
所有操作都在本地一台机器进行,容器都在一台机器。但有些app部署在一台机器上根本无法满足需求,需要部署在多台机器,那问题来了,如下:
在这里插入图片描述
如上图问题,这时候就需要用到容器编排技术,docker swarm 是docker 自带的一种编排工具
在这里插入图片描述
docker swarm 是一个集群架构
既然是集群,肯定有node,而node又有角色(如leader,follower等)
swarm共有2种角色,manager 和 worker

manager:swarm集群的大脑。
在生产环境中为了避免单点故障,manager至少要有2个。而manager有多个的话,就涉及到一个状态同步的问题,
即1个manager产生的数据如何同步到另外的节点上?
这里用到一个内置的分布式存储数据库,数据库用 ratf (一个分布式一致性协议)协议实现数据同步,ratf 协议能确保manager之间的信息是同步的。

worker:干活节点,大部分的容器都运行在worker节点上,worker之间有些数据也需要同步,通过 gossip network
来做信息同步

在这里插入图片描述
docker swarm的容器服务运行在manager 节点和 worker 节点上

docker swarm 的service 跟docker-compose 的service 意思基本一样,1个service代表1个容器
replicas:在replica模式下,做3个横向扩展,部署时生成3个容器,3个容器通过调度系统部署在不同worker,也就是说通过swarm去部署容器时,不知道最终这容器最终运行在哪里的。调度系统根据一定算法去算的,比如看哪些节点负载轻一些等等
在这里插入图片描述
这张图基本上是 swarm 模式下创建容器的过程
大概就是manager做决策,决定放在哪的node,之后执行实际操作
在这里插入图片描述

docker swarm init --help //初始化1个docker swarm 集群的方法

在这里插入图片描述
在这里插入图片描述
如上,创建了3个节点的swarm 集群

创建service

docker service create

在这里插入图片描述
大概来讲docker service 有点像 docker run,区别是docker run 是本地创建容器,
而docker service 是在swarm 上面创建容器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
刚好被平均分配到3个node 上,再扩展成5个
在这里插入图片描述
在这里插入图片描述
回到manager节点,查看
一开始是4,后面又变成5,node2上又新建了1个service。
也就是说swarm 会监控运行中的service,如果某个service不能服务了,swarm会重新起1个service,
新起的service未必在原来的node上,这里只是刚好还在原来的node2上,确保达到5个service在工作
在这里插入图片描述
收缩成3个,成功
在这里插入图片描述
删除demo service,worker节点上也没了,worker节点上可能会有点延迟删除,等一下就没



在前面的例子中,需要1个etcd 来实现不同机器上container之间通信,但在swarm模式,并不需要,
swarm底层会有1个机制,去同步网络创建,因为要service之间的通信,要通过 overlay 网络来实现
在这里插入图片描述
swarm 有内置类似dns的服务,可以直接ping serviceName
在这里插入图片描述
位于worker1 节点,进去这service
在这里插入图片描述
扩展成2个
在这里插入图片描述
10.0.0.7是虚拟ip,这个虚拟 ip 是不会变的,而service 容器的 IP 随着收缩扩展会变
这个 虚拟ip 和 实际容器ip 有个对应 map 关系,通过这map关系找到实际容器ip
docker swarm内会自动实现类似负载均衡,比如有3个replicas,每次都是访问虚拟IP,之后会讲虚拟IP的流量分配到这3个replicas
比如说whoami 这个service绑定8000,端口,前面的wordpress则是绑定80端口,
那通过任意swarm 节点+端口,都能访问该服务
在这里插入图片描述
在这里插入图片描述
比如client 要访问web,通过访问 vip 10.0.9.4,之后swarm的负载均衡转发流量,决定由web1 或者 web2 响应
下图演示整个流程
在这里插入图片描述
swarm 的负载均衡(LVS)叫全称叫 linux virtual server ,主要用于实现在系统级别的负载均衡,是Linux内核的一部分,
由国人实现,感兴趣可以去 搜索 lvs keepalived 配置,做一些实验和配置,通过 lvs 和 keepalived ,通过这2个东西,
可以搭建一个高可用的负载均衡。和nginx的区别是,lvs 功能有点较少,nginx功能多,可以根据具体的情况做选择,
一般用nginx较多
在这里插入图片描述
比如上图,访问的是host3,但host3没这个服务,没关系,会通过ipvs 通过 ingress network 转发到另外有这个服务的host。
再将responde 返回来,这就是ingress 的主要功能
在这里插入图片描述
换一个节点,worker1,worker1是没有这个whoami 服务的,同样能返回whoami 服务的结果
这就是ingress network 实现的作用在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值