容器云计算技术学习--Docker和K8S

虚拟化技术已经走过了三个时代,没有容器化技术的演进就不会有 Docker 技术的诞生

容器云计算技术学习--Docker和K8S_第1张图片

(1)物理机时代:多个应用程序可能会跑在一台机器上。

容器云计算技术学习--Docker和K8S_第2张图片

(2)虚拟机时代:一台物理机器安装多个虚拟机(VM),一个虚拟机跑多个程序。

容器云计算技术学习--Docker和K8S_第3张图片

(3)容器化时代:一台物理机安装多个容器实例(container),一个容器跑多个程序。

容器云计算技术学习--Docker和K8S_第4张图片

容器化时代

容器化解决了软件开发过程中一个令人非常头疼的问题,用一段对话描述:

测试人员:你这个功能有问题。
开发人员:我本地是好的啊。

开发人员编写代码,在自己本地环境测试完成后,将代码部署到测试或生产环境中,经常会遇到各种各样的问题。明明本地完美运行的代码为什么部署后出现很多 bug,原因有很多:不同的操作系统、不同的依赖库等,总结一句话就是因为本地环境和远程环境不一致。

容器化技术正好解决了这一关键问题,它将软件程序和运行的基础环境分开。开发人员编码完成后将程序打包到一个容器镜像中,镜像中详细列出了所依赖的环境,在不同的容器中运行标准化的镜像,从根本上解决了环境不一致的问题。

Docker

传统的虚拟技术,在将物理硬件虚拟成多套硬件后,需要再每套硬件上都部署一个操作系统,接着在这些操作系统上运行相应的应用程序。虚拟机,就是在你的操作系统里面装一个软件,然后通过这个软件,再模拟一台甚至多台“子电脑”出来。

容器云计算技术学习--Docker和K8S_第5张图片

在“子电脑”里,你可以和正常电脑一样运行程序,例如开QQ。如果你愿意,你可以变出好几个“子电脑”,里面都开上QQ。“子电脑”和“子电脑”之间,是相互隔离的,互不影响。虚拟机属于虚拟化技术。传统方式是将所有应用直接部署在同一个物理机器节点上,这样每个App的依赖都是完全相同的,无法做到App之间隔离,当然,为了隔离,我们也可以通过创建虚拟机的方式来将App部署到其中但这样太过繁重,故比虚拟机更轻便的Docker技术出现,而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。

虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,虚拟机软件可能还要花钱(例如VMWare)。而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。注意,Docker本身并不是容器,它是创建容器的工具,是应用容器引擎。

Docker技术的三大核心概念,分别是:

镜像(Image)

这个Docker镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

容器(Container)

仓库(Repository)

负责对Docker镜像进行管理的,是Docker Registry服务(类似仓库管理员)。不是任何人建的任何镜像都是合法的。万一有人盖了一个有问题的房子呢?所以,Docker Registry服务对镜像的管理是非常严格的。

现在我们通过部署Container容器的技术来部署应用,全部Container运行在容器引擎上即可。既然嫌弃虚拟机繁重,想用Docker,那好,你用吧,怎么用呢?手动一个一个创建?当然不,故Kubernetes技术便出现了,以Kubernetes为代表的容器集群管理系统。我们用Kubernetes去管理Docker集群,即可以将Docker看成Kubernetes内部使用的低级别组件。另外,kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。

Kubernetes(K8S)

就是基于容器的集群管理平台

容器云计算技术学习--Docker和K8S_第6张图片

Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。  

容器云计算技术学习--Docker和K8S_第7张图片

Node节点 

容器云计算技术学习--Docker和K8S_第8张图片

基本对象: PodServiceVolumeNamespaceLable

我们通过 Master 对每个节点 Node 发送命令。简单来说,Master 就是管理者,Node 就是被管理者。
Node 可以是一台机器或者一台虚拟机。在 Node 上面可以运行多个 Pod,Pod 是 Kubernetes 管理的最小单位,同时每个 Pod 可以包含多个容器(Docker)。pod是k8s调度的最小单元,一个 pod 包含一组容器,但一个 pod 不会跨越多个工作节点

pod相当于逻辑主机,每个pod都有自己的ip地址,pod内的容器共享相同的ip和端口空间
默认情况下,每个容器的文件系统与其他容器完全隔离
可以理解为:容器组,同时pod相当于逻辑主机,进入pod后仿佛进入一个linux主机,命令都可用(linux系统下),该“主机”内又有很多容器,进入后又仿佛是又进了一个linux主机。
 

你可能感兴趣的:(云计算,云计算)