[云原生专题-22]:K8S - 集群编排工具K8S与SWARM比较与技术选择

2023-11-14

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122750196


目录

前言

第1章 K8S与SWARM的位置

1.1 在软件架构中的

1.2 在软件工程中的位置

第2章 warm与k8s(kubernetes简称)的比较

2.1 设计理念的区别:基于容器VS基于业务

2.2 管理的业务场景的规模与复杂度不同:中小规模VS超大规模

2.3 工具的安装复杂度和学习难度不同:内嵌与额外安装

2.4 调度的最小单元不同:docker vs pod

2.5 负载均衡的机制不同

2.6 灰度发布的程度不同

2.7 弹性伸缩

2.8 生态

结论


前言

Docker引擎实现了容器化服务在某台服务器上的灵活部署,然后面对成百上千服务的集群系统,手工部署就显得力不从心,效率低下。为此docker开发了docker swarm来应对这个问题,google公司也提供了自己的解决方案K8S。本文就是比较这两种工具的相同点与优缺点,以便于作出技术方案。

第1章 K8S与SWARM的位置

1.1 在软件架构中的

K8S与SWARM都是架构在docker之上,都是对集群化的容器服务进行部署、运维的工具。

swarm和k8s本质都是容器编排服务,。

swarm本身就是内嵌在docker引擎之中的,与docker引擎融为一体。

k8s自身大部分功能也是以容器的方式部署,来完成容器编排的任务 。

1.2 在软件工程中的位置

第2章 warm与k8s(kubernetes简称)的比较

如何对他们进行比较和选择呢?

总体上讲,swarm与k8s(kubernetes简称)的比较,一点像MySQL和SQL Server的比较。

前者轻量级、实施快、以实现核心功能为重,比较适合小规模部署,后者则是企业级、功能全、支撑场景多,适合做企业级大规模docker云方案。

2.1 设计理念的区别:基于容器VS基于业务

swarm和K8S,虽然都是架构在容器之上,处于同一层次。但是,他们的侧重点却不相同。

swarm:内嵌在容器引擎内部,是容器引擎的一部分,与容器深度绑定,swarm偏重的是容器的部署,侧重于容器技术的扩展。

k8s:独立于docker,与docker是分离的,并完全不依赖于底层的docker,它侧重于业务应用的集群部署。k8s对容器的所有操作都渗透着为应用而服务的理念。以服务为中心,docker仅仅是其底层技术支撑的一种技术。

2.2 管理的业务场景的规模与复杂度不同:中小规模VS超大规模

在调度策略方面:

swarm只有三种调度策略:Host宿主机负载、宿主机运行容器的多寡、随机调度指定宿主机。

K8s除此之外,策略更加丰富,它的策略数量是swarm的2倍以上。比如它还有端口冲突策略(在大规模部署docker时,端口冲突是必须要考虑的场景)、容器挂载的卷冲突策略、指定特定宿主机策略等。

K8S调度测试的多样化,使得K8S更能够适应和解决杂场景下应用的部署。

k8s的组件要比swarm多得多,即便似乎功能类似的组件,k8s特殊场景支持上要优于swarm。

因此,k8s更适合大规模、超大规模、部署场景复杂的场合。

swarm更适合中小规模,部署场景简单的场合。

2.3 工具的安装复杂度和学习难度不同:内嵌与额外安装

swarm与docker天然集成,安装和使用很简单,特别是docker 1.12及以上版本,swarm已经集成到了docker的engine中,因此docker安装后swarm的部署已经完成了一半,而且swarm的操作都是通过docker api来实现,掌握了docker的操作命令后上手swarm很简单,基本上一个星期就可以掌握。

k8s虽然是基于docker,但围绕着应用的部署,K8S开发了很多组件,这些组件很多并不依赖于docker的api,在部署时需要单独规划和实施,而且因为组件中很多策略适应不同的部署场景,所以在部署前不仅仅要明白场景需求,而且还要对组件的设计逻辑了如指掌。所以安装和熟悉过程相比swarm而言要曲折很多,需要独立于docker之外,安装很多套件。

因此,K8S的学习难度也要比swarm大很多。

2.4 调度的最小单元不同:docker vs pod

在swarm中,被创建、调度和管理的最小单元就是container

在k8s中,最小单元则是pod(豌豆荚),pod由一个或者多个为实现某个特定功能,逻辑紧密的容器组成。在pod内的docker共享volume和网络namespace,彼此之间可以通过localhost通信或者标准进程间通信。以便pod内部的docker之间实现紧密地“交流”。

用pod有什么好处呢?

我们试想这样一个场景:我们有一个web应用的容器,现在我们为了收集web日志需要安装一个日志插件,我们面临两种选择:

(1)把插件安装在web应用容器的里面,则会面临如下一些问题:

  • 如果插件有更新,尽管web应用没有变化,但因为两者共享一个镜像,则必须把整个镜像构建一遍;
  • 如果插件存在内存泄露的问题,整个容器就会有被拖垮的风险。

(2)如果把插件安装在不同的容器,同样也不合适:

  • 那样的话,就需要想办法解决插件所在容器读取web容器的日志的问题。

但有了pod以后,这些问题都可以迎刃而解。

在pod里面,为日志插件和web应用各自创建一个容器,两者共享volume(即文件系统目录),web应用容器只需将日志保存到volume,便可以很方便的让日志容器插件读取。同时,两个容器拥有各自的镜像,彼此更新互不影响。他们通过文件系统的Volume实现了镜像的解耦,由保留了他们之间在业务上的紧密性,相关性。

2.5 负载均衡的机制不同

swarm自带的负载均衡机制应用不广,大部分还是采用nginx+consul。nginx本身也是单独的容器,而consul保存了各个docker中应用的网络信息(IP和端口),nginx镜像在compose时,在dockerfile中指定consul的地址,取出consul中保存的应用的网络信息,作为参数配置到nginx的config file中,从而实现负载均衡。

这种模式的缺点就是:nginx的容器中的配置文件无法跟着应用docker的网络信息发生变化而更改,也就是说,如果新增加了docker,新增加的docker IP和应用端口则需要手动添加到nginx的config file中,或者重新构建nginx的容器。

kubernetes的负载均衡要完善很多,内部集成了负载均衡。而且,对于dockerIP变更的问题也有很好的处理机制:k8s通过service实现负载均衡,service是pod(pod包含了容器,容器中包含了应用)的访问入口,它指向一组有相同label的多个pod。每个service创建的时候会在k8s内置的dns服务器中写入一条记录:service的名称和service的IP。当需要访问pod中的应用时,只需访问service的名称即可,pod的IP对访问者来说是透明的,因此不管怎么变都不会影响负载均衡。

2.6 灰度发布的程度不同

灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。

业务软件系统可以同时进行A/B testing,即让一部分用户继续用产品原有特性A,一部分用户开始用产品新特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到新特性B上面来。

灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,降低问题的影响面。

支持灰度发布的系统,把软件的运行系统由原先的测试系统和运营系统,划分为三个子系统:开发测试系统、生成测试系统、运营系统。经过测试开发后的软件,先部署在生成测试系统。开发测试系统与运营系统共享相同的数据库系统。

并通过负载设备,把一部分用户的业务请求转到生产测试系统,大部分用户的请求保留在原有的运营系统,经过生产测试验证后,就可以升级到运营系统 。

swarm和K8S两者都支持灰度发布。

swarm的灰度发布是一次发布

当执行swarm update操作时,所有旧的docker逐一全部替换成新的版本。如果在替换过程中发现新版本存在问题时,只能强行终止update,然后执行回滚,整个更新就失败。在这个过程中对线上的应用会有全局性的影响。

k8s有replication controller的机制,是基于Pod逐步发布 。

在发布的过程中,可以让k8s通过replication controller起一小部分新版本的pod并减少对应数量老版本的pod,新的pod可响应用户的请求,如果新的pod比较顺利,则慢慢增加新版本的数量而减少老版本数量,直至新版本全部替换老版本,如果新的pod出现了问题,此时让新pod立即下线,从而不对整个线上业务造成影响。

k8s的发布过程还可以人为干预,因此在重大发布时,这种方式其实更优。

2.7 弹性伸缩

弹性伸缩是指根据宿主机硬件资源承载的情况以及外部的业务请求的情况,做出的一种容器部署架构动态变化的过程,比如某台宿主机的CPU使用率使用偏高,需要进行动态调度。

k8s可以根据Pod的使用率,自动、动态调整宿主机中Pod的个数,保障服务可用性。

但swarm的最小单元是容器,则不具备上述这种能力,只能基于容器进行弹性调度。

2.8 生态

swarm是docke官方推出的集群方案,重在对容器的动态调度。

k8s是脱胎于google的一款基于容器的应用部署和管理打造一套强大并且易用的管理平台,重在对业务的动态调度

从github上也可以到看到k8s项目的star和fork 都很高,而且网上找的资料也非常丰富。

也正是基于k8s的生态影响力,导致docker不得不在新发布的docker EE(Enterprise Edition)将k8s整合进来。

结论

综上所述,K8S作为一款企业级的容器云方案,

Swarm轻量级、实施快、比较适合小规模部署,K8S则是企业级、功能全、支撑场景多,适合做企业级大规模云方案。

套用业界流行的话:swarm懂容器与技术,但K8S更懂管理云运营。


 作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/122750196

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[云原生专题-22]:K8S - 集群编排工具K8S与SWARM比较与技术选择 的相关文章

随机推荐

  • 判断ListView的第一个/最后一个item是否完全显示

    判断最后一项 亲测可用 当然网上还有很多其他的方法 不同场景的方式可能不一样 Override public void onScroll AbsListView view int firstVisibleItem int visibleIt
  • Android shape渐变色用代码怎么写?

    前言 shape在实际开发中非常常用 一般我们会在xml中使用 但涉及到颜色动态变更时 我们需要在代码中动态创建 xml中的shape 实际上被创建出来后它是一个Drawable 点开Drawable的子类一看 我们很容易就发现一些可疑的实
  • 【Android】DataBinding 最全使用解析

    DataBinding 最全使用解析 一 DataBinding 概述 二 基本用法 2 1 使用入门 2 2 布局和绑定表达式 2 3 事件绑定 2 4 单向绑定 2 5 双向绑定 三 高级用法 BindingAdapter 一 Data
  • Linux节点释放,关于linux:如何释放Inode的使用量?

    我有一个磁盘驱动器 其索引节点使用率为100 使用df i命令 但是 在实质上删除文件后 使用率仍为100 那么正确的方法是什么 磁盘空间使用较少的磁盘驱动器如何可能具有 Inode的使用率比磁盘空间使用率更高的磁盘驱动器高 如果我压缩大量
  • 前端面试大全(jQuery篇——含移动端常见问题)

    目录 面试系列 内容介绍 1 JQuery的源码看过吗 能不能简单概况一下它的实现原理 2 jQuery fn的init方法返回的this指的是什么对象 为什么要返回this 3 jquery中如何将数组转化为json字符串 然后再转化回来
  • harbor的https访问方式及自定义证书

    一 基本安装 docker docker compose 二 https访问harbor需要自定义证书 1 首先创建存放证书的目录 到对应目录证书的位置 root host1 harbor mkdir opt cert cd opt cer
  • matlab fminbnd 寻找区域极值

    fminbnd 进行有约束的一元函数最小值求解 它的求解命令是 X FMINBND FUN x1 x2 FUN 是目标函数 可以为表达式字符串或MATLAB自定义函数的函数柄 要求解在约束 x1 lt X lt x2下的最优解X 还有其他一
  • 干货丨什么是虚拟化技术?虚拟化常见架构

    在计算机中 虚拟化 英语 Virtualization 是一种资源管理技术 是将计算机的各种实体资源 如服务器 网络 内存及存储等 予以抽象 转换后呈现出来 打破实体结构间的不可切割的障碍 使用户可以比原本的组态更好的方式来应用这些资源 这
  • STM32固件库(标准外设库)入门学习 第六章TIM定时器(二)

    STM32固件库 标准外设库 入门学习 第六章TIM定时器 二 文章目录 STM32固件库 标准外设库 入门学习 第六章TIM定时器 二 前言 一 定时中断代码 1接线图 2 程序编写 2 1 第一步开启RCC时钟 2 2 第二步选择时基单
  • 大数据应用期末总评

    本作业来自于 https edu cnblogs com campus gzcc GZCC 16SE1 homework 3363 一 将爬虫大作业产生的csv文件上传到HDFS 将爬虫大作业中爬取到的数据文件csv导入到 usr loca
  • 前端API接口的调用

    一 开启API接口 首先我们把模型部署在自己的服务器上之后开启模型的接口 linux环境下 进入模型文件 输入命令行 bash webui sh listen api 实现api接口的开启 我们获得一个api接口的地址 二 API接口调用并
  • Springboot的部分依赖及作用

    SpringBoot2使用Undertow来提高应用性能 spring boot starter undertow
  • 【Linux】---文件基础I/O

    文章目录 回顾C语言文件操作接口 文件相关的系统调用接口 打开和关闭文件 文件的打开方式 文件描述符 文件描述符的分配规则 write read 重定向 dup2 mysell 回顾C语言文件操作接口 在C语言中对于文件的操作有着几个常用的
  • retinaface人脸对齐

    yolov5 face 人脸对齐 yolov5 face align rar 深度学习文档类资源 CSDN下载 GitHub foamliu MobileFaceNet PyTorch PyTorch implementation of M
  • 高等数学教材啃书汇总重难点(三)微分中值定理与导数的应用

    本章节包含多个知识点 一些列微分中值定理是考研证明题的重头戏 而洛必达和泰勒展开则是方法论的天花板难度 虽然对于小题的考察难度较低 整体上仍需重点复习 1 费马引理 2 罗尔定理 3 拉格朗日定理 4 柯西中值定理 5 洛必达法则 6 泰勒
  • 求一个4*4矩阵两对角线元素之和 设计一个程序

    提示你一下 但是只应该加一次 中间行的对角线元素重叠 由于当n是奇数的时候 每行上对角线元素的序号相加是n 1 对角线的元素在每行上的分布是规律的 共n行 不过思想是从行出发 矩阵由数组array n n 表示for int i 0 i
  • 用C语言解“计算工资”题

    7 10 计算工资 某公司员工的工资计算方法如下 一周内工作时间不超过40小时 按正常工作时间计酬 超出40小时的工作时间部分 按正常工作时间报酬的1 5倍计酬 员工按进公司时间分为新职工和老职工 进公司不少于5年的员工为老职工 5年以下的
  • Vue3全局提示(Message)

    Vue2全局提示 Message 可自定义设置以下属性 自动关闭的延时 duration 类型 number 单位ms 默认 3000ms 消息距离顶部的位置 top 类型 number 单位px 默认 30px 调用一次只展示一个提示 调
  • datax源码解析-任务拆分机制详解

    datax源码解析 任务拆分机制详解 写在前面 此次源码分析的版本是3 0 因为插件是datax重要的组成部分 源码分析过程中会涉及到插件部分的源码 为了保持一致性 插件都已大部分人比较熟悉的mysql为例子说明 本文我们来看看datax的
  • [云原生专题-22]:K8S - 集群编排工具K8S与SWARM比较与技术选择

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 122750196 目录 前言 第1章