容器技术基础(一)|学习笔记

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 快速学习容器技术基础(一)

开发者学堂课程【现代应用容器技术快速入门:容器技术基础(一)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/830

容器技术基础(一)

------马永亮


目录:

一、课程简介

二、容器技术基础

三、容器技术


一、课程简介

由阿里云、Linux开源软件学园和那个教育联合推出

CNCF×Alibaba云原生技术公开课”的前置课程

★CKAD/CKA/CKS认证配套课程

内容涵盖

手把手实践Kibernetes云原生操控系统

阿里云Kibernetes托管服务ACK

二、容器技术基础

 image.png

目前来说应用程序的部署环境大体上分为三种:主机、虚拟器、容器化的作用,无论是哪一种,主机上通常都是运营的某一系统,现在的计算机系统多数情况下都是为了运行多人物,甚至是支持多用户的,那么底层用户资源向多个进程进行有效分配,需要一个计算机系统来负责完成。

所以现代的计算机系统都有两个不同的的、分离的区域,成为用户空间和内核空间;

内核充当用户空间和硬件的中间层,负责进程调度、内存管理、中断处理等,对系统资源具有完全的控制权;

用户空间通过“系统调用”与内核通信,系统调用通过API向应用程序提供系统级服务。image.png

事实上,也可以通过专用的软件模拟或者虚拟技术,将这一个独立的主机硬件给他虚拟化。

 

虚拟化技术

通过专用软件模拟或/和虚拟技术,将多个主机硬件虚拟为独立、完整且隔离的不同单元,每个单元可以作为一个主机被使用,这个用于帮忙把底层的硬件所提供的各种资源计算资源给虚拟,或者模拟出多组互相隔离的这种软件,就称之为虚拟机监视程序或称之为虚拟化软件

这个专用软件称为VMM,即虚拟机监视程序;

根据VMM运行的位置不同,可以将虚拟化技术划分为两种类型:

 直接运行于硬件之上:类型1虚拟化技术

 运行于操作系统之上:类型2虚拟化技术

不管是哪一种虚拟化技术他们最终都将能够提供一个接口,这个接口允许用户去管理VM的生命周期。

每个虚拟机直接暴露硬件接口虚拟化技术

有独立的内核空间和用户空间

跨虚拟机的进程之间完全隔离

资源开销较大,半虚拟化技术有助于降低开销

由于两个虚拟机之间互相隔着内核儿,每一个虚拟机都有自己独立的内核儿,所以彼此之间并不会产生任何一人的干扰,如果我们不考虑较为底层的这个Hypervisor级别的资源分配的话最终应用程序的一每一个虚拟机之上的应用程序的运行最终还是要靠底层的硬件设备来支持,所以他们的请求无论如何,无论是被其所在虚拟机的内核儿如何处理的,最终还是要交由哈Hypervisor,甚至还要交由底层的host OS就是宿主机的操作系统。


image.png

什么虚拟化技术呢,可以理解为就是资源开销有点大,所以后来就出现了各式各样的准虚拟化,或者称为叫半虚拟化技术及para virtual的机制来实现,来减少这种性能开销来,增强系统的资源利用利用率,但是比较主流的虚拟化技术像vmware workstationvmwserver vmware、vsphere等等解决方案也包括开源的主流产品中的KVM内核虚拟化还有ten等一系列的虚拟化技术,他们分别支持各种各样的不同特性,由于诞生的时期不同,对于底层硬件的要求也各有不同,事实上在十年前开始流行起来了,Issa云的虚拟化技术(云计算技术)当中,基本上对应的都是以KVM或者ten或者是其他的虚拟化技术作为底层运行虚拟机的核心,而后额外额外提供了一套集群级别的操作系统来实现在集群及统一管理容器统一管理虚拟机的生命周期来实现的,因而迄今为止,这仍然是一种主流的虚拟化技术,但是考虑到这种主流化的虚拟化技术过于消耗资源,后来人们就开始探索一种轻量的虚拟化技术,到今天为止,落地的结果就是容器技术。

三、容器技术

1、概念:他是类似于虚拟化技术,只不过他的软件的主要目的不是将宿主机的硬件进行虚拟化,或者说不是相对应的应用程序提供硬件级的虚拟化接口,而是将宿主机的操作系统所提供的用户空间隔离为多个用户空间,使得每一个用户空间就好像自己是唯一运行在该内核之上的用户空间一样,进而完成了类似于前面我们所提到的这种虚拟化机制,只不过每一个独立而隔离的空间,它由于被底层的container runtime,或者被容器引擎所输出的不是主机级的接口,而仅仅是内核机接口,所以这里虚拟出来的这个级别是操作系统的虚拟接口,由此以来就减少了传统的主机级虚拟化两级内核,至少是类型2内核,但是最终还是由Hypervisor来进行调度完成的。

借助于称之为“容器运行时”的软件技术,在同一个内核之上生成多个彼此隔离的用户空间

 个和用户空间可独立管理运应其内部进程

 每个用户空间“自以为”独占该内核及硬件资源

需要将内核级的共享资源进行隔离

 依赖于内核中称为“名称空间”的技术进行

 名称空间是Linux内核特性,用于隔离部分系统资源,从而使得进程仅可访问同一名称空间中的相应资源

资源限制则依赖于由Google贡献的“CGroups

事实上名称空间仅仅能够创建和支持隔离的多个名称,多个用户空间就类似于模拟出来的多个用户空间,但是每一个用户空间中的进程则很有可能请求和消耗掉其内核管理之下的所有硬件资源,因此为了避免某一用户空间或者某一个usb中的所有进程耗大部分硬件资源,可以借助于CGroups将硬件资源或计算能力存储能力io能力等等,按特定的比例,或特定的量来向不同的用户空间进行分配

所以说现代的这个Linux的容器技术,就是要强依赖一个Linux内核的名称,空间和CGroup来实现的,事实上容器技术其实也就是Linux内核天然就已经支持和具备的技术。

2、Linux内核支持的名称空间

image.png

其实这的内核,支持大约八种名称,名称空间早期的版本或者是我们现在在很多系统上看到的,很多材料上看到的都是支持六个名称空间,但事实上较新版本的内核又增添了两种用户空间的支持也就是名称空间的支持

第一个叫Mount,他用来隔离挂载点和文件系统,事实上,这也是最早支持的叫做名称空间技术,以至于他自己就直接称呼自己就是名称空间,叫ns space的简写,很有可能这个时候的Linux内核的维护和开发者并没有意识到,后来很多其他资源资源也需要在名称、空间、级别实现隔离

后来到Linux内核发展到2.6.19以后,正式引入了另外两个名称空间,分别叫UPS和IPC,其中,UPS是用来提供独立的主机名和NS域名儿的。这就是有了这样一个UPS的支持以后,如果创建名称空间时,或者创建用户空间时调用了这个标志,用UPS和用IPC的话,这就意味着每一个用户空间可以看到不同的主机名。而且还和可以看到一个彼此之间在同一个用户空间的进程之间,可以通过思维的SysV IPC的metals互相通信,但跨每一种空间是被隔离的

接着内核发展到2.6.24的时候,PID也被引入了名也的名称空间也被引入内核,从而每一个用户空间

在2.6.29以后,网络名称空间引入内核,而这个时候,每一个用户空间可以自己直接使用一个独占的网络名称空间,进而能够使用看上去独占的网络设备、协议栈和端口分配等。

3.8引入了User ID和Group ID名称空间(user名称空间),从而能够实现User ID和Group ID的隔离。这就使得某一个容器当中看上去有一个Root用户,它能够在该名称空间当中具有所有的管理权限,但它输入机级别并没有,所以我们可以理解为你模拟出来用户空间的根用户就是Group和其他普通用户的这么一个名称,空间技术

Linux内核发展到了4.6版本以后,引入了Cgroup名称空间,它的主要作用在于为Cgroups实现资源分配的或者资源指派的一个技术。Cgroups也是采用了类似于文件系统一样的层级结构的Cgroup名称空间,就是为Cgroups的跟用户提供根目录的或者对相关层级结构的管理的。

接着Time这一名称空间是内核5.6版本才新进引入的,他能够实现为Boot time和Monotonic time提供隔离的空间。其monotonic  time是一个单调递增,其实它就是为操作系统计时的,我们可以理解为该用户空间创建以后,将一直持续的单调递增的方式进行计时,但是系统一旦进入休眠状态的话,这个时候他的相关技术是不计入的,可以理解为它专用于记录该系统正常运行,或者该用户空间正常运行了多长时间,Boot time类似于Monotonic time,但不同之处在于会计入系统休眠时间,也就意味着在休眠那一刻开始到休眠结束所中间经历的这些时间,它也会通过计算并加到这个对应的累加器,然后Linux内核所制的名称贡献,随着名称空间技术的越来越丰富,Linux本身对于容器技术的支持越来越完善。

3、名称空间和Chroot

1979年,Chroot系统调用被添加到Unix系统中,用于为开发人员提供一个独立于根文件系统的测试平台;

 借助于Chroot,开发人员可以更改进程及其子进程的根目录;

 如下图,文件系统被分为两个部分,他们相互之间并不影响

image.png

Linux引入了新的子系统和系统调用来改进进程隔离机制

 名称空间的概念最早出现在2002年的Kernel 2.4.19中,当时唯一支持的名称空间是Mount,该名称空间的Flag甚至就名为CLONE_NEWNS

4、隔离进程及标识的PID名称空间

PID名称空间能够支持多个完全独立的进程树;

 Linux系统在用户空间启动的PID号为1的进程,作为进程树的“根”;

 PID名称空间允许用户创建具有1号PID的单独分支

 新树中的进程永远不会同父进程交互,也不会看到他

 父进程可以访问所有的子进程树

带走CLONE_NEWPID标志的clone系统调用可用于创建新的命名空间PID


相关文章
|
23天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
5天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
25 4
|
27天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
62 4
|
27天前
|
负载均衡 网络协议 算法
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
64 3
|
29天前
|
运维 Kubernetes Docker
深入理解容器化技术:Docker与Kubernetes的协同工作
深入理解容器化技术:Docker与Kubernetes的协同工作
51 1
|
29天前
|
运维 Kubernetes Docker
深入理解容器化技术及其在微服务架构中的应用
深入理解容器化技术及其在微服务架构中的应用
59 1
|
1月前
|
安全 持续交付 Docker
深入理解并实践容器化技术——Docker 深度解析
深入理解并实践容器化技术——Docker 深度解析
57 2
|
24天前
|
人工智能 Kubernetes Cloud Native
荣获2024年AI Cloud Native典型案例,阿里云容器产品技术能力获认可
2024全球数字经济大会云·AI·计算创新发展大会,阿里云容器服务团队携手客户,荣获“2024年AI Cloud Native典型案例”。
|
29天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
80 0
|
1月前
|
持续交付 开发者 Docker
深入理解并实践容器化技术——Docker篇
深入理解并实践容器化技术——Docker篇
42 0