Kubernetes网络自学系列 | 主角登场:Linux容器

Posted COCOgsta

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes网络自学系列 | 主角登场:Linux容器相关的知识,希望对你有一定的参考价值。

素材来源:《Kubernetes网络权威指南》

一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Kubernetes网络自学系列 | 汇总_COCOgsta的博客-CSDN博客


2.1 主角登场:Linux容器

软件开发最麻烦的事情之一,就是环境配置。举例来说,安装一个Python应用,除了需要该应用的二进制文件,系统中还必须要有Python的解析器、该应用程序的外部依赖及配置环境变量等,而且还要考虑操作系统的因素(例如跨平台兼容性等)。我们将软件运行时依赖的环境统称为运行时(runtime)。既然环境配置如此麻烦,一个直观的感受就是软件能否带环境安装?

虚拟机的快照(snapshot)就是带环境安装的一种解决方案。虽然用户可以通过虚拟机还原软件的原始环境,但每个虚拟机都包含完整的操作系统,因此有资源占用多、启动慢等缺点。

鉴于虚拟机的这些缺点,Linux发展出了另一种虚拟化技术:容器。

2.1.1 容器是什么

容器不是模拟一个完整的操作系统,而是对进程进行隔离,隔离用到的技术就是1.1节介绍的Linux namespace。对容器里的进程来说,它接触到的各种资源看似是独享的,但在底层其实是隔离的。容器是进程级别的隔离技术,因此相比虚拟机有启动快、占用资源少、体积小等优点。

目前最流行的Linux容器非Docker莫属,它是对Linux底层容器技术的一种封装,提供简单易用的容器使用接口。Docker将应用程序与该程序的依赖打包在同一个文件里,即所谓的Docker image。运行Docker image就会生成一个Docker容器。程序在这个虚拟容器里运行就像是在物理机上或虚拟机上运行一样。

2.1.2 容器与虚拟机对比

传统的虚拟机需要模拟整台机器,包括硬件(因此,虚拟机方案需要硬件的支持,例如VT-X),每台虚拟机都需要有自己的操作系统。虚拟机一旦被开启,预分配给它的资源将全部被占用。每台虚拟机包括应用程序、必要的依赖库,以及一个完整的用户操作系统。

容器和宿主机共享操作系统,而且可以实现资源的动态分配。容器包含应用程序和所依赖的软件包,并且不同容器之间共享内核,这与虚拟机相比大大节省了额外的资源占用。在宿主机操作系统中,不同容器在用户空间以隔离的方式运行着各自的进程。容器与虚拟机对比如图2-1所示。

图2-1 容器与虚拟机对比

从图2-1可以看出,虚拟机和容器最大的区别在于没有Guest OS(客户虚拟机)这一层。虚拟机和容器都是在硬件和操作系统以上的,虚拟机有Hypervisor层,Hypervisor即虚拟化管理软件,是整个虚拟机的核心所在。它为虚拟机提供了虚拟的运行平台,管理虚拟机的操作系统运行。每台虚拟机都有自己的操作系统及系统库。

容器没有Hypervisor这一层,也没有Hypervisor带来性能的损耗,每个容器和宿主机共享硬件资源及操作系统。细心的读者可能已经看出来了,Docker容器有Docker Engine这一层。其实Docker Engine远远比Hypervisor轻量,它只负责对Linux内核namespace API的封装和调用,真正的内核虚拟化技术是由Linux提供的。容器的轻量带来的一个好处是资源占用远小于虚拟机。同样的硬件环境,可以运行容器的数量远大于虚拟机,这对提供系统资源利用率非常有用。

每台虚拟机都有一个完整的Guest OS,Guest OS能为应用提供一个更加隔离和安全的环境,不会因为应用程序的漏洞给宿主机造成任何威胁。

2.1.3 小结

从虚拟化层面来看,传统虚拟化技术是对硬件资源的虚拟,容器技术则是对进程的虚拟,从而提供更轻量级的虚拟化,实现进程和资源的隔离。从架构来看,容器比虚拟机少了Hypervisor层和Guest OS层,使用Docker Engine进行资源分配调度并调用Linux内核namespace API进行隔离,所有应用共用主机操作系统。因此在体量上,Docker较虚拟机更轻量级,在性能上优于虚拟化,接近裸机性能。

 

以上是关于Kubernetes网络自学系列 | 主角登场:Linux容器的主要内容,如果未能解决你的问题,请参考以下文章

Kubernetes网络自学系列 | 打通CNI与Kubernetes:Kubernetes网络驱动

Kubernetes网络自学系列 | 终于等到你:Kubernetes网络

Kubernetes网络自学系列 | 前方高能:Kubernetes网络故障定位指南

Kubernetes网络自学系列 | iptables

Kubernetes网络自学系列 | Kubernetes网络策略:为你的应用保驾护航

Kubernetes网络自学系列 | Linux隧道网络的代表:VXLAN