Docker和k8s关系


Docker和k8s关系


k8s 和 Docker 关系简单说明

参考 «https://mp.weixin.qq.com/s/CHkU-LwxK9l7c_Z1-jAYWw»

本篇文章目的:让你更全面了解k8s概念,以及学到在工作中常用的操作。整体更偏向于原理和应用。 在正式开始k8s之前,我们先看看k8s和Docker的关系,分别从虚拟化角度、部署方式角度叙述why use容器,话不多说,开干。

目前发现并没有将kubernetes和Docker技术产生背景和需求进行比较的文章,本文从最纯正的官方定义角度出发并展开, 阐述二者产生背景及与传统技术对比。

简要介绍

官方定义1:Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。

官方定义2:k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

与传统技术对比:

接下来我们看两张经典的图:

从虚拟化角度:

上图是Docker容器(可用k8s管理的玩意儿)与传统虚拟化方式的不同之处:传统的虚拟技术在将物理硬件虚拟成多套硬件后, 需要在每套硬件上都部署一个操作系统,接着在这些操作系统上运行相应的应用程序。 而Docker容器内的应用程序进程直接运行在宿主机(真实物理机)的内核上,Docker引擎将一些各自独立的应用程序和它们各自的依赖打包, 相互独立直接运行于未经虚拟化的宿主机硬件上,同时各个容器也没有自己的内核,显然比传统虚拟机更轻便。 每个集群有多个节点,每个节点可运行多个容器,我们的kuberbete就是管理这些应用程序所在的小运行环境(container)而生。

从部署角度

注意,大家别把这幅图与上面Docker的那张图混淆了,图1是从虚拟化角度,说明了为应用提供必要的运行环境所需要做的虚拟化操作 (即:传统:虚拟出的虚拟机装操作系统、Docker:容器引擎管理下的容器)。

而图2是在这些具体运行环境上进行真实应用部署时的情况,传统方式是将所有应用直接部署在同一个物理机器节点上, 这样每个App的依赖都是完全相同的,无法做到App之间隔离,当然,为了隔离,我们也可以通过创建虚拟机的方式来将App部署到其中 (就像图1上半部分那样),但这样太过繁重,故比虚拟机更轻便的Docker技术出现,现在我们通过部署Container容器的技术来部署应用, 全部Container运行在容器引擎上即可。既然嫌弃虚拟机繁重,想用Docker,那好,你用吧,怎么用呢?手动一个一个创建?当然不, 故kubernetes技术便出现了,以kubernetes为代表的容器集群管理系统,这时候就该上场表演了。

说白了,我们用kubernetes去管理Docker集群,即可以将Docker看成Kubernetes内部使用的低级别组件。 另外,kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。希望我这篇文章中简单的描述能让你对两者有所理解和认识。

Docker 和 k8s 之间是什么关系

参考 https://mp.weixin.qq.com/s/_ldWjMNgyAsglGexSbsqEw

作为一个程序员,如果你想安装一个 vim 编辑下文本,在不同环境里你得执行不同的命令。 在 ubuntu,你需要执行 apt-get install vim,在 centos 里,你需要执行 yum install vim.

装个小软件尚且如此,要是你想将自己写的代码部署到各个不同操作系统的服务器上, 那依赖的软件和配置就更多了,需要针对每个环境单独写一套部署脚本。 难受,太难受了。

那么问题就来了,有没有更好的解决方案? 当然有,没有什么是加一层中间层不能解决的,如果有,那就再加一层,这次我们要加的中间层是 Docker。

哦不,准确来说是 Docker容器。

Docker 是什么?

我们经常能听到程序员说”这个程序在我环境里明明是好的啊,怎么到你这就不行了呢”?注意这里的关键词,程序和环境。 程序是跑在操作系统上的,而操作系统上又装了各种不同版本的依赖库和配置,这些被程序所依赖的信息,我们统称为”环境”。

基础镜像是什么

既然上面提到环境不同,会导致程序运行结果不同,那么我们首先要做的最重要的事情,就是统一环境。 而环境中,最最重要的就是操作系统。比如 centos 还是 ubuntu,我们得选一个,让所有程序都跑在同一个操作系统上。 并且我们知道操作系统分为用户空间和内核空间,应用程序运行在用户空间。因此,我们可以阉割操作系统, 只需要利用操作系统的用户空间部分,就能构建出应用所需的环境。其次就是统一程序语言依赖,比如要跑 python 应用, 你得装个 python 解释器,要跑个 java 应用,得装个 JVM,要跑 go 应用,那就。。什么都不需要装。 选中一个基础操作系统和语言后,我们将它们对应的文件系统,依赖库,配置等放一起打包成一个类似压缩包的文件, 这就是所谓的基础镜像(Base Image)。

Dockerfile 是什么

待补充。。。

k8s 到底是什么,架构是怎么样的?

参阅 https://mp.weixin.qq.com/s/dckA1ezcABndN5WSg1BOBA

待补充。。。






参考资料

k8s 和 Docker 关系简单说明 https://mp.weixin.qq.com/s/CHkU-LwxK9l7c_Z1-jAYWw


返回