容器化技术

文章目录

  • 虚拟化容器
  • 容器隔离实现
    • 隔离文件 chroot
    • 隔离访问 namespace
    • 隔离资源 cgroups
  • Docker
  • kubernetes

虚拟化容器

容器的首要目标是让软件分发部署过程从传统的发布安装包、靠人工部署转变为直接发布已经部署好的、包含整套运行环境的虚拟计划镜像。

一个计算机软件能够给正确运行,需要以下三个方面的兼容性来共同保障:

  • ISA兼容(Instruction Set Architecture): 目标机器指令集兼容性,臂如ARM架构计算机无法直接运行x86架构编译的程序。
  • ABI兼容(Application Binary Interface): 目标系统或依赖库的二进制兼容性,臂如windows系统环境中无法直接运行Linux程序。
  • 环境兼容: 臂如没有正确设置配置文件、环境变量、文件权限等,任何一个都可能让程序无法运行。

根据抽象目标和兼容性高低的不同,虚拟化技术分为:

  • 指令集虚拟化:通过软件来模拟不同ISA架构处理过程,将虚拟机发出的指令进行转换符合ISA的指令。能够提供完全不受权限的兼容性。但每条指令都要由软件进行转换和模拟,性能损失最大。
  • 硬件抽象层虚拟化技术: 以软件或通过硬件来模拟处理器、芯片组、显卡等设备的工作过程。虚拟机为代表,vmware。
  • 操作系统层虚拟化:指令集和硬件抽象层虚拟化都会运行一套完全真实的操作系统来解决ABI兼容性和环境兼容性。操作系统虚拟化不会提供真实的操作系统,而是采取隔离手段,使得不同进程拥有独立的系统资源和资源配额。看上去独享操作系统,但实际上共用系统内核。容器化。容器化牺牲一定隔离性和兼容性,换来的是更快启动速度、运行性能和更低的执行负担。
  • 运行库虚拟化: 运行库使用软件翻译的方法来模拟系统,以一个独立进程来代替操作系统内核来提供目标软件运行所需的全部能力。这种虚拟化方法的ABI兼容性高低,取决于软件是否能够足够准确和全面地完全翻译工作。 WSL
  • 语言层面虚拟化:由虚拟机将高级语言生成地中间代码转换为目标机器可以直接执行地指令。

容器隔离实现

隔离文件 chroot

change root,命令功能是当某个进程经过chroot操作之后,它的根目录就会被锁定在命令行参数所指定的位置,以后它或者他的子进程不能再访问和操作该目录之外的文件。chroot存在漏洞提升的问题,从而出现pivot_root实现文件隔离,直接切换根文件系统(rootfs),有效避免了chroot命令可能出现的安全性漏洞。

理论上Unix设计哲学为一切皆文件,只要隔离了文件系统,一切资源都应该被自动隔离才对。但是从硬件层面暴露的低层次资源,磁盘,网络内存等。到经过操作系统层面封装的高层次资源,如进程ID、用户ID、进程间通信都存在大量非文件形式暴露的操作入口,因此chroot为代表的文件隔离,仅仅是容器化崛起之路的起点。

隔离访问 namespace

Linux命令空间。

linux的名称空间是一种由内核直接提供的全局资源封装,是内核针对进程设计的访问隔离机制。进程在一个独立的linux名称空间中超系统看去,会觉得自己彷佛就是这方天地的主人,拥有这台linux主机上的一切资源,文件系统独立,独立的PID编号、UID\GID编号和网络等。

Linux名称空间支持的资源种类的隔离:

  • Mount: 隔离文件系统,功能上类似chroot
  • UTS: 隔离主机的Hostname和Domain names
  • IPC: 隔离进程间通信的渠道。
  • PID:隔离进程编号,无法看到其他名称空间中的PID,意味着无法对其他进程产生影响。
  • Network: 隔离网络资源,如网卡、网络栈、端口等。
  • User: 隔离用户和用户组。
  • Cgroup: 隔离cgroups信息,进程有自己的cgroups的根目录试图。
  • Time: 隔离系统时间。

隔离资源 cgroups

独立控制分配给各个进程的资源使用配额。

linux解决以上问题的方案是控制群组(Control Groups),它与名称空间一样都是直接由内核提供的功能,用于隔离或者说分配并限制某个进程组能够使用的资源配额,资源配额包括处理器时间、内存大小、磁盘IO速度等。

控制组子系统:

  • blkio: 为块设备(磁盘、固态硬盘)设定I/O限额。
  • cpu: 控制cgroups中进程的处理器占用比率。
  • cpuacct:自动生成cgroups中进程所使用的处理器时间的报告。
  • devices: 设置cgroups中的进程访问某个设备的权限(读、写、创建三种权限)
  • freezer: 挂起或者恢复cgroups中的进程。
  • memory: 设定cgroups中进程使用内存的限制,并自动生成内存资源使用报告。
  • net_cls:使用等级标记符标记网络数据包,可允许Linux流量控制识别从具体cgroups中生成的数据包。
  • net_prio:用来设置网络流量的优先级。
  • hugetlb:针对HugeTLB系统进行限制。
  • perf_event: 允许Perf工具基于cgroups分组做性能监测。

Docker

docker除了包装linux内核的特性之外,它的价值还有:

  • 跨机器的绿色部署: docker定义了一种将应用机器所有环境依赖都打包到一起的格式。
  • 以应用为中心的部署
  • 自动构建:docker提供了开发人员从在容器中构建产品的全部支持,开发人员无需关注目标机器的具体配置,即可使用任意的构建工具链,在容器中构建出最终产品。
  • 多版本支持: 支持类似git一样管理容器的连续版本,检查版本之间的差异,提交和回滚操作。可以从历史记录中查看容器如何被构建。
  • 组件重用: docker允许将任务现有容器作为基础镜像来使用,以此构建出更加专业的镜像。
  • 共享: 拥有公共镜像库,方便共享,减少重复工作量。
  • 工具生态: 开放了一套自动化和自行拓展的接口,能够给拓展功能,例如:容器编排、管理界面、持续集成。

image.png

contanerd-shim: 适配进程,默认和runC搭配工作。

runC是一个轻量级、基于命令行的容器运行时,它由OCI规范支持,用于创建和运行容器。核心功能:

  • 容器运行时: 可以直接创建和管理容器。
  • 低级运行时:容器引擎底层运行容器的核心工具,处理容器生命周期中的关键操作,例如启动、停止和销毁机器。
  • 基于linux内核技术:使用linux内核特性,实现资源隔离和限制

kubernetes

服务编排框架,能够将大型软件系统所依赖的集群环境也进行虚拟化,使得集群得以跨数据中心的绿色部署,并根据实际情况自动扩缩。

image.png

  • docker-manager: 通过http方式发送指令给docker engine进行管理容器。
  • kubelet:集群节点中的代理程序,负责于管理集群的Master通信。
  • CRI: 容器运行时接口,定义容器运行时应该如何接入kubelet的规范标准。dockermanager被替代为KubeGenericRuntimeManager和Kubelet通过GRPC进行通信。
  • dockershim服务: 作为docker与CRI的适配层。
  • cri-containerd: CRI适配器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64411.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析

目录 一、前言 二、Spring Boot 简介 三、Spring Boot 核心模块 四、Spring Boot 项目实战:构建一个简单的 RESTful API 1. 创建 Spring Boot 项目 2. 配置数据库 3. 创建实体类 4. 创建 JPA 仓库接口 5. 创建服务层 6. 创建控制器层 7. 测试 API 8. 运…

土地档案管理关系[源码+文档]

目录 摘 要 Abstract 1 绪论 1.1 可行性研究编写目的 1.2 项目背景 1.3 土地管理现状 1.4 土地档案管理研究方向 1.5 项目目标 1.6 项目设计原则 1.6.1 实用性原则 1.6.2 经济性原则 1.6.3 合法性原则 2 相关技术介绍 2.1 三层架构的选择 2.2 编程…

使用C语言编写UDP循环接收并打印消息的程序

使用C语言编写UDP循环接收并打印消息的程序 前提条件程序概述伪代码C语言实现编译和运行C改进之自由设定端口注意事项在本文中,我们将展示如何使用C语言编写一个简单的UDP服务器程序,该程序将循环接收来自指定端口的UDP消息,并将接收到的消息打印到控制台。我们将使用POSIX套…

Audiocraft智能音频和音乐生成工具部署及使用

1、概述 Facebook开源了一款名为AudioCraft的AI音频和音乐生成工具。 该工具可以直接从文本描述和参考音乐生成高质量的音频和音乐。AudioCraft包含MusicGen、AudioGen和EnCodec三个模型,分别实现音乐生成、音频生成和自定义音频模型构建。 2、项目地址 https://…

vulnhub靶场【DriftingBlues】之7

前言 靶机:DriftingBlues-6,IP地址192.168.1.65 攻击:kali,IP地址192.168.1.16 都采用虚拟机,网卡为桥接模式 主机发现 使用arp-scan -l或netdiscover -r 192.168.1.1/24 信息收集 使用nmap扫描端口 SSH服务&…

SCAU期末笔记 - Linux系统应用与开发教程样卷解析(2024版)

我真的不理解奥,为什么会有给样卷不自带解析的,对答案都没得对,故整理一篇 样卷1 一、选择题 1、为了遍历shell脚本调用时传入的参数,需要在shell脚本中使用_____。 A.$#表示参数的个数B.S表示所有参数C.$0表示脚本名D.$1表示…

spring\strust\springboot\isp前后端那些事儿

后端 一. 插入\更新一条数据&#xff08;老&#xff09; Map<String, Object> parameterMap MybatisUtil.initParameterSave("Send_ProjectFrozenLog", sendProjectFrozenLog); commonMapper.insert(parameterMap);parameterMap MybatisUtil.initParameter…

对golang的io型进程进行off-cpu分析

背景&#xff1a; 对于不能占满所有cpu核数的进程&#xff0c;进行on-cpu的分析是没有意义的&#xff0c;因为可能程序大部分时间都处在阻塞状态。 实验例子程序&#xff1a; 以centos8和golang1.23.3为例&#xff0c;测试下面的程序&#xff1a; pprof_netio.go package m…

CSS Grid 布局:属性及使用详解

CSS Grid 布局&#xff1a;属性及使用详解 一、CSS Grid 布局的基础概念二、主要的 CSS Grid 属性1、display: grid / display: inline-grid声明 Grid 容器2、grid-template-columns / grid-template-rowsGrid 容器中列和行的尺寸3、 grid-template-areas命名布局区域4、gap/ g…

【数学建模】利用Matlab绘图(2)

一、Matlab中plot函数的基本用法 在matlab中&#xff0c;函数的基本用法主要包括以下几种 第一类&#xff1a; plot(X,Y,LineSpec) 第二类&#xff1a; plot(tbl,xvar,yvar) 1.1 第一类 1.1.1x-y坐标 x和y的选择取决于绘图所需的数据类型以及图像的类型。下表列出了几种…

编写工具模块

文章目录 1.新建模块1.新建模块sun-common-tool2.sun-dependencies指定依赖3.sun-common统一管理sun-common-tool子模块4.sun-common-tool的pom.xml5.清除掉创建模块时默认sun-frame对sun-common-tool进行管理 2.常用工具类1.DateUtils.java2.EncodeUtils.java3.IpUtils.java4.…

构建一个rust生产应用读书笔记四(实战3)

从这一节开始&#xff0c;我们将继续完善邮件订阅生产级应用&#xff0c;根据作者的选型sqlx作为数据库操作的类库&#xff0c;它有如下优点&#xff1a; 它旨在提供高效、安全且易于使用的数据库交互体验。sqlx 支持多种数据库&#xff0c;包括 PostgreSQL、MySQL 和 SQLite&…

视频直播点播平台EasyDSS推拉流技术结合无人机推流在道路交通巡检场景中的应用

随着城市化进程的加速&#xff0c;交通网络日益复杂&#xff0c;交通巡检工作面临着前所未有的挑战。传统的巡检方式往往依赖于人工巡查或地面监控设备&#xff0c;但这些方法存在巡检范围有限、效率低下等缺点。 无人机凭借其高空视野、灵活机动、实时监控等优势&#xff0c;…

VBA技术资料MF238:ADO提取多文件区域指定数据到工作表

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Mapper代理开发

引入 Mybatis入门方式中&#xff0c;以下代码仍存在硬编码问题 Mapper 代理开发&#xff1a; 目的&#xff1a; 解决原生方式中的硬编码 简化后期执行sql ------下图中&#xff0c;第一段代码是原生硬编码代码块&#xff0c;第二个是引入了Mapper代理开发的代码块。 Mapper代…

ubuntu22.04编译安装Opencv4.8.0+Opencv-contrib4.8.0教程

本章教程,主要记录在Ubuntu22.04版本系统上编译安装安装Opencv4.8.0+Opencv-contrib4.8.0的具体过程。 一、下载opencv和opencv-contrib包 wget https://github.com/opencv/opencv/archive/refs/tags/4.8.0.zip wget https://github.com/opencv/opencv_contrib/archive/refs/…

使用C语言连接MySQL

库的准备 要使用C语言连接mysql&#xff0c;需要使用mysql官网提供的connect库&#xff0c;可以去官网下载&#xff0c;由于我们要下载到 Linux 操作系统中&#xff0c;也可以使用如下指令进行安装库 sudo apt-get install libmysqlclient-dev MySQL连接C/C的库通常会安装在/us…

【Android学习】RxJava

文章目录 资料连接1. Merge & Zip操作符: 合并数据源2. Map & FlapMap & ConcatMap & Buffer: 变换操作符3. retry & retryUntil & retryWhen : 错误处理操作符4. Transformer & Compose 转换操作符5. 网络请求嵌套回调 FlatMap6. 网络请求出错重连…

Mac配置 Node镜像源的时候报错解决办法

在Mac电脑中配置国内镜像源的时候报错,提示权限问题,无法写入配置文件。本文提供解决方法,青测有效。 一、原因分析 遇到的错误是由于 .npm 目录下的文件被 root 用户所拥有,导致当前用户无法写入相关配置文件。 二、解决办法 在终端输入以下命令,输入管理员密码即可。 su…

PyTorch基础入门

目录 前言一、[张量的广播&基本运算](https://www.bilibili.com/video/BV1Gg411u7Lr/?spm_id_from333.999.0.0)1. 张量的广播特性2. 逐点&规约&比较运算 二、张量的线性代数运算1. BLAS & LAPACK2. 矩阵形变及特殊矩阵构造3. 矩阵基本运算4. 矩阵的线性代数运…