| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> docker-swarm (二) -> 正文阅读 |
|
[系统运维]docker-swarm (二) |
??? ???????????? ((本次演示由于之前做ansible了,所以环境有点不同,请忽略)) ??????? 前面提到了通过swarm如何部署service,也验证了swarm的failover(故障切换)的特性,现在来说说,如何去访问service。 1、(1)创建一个service
service已经创建好了,接下来就是怎么去访问了?但是访问的知道ip啊,所以我们要看看容器的IP,使用docker inspect 容器ID。 ? ?但是这样的访问只限制与容器与本地之间,服务并没有暴露在外部。 (2)从外部访问service ???? 要将service暴露到外部,只需要暴露一个端口就可以了 curl 127.0.0.1:8080 2、service之间进行通信 ?????? 微服务的架构中的应用由多个service组成,比如前端的apache或nginx,提供缓存的memcached,存放数据的mysql等,每一层都是swarm的一个service,每个service运行了多个容器,在这种情况下。service与service之间通信是必须的。 ??????? 一种方法是将所有service都publish出去,通过service端口访问,缺点就是直接把后台服务器也暴露了,不安全。那么就需要另外一种方法,swarm提供了一种机制,这种机制的作用如下: ??? (1)让service通过简单的方法访问到其他service; ??? (2)当service副本的ip或者副本数发生变化时,不会影响到正在访问该service的其他service; ????? 创建overlay网络? 要使用服务发现,需要相互通信的service必须属于同一个overlay网络,所以先创建一个新的overlay网络; ?部署一个service使用overlay网络; ?再部署另外一个service使用同一网络,用于验证; ?查看到busy在host2上,我们去host2上验证; ? ? ?? 可以看到验证成功,那这个ip就是myweb-1的service的vip,swarm会对vip的访问进行负载均衡的处理。可以利用docker service inspect myweb-1 查看是否ip是一样的。 ----------------------------------------------------------------------------------------- 滚动更新??? 在生产环境中,需要升级app或更新时,利用滚动更新可以降低应用更新的风险,如果某个更新的副本失败或者由故障,整个更新会暂停,其他的副本则可以继续提供服务。现在我用httpd-2.2.31和httpd2.2.32来实验。
?下面将service更新到httpd-2.2.32,使用docker service update --image httpd-2.2.32(要升级到的版本) myweb(service) ?swarm滚动更新的步骤如下 ?(1)停止一个副本 ?(2)调度任务,选择worker node; ?(3)在worker上用新的镜像启动副本; ?(4)如果更新副本运行成功,继续更新下一个副本,如果失败,暂停整个更新。 ?? 通过docker service logs myweb可以查看升级更新的顺序 也可以使用命令?? watch docker service ps myweb查看详细更新过程 ?还可以利用--update-parallelism设置并行更新的副本数目,通过--update-delay指定滚动更新的间隔时间。 ?可以慢慢观察它更新的时间和顺序。到最后全部更新成功 ?????? 如果更新的结果不理想,swarm还提供了一种功能。就是回滚,可以通过--rollback恢复到更新之前的状态? docker service update --rollback myweb。 ------------------------------------------------------------------------------------ ?????? swarm在创建容器时,默认使用replicated mode,就是通过--replicas调整容器副本的数量,内部的调度器会根据当前集群的妓院使用状况在不同的node上启停容器,每个node上运行的副本有多有少,资源丰富的肯定比较多,反之亦然。 ?????? 除了replicated mode,swarm还提供了一个global mode,这种模式是强制在每个node上只运行一个副本,比如EFK的filebeat,再比如zabbix的agent端等等,哪怕后期有新的容器加入进来,swarm会自动在新容器上运行一个。 ?????? 下面来看一下global mode的实际效果把。 ? ? ? ? 可以看的出来容器是均匀的跑在各个node上,来测试一下加入一台node,swarm会不会帮我创建一个副本。我重新开启一台机器,安装好docker,测试网通,在manager节点使用命令docker swarm join-token manager,查看manager的token值,在新服务器上执行,显示加入成功,然后什么都不用做,到manager上看看有没有给新node创建一个副本。 ??????? host3就是我新加的服务器,测试成功!!! 使用docker service inspect myweb-1可以看到这个service的mode是什么。 --------------------------------------------------------------------------------------------------- ???????? 以上都是swarm按照自己规则来决定容器应该跑在哪个node上的,swarm想在哪个node上跑容器我们干预不了,但是我们还有办法可以精确的控制service的运行位置。 ??? Label控制Service的位置?? 大体分为两步:(1)为每个node定义label; ??????????????????????????? (2)在创建service时指定node的label,label可以灵活的描述node的属性(自定义),格式为 key=value。 ??? 使用命令 docker service inspect service_name可以看到label的定义。 ?? 我来给每个node打上label:host1 label:test-1 ???????????????????????????????????????????????? host2 label:test-2 ???????????????????????????????????????????????? host3 label:test-3 ?接下来我在3个node上跑不同的服务。
?可以看到所有的容器都在按照我的预期执行在每个固定的node上,这就是labels的作用。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 16:21:59- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |