主流云原生调度K8S系统的比较与分析-主流云原生调度系统的比较与分析
2022-06-29 14:46:03 9 举报
AI智能生成
主流云原生调度Apache Mesos Docker Swarm Google Kubrenetes K8S系统的比较与分析
作者其他创作
大纲/内容
本课程结合Linux操作系统的主要模块,从进程管理、容器内存、容器存储、容器网络和容器安全五个部分出发,带你掌握容器核心知识,理解相关技术的实现原理。实践方面,课程会以常见的各种容器问题为背景,给出可复用的高效解决方案。
前言
如何清理僵尸进程?
如何拿到容器CPU的开销?
进程与CPU问题
OOM Kill到底是怎么一回事?
为什么容器的内存使用量总在临界点?
内存问题
OverlayFS系统是如何工作的?
如何限制容器把宿主机磁盘写满?
容器存储
容器网络不通怎么调试?
如何处理网络乱序包?
容器网络
容器中的Privileged权限和root用户的适用场景是什么?
容器安全
重点问题
为什么我再容器中不能kill 1号进程?
为什么我的容器里面那么多僵尸进程?
为什么我在容器中的进程被强制杀死了?
理解进程
怎么限制容器的CPU使用?
如何正确的拿到容器CPU的开销?
容器CPU
加了CPU Cgroup限制,为什么我的容器还是很慢?
Load Average
容器进程
我的容器为什么被杀了?
容器内存
为什么我的容器内存使用量总是在临界点?
Page Cache
容器可以使用Swap空间吗?
Swap
我再容器中读写文件怎么变慢了?
子主题
容器文件系统
容器为什么把宿主机的磁盘写满了 ?
容器文件Quota
我的容器里磁盘读写为什么不稳定?
容器磁盘限速
容器写文件的延时为什么波动很大?
容器中的内存与IO
我修改了 /proc/sys/net下的参数,为什么在容器中不起效?
容器网络不通了要怎么调试?
容器网络延时要比宿主机上的高吗?
容器中的网络乱序包怎么这么高?
容器网络配置
我的容器真的需要 privileged 权限吗?
在容器中,我不以 root 用户来运行程序可以吗?
怎么解决海量 IPVS 规则带来的网络延时抖动问题?
案例分析
怎么用perf聚焦热点函数?
理解perf
怎么应用ftrace查看长延时内核函数?
怎么理解 ftrace背后的技术tracepoint和kprobe?
理解ftrace
加餐
容器实战
加餐《容器实战高手课》
扩展
Apache Mesos 是一个集群管理器,可跨分布式应用程序或框架提供高效的资源隔离和共享。它可以在动态共享的节点池上运行 Hadoop、Jenkins、Spark、Aurora 和其他框架。
Apache Mesos 是一个分布式系统内核的开源集群管理器,Apache Mesos 的出现要远早于 Docker Swarm 和 Kubernetes。再加上 Marathon 这个基于容器的应用程序的编排框架,它为 Docker Swarm 和 Kubernetes 提供了一个有效的替代方案。Mesos 同时可以使用其他框架来同时支持容器化和非容器化的工作负载。
Mesos 能够在同样的集群机器上运行多种分布式系统类型,可以更加动态高效的共享资源。而且 Messos 也提供服务失败检查,服务发布,服务跟踪,服务监控,资源管理和资源共享。Messos 可以扩展伸缩到数千个节点。如果你拥有很多的服务器而且想构建一个大的集群的时候,Mesos 就派上用场了。很多的现代化可扩展性的数据处理应用都可以在 Mesos 上运行,包括大数据框架 Hadoop、Kafka、Spark。
但是大而全,往往就是对应的复杂和困难,这一点体现在 Messos 上是完全正确,与Docker 和 Docker Swarm 使用同一种 API 不同的,Mesos 和 Marathon 都有自己的 API,这使得它们比其他编排系统更加的复杂。Apache Mesos 是混合环境的完美编配工具,由于它包含容器和非容器的应用,虽然 Messos 很稳定,但是它的使用户快速学习应用变得更加困难,这也是在应用和部署场景下难于推广的原因之一。
概念
链接
http://mesos.apache.org/
https://people.eecs.berkeley.edu/~alig/papers/mesos.pdf
Mesos:数据中心细粒度资源共享平台。
官网白皮书
官网
https://github.com/apache/mesos
源码
https://mesos.apache.org/getting-started/
https://mesos.apache.org/documentation/latest/
安装
快速开始
介绍
比较复杂且不方便使用
主要特点
2019年Twitter宣布不再使用
说明
Apache Mesos
Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。支持的工具包括但不限于以下各项:DokkuDocker ComposeDocker MachineJenkins
Docker Swarm 是 Docker 公司的容器编排系统,使用的是标准 Docker API 接口,容器使用命令和 docker 命令是一套,简单方便。Docker Swarm 基本架构是也是简单直接,每个主机运行一个 Docker Swarm 代理,一个主机运行一个 Docker Swarm 管理者,这个管理者负责指挥和调度这些主机上的容器,Docker Swarm 以高可用性模式运行,Docker Swarm 中的一个节点充当其他节点的管理器,包括调度程序和服务发现组件的容器。
Docker Swarm 的优点和缺点都是使用标准的 Docker 接口,因为使用简单,容易集成到现有系统,所以在支持复杂的调度系统时候就会比较困难了,特别是在定制的接口中实现的调度。这也许就是成也在 Docker,败也在 Docker 的原因所在。
Docker SwarmDocker集群管理
如下图所示,swarm 集群由管理节点(manager)和工作节点(work node)构成。
swarm mananger:负责整个集群的管理工作包括集群配置、服务管理等所有跟集群有关的工作。
work node:即图中的 available node,主要负责运行相应的服务来执行任务(task)
分工
总体架构图
原理
https://www.docker.com/
https://github.com/docker
功能较少但自带安装
较kubenetes更轻量级,用于在几十个节点上运行几百个容器
学习成本小对开发比较友好,不需要专业的运维团队,适合小团队
适合中型业务,简单高效成本低,符合短平快的开发模式
不久前有人在 Reddit 上问了一个问题:为什么 docker swarm 不如 Kubernetes 流行?有一些想法要分享,我以我的个人经历作为回应。然而,我认为它实际上会成为一篇不错的博客文章,如果有点短的话。我过去使用过 Docker Swarm 和 Kubernetes,实际上将它们用作我的硕士学位论文的一部分,并在一些基准测试中将它们相互对比,这揭示了它们性能的一些有趣的事情(我会写一篇文章关于有一天对它们进行基准测试的结果)。然而,在许多情况下,无论是关于我的日常工作,还是我的个人副项目和我的家庭实验室,我经常发现自己仍然定期使用 Docker Swarm over Kubernetes:
但这是为什么呢?一句话:简单。Docker Swarm 可以满足我的所有需求,而且在很多情况下它实际上比 Kubernetes 更好。不是因为 Kubernetes不能在数百个节点上运行数千个容器的部署,而是因为我不需要这样做的工具。我需要的是一个更轻量级的工具,用于在几十个节点上运行几百个容器。例如,这是我的 Swarm 集群之一,我在混合云中为个人项目运行:
而且我想争辩说,这样的配置也将与大多数组织将运行的内容和他们实际需要的内容相匹配,而不仅仅是追逐炒作。请允许我说明 2021 年 Docker Swarm 在哪些方面优于 Kubernetes。
Docker Swarm 应该更受欢迎在许多方面,Docker Swarm 都优于 Kubernetes:
Docker Swarm over Kubernetes
Docker Swarm和Kubenetes的比较
2019年阿里云宣布不再支持
Docker Swarm
Kubernetes(通常称为“K8s”)是一个开源系统,用于自动部署、扩展和管理容器化应用程序,最初由谷歌设计并捐赠给云原生计算基金会。它旨在提供一个“用于跨主机集群自动部署、扩展和操作应用程序容器的平台”。它支持一系列容器工具,包括 Docker
Kubernetes 作为一个容器集群管理系统,用于管理云平台中多个主机上的容器应用,Kubernetes 的目标是让部署容器化的应用变得简单且高效,所以 Kubernetes 提供了应用部署,规划,更新,维护的一整套完整的机制。
Kubernetes 没有固定要求容器的格式,但是 Kubernetes 使用它自己的 API 和命令行接口来进行容器编排。除了 Docker 容器之外,Kubernetes 还支持其他多种容器,如 rkt、CoreOS 等。Kubernetes 是自成体系的管理工具,可以实现容器调度,资源管理,服务发现,健康检查,自动伸缩,更新升级等,也可以在应用模版配置中指定副本数量,服务要求(IO 优先;性能优先等),资源使用区间,标签(Labels等)来匹配特定要求达到预期状态等,这些特征便足以征服开发者,再加上 Kubernetes 有一个非常活跃的社区。它为用户提供了更多的选择以方便用户扩展编排容器来满足他们的需求。但是由于 Kubernetes 使用了自己的 API 接口,所以命令系统是另外一套系统,这也是 kubernetes 门槛比较高的原因所在。
大部分的应用程序我们在部署的时候都会适当的添加监控,对于运行载体容器则更应该如此。kubernetes 提供了 liveness probes 来检查我们的应用程序,它是由节点上的 kubelet 定期执行的。
Kubernetes 逐步推出对您的应用程序或其配置的更改,同时监控应用程序的运行状况以确保它不会同时杀死您的所有实例。如果出现问题,Kubernetes 将为您回滚更改。利用不断发展的部署解决方案生态系统。
Automated rollouts and rollbacks自动推出和回滚
无需修改您的应用程序以使用不熟悉的服务发现机制。Kubernetes 为 Pod 提供了自己的 IP 地址和一组 Pod 的单个 DNS 名称,并且可以在它们之间进行负载平衡。
Service discovery and load balancing服务发现和负载均衡
自动挂载您选择的存储系统,无论是来自本地存储、 GCP或AWS等公共云提供商,还是 NFS、iSCSI、Gluster、Ceph、Cinder 或 Flocker 等网络存储系统。
Storage orchestration存储编排
部署和更新机密和应用程序配置,而无需重建映像,也不会在堆栈配置中暴露机密。
Secret and configuration management秘密和配置管理
根据资源需求和其他限制自动放置容器,同时不牺牲可用性。混合关键工作负载和尽力而为的工作负载,以提高利用率并节省更多资源。
Automatic bin packing自动装箱
除了服务之外,Kubernetes 还可以管理您的批处理和 CI 工作负载,如果需要,可以替换失败的容器。
Batch execution批量执行
将 IPv4 和 IPv6 地址分配给 Pod 和服务
IPv4/IPv6 dual-stackIPv4/IPv6双栈
使用简单的命令、使用 UI 或根据 CPU 使用情况自动缩放您的应用程序。
Horizontal scaling水平缩放
重新启动失败的容器,在节点死亡时替换和重新调度容器,杀死不响应用户定义的健康检查的容器,并且在它们准备好服务之前不会将它们通告给客户端。
Self-healing自我修复
在不更改上游源代码的情况下向 Kubernetes 集群添加功能。
Designed for extensibility专为可扩展性而设计
功能
https://kubernetes.io/
https://youtu.be/H06qrNmGqyE
将150多个微服务迁移到k8s
https://github.com/ddfeiyu/understanding-kubernetes
k8s源码解析
学习成本大,需要专业的运维团队,适合大公司有钱部门
功能强大,但是安装费劲
10年容器化基础架构,高效快捷
kubernetes知识图谱
外框
Google Kubrenetes
虽然 Docker 已经很强大了,但是在实际使用上还是有诸多不便,比如集群管理、资源调度、文件管理等等。那么在这样一个百花齐放的容器时代涌现出了很多解决方案,比如 Mesos、Swarm、Kubernetes 等等,其中谷歌开源的 Kubernetes 是作为老大哥的存在。
Kubernetes 是希腊语『舵手』的意思,它最开始由 Google 的几位软件工程师创立,深受公司内部 Borg 和 Omega 项目的影响,很多设计都是从 Borg 中借鉴的,同时也对 Borg 的缺陷进行了改进,Kubernetes 目前是 CNCF 的项目并且是很多公司管理分布式系统的解决方案。其中比较有意思的一点是,Kubernetes 的简写称为 k8s。即该单词 k 和 s 中间刚好是 8 个字母组成,所以是一种单词的简写形式。类似于,我们在项目中使用的国际化(internationalization)叫做 i18n 是一样效果。
背景
建于 Docker 之上的 Kubernetes 可以构建一个容器的调度服务,其目的是让用户透过 Kubernetes 集群来进行云端容器集群的管理,而无需用户进行复杂的设置工作,系统会自动选取合适的工作节点来执行具体的容器集群调度处理工作。
其核心概念是 Container Pod。一个 Pod 由一组工作于同一物理工作节点的容器构成。这些组容器拥有相同的网络命名空间、IP以及存储配额,也可以根据实际情况对每一个 Pod 进行端口映射。此外,Kubernetes 工作节点会由主系统进行管理,节点包含了能够运行 Docker 容器所用到的服务。
我们可以看到多种服务方式阿里云 => Infrastructure as a service新浪云 => Platform as a serviceOffice365 => Software as a service
作为编排工具,从社区的年龄来讲,Kubernetes 不占优势。毕竟 Kubernetes 才三岁而已,而 Apache 推出的 Mesos 已经有 7 年之久。Docker Swarm 虽然是比 Kubernetes 更年轻,但是它的背后是来自于 Docker 官方容器中心的全方位支持。但是,因为是谷歌开源出来的,并且拥有十多年的容器化的经验,所以还是有很多人在使用,并且会变成以后整个行业的主要支柱。
Kubernetes 可以使用 DNS 名称或自己的 IP 地址公开容器,如果到容器的流量很大,Kubernetes 可以负载均衡并分配网络流量,从而使部署稳定。
服务发现和负载均衡
Kubernetes 允许您自动挂载您选择的存储系统,例如本地存储、公共云提供商等。
存储编排
您可以使用 Kubernetes 描述已部署容器的所需状态,它可以以受控的速率将实际状态更改为所需状态。例如,您可以自动化 Kubernetes 来为您的部署创建新容器,删除现有容器并将它们的所有资源用于新容器。
自动部署和回滚
Kubernetes 允许您指定每个容器所需 CPU 和内存(RAM)。当容器指定了资源请求时,Kubernetes 可以做出更好的决策来管理容器的资源。
自动二进制打包
Kubernetes 重新启动失败的容器、替换容器、杀死不响应用户定义的运行状况检查的容器,并且在准备好服务之前不将其通告给客户端。
自我修复
Kubernetes 允许您存储和管理敏感信息,例如密码、OAuth 令牌和 ssh 密钥。您可以在不重建容器镜像的情况下部署和更新密钥和应用程序配置,也无需在堆栈配置中暴露密钥。
密钥与配置管理
Kubernetes 解决的核心问题
Kubernetes 的出现不仅主宰了容器编排的市场,更改变了过去的运维方式,不仅将开发与运维之间边界变得更加模糊,而且让 DevOps 这一角色变得更加清晰,每一个软件工程师都可以通过 Kubernetes 来定义服务之间的拓扑关系、线上的节点个数、资源使用量并且能够快速实现水平扩容、蓝绿部署等在过去复杂的运维操作。
kubenetes的优势
Kubernetes发展经历
性能对比
总结
主流云原生调度系统的比较与分析
收藏
0 条评论
下一页