话容器虚拟技术

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介:

传统虚拟化技术与容器技术对比

1、传统的虚拟化技术

0?wx_fmt=gif&tp=webp&wxfrom=5&wx_lazy=1


传统的虚拟化技术会在已有主机的基础上创建多个虚拟主机,然后在每个虚拟主机上安装独立的操作系统,并由虚拟主机的内核空间和用户空间来运行应用程序

2、docker容器技术

0?wx_fmt=gif&tp=webp&wxfrom=5&wx_lazy=1

使用主机的硬件,在硬件之上安装一个操作系统,使用相同的内核。然后将用户空间进行隔离,从而分成多个用户空间,基于一个内核来运行。因为容器使用这种隔离用户空间的方式,使得一样可以提供多个应用程序的环境(而应用程序的环境我们称之为容器),所以可以理解为是用户空间的虚拟化技术
容器拥有更高的资源使用效率,因为其无需为每个应用分配一个独立的操作系统,可以使得应用,资源消耗较小,迁移与创建的速度更小。

区别:kvm,xen隔离的非常好,因为他们有自己的内核空间和用户空间,但是容器技术的话,整个容器只有一个内核,不同的是,各虚拟机之间隔离开的仅仅是用户空间。

容器所用到的核心技术

NameSpace:名称空间(资源隔离机制)

在内核级别:完成环境隔离的方法(类似于chroot机制)

  • PID NameSapce  Linux 2.6.24
    PID隔离,隔离PID号,能够在每一个隔离出来的容器当中来实现虚拟出各种你所需要的PID,使得每一个用户看到的PID号都是独立的,互不干扰

  • Network NameSpace:  Linux 2.6.29
    网络设备、网络栈、端口等网络资源隔离,用于网络虚拟容器隔离

  • User NameSpace  Linux 3.8
    用户和用户组资源隔离,完成用户隔离,每一个用户的名称空间当中都有可能可以存在所谓同样用户名的用户 linux 3.8(所以docker是依赖于linux 3.8以后的版本,或者要求更高,是3.10以后的版本)

  • IPC NameSpace  Linux 2.6.19
    进程间通信资源隔离(信号量、消息队列和共享内存的隔离)

  • UTS NameSpace Linux 2.6.1
    主机名和域名隔离

  • Mount NameSpace  linux 2.4.19
    挂载点隔离(真正是实现文件系统给的隔离)  实现已挂载文件系统隔离的,期望在不同的用户空间当中所通过内核看到的挂载的文件系统应该是不一样的。

向NameSpace发起调用所使用的API

我们为了向namespace发起调用,让namespace完成某些操作

  • clone()  克隆 ,实现线程的系统调用,用来创建新线程

  • setns()  设定名称空间属性,将某进程加载到某个NameSpace去

  • unshare()  做成非共享机制,使进程脱离某个NameSpace的关联到你的新NameSpace当中的

CGroup (Linux Control Group) 控制组

一个用户空间可以将整个服务器的CPU耗尽,那么其他用户空间将无法运行,所以仅有名称空间是无法满足,所以有另一个技术,叫CGroup(linux 2.6.24)

CGroup 内核级别的技术,用于限制、控制与分离一个进程组群的资源(用户自己隔离和建立的),用于实现将进程分完组以后,组内的进程能使用多少的系统级的资源,可以在内核级上加以限制
一般用于隔离一个进程集合,为进程分配足够内存带宽然后限制其访问那些设备,从而完成限制机制

CGroup + NameSpace 结合起来就能实现容器功能

CGroup实现的功能

  • Resource limitation:资源限制

  • Prioritization:优先级控制

  • Accounting:审计和统计功能,主要是为了计费(VPS计费)

  • Control:挂起进程,恢复进程

CGroup的子系统(subsystem)

可使用 lssbusys - m 查看资源组当中的子系统
cgroup 是基于单根树状结果进行组织的 ,在 /sys/fs/cgroup

  • blkio:设定块设备的IO限制

  • cpu:使用调度程序对cpu的CGroup的任务访问,设定CPU的限制(限制CPU使用的空间)

  • cpuacct:报告cgroup当中所使用的CPU资源

  • cpuset:为cgroup中的任务制定可用的cpu和内存资源(分配内存和CPU)

  • memory:设定内存的使用限制(限制内存使用的空间),分配是按段来分配,而不是按空间分配

  • device:控制cgroup中的任务对设备的访问能力

  • freezer:实现挂起进程或恢复cgroup中的任务

  • net_cls:(classid),使用等级级别标识符来标记网络数据包,以实现基于TC完成对不同的cgroup中产生的流量控制

  • perf_event:对每一个用户空间当中的任务的运行时的性能本身分别所产生的事件进行归类统计(使用后使cgroup中的任务可以进行统一的性能测试)

  • hugetlb:对HugeTLB系统进行限制,能够实现在内存分配时的减少内存分配的次数。

    CGroup中的术语

  • task(任务):指的是进程或线程

  • cgroup:一个独立的资源控制单位,可以包含一个或多个子系统。每个控制组上可以关联一个或多个子系统,一个任务只能属于一个cgroup

  • subsystem:子系统,需要关联到cgroup

  • hierarchy:资源组的层级结构,层级是有一系列cgroup以一个树状结构排列而成,每一个层级通过绑定对应的子系统进行资源控制,层级中的cgroup节点可以包含零个或多个节点,业也就是你地下还可以继续分层,而子集可以继承父级的某些资源。

AUFS: UnionFS 联合文件系统

UnionFS:能够实现把不同的物理位置的目录能够合并到同一目录中
虽然是合并,但是事实上他是一种叠加。可以合并多个,只有最上层的那个才是可写的。

  • 对于读

    • 如果合并的文件存在重复,只有最后一个合并的可被看到

    • 如果文件不重复,可以看到其他层里不重复的文件

  • 对于写

    • 合并多个目录时,只有最后一个合并的可被写

    • 在其他层看到的文件想去修改,实际上是在最上层创建一个文件进行写的操作。(他的原理有点类似PE的工作方式,比如你在PE上写,其实写的是在本地磁盘上)

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

docker很依赖AUFS,所以如果没有AUFS的话,不建议docker在生产环境上使用
遗憾的是centos并不支持AUFS,在ubuntu上已经支持AUFS

Device mapper:功能类似AUTFS,LVM用的就是这个技术

Linux 2.6内核引入的最重要技术之一,用于在内核中支持逻辑卷的通用设备映射技术。

  • Mappend Device:被映射出来的设备

  • Mapping Table 映射表,指明了被虚拟出来的设备和真正底层设备有哪些。(相当于从虚拟设备到真正物理设备之间的映射路径)

  • Target Device:源设备











本文转自 运维小当家 51CTO博客,原文链接:http://blog.51cto.com/solin/1883222,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
人工智能 弹性计算 调度
阿里云容器服务 ACK 产品技术动态(202312)
容器服务 Kubernetes 版 ACK 【新功能】 Feature:支持基于机密虚拟机的 AI 模型推理保护 ACK 现已支持将基于 Intel® Trusted Domain Extension(Intel® TDX)技术的 ECS 实例加入 TDX 机密虚拟机计算节点池,使集群具备 TDX 机密计算能力,实现 AI 模型的可信推理和微调,保障模型数据的机密性与完整性。结合 PyTorch 与 Intel® AMX指令集,您可以在 32 核实例上实现秒级出图的推理能力。
393 1
|
2月前
|
人工智能 运维 Cloud Native
独家好书丨《智算时代的容器技术演进与实践》免费下载
独家好书丨《智算时代的容器技术演进与实践》免费下载
|
22天前
|
运维 Java Linux
深入解析:使用Docker容器化技术提升Java应用的部署效率
在快速迭代的软件开发周期中,如何保证应用的快速、一致和可靠部署成为了开发团队需要面对的重大挑战。本文将探讨如何利用Docker容器化技术,结合Java应用,实现高效、一致的部署流程。我们将从Docker的基本概念出发,详细介绍将Java应用容器化的步骤,包括创建Dockerfile、构建镜像以及运行容器等关键环节,并通过示例代码加以说明。此外,本文还将讨论在使用Docker部署Java应用时可能遇到的常见问题及其解决策略,旨在为读者提供一种提升部署效率、优化开发流程的有效方法。
260 2
|
24天前
|
虚拟化 开发者 Docker
深入浅出:利用Docker容器化技术加速Web开发流程
在本篇文章中,我们将探讨Docker容器化技术如何为Web开发带来革命性的效率提升。通过具体案例和实操示范,我们不仅会介绍Docker的基本概念和工作原理,还将深入分析如何利用Docker容器化技术简化开发环境的搭建、提高应用的可移植性以及加快部署速度。本文旨在为读者提供一种全新的视角,理解并实践如何通过Docker优化现代Web开发流程,无论是对于个人开发者还是团队项目,都将带来前所未有的便捷和效率。
13 0
|
24天前
|
负载均衡 开发者 Docker
深入浅出:利用Docker容器化技术提升Web开发效率
在快速变化的软件开发领域,开发者面临着环境一致性和项目部署效率的双重挑战。Docker作为一种先进的容器化技术,为解决这些问题提供了优雅的解决方案。本文将探讨Docker的核心概念、优势以及如何在Web开发中应用Docker来提升开发和部署的效率。通过实际案例分析,读者将了解到如何构建、分享和运行Docker容器,以确保开发环境的一致性,并加速Web应用的交付过程。
|
1月前
|
敏捷开发 Cloud Native 持续交付
大道至简,容器化技术助力软件开发与部署
在当今快节奏的软件开发环境中,容器化技术如Docker以其高效、灵活和可移植的特性成为了热门话题。本文将深入探讨容器化技术的原理和使用,解析其对软件开发和部署的巨大影响。
|
1月前
|
存储 运维 Linux
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
在使用Docker时,管理维护工作可能会显得复杂。然而,实际上,Docker提供了许多便捷且人性化的工具,这些工具的使用技巧可以大大简化维护工作,并提升效率。通过掌握这些技巧,你不仅能够更轻松地管理Docker环境,还能展现出专业的能力。接下来我们就给大家介绍一下对于我在工作当中对于Docker容器使用的技术实战总结
40 2
精彩推荐 | 【深入浅出Docker原理及实战】「原理实战体系」零基础+全方位带你学习探索Docker容器开发实战指南(实战技术总结)
|
1月前
|
存储 运维 Linux
探索容器化技术:Docker的原理与应用
在当今快节奏的软件开发环境中,容器化技术成为了一种重要的工具,其中最为流行和广泛使用的是Docker。本文将深入探讨Docker的原理和使用,包括容器化概念、镜像管理、容器编排等内容,帮助读者更好地理解和应用这项技术。
15 0
|
1月前
|
存储 Linux 开发者
探索容器化技术:揭秘Docker的原理与应用
在当今快节奏的软件开发环境中,容器化技术成为了关键的工具。本文将深入探索Docker作为一种常见的容器化解决方案的原理与使用方法,并讨论其在现代应用开发中的重要性与优势。
|
1月前
|
存储 Kubernetes Docker
Docker容器编排技术解析
Docker容器编排技术解析
116 0

相关产品

  • 容器镜像服务
  • 容器服务Kubernetes版