從虛擬化基石到云原生架構的降維打擊:用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
英文地址,請注明出處:http://en.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…