承接上文: Docker进阶篇教程,docker-compose, docker swarm, 弹性、扩缩容

Docker进阶篇教程

  • 9. 体会swarm弹性、扩缩容
    • 9.1 理解扩缩容
    • 9.2 docker service命令
    • 9.3 理解灰度发布
    • 9.4    replicas 3个副本测试
    • 9.5 replicas 10个副本测试
    • 9.6 scale命令扩缩容
  • 10. docker swarm概念总结
  • 11. docker其他命令学习方式
    • 11.1 Docker Stack
    • 11.2 Docker Secret
    • 11.3 Docker Config
  • 12. 拓展到K8S

9. 体会swarm弹性、扩缩容

以后告别docker run , 容器只是玩具,脱离了编排,它就没有任何意义了!

先准备一下,下面集群跑起来,三主一从:

9.1 理解扩缩容

下面演示swarm动态扩缩容:

上面如果新加一个web应用,按照以前的方式,需要我们在nginx里面手动配置,非常痛苦,而我们使用了swarm之后,这就变成了动态扩缩容,扩展10个web应用,对于nginx,它跟访问一个web应用没有什么区别,也就是它屏蔽了底层的差异,如下图:

9.2 docker service命令

9.3 理解灰度发布

灰度发布即是金丝雀发布,我们要升级我们的项目,有两种方式,
一是停止网站,挂一个404,这种方式非常耗费流量
另一种即是滚动发布,升级不影响网站的使用,平滑升级,docker swarm 和k8s均可实现



咦?我们是在docker-1机器上创建的,但1、2、4上都没有这个docker进程,它却跑到了docker-3里面(docker-3也是manager节点)! 可见它是随机分布的!

9.4    replicas 3个副本测试

下面创建3个副本测试:

下面在docker-1机器上查看:

重点来了: 动态更新nginx成3个副本,1上没有,2、3、4都有nginx。但用1的ip访问却也能访问到nginx!!!如下图:

结论:docker-1我们也通过docker ps 查看了,它里面是没有nginx服务的,但是由于它是在集群里面,所以他依然能访问我们部署的服务,只要在集群里面,无论在哪个ip, 都能正常访问的,这就是集群 —> 整体!

集群即是整体,非常大的一个整体,整体里面有很多机器,机器里面有很多容器服务在跑(假设它们都提供同一个服务),但是对于用户而言,用户访问进来就是一个大的整体,整体里面可以随时动态地扩缩容

9.5 replicas 10个副本测试




分别查看四个机器,发现四个节点上分别跑3、3、2、2个nginx容器。

当然,同样的命令也可以再设置成只有1个副本,下图执行完,之前好多的服务就都停了:


以上就是弹性、扩缩容!

我们要百分百利用服务器资源,比如阿里云10000台服务器,平时用的不多,都卖给别人了,通过虚拟化把资源划分给别人,而到了双十一这一天,这个时候阿里那边就可以把这一万台都动用起来,因为它们是在同一个集群里面的,即实现了动态扩缩容!服务的高可用!服务器的高可用!

9.6 scale命令扩缩容




k8s更难,功能更多。swarm相当于简单版的k8s,我们学完swarm,然后再去学k8s,有很多内容都是相通的,比如:副本、服务器、多容器

10. docker swarm概念总结

  • Swarm
    集群的管理和编排,docker可以初始化一个swarm集群,其他节点可以加入,加入的时候有两个角色 --> 管理节点、工作节点

  • Node
    就是一个docker节点,我们在linux上安装了一个docker,那么这就是一个节点,多个节点就组成了一个网络集群(管理者、工作者),(集群需要一个管理者,就是上面说的swarm)

  • Service
    即任务,可以在管理节点或者工作节点来运行,当然也是整个docker集群的核心,用户访问的就是它!我们操作的也是它!
    service的创建(docker service create)跟我们之前docker run 是一样的

  • Task
    容器内的命令,细节、小任务
    因为我们在真正创建容器的时候,它是一层一层的,并不是一下子就创建完成的,下图演示一下:


图解:
上图的右边是我们通过docker-compose构建的服务,depoly部署了4个副本,然后图左边即是生成了4个任务,虽然说整个它是一个大的服务,但是它里面有4个副本,每个副本跑在哪个镜像上,跑在哪个服务器上,都不是我们要关心的,因为这是docker-swarm集群节点帮我们随机分配,随机做的,
所以要理解我们部署的每一个副本就是一个个小的task任务而已,想扩展多少个都是随机的

  • 工作模式 图解


上图图解:
一个service可以创建多个副本,每一个副本其实就是一个task任务,任务里面跑着咱们最终运行着的容器

  • docker swarm集群 内部原理 图解

    上图图解:
  1. docker收到docker service create命令
  2. 这个命令通过API进入scheduler调度,这个调度它自己有内部的算法,它根据咱们的集群节点是否可到达、压力来确定应该分配到哪里,以我们在集群里面跑了10个nginx举例,它并没有把这10个都跑在一个容器里面,而是类似平均分配这样,这就是scheduler调度在起作用
  3. 被分配的节点把服务运行起来

大概流程:

docker service命令 --> 管理节点 --> API --> 调度 --> 工作节点(创建task容器,自动创建和维护)

同理,k8s里面逻辑也是如此, 比如:

kubectl get pod
kubectl service api

  • 服务副本与全局服务


我们刚才说到所有东西都是随机分配的,而且管理节点和工作节点都可以跑项目, 我们的项目可以分为一个是可以在全局跑的service, 还有一个是只能在副本上跑的项目,比如当我们不想在工作节点跑项目的时候,我们可以只让它以副本的方式启动,全局的服务可以在任何节点上跑,工作节点上的服务只让它在工作节点上面跑,这样该怎么实现呢?实现方式如下:

  • docker swarm网络
    docker swarm网络与我们之前学习的网络还是有很大差异的,
    先启动一个服务:

    扩展成5份, 然后查看网络:

  • Overlay网络
    集群里面的多个服务,即使是跨机器,我们也可以把它加进来,如下图:

无论容器(服务)在哪个机器,我们只需将容器加到这个Overlay网络里面,它会自动在多个电脑上面去找

  • Ingress网络
    特殊的Overlay网络,具有负载均衡的功能, IPV5 , VIP


可见, ingress网络绑定了四个ip(同一个网络下的),如下图:

  • 为啥引入Overlay技术?

    由于我们搭建将以上四台服务器搭建成了集群,如果上面四个容器还只是单独的服务的话,他们之间的网络是ping不通的,所以引入了Overlay这个技术,新加了一层网络叫Overlay网络,我们把所有节点加入到Overlay网络里面之后, 让他们之间能够互相ping通,集群或者说网络就变成了一个整体了!

11. docker其他命令学习方式

11.1 Docker Stack


11.2 Docker Secret


k8s中也有这个概念,学k8s的时候再说

11.3 Docker Config


12. 拓展到K8S


超过10台用k8s不用swarm



Docker进阶篇教程 docker swarm弹性、动态扩缩容相关推荐

  1. docker部署redis集群实现动态扩缩容

    目录 思考 分布式存储的解决方案 哈希取余分区 一致性哈希算法分区 哈希槽分区 采用哈希槽分区 部署三主三从(docker) 准备工作 创建3主3从redis实例 进入容器中,构建主从关系 主从容错切 ...

  2. Docker进阶学习实战:Swarm集群弹性创建服务

    docker-compose up 单机是启动一个项目. 集群就可以用到swarm 会有对应的docker-service 这里就要用到docker service 命令. [root@iZ0jl6r ...

  3. Fluid 0.6 版本发布:数据感知的Pod调度与数据集自动弹性扩缩容

    简介:Fluid 是 CNCF 基金会旗下云原生环境中数据密集型应用的高效支撑平台,由南京大学.阿里云云原生团队以及 Alluxio 开源社区联合发起.项目自开源发布以来吸引了众多相关方向领域专家和工 ...

  4. Fluid 0.5 版本发布:开启数据集缓存在线弹性扩缩容之路

    作者 | 顾荣  南京大学PASALab, Fluid项目co-founder 来源 | 阿里巴巴云原生公众号 导读:为了解决大数据.AI 等数据密集型应用在云原生场景下,面临的异构数据源访问复杂.存 ...

  5. Fluid 0.5 版本:开启数据集缓存在线弹性扩缩容之路

    简介:为了解决大数据.AI 等数据密集型应用在云原生场景下,面临的异构数据源访问复杂.存算分离 I/O 速度慢.场景感知弱调度低效等痛点问题,南京大学PASALab.阿里巴巴.Alluxio 在 20 ...

  6. 【Docke进阶篇】Docker网络模式与容器间通信

    本篇主要是Docker网络模式与容器间通信. 上一篇:[Docker基础篇]Docker核心概念与指令 文章目录 一.预备知识点 二.Docker网络模式 1.查看Docker网络模式 2.bridg ...

  7. Serverless Knative Serving弹性扩缩容实践整理

    文章目录 (一)基础 (1)认识 (2)Knative Serving对象模型 (3)knative-serving (4)Knative的扩缩容流程原理 (二)弹性扩缩容实践 (1)自动扩缩容类型选 ...

  8. 拆解交易系统--性能优化,安全加固与弹性扩缩容

    点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 前几篇文章我们拆解了交易系统架构层次的设计方案,对于代码细节我们讨论很很少,今天基于几个方面简短的介绍一下,未来有时间可以针 ...

  9. 数据库面试 - 如何设计可以动态扩容缩容的分库分表方案?

    数据库面试 - 如何设计可以动态扩容缩容的分库分表方案? 面试题 如何设计可以动态扩容缩容的分库分表方案? 面试官心理分析 对于分库分表来说,主要是面对以下问题: 选择一个数据库中间件,调研.学习.测 ...

  10. 动态扩容缩容的分库分表方案

    1.面试题 如何设计可以动态扩容缩容的分库分表方案? 2.面试官心里分析 (1)选择一个数据库中间件,调研.学习.测试 (2)设计你的分库分表的一个方案,你要分成多少个库,每个库分成多少个表,3个库每 ...

最新文章

  1. 笔记本电脑显卡cuda_准大学生必看~千万别乱买,建议不同专业选择不同款式的笔记本电脑!...
  2. java 扫描tcp端口号_多线程TCP端口扫描 java实现
  3. 万字长文带你全面认识 Kubernetes 中如何实现蓝绿部署、金丝雀发布和滚动更新...
  4. 初涉SQL Server性能问题(3/4):列出阻塞的会话
  5. 汇编程序.c到a.out的生命历程
  6. QT中QTableWidget清空或删除内容功能
  7. java 加载资源_在Java中加载资源的首选方式
  8. MySQL存储过程之查询受影响的行数与查询到的行数
  9. Python安装pycryptodome密码库
  10. 神通数据库常见问题解决方案
  11. lvds输入悬空_低压差分信号LVDS学习笔记-模拟/电源-与非网
  12. 迅雷前副总裁李金波:我的创业感悟
  13. Pycharm一直显示connecting to console
  14. windows下CoffeeScript 的实现
  15. w ndows无法完成格式化,windows 无法完成格式化2种解决方案
  16. Angular在洋葱圈的实践与思考
  17. 24岁想学插画来得及吗?零基础学插画需要了解这些
  18. 1093:计算多项式的值
  19. 基于PyTorch搭建CNN实现视频动作分类任务 有数据有代码 可直接运行
  20. 拼多多APP产品使用体验报告

热门文章

  1. 【Linux】gcc编译工具,断点的设置,gdb调试
  2. “第一届区块链产业经济发展年会”拟邀嘉宾名单(部分)
  3. H5微信分享自定义标题和图片的实现及遇到的各种坑
  4. 一篇荡气回肠的统计思想漫谈——漫谈相关与回归
  5. SAP 采购订单关单
  6. 正则表达式不以某个字符开头
  7. 计算机专业期刊参考文献,优秀计算机期刊文章参考文献 优秀计算机专著类参考文献有哪些-免费论文范文...
  8. Redis集群之主从模式
  9. 常用开发板接口执行器
  10. linux ipad 视频,是否可以在iPad或iPad上同时播放多个视频文件?