K8S 必须配合 Docker 使用吗?

K8S不 是必须配合 docker 使用。装 K8S 是不需要先装 Docker,两者之间是没有依赖关系的,都是可以独立运行,但是两者是可以配合使用的,Docker 是一个独立的应用程序,可以安装在任何计算机上运行容器化应用程序,而 K8S 可以把它变成了集群。

K8S

kubernetes,简称K8S,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。

新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。

容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境。类似地,容器比虚拟机轻量、更“透明”,这更便于监控和管理。

Docker

Docker是什么Docker是一个改进的容器技术。具体的“改进”体现在,Docker为容器引入了镜像,使得容器可以从预先定义好的模版(images)创建出来,并且这个模版还是分层的。Docker经常被提起的特点:轻量,体现在内存占用小,高密度快速,毫秒启动隔离,沙盒技术更像虚拟机Docker技术的基础:namespace,容器隔离的基础,保证A容器看不到B容器. 6个名空间:User,Mnt,Network,UTS,IPC,Pidcgroups,容器资源统计和隔离。主要用到的cgroups子系统:cpu

Docker 和 K8S 关系

Docker 和 K8S 这两个经常一起出现,两者的Logo 看着也有一定联系一个是背上驮着集装箱的鲸鱼一个是船的舵轮。

不过两者不能放在一个维度上讨论,Docker 是当前流行的 Linux 容器解决方案,利用 Namespaces 、Cgroups 以及联合文件系统UnionFS 实现了同一主机上容器进程间的相互隔离。

NameSpaces:隔离进程,让进程只能访问到本命名空间里的挂载目录、PID、NetWork 等资源
Cgroups: 限制进程能使用的计算机系统各项资源的上限,包括 CPU、内存、磁盘、网络带宽等等
联合文件系统UnionFS : 保存一个操作系统的所有文件和目录,在它基础之上添加应用运行依赖的文件。创建容器进程的时候给进程指定Mount Namespace 把镜像文件挂载到容器里,用 chroot 把进程的 Root目录切换到挂载的目录里,从而让容器进程各自拥有独立的操作系统目录。
而 K8S 是拥有容器编排能力的集群管理解决方案,可以按照应用的定义调度各个运行着应用组件 Docker 容器,但是 Docker 并不是 K8S 对容器的唯一选择,K8S 的 容器运行时支持对接多种容器 ,比如CoreOS公司的Rkt容器(之前称为Rocket,现更名为Rkt),Apache 开源的 Mesos 容器等。只要容器实现了 K8S 容器运行时的接口约定,都能让 K8S 进行调度。

Docker 公司也推出过自己的容器集群管理方案 Docker Swarm ,跟 K8S 算是竞品,但是在生产上几乎没人使用。


Docker Swarm 没有流行起来的深层次的原因就不深究了,从一些IT媒体的报道看,可能的原因是:
跟 Docker 深度绑定,人天生对集权主义非常反感。
Docker 公司在大规模集群管理上的经验不足,不像谷歌那样能高屋建瓴地给出好的解决方法。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。