linux 进程隔离Namespace 学习

一、linux namespace 介绍

1.1、概念

Linux Namespace是Linux内核提供的一种机制,它用于隔离不同进程的资源视图,使得每个进程都拥有独立的资源空间,从而实现进程之间的隔离和资源管理

Linux Namespace的设计目标是为了解决多个进程之间资源冲突的问题,提供一种轻量级的虚拟化技术。通过使用Namespace,可以在一个物理主机上创建多个独立的虚拟环境,每个环境都有自己的进程、文件系统、网络和用户视图。其提供了一种抽象机制,将原本全局共享的资源隔离成不同的集合,集合中的成员独享其原本全局共享的资源。如下图:
在这里插入图片描述

进程 A 和进程 B 分别属于两个不同的 Namespace,那么进程 A 将可以使用 Linux 内核提供的所有 Namespace 资源:如独立的主机名,独立的文件系统,独立的进程编号等等。同样地,进程 B 也可以使用同类资源,但其资源与进程 A 使用的资源相互隔离,彼此无法感知。

从用户的角度来看,每一个命名空间应该像一台单独的 Linux计算机一样,有自己的 init进程 (PID为 1),其他进程的PID依次递增, A和B空间都有PID为l的init进程, 子命名空间的进程映 射到父命名空间的进程上,父命名空间可以知道每一个子命名空间的运行状态,而子命名空间与子命名空间之间是隔离的。

1.2、虚拟化相关概念

1.2.1、常见的进程级虚拟化技术:

  • chroot(Change Root)chroot是一种将进程的根目录修改为指定目录的技术。它通过限制进程的文件系统访问范围,使得进程只能在指定的目录树中运行。这样可以实现一定程度的进程隔离。

  • Linux容器(Linux Containers,LXC)LXC是一种操作系统级虚拟化技术,它使用Linux内核中的命名空间(namespaces)和控制组(cgroups)等特性,实现了对进程的隔离。通过创建和管理多个容器实例,每个容器都拥有自己的文件系统、网络和进程空间,可以实现进程级别的隔离和资源控制。

  • Docker:Docker是基于LXC的一层封装,提供了更高级别的容器管理和部署工具。它通过使用镜像(Images)和容器(Containers)的概念,使得应用程序的打包、分发和部署更加方便。Docker在LXC的基础上添加了一些额外的功能和工具,使得容器的使用更加简单和高效。

  • systemd-nspawnsystemd-nspawnSystemd项目中的一个工具,它基于Linux命名空间和chroot,提供了一个简单的容器环境。它可以启动一个进程并将其隔离在一个独立的文件系统环境中,实现了进程的隔离和资源控制。

1.2.2、常见linux 虚拟化技术

完全虚拟化(Full Virtualization):
完全虚拟化技术通过在物理硬件上运行一个虚拟机监视器(Hypervisor),来模拟一个完整的虚拟硬件环境。在完全虚拟化中,虚拟机操作系统不需要进行修改,可以运行未经修改的操作系统。代表产品有:

  • KVM(Kernel-based Virtual Machine):KVM是一个开源的完全虚拟化解决方案,它基于Linux内核提供了虚拟化的能力。KVM使用QEMU(Quick Emulator)作为虚拟机监视器,并通过硬件虚拟化扩展(如Intel的VT-x和AMD的AMD-V)提供硬件加速。

半虚拟化(Para-virtualization):
半虚拟化技术在虚拟机内部对操作系统进行修改,使其能够与虚拟化层进行通信和协作,从而提高性能和效率。代表产品有:

  • XenXen是一个开源的半虚拟化解决方案,它可以在不修改操作系统的情况下运行虚拟机。Xen使用一种称为"Xen插入式内核"的方法,通过修改操作系统内核,使其与Hypervisor进行通信,实现半虚拟化。

容器虚拟化(Containerization):
容器虚拟化技术通过在操作系统级别创建隔离的容器实例,实现应用程序和依赖的隔离。容器共享操作系统内核,因此比虚拟机更轻量级和高效。代表产品有:

  • Docker:Docker是一种流行的容器化平台,它使用容器镜像(Images)来打包应用程序及其依赖,并通过Docker引擎在宿主机上运行容器实例。Docker提供了方便的构建、分发和部署工具,使得容器的使用变得简单和高效。
  • LXC(Linux Containers):LXC是一种轻量级的容器化解决方案,它利用Linux内核中的命名空间(namespaces)和控制组(cgroups)等特性,实现了对进程的隔离。LXC提供了一个容器运行时环境,可以在其中运行独立的用户空间实例

硬件辅助虚拟化(Hardware-assisted Virtualization):
硬件辅助虚拟化技术利用物理处理器中的虚拟化扩展,如Intel的VT-x和AMD的AMD-V,提供对虚拟化的硬件支持,提高虚拟机的性能和效率。上述的KVM和Xen也是硬件辅助虚拟化的解决方案。

轻量级虚拟化(Lightweight Virtualization):
轻量级虚拟化技术是一种特殊形式的虚拟化,它通过在操作系统级别利用命名空间(namespaces)和控制组(cgroups)等特性,实现对进程的隔离和资源控制。代表产品有:

  • Docker:除了作为容器化平台,Docker也提供了一种轻量级的虚拟化方式。Docker容器可以在宿主机上以独立的进程运行,具有隔离的文件系统、网络和进程空间。

1.3、linux namespace 发展历史

Linux Namespace的发展历史可以追溯到2002年,最早是由Eric W. Biederman提出并实现。

以下是Linux Namespace的主要发展历程:

  • 2002年:最早的Linux Namespace实现由Eric W. Biederman在2.4内核版本中引入,包括Mount NamespaceUTS Namespace
  • 2006年:Eric W. Biederman和Serge E. Hallyn在2.6.24版本中引入PID Namespace,允许每个Namespace拥有独立的进程ID空间。
  • 2008年:Eric W. Biederman和Serge E. Hallyn在2.6.29版本中引入Network Namespace,实现了独立的网络隔离。
  • 2013年:Docker公司推出了Docker容器平台,基于Linux Namespace和Cgroups实现了轻量级的容器虚拟化技术,引发了容器技术的热潮。
  • 2016年:Linux Kernel 4.6版本中引入了IPC NamespaceUser Namespace,分别实现了进程间通信和用户隔离。
  • 2017年:Linux Kernel 4.11版本中引入了CGROUP Namespace,允许每个Namespace拥有独立的资源限制。

随着时间的推移,Linux Namespace逐渐成为Linux内核中的重要特性,为容器化技术的发展提供了基础。它提供了一种灵活且轻量级的隔离机制,使得可以在单个主机上创建多个独立的虚拟环境,实现了资源的隔离和管理。

1.4、linux namespace 作用

Linux Namespace的作用包括:

  • 进程隔离:Linux Namespace可以将不同进程隔离开,每个进程在自己的Namespace中运行,不受其他进程的影响,具有独立的进程视图。
  • 文件系统隔离:通过Mount Namespace,每个进程可以拥有自己的文件系统挂载点,实现文件系统的隔离。
  • 网络隔离:通过Network Namespace,每个进程可以拥有独立的网络设备、IP地址、路由表和防火墙规则,实现网络的隔离。
  • 进程间通信隔离:通过IPC Namespace,实现进程间通信(IPC)的隔离,使得不同的进程在不同的Namespace中无法直接通信。
  • 用户和用户组隔离:通过User Namespace,每个进程可以拥有独立的用户和用户组视图,从而实现用户和用户组的隔离。
  • 进程资源限制:通过PID Namespace和CGROUP Namespace,可以限制进程的资源使用,如CPU、内存、磁盘IO等,实现资源的管理和隔离。

通过使用Linux Namespace,可以在一个物理主机上创建多个独立的虚拟环境,每个环境都有自己的进程、文件系统、网络和资源限制,从而实现进程间的隔离和资源管理,提高系统的安全性和性能。
在这里插入图片描述

二、namespace 的主要函数

三、namespace 分类

四、namespace 声明周期

五、namespace API

参考文档

1、https://blog.csdn.net/y3over/article/details/128863060

2、https://www.cnblogs.com/sally-zhou/p/13398260.html

3、http://www.taodudu.cc/news/show-320037.html?action=onClick

4、http://www.360doc.com/content/21/0803/11/31115656_989326901.shtml

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

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

相关文章

微服务设计和高并发实践

文章目录 1、微服务的设计原则1.1、服务拆分方法1.2、微服务的设计原则1.3、微服务架构 2、高并发系统的一些优化经验2.1、提高性能2.1.1、数据库优化2.1.2、使用缓存2.1.3、服务调用优化2.1.4、动静分离2.1.5、数据库读写分离 2.2、服务高可用2.2.1、限流和服务降级2.2.2、隔离…

C语言插入排序

前言: 本文主要讲解插入排序中的直接插入排序和希尔排序。 1、直接插入排序: 1.1基本思想 直接插入排序是一种简单的插入排序法,其基本思想是把待排序的数值按照大小顺序逐个插入到一个已经排好序的有序序列中,直到将所有记录…

Spring Cloud--从零开始搭建微服务基础环境【四】

😀前言 本篇博文是关于Spring Cloud–从零开始搭建微服务基础环境【四】,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,…

QT day5

服务器: #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//给服务器指针实例化对象server new QTcpServer(this); }Widget::~Widget() {delete ui…

Java“牵手”京东商品评论数据接口方法,京东商品评论接口,京东商品评价接口,行业数据监测,京东API实现批量商品评论内容数据抓取示例

京东平台商品评论数据接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取京东商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片、评论内容、评论日期、评论图片、追评内容等详细信息 。 获取商品评论接口API是一种用于获取…

el-select 加多选框使用

解决方法&#xff1a; el-select 添加属性 multiple&#xff0c; <el-form-item label"订单来源&#xff1a;"><el-selectv-model"tableFrom.userType"clearablemultipleplaceholder"请选择"class"selWidth"><el-opt…

LeetCode-53-最大子数组和-贪心算法

贪心算法理论基础&#xff1a; 局部最优推全局最优 贪心无套路~ 没有什么规律~ 重点&#xff1a;每个阶段的局部最优是什么&#xff1f; 题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#…

开发工具——IDE安装 / IDEA子module依赖导入失败编译提示xx找不到符号 / IDEA在Git提交时卡顿

近期换了工作电脑&#xff0c;公司的IT团队不够给力&#xff0c;不能复制电脑系统&#xff0c;所以又到了需要重装IDE配置开发环境的时候了&#xff1b;在安装和导入Java编译器IDEA的时候遇到一些"棘手"问题&#xff0c;这里整理下解决方法以备不时之需&#xff1b; …

【python爬虫】16.爬虫知识点总结复习

文章目录 前言爬虫总复习工具解析与提取&#xff08;一&#xff09;解析与提取&#xff08;二&#xff09;更厉害的请求存储更多的爬虫更强大的爬虫——框架给爬虫加上翅膀 爬虫进阶路线指引解析与提取 存储数据分析与可视化更多的爬虫更强大的爬虫——框架项目训练 反爬虫应对…

Linux的命令

Linux的命令分为四个类型&#xff1a;文件操作命令、系统操作命令、文本处理命令和网络操作命令。下面简单介绍一下常用的Linux命令&#xff1a; 文件操作命令 ls&#xff1a;列出目录下的所有文件和目录。 cd&#xff1a;切换当前目录。 mkdir&#xff1a;创建一个新目录。…

Linux系统的安装

文章目录 1 Linux介绍1.1 Linux是什么1.2 Linux的特点1.3 Linux的应用1.4 Linux的发行版本1.5 Linux的Shell 2 Linux安装2.1 安装方式2.2 什么是VMware2.3 VMware主要功能2.4 什么是CentOS2.5 VMware与CentOS与Linux的关系2.6 VMware安装CentOS的步骤 1 Linux介绍 1.1 Linux是…

Jenkins详解(三)

Jenkins详解(三) 目录 Jenkins详解(三) 1、Jenkins介绍2、Jenkins CI/CD 流程3、部署环境 3.1 环境准备3.2 安装GitLab3.3 初始化GitLab3.4 GitLab中文社区版补丁包安装3.5 修改GitLab配置文件/etc/gitlab/gitlab.rb3.6 在宿主机输入 http://192.168.200.26:88 地址就可以访问了…

【Unity-Cinemachine相机】虚拟相机旋转Composer属性详解

Look At和Aim本质是控制虚拟相机自身的旋转&#xff0c;并不一定非要看着&#xff0c;或者并不一定非要瞄着这里的游戏对象 Look At和Aim是以Look At里面的对象作为参考来旋转自身 Do nothing&#xff1a;表现出来的行为和Look At空出来一样 Composer&#xff1a;是一个标准的…

机器学习(吴恩达第一课)

课程链接 文章目录 第一周1、机器学习定义2、监督学习(Supervised learning)1、回归(Regression)2、分类(Classification) 3、无监督学习(Unsupervised learning)4、线性回归模型5、代价函数6、梯度下降(Gradient descent)1、学习率2、用于线性回归的梯度下降 第二周(多维特征…

2605. 从两个数字数组里生成最小数字

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;枚举比较法方法二&#xff1a;集合的位运算表示法 写在最后 Tag 【贪心】【位运算】【数组】 题目来源 2605. 从两个数字数组里生成最小数字 题目解读 给定两个各自只包含数字 1 到 9 的两个数组&#xff0c;每个数组…

静态路由:配置和使用详解

文章目录 一、静态路由的配置和使用详解1. 配置要点1.1 点到点接口配置1.2 以太网接口配置 2. 默认路由3. 静态路由的配置命令4. 静态路由实现路由备份和负载分担 二、静态路由的优先级和比较1. 静态路由的优先级设置2. 静态路由与动态路由的比较2.1 静态路由优缺点2.2 动态路由…

【STM32】学习笔记-SPI通信

SPI通信 SPI通信&#xff08;Serial Peripheral Interface&#xff09;是一种同步的串行通信协议&#xff0c;用于在微控制器、传感器、存储器、数字信号处理器等之间进行通信。SPI通信协议需要使用4个线路进行通信&#xff1a;时钟线(SCLK)、主输入/主输出线(MISO)、主输出/主…

Elasticsearch、Kibana以及Java操作ES 的快速使用

docker 安装elastic search 、 kibana&#xff08;可视化管理elastic search&#xff09; docker pull elasticsearch:7.12.1 docker pull kibana:7.12.1创建docker自定义网络 docker自定义网络可以使得容器之间使用容器名网络互连&#xff0c;默认的网络不会有这功能。 一定…

聚焦磷酸铁锂产线革新,宏工科技一站式解决方案

兼顾了低成本与安全性两大属性&#xff0c;磷酸铁锂市场在全球范围内持续升温&#xff0c;并有望保持较高的景气度。巨大的需求空间之下&#xff0c;行业对于锂电装备企业的自动化与智能化水平、整线交付能力、产品效率与稳定性等均提出了新的要求。 以宏工科技股份有限公司&a…

ES查询报错内容长度超过104857600

项目场景&#xff1a; 使用 ElasticsearchRestTemplate 或者使用 RestHighLevelClient 查询 ES 报错 内容长度超过 104857600 问题描述 ES 查询报错 entiity content is too long xxx for the configured buffer limit 104857600 Overridepublic void esQuery() {restHighL…