1、Kubernetes(K8s) 简介
Kubernetes(K8s)在一个由云本地计算基金会(CNCF)托管的开源容器管理工具。这也被称为Borg的增强版本,它是在谷歌开发的,用于管理长时间运行的进程和批处理作业,这在早期是由独立的系统处理的。
Kubernetes具有跨集群自动部署、应用程序扩展和应用程序容器操作的能力。它能够创建以容器为中心的基础设施。
2、Kubernetes(K8s)的特点
1)自我修复
在节点故障时重新启动失败的容器,替换和重新部署,保证预期的副本数量;杀死健康检查失败的容器,并且在未准备好之前不会处理客户端请求,确保线上服务不中断。
2)弹性伸缩
使用命令、UI或者基于CPU使用情况自动快速扩容和缩容应用程序实例,保证应用业务高峰并发时的高可用性;业务低峰时回收资源,以最小成本运行服务。
3)自动部署和回滚
K8S采用滚动更新策略更新应用,一次更新一个Pod,而不是同时删除所有Pod,如果更新过程中出现问题,将回滚更改,确保升级不受影响业务。
4)服务发现和负载均衡
K8S为多个容器提供一个统一访问入口(内部IP地址和一个DNS名称),并且负载均衡关联的所有容器,使得用户无需考虑容器IP问题。
5)敏感数据和配置管理
管理敏感数据和应用程序配置,而不需要把敏感数据暴露在镜像里,提高敏感数据安全性。并可以将一些常用的配置存储在K8S中,方便应用程序使用。
6)存储编排
挂载外部存储系统,无论是来自本地存储,公有云(如AWS),还是网络存储(如NFS、GlusterFS、Ceph)都作为集群资源的一部分使用,极大提高存储使用灵活性。
7)批处理
提供一次性任务,定时任务;满足批量数据处理和分析的场景。
3、Kubernetes、Mesos 和 Swarm对比
1)容器编排引擎
虽然定义不同,都是容器编排引擎,但Kubernetes、Docker和Swarm都属于DevOps基础设施管理工具的一类,即容器编排引擎(Container Orchestration Engines, COE)。COE在资源池和运行在这些资源上的应用程序容器之间提供了一个抽象层。
除了容器之外,COE要解决的主要问题是如何将云或数据中心中的多个离散资源合并到单个池中,以便在其上部署各种应用程序。这些应用程序的范围从简单的三层web架构到大规模的数据摄取和处理,以及介于两者之间的一切。
每种工具都提供了不同的特性集,其成熟度、学习曲线和易用性也各不相同。可以共享的一些高级特性是:
集装箱调度,包括执行启动和停止集装箱等功能;在汇集的资源之间分配容器;回收失败的容器;将容器从故障主机重新平衡到正常主机,并通过容器扩展应用程序(手动或自动)。
应用程序和容器或编排系统本身的高可用性。
运行状况检查以确定容器或应用程序的运行状况。
服务发现,用于确定分布式计算体系结构中各种服务在网络中的位置。
负载均衡请求,无论是在集群内部生成,还是从外部客户端生成。
将各种类型(网络、本地)的存储连接到集群中的容器。
2)Kubernetes容器编排功能
Kubernetes(也称为“k8s”)于 2014 年 6 月首次发布,是用 Go 编写的。Kubernetes 这个词从古希腊语翻译而来。该项目起源于谷歌并由谷歌开源,并基于他们大规模运行容器的经验。
就功能而言,它可能具有三个中最原生的集成。Kubernetes 使用非常广泛,背后有一个庞大的社区。Google 将 Kubernetes 用于自己的容器即服务 ( CaaS ) 产品,称为 Google 容器引擎 (GKE)。还有许多其他平台支持 Kubernetes,包括 Red Hat OpenShift 和 Microsoft Azure。
Docker 是目前 Kubernetes 支持的最普遍的容器引擎,但也支持 CoreOS rkt(发音为“rocket”)。
Kubernetes 使用基于 YAML 的部署模型。除了在主机上调度容器之外,Kubernetes 还提供了许多其他功能。
主要功能包括内置自动缩放、负载平衡、卷管理和机密管理。此外,还有一个 Web UI 可帮助管理和排除集群故障。包含这些功能后,Kubernetes 通常需要比 Swarm 或 Mesos 更少的第三方软件。
Kubernetes 与 Swarm 和 Mesos 的区别还在于 “pods”的概念,它们是 Kubernetes 术语中一起调度以构成 “service”的容器组。
虽然可以将 Kubernetes 主节点配置为高可用性集群,但这不像单节点主节点安装那样受支持,并且是 Kubernetes 的一个高级用例。
Kubernetes 的学习曲线有些陡峭,并且比 Swarm 需要更多的配置工作。
3)Swarm 容器编排能力
Docker Swarm是 Docker 的原生容器编排引擎。最初于 2015 年 11 月发布,它也是用 Go 编写的。Swarmkit 是 Swarm 的 Docker 本地版本,从 1.12 版开始,对于那些希望使用 Swarm 的人来说,这是推荐的 Docker 版本。
Swarm 与 Docker API 紧密集成,使其非常适合与 Docker 一起使用。Swarm 使用了适用于单个主机 docker 集群。这可以简化容器基础架构的管理,因为无需配置单独的编排引擎,也无需重新学习 Docker 概念即可使用 Swarm。与 Kubernetes 一样,Swarm 也有一个使用 Docker Compose的基于 YAML 的部署模型。其他值得注意的功能包括集群的自动修复、使用 DNS 的覆盖网络、通过使用多个主服务器的高可用性以及使用带有证书颁发机构的 TLS 的网络安全性。
Swarm API兼容docker API,使得Swarm 学习成本低,同时架构简单,部署运维成本较低。同样是因为API兼容,无法提供集群的更加精细的管理。在网络方面,默认docker容器是通过桥接与NAT和主机外网络通信,如此会有2个问题,一个是由于是NAT,外部主机无法主动访问到容器内(除了端口映射),另外默认桥接IP是相同的,则就会出现不同主机的容器有相同的IP的情况。这样两容器更加不能通信。同时网络性能方面,测试经过桥接的网络性能只有主机网络性能的70%。当然以上问题可以通过其他工具解决,比如用 Flannel 或者 OVS网桥。在容器可靠性方面,相较于K8s的Replication Controllers可以监控并维持容器的生命,Swarm在启动时刻可以控制容器启动,在启动后,如果容器或者容器主机崩溃,Swarm没有机制来保证容器的运行。
4)Mesos 容器编排功能
Apache Mesos 1.0 版于 2016 年 7 月发布,但它的根源可以追溯到 2009 年,当时它最初是由加州大学伯克利分校的博士生开发的。与 Swarm 和 Kubernetes 不同,Mesos 是用 C++ 编写的。
Mesos 与这里提到的前两个有些不同,因为它更多地采用分布式方法来管理数据中心和云资源。Mesos 可以有多个 master,它们使用 Zookeeper 来跟踪 master 之间的集群状态并形成一个高可用性集群。
其他容器管理框架可以在 Mesos 之上运行,包括 Kubernetes、Apache Aurora、Chronos 和 Mesosphere Marathon。此外,分布式数据中心操作系统 Mesosphere DC/OS 基于 Apache Mesos。
也就是 Mesos 在容器的管理方式上采用了更加模块化的方法,允许用户在应用程序类型和运行规模方面拥有更大的灵活性。
Mesos 可以扩展到数万个节点,并被 Twitter、Airbnb、Yelp 和 eBay 等公司使用。Apple 甚至拥有自己的基于 Mesos 的专有框架,称为 Jarvis,用于为 Siri 提供动力。
Mesos 中值得一提的一些特性是支持多种类型的容器引擎,包括 Docker 和它自己的“Containerizer”,以及一个 Web UI,以及在多个操作系统上运行的能力,包括 Linux、OS X,甚至 Windows。
由于其复杂性和灵活性,Mesos 的学习曲线比 Docker Swarm 更陡峭。但是,同样的灵活性和复杂性也是允许 Twitter 和 Airbnb 等公司使用 Mesos 管理其大规模应用程序的优势。