从虚拟化基石到云原生架构的降维打击:用dd/mkfs玩转namespace隔离,解锁Docker/K8S资源密码,看透物理机到云服务器的进化之路

本篇摘要

本文围绕虚拟化与容器化技术展开,涵盖架构演进、Docker/K8S优势与挑战、namespace隔离实操(如主机名/PID隔离)、磁盘操作(dd/mkfs/df/mount)等,对比虚拟机与容器差异,阐明技术原理与架构选择逻辑,强调资源隔离与弹性伸缩的核心价值。

在这里插入图片描述

欢迎拜访: 点击进入博主主页

本篇主题: Docker演进+namespace操作详解

制作日期: 2025.08.22

隶属专栏: 点击进入所属Docker专栏

一.技术架构

由于这里过多与对redis之前的演进相似就不重复了如,见 点击速看架构演进,只不过这里多了个容器编排架构。

容器编排架构:

问题背景

  • 业务增长带来系统资源利用率不高的问题,大量资源用于应对短时高并发,平时闲置,需动态扩缩容但难以直接下线服务器。

  • 开发、测试、生产每套环境都需隔离,导致运维工作量大。

  • ​​部署与配置复杂且易错​​:微服务拆分细,导致部署工作量大,配置复杂,容易出错。

  • ​​扩缩容麻烦且易错​​:微服务数量多,扩缩容操作麻烦且容易出错,每次操作后可能需要重新配置环境参数。

  • ​​环境冲突与资源消耗​​:微服务间运行环境可能冲突,需要更多资源或修改配置来解决。

容器化技术及工具

  • 目前最流行的容器化技术是Docker,最流行的容器管理服务是Kubernetes(K8S)。
  • 应用/服务可打包为Docker镜像,通过K8S动态分发和部署镜像。
  • Docker镜像可理解为能运行应用/服务的最小操作系统,包含运行代码及设置好的运行环境。打包成镜像后可分发到相关机器,直接启动镜像即可运行服务,简化部署和运维。

K8S集群情况

  • 通常设有生产和研发K8S集群,一般不共用。
  • 研发集群通过命名空间完成应用隔离。
  • 不同公司划分集群方式不同,有的按研发目的分为研发和测试集群,有的按组织架构实现部门间资源复用 。

通过docker技术,直接降低了对应运维人员的苦恼,但是也增加了对应服务器的负担,于是就引入了云服务器购买等方案。

一张图形象理解docker技术:

在这里插入图片描述

如果我们把docker技术添加过去,发现它就就成了这样:

在这里插入图片描述

对应操作流程:
在这里插入图片描述

  • 发现和之前的微服务相比没多大变化,其实真正变化在的就是降低了运维难度,对环境的部署,复用,转移变得轻松了,但是需要的知识储备量就高了。

对应优缺点:

1.​​优点​​

  • ​​部署运维高效​​:部署、运维简单快速,一条命令可完成大量服务的部署或扩缩容。

  • ​​隔离性好​​:容器间文件系统、网络等互相隔离,避免环境冲突。

  • ​​支持滚动更新​​:版本切换可通过命令轻松完成升级或回滚。

2.​​缺点​​

  • 技术门槛高​​:技术栈多样,对研发团队要求较高。

  • ​​资源与成本问题​​:机器仍需公司自行管理,非高峰期也需预留大量机器资源应对高峰,导致机器成本和运维成本高,资源利用率低。(解决方案:可考虑使用云厂商服务器)

因此可以的出对应的技术构架演进图(由服务器到云服务器):

在这里插入图片描述

对应这些可能会有些疑问:

1. 如何决策要不要演进?

  • 业务需求:业务增长快、模式变化大时需演进架构。
  • 技术瓶颈:现有系统性能差、技术债务高时考虑演进。
  • 团队能力:团队有技术储备且能提升效率时可推进演进。

2. 架构必须这么演进么?

  • 非唯一解:有多种演进方案可选,非固定模式。
  • 成本考量:若优化成本低,可暂不大规模演进。
  • 创新可能:可探索新思路,不局限传统方向。

3. 架构必须是这么几个么?

  • 业务适配:不同业务需定制架构,无固定模式。
  • 技术多元:新兴技术带来更多架构选择。
  • 灵活组合:可创新组合多种技术形成独特架构。

4. Docker 的核心作用?

  • 环境一致:打包应用及依赖,保证多环境运行一致。
  • 资源隔离:容器独立运行,避免相互干扰。
  • 快速部署:提升应用部署和迁移效率。

虚拟化+容器化

  1. 物理机:实际的服务器或计算机,为虚拟机提供硬件环境,也叫“寄主”或“宿主”。
  2. 虚拟化:利用虚拟化技术把一台计算机虚拟为多台逻辑计算机,这些逻辑计算机可运行不同操作系统,应用程序在独立空间运行互不影响,提升工作效率。
  3. 容器化
    • 属于虚拟化技术,即操作系统层虚拟化。
    • 将操作系统内核虚拟化,把用户空间软件实例分割成多个独立单元在内核中运行。
    • 这些软件实例就是容器,对使用者而言像专用服务器程序。
    • 容器技术是虚拟化的一种,Docker是现今容器技术的事实标准。

如图:

在这里插入图片描述

  • 容器A与B内部看不到,但是又共用同一个操纵系统的内核。

那么为什么要进行容器化与虚拟化:

  • 让利用唯一资源完成更多任务。
  • 通过类似docker技术打包容器化,保证不会出现机器变化等导致的问题出现异常。
  • 弹性资源伸缩:可以随时操作简单的增多与减少。
  • 差异化环境提供:即随时轻松切换环境(如ubuntu centos)
  • docker容器化后启动极快,无需虚拟内核。
  • 沙箱安全:每个容器自己在自己的范围操作,不会影响外部。
  • 易拓展:拓展镜像,拓展功能非常轻松。

虚拟机与容器

在这里插入图片描述

  1. 虚拟机(Virtual Machine, VM)

    • 层级:硬件层与操作系统层之间。
    • 原理:模拟完整硬件接口,运行独立操作系统(如Windows上运行Android系统)。
    • 特点:功能完整但资源占用高,适合跨平台环境隔离。
  2. 容器(Container)

    • 层级:操作系统层与函数库层之间。
    • 原理:模拟操作系统接口(如Docker利用Namespace/Cgroup),隔离应用及依赖。
    • 特点:轻量(共享宿主机内核)、启动快、资源占用少,属应用级虚拟化。

如何实现?

虚拟机:

在这里插入图片描述

  1. Type 1 Hypervisor(裸机虚拟化)

    • 架构:直接运行在物理硬件(HARDWARE)上,无宿主操作系统。
    • 特点:高性能、低延迟,直接管理硬件资源。
    • 典型代表:Xen、VMware ESXi。
  2. Type 2 Hypervisor(托管虚拟化)

    • 架构:运行在宿主操作系统(HOST OS)之上,依赖宿主OS管理硬件。
    • 特点:部署灵活,但性能略低(需经过宿主OS层)。
    • 典型代表:VirtualBox、VMware Workstation。
  3. 核心区别

    • Type 1:硬件→Hypervisor→Guest OS(高效,适合企业级)。
    • Type 2:硬件→Host OS→Hypervisor→Guest OS(易用,适合开发/测试)。

容器化:

  • 容器虚拟化,有别于主机虚拟化,是操作系统层的虚拟化。通过 namespace 进行各程序的隔离,加上 cgroups 进行资源的控制,以此来进行虚拟化。

二.空间命名隔离(namespace)

dd命令

  • 全称:Data Description 。
  • 作用:是一个在 Unix 和类 Unix 系统(如 Linux)上用于复制和转换文件的命令。它可以对磁盘、分区等进行低级别的操作,比如制作磁盘镜像、从镜像恢复数据、创建空文件等。例如,使用 dd if=/dev/zero of=test.img bs=1M count=100 可以创建一个大小为100MB的全零文件 test.img ,这里 if 表示输入文件(/dev/zero 是一个特殊的设备文件,会不断输出空),of 表示输出文件,bs 指定块大小,count 指定块的数量。

如下:

在这里插入图片描述

  • 无法查看以为全0,不可打印,故出现卡死假象。

dd 命令核心参数速查表

类别参数作用示例
基础操作if=file输入文件(默认标准输入)if=/dev/zero
of=file输出文件(默认标准输出)of=test.img
bs=size块大小(输入/输出统一,如 1Mbs=1M
count=n复制 n 个块count=100
skip=n跳过输入文件前 nskip=5(跳过前 5MB)
seek=n跳过输出文件前 nseek=5(跳过输出前 5MB)
转换选项conv=ascii转换 EBCDIC → ASCIIconv=ascii
conv=ebcdic转换 ASCII → EBCDICconv=ebcdic
conv=lcase小写转大写conv=lcase
conv=ucase大写转小写conv=ucase
conv=swab交换每对字节(AB→BA)conv=swab
conv=noerror出错时继续执行conv=noerror
conv=sync出错时用零填充对齐块conv=sync
状态控制status=none隐藏所有输出(静默模式)status=none
status=progress显示实时进度(需新版 ddstatus=progress

mkfs命令

  • 全称:Make File System 。
  • 作用:用于在指定设备(如硬盘分区)上创建文件系统。它是一个前端工具,会根据不同的参数调用具体的文件系统创建工具(如 mkfs.ext4 用于创建 ext4 文件系统,mkfs.xfs 用于创建 XFS 文件系统等)。例如,mkfs.ext4 /dev/sda1 会在 /dev/sda1 这个分区上创建 ext4 文件系统(可以理解成一个磁盘)

进行格式化(文件必须有大小可用dd命令):

在这里插入图片描述
检查下:

在这里插入图片描述

df命令

  • 全称:Disk Free 。
  • 作用:用于显示文件系统的磁盘空间使用情况,包括已用空间、可用空间、总空间以及挂载点等信息 。例如,执行 df -h-h 选项以人类可读的格式显示容量,如 KB、MB、GB 等)可以清晰地看到各个文件系统的磁盘空间使用概况。
    这张图片是关于 Shell 命令 df 的说明文档,主要内容如下:
1. 命令基本格式

df [OPTION]... [FILE]...

2. 常见参数
  • -a, --all:包含所有的具有 0 Blocks 的文件系统
  • -h, --human-readable:使用人类可读的格式(预设值是不加这个选项的…)
  • -H, --si:很像 -h,但是用 1000 为单位而不是用 1024
  • -t, --type=TYPE:限制列出文件系统的 TYPE
  • -T, --print-type:显示文件系统的形式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

mount命令

  • 全称:Mount 。
  • 作用:用于将存储设备(如硬盘分区、光盘、U盘等)或文件系统挂载到 Linux 文件系统的目录树中的某个挂载点上,使得用户可以访问设备中的数据。例如,mount ./test.img 会将 ./test.img 这个 USB 设备分区挂载到 mounttest 目录下,之后就可以通过访问 mounttest 来读写该设备中的内容。
命令基本格式
  • mount [-l]
  • mount [-t vfstype] [-o options] device dir
常见参数说明
  1. -l:显示已加载的文件系统列表。
  2. -t:指定加载的文件系统类型(如ext3、ext4、iso9660、tmpfs、xfs等),多数情况下可不指定,mount会自动识别。
  3. -o options:用于描述设备或文件的挂接方式,常见选项有:
    • loop:将文件当作硬盘分区挂接。
    • ro:以只读方式挂接设备。
    • rw:以读写方式挂接设备。

此外,还对device(要挂接的设备)和dir(挂载点目录)进行了简要说明。

用法:

这里之前使用了mkfs命令把对应有内容大小的文件然后格式化成对应文件系统(磁盘),因为linux对应的磁盘需要挂载才能使用,不像windows自己回挂载:

在这里插入图片描述

后面把它挂载到一个比如目录,接下就能访问这个目录实现对对应磁盘操作(进行挂载的磁盘或文件系统需要有大小)。

在这里插入图片描述

成功被挂载,然后进行使用:

在这里插入图片描述

unshare命令

  • 全称:Unshare 。
  • 作用:用于创建新的命名空间(namespace),并使当前进程及其子进程脱离原来的命名空间相关资源。命名空间是 Linux 内核提供的一种隔离机制,可以隔离进程、网络、文件系统挂载等资源。比如,unshare --mount --map-root-user --pid --fork --mount-proc /bin/bash 可以创建一个新的挂载命名空间、新的 PID 命名空间等,并以根用户权限启动一个新的 bash shell 环境,在这个新环境中可以独立地进行文件系统挂载等操作,与原系统的资源相互隔离 。
核心功能

unshare 允许你在新的命名空间中运行程序,使得该程序在文件系统挂载、网络、进程 ID、主机名/域名、IPC(进程间通信)等层面与原系统环境“隔离”,常用于容器化、沙箱测试或资源隔离场景。

常用参数及功能
参数(短选项 + 长选项)核心作用
-i, --ipc启动新进程时,不与父进程共享 IPC 命名空间(即信号量、消息队列、共享内存等 IPC 资源相互隔离)。
-m, --mount启动新进程时,不与父进程共享 Mount 命名空间(文件系统挂载点彼此独立,可挂载/卸载而不影响原系统)。
-n, --net启动新进程时,不与父进程共享 Net 命名空间(网络设备、协议栈、端口等完全隔离,可配置独立网络环境)。
-p, --pid启动新进程时,不与父进程共享 PID 命名空间(新进程在自己的 PID 空间里,能看到“从 1 开始”的进程树)。
-u, --uts启动新进程时,不与父进程共享 UTS 命名空间(主机名、域名可独立设置,互不影响)。
-U, --user启动新进程时,不与父进程共享 User 命名空间(用户/用户组 ID 可以重新映射,实现权限隔离)。
-V, --version查看 unshare 命令自身的版本信息。
--forkunshare 先 fork 一个子进程,再在子进程里执行后续要运行的程序(常配合命名空间使用,规范进程层级)。
--mount-proc在进入新 Mount 命名空间后,自动挂载 proc 文件系统(让新进程能看到“自己视角”的 /proc,方便调试与管理)。
主机名隔离:

在这里插入图片描述

再开一台机器发现名字名字实现了隔离:

在这里插入图片描述

基于pid的隔离测试:

直接隔离:

在这里插入图片描述

因为新进程是重新创建的,和父进程无任何关系,自然不能干别的事。

需要--fork,然它继承一下父进程:

在这里插入图片描述

这里查看pid信息:ls /proc:

在这里插入图片描述
发现还能看到之前父进程的,这里因此需要进行重新挂载(--mount-proc)一下子进程的proc文件系统(也就是让它有个全新的):

在这里插入图片描述

  • exit退出当前环境。

在这里插入图片描述

  • 这里发现只有我们启动的那俩进程pid了。

在这里插入图片描述

  • 但是新开一个机器就不一样,成功隔离。

基于mount隔离测试:

首先先取消之前挂载的文件系统:

umount 被挂载目录

但是发现:
在这里插入图片描述

说明有进程还在访问,这里直接强行关闭:

umount -l 被挂载目录

在这里插入图片描述

  • 关闭成功。

然后进行挂载隔离发现:

在这里插入图片描述

  • 因为刚取消了这个目录对应挂载,结构发生变化,故需要退出重新执行unshare就行了:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 上面被隔离的子进程机器发现成功挂载,但是宿主机看不到,成功实现挂载隔离。

三.本篇小结

通过实践学习了虚拟化与容器化技术,用dd、mkfs等命令操作磁盘,理解了namespace隔离(如主机名、PID隔离)的原理;掌握了Docker/Kubernetes解决资源利用率低、环境冲突等问题的优势,也认识到其技术门槛与成本挑战,更清晰把握了从物理机到云服务器的架构演进逻辑。

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

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

相关文章

自动化测试的概念

文章目录自动化测试能够取代人工测试吗?回归测试自动化分类自动化测试金字塔为啥单元测试的性价比这么高呢?那为啥UI自动化测试的性价比没有组件测试的高呢?web自动化测试举例引入自动化测试的准备工作自动化测试的简单示例自动化测试能够取代…

OSPF故障排查实战:如何通过一条命令精准定位网络掩码不匹配问题

掌握display ospf error命令的解读技巧,快速解决OSPF邻接关系建立失败难题。一、问题背景与场景引入 在网络运维工作中,OSPF(开放最短路径优先)协议作为主流的内部网关协议,其稳定运行至关重要。然而,在实际…

Redis----如何引入分布式锁

一、概述首先引入分布式锁指的是应用程序引入,不是Redis本身引入,Redis作为中间件可以作为分布式锁的一个典型实现方案,同时也有一些其他的实现方案。分布式锁指的是一个/组程序,使用Redis实现的话就是通过添加一个特殊的Key-Valu…

prometheus-2.42.0.linux-amd64.tar.gz 安装配置展示

一、prometheus 1.1解压文件 # tar -xzvf prometheus-2.42.0.linux-amd64.tar.gz -C ~/apps/ prometheus-2.42.0.linux-amd64/ prometheus-2.42.0.linux-amd64/NOTICE prometheus-2.42.0.linux-amd64/consoles/ prometheus-2.42.0.linux-amd64/consoles/index.html.example p…

Linux 标准输入 标准输出 标准错误

目录一. 简介二. 常见用法2.1 输出重定向2.2 错误重定向2.3 同时重定向标准输出 错误2.4 输入重定向2.5 特殊设备三. 这样设计的好处3.1 区分正常信息和错误信息3.2 方便调用方脚本处理3.3 与管道结合时更清晰四. 案例4.1 if判断4.2 ls查询一. 简介 ⏹在 Linux/Unix 中&#…

零基础新手小白快速了解掌握服务集群与自动化运维(二)Linux Journalctl命令、Journalctl日志持久化存储

Linux提供了一个强大的日志系统,它可以跟踪和记录系统的各种活动。在这个系统中,journalctl是一个非常重要的工具,用于查询和操作由systemd进程管理的日志。 本文将深入探讨journalctl命令,介绍其基本使用、高级选项及示例等内容…

【学习】【js】栈数据结构

栈 栈是一种遵从后进先出(LIFO)原则的有序集合。新添加或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。 基于数组的栈 时间复杂度O(n),占用较多的…

【Linux】基本指令 · 下

alias 指令起别名为什么 ls -l 指令等价于 ll 指令呢?指令就是可执行程序,和我们自己写的代码编译好的程序,没有本质区别! 指令在系统的某一个位置存在! 执行指令前,现在系统中查找对应的指令指令在根目录下…

计算机视觉(opencv)实战二十二——指纹图像中提取特征点,计算两两指纹之间的相似度

指纹识别原理与代码实现详解指纹识别是一种常见的生物特征识别技术,广泛应用于门禁系统、手机解锁、考勤打卡、身份认证等场景。其核心思想是:从指纹图像中提取特征点,计算两幅指纹之间的相似度,并根据相似度判断是否为同一人。本…

Linux基础之部署mysql数据库

文章目录一、环境准备二、源码解压与依赖三、CMake 编译配置四、配置 MySQL权限管理修改配置文件 /etc/my.cnf五、环境变量设置六、数据库初始化七、服务管理八、账号密码管理一、环境准备 yum -y install gcc gcc-c ncurses ncurses-devel bison cmakegcc / gcc-c&#xff1a…

代码审计-PHP专题原生开发文件上传删除包含文件操作监控Zend源码解密1day分析

快速分析脆弱:1、看文件路径2、看代码里面的变量(可控)3、看变量前后的过滤文件安全挖掘点:1、脚本文件名2、应用功能点3、操作关键字文件上传,文件下载(读取),文件包含,文件删除等emlog-文件上…

零基础搭建 Hexo 博客:从本地到 GitHub Pages 全流程指南

零基础搭建 Hexo 博客:从本地到 GitHub Pages 全流程指南 Hexo 是一个快速、简洁且高效的博客框架,支持使用 Markdown 来编写文章,并能快速生成静态网页,非常适合想要搭建个人博客的同学。本文将带你从零开始,本地搭建…

Git 简介

Git 是目前全球最流行的分布式版本控制系统(Distributed Version Control System, DVCS),核心作用是追踪文件修改历史、支持多人协同开发,并能高效管理代码(或任何文本类文件)的版本迭代。它由 Linux 内核创…

后端Web实战-Spring原理

目录 1. 配置优先级 2. Bean管理 2.1 获取Bean 2.2 Bean作用域 面试题:Lazy是如何解决循环依赖问题的? 2.3 第三方Bean 3. SpringBoot原理 3.1 起步依赖 3.2 自动配置 3.2.1 概述 3.2.2 自动配置的原理及常见方案 3.2.2.1 概述 3.2.2.2 方案…

在 Qoder 等 AI 二创 IDE 里用 VS Code Remote-SSH 的“曲线连接”实战

目标:让你在 Qoder 等在线/AI 辅助 IDE 中,也能像本地 VS Code 一样通过 Remote-SSH 连接到自己的远程服务器进行开发。 前提:只在你拥有或被授权的服务器上使用,遵守所用平台的条款与限制。两句话说清楚 先用本地 VS Code 正常连…

python发送请求SSL验证设置

这个错误通常是由于SSL/TLS握手失败导致的,可能原因包括证书验证问题、不兼容的加密协议或网络连接中断。以下是几种解决方案,按推荐顺序排列: 方案一:临时禁用SSL验证(快速测试) response requests.get(u…

工厂自动化正从 “人工堆叠” 向 “设备替代” 快速转变

​人工进行零件排列,虽在操作灵活性上有一定表现,但实际应用中存在明显短板,对工厂自动化转型形成制约。从成本来看,一名工人日均工资约数百元,若需 5-6 名工人协同作业,月均人力成本易突破万元&#xff0c…

中标麒麟7.4部署gitlab-runner

1. 部署环境 本次部署环境完全断网。需要离线下载gitlab-runner及其依赖。 本次部署环境为中标麒麟7.4。目前机器上部署了gitlab,安装了maven。 2. 部署步骤 2.1 在外部下载好依赖 我首先在腾讯云上布置了一个centos7.9的虚拟机,没有安装任何东西。 …

在 IDEA 2024 创建 Vue 项目(保姆级)

目录 一、 前后端分离 1. 简介 2. 实现前后端分离的常用前端框架 3. 前后端分离和动静分离 3.1 前后端分离: 3.2 动静分离: 二、 Vue.js概述 1. 简介 2. SPA介绍 2.1 优点 2.2 缺点 3. MVVM介绍 3.1 示例 三、 名词解释 1. Node.js 2. npm 3. webpack 4. Vue…

Coze源码分析-资源库-创建知识库-后端源码-应用/领域/数据访问

3. 应用服务层 3.1 知识库应用服务 文件位置: backend/application/knowledge/knowledge.go func (k *KnowledgeApplicationService) CreateKnowledge(ctx context.Context, req *dataset.CreateDatasetRequest) (*dataset.CreateDatasetResponse, error) {// 1. 转换文档类型d…