Linux 虛擬化方案

一、Linux 虛擬化技術分類

1. 全虛擬化 (Full Virtualization)

  • 特點:Guest OS 無需修改,完全模擬硬件

  • 代表技術

    • KVM (Kernel-based Virtual Machine):主流方案,集成到 Linux 內核

    • QEMU:硬件模擬器,常與 KVM 配合使用

2. 半虛擬化 (Paravirtualization)

  • 特點:Guest OS 需要修改內核,性能更高

  • 代表技術:Xen(早期云平臺常用)

3. 容器化 (Containerization)

  • 特點:共享主機內核,輕量級資源隔離

  • 代表技術

    • Docker:應用級容器

    • LXC (Linux Containers):系統級容器

4. 硬件輔助虛擬化

  • 依賴:CPU 必須支持虛擬化擴展

    • Intel:VT-x

    • AMD:AMD-V


二、KVM/QEMU 實踐

1. 環境準備

# Ubuntu/Debian
sudo apt-get install qemu-kvm libvirt-daemon-system virt-manager
?
# 驗證虛擬化支持
egrep -c '(vmx|svm)' /proc/cpuinfo  # 輸出應 >0
kvm-ok ? ? ? ? ? ? ? ? ? ? ? ? ? ?  # 顯示"KVM acceleration can be used"

2. 創建虛擬機

# 使用 virt-install 創建虛擬機
virt-install \--name ubuntu-server \--ram 2048 \--vcpus 2 \--disk path=/var/lib/libvirt/images/ubuntu.qcow2,size=20 \--os-type linux \--os-variant ubuntu22.04 \--network bridge=virbr0 \--graphics none \--console pty,target_type=serial \--location 'http://archive.ubuntu.com/ubuntu/dists/jammy/main/installer-amd64/' \--extra-args 'console=ttyS0,115200n8 serial'

3. 管理虛擬機

# 查看運行中的虛擬機
virsh list
?
# 啟動/關閉虛擬機
virsh start ubuntu-server
virsh shutdown ubuntu-server
?
# 刪除虛擬機
virsh undefine ubuntu-server

三、Docker 容器化實踐

1. 基礎操作

# 安裝 Docker
curl -fsSL https://get.docker.com | sudo bash
?
# 運行容器
docker run -it --rm ubuntu:22.04 /bin/bash
?
# 構建自定義鏡像
cat <<EOF > Dockerfile
FROM alpine:latest
RUN apk add --no-cache nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
EOF
docker build -t my-nginx .

2. 容器網絡

# 創建自定義網絡
docker network create my-net
?
# 運行容器并連接網絡
docker run -d --name web --network my-net nginx

3. 資源限制

# 限制 CPU 和內存
docker run -it --cpus="1.5" --memory="512m" ubuntu

四、性能優化技巧

  1. KVM 優化

    # 使用 VirtIO 驅動提升磁盤/網絡性能
    <disk type='file' device='disk'><driver name='qemu' type='qcow2' cache='none' io='native'/><source file='/path/to/image.qcow2'/><target dev='vda' bus='virtio'/>
    </disk>
    ?
    # CPU 綁定
    virsh vcpupin <domain> <vcpu> <cpulist>
  2. 容器優化

    # 使用 --memory-swap=0 禁用交換分區
    docker run -m 256m --memory-swap=0 my-app
    ?
    # 使用 cgroups v2 控制資源
    systemd.unified_cgroup_hierarchy=1

五、虛擬化監控工具

工具用途示例命令
virt-top實時監控 KVM 虛擬機virt-top
docker stats監控容器資源使用docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"
sar系統資源統計sar -r 1 3
perf性能分析perf stat -e cpu-cycles ls

六、安全注意事項

  1. KVM 安全

    • 定期更新 QEMU/KVM

    • 使用 SELinux 或 AppArmor

    • 禁用不必要的虛擬機功能(如 USB 透傳)

  2. 容器安全

    • 以非 root 用戶運行容器

    FROM alpine
    RUN adduser -D appuser
    USER appuser
    • 限制容器能力

    docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx

七、高級場景

1. 嵌套虛擬化

# 啟用嵌套虛擬化(Intel CPU)
sudo modprobe -r kvm_intel
sudo modprobe kvm_intel nested=1
cat /sys/module/kvm_intel/parameters/nested  # 應顯示 Y

2. GPU 透傳

# 綁定 GPU 到 vfio-pci
echo "options vfio-pci ids=10de:1b80,10de:10f0" > /etc/modprobe.d/vfio.conf

3. Kubernetes 虛擬化

# 使用 KubeVirt 管理虛擬機
kubectl apply -f https://github.com/kubevirt/kubevirt/releases/download/v0.58.0/kubevirt-operator.yaml

八、故障排查

  1. 常見錯誤

    • KVM 無法啟動:檢查 /var/log/libvirt/qemu/ 日志

    • 容器網絡不通:檢查 iptables 規則 iptables -L -n -v

    • 性能下降:使用 perf top 分析熱點

  2. 調試工具

    # KVM 調試
    virsh dumpxml <vm-name>  # 查看虛擬機配置
    qemu-monitor: info cpus  # 進入 QEMU 監控模式
    ?
    # 容器調試
    docker inspect <container-id>
    nsenter -t <pid> -n ip a

選擇虛擬化方案時需根據具體需求(性能需求、隔離要求、管理復雜度)進行權衡。建議從容器化開始實驗,再逐步深入 KVM 等完整虛擬化方案。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/75471.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/75471.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/75471.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

樹莓派 5 換清華源

首先備份原設置 cp /etc/apt/sources.list ~/sources.list.bak cp /etc/apt/sources.list.d/raspi.list ~/raspi.list.bak修改配置 /etc/apt/sources.list 文件替換內容如下&#xff08;原內容刪除&#xff09; deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bookworm …

WGAN原理及實現(pytorch版)

WGAN原理及實現 一、WGAN原理1.1 原始GAN的缺陷1.2 Wasserstein距離的引入1.3 Kantorovich-Rubinstein對偶1.4 WGAN的優化目標1.4 數學推導步驟1.5 權重裁剪 vs 梯度懲罰1.6 優勢1.7 總結 二、WGAN實現2.1 導包2.2 數據加載和處理2.3 構建生成器2.4 構建判別器2.5 訓練和保存模…

Unity網絡開發基礎 (3) Socket入門 TCP同步連接 與 簡單封裝練習

本文章不作任何商業用途 僅作學習與交流 教程來自Unity唐老獅 關于練習題部分是我觀看教程之后自己實現 所以和老師寫法可能不太一樣 唐老師說掌握其基本思路即可,因為前端程序一般不需要去寫后端邏輯 1.認識Socket的重要API Socket是什么 Socket&#xff08;套接字&#xff0…

【linux】一文掌握 ssh和scp 指令的詳細用法(ssh和scp 備忘速查)

文章目錄 入門連接執行SCP配置位置SCP 選項配置示例ProxyJumpssh-copy-id SSH keygenssh-keygen產生鑰匙類型known_hosts密鑰格式 此快速參考備忘單提供了使用 SSH 的各種方法。 參考&#xff1a; OpenSSH 配置文件示例 (cyberciti.biz)ssh_config (linux.die.net) 入門 連…

真實筆試題

文章目錄 線程題樹的深度遍歷 線程題 實現一個類支持100個線程同時向一個銀行賬戶中存入一元錢.需通過同步機制消除競態條件,當所有線程執行完成后,賬戶余額必須精確等于100元 package com.itheima.thread;public class ShowMeBug {private double balance; // 賬戶余額priva…

2.2 路徑問題專題:LeetCode 63. 不同路徑 II

動態規劃解決LeetCode 63題&#xff1a;不同路徑 II&#xff08;含障礙物&#xff09; 1. 題目鏈接 LeetCode 63. 不同路徑 II 2. 題目描述 一個機器人位于 m x n 網格的左上角&#xff0c;每次只能向右或向下移動一步。網格中可能存在障礙物&#xff08;標記為 1&#xff…

2874. 有序三元組中的最大值 II

給你一個下標從 0 開始的整數數組 。nums 請你從所有滿足 的下標三元組 中&#xff0c;找出并返回下標三元組的最大值。 如果所有滿足條件的三元組的值都是負數&#xff0c;則返回 。i < j < k(i, j, k)0 下標三元組 的值等于 。(i, j, k)(nums[i] - nums[j]) * nums[k…

【論文筆記】Llama 3 技術報告

Llama 3中的頂級模型是一個擁有4050億參數的密集Transformer模型&#xff0c;并且它的上下文窗口長度可以達到128,000個tokens。這意味著它能夠處理非常長的文本&#xff0c;記住和理解更多的信息。Llama 3.1的論文長達92頁&#xff0c;詳細描述了模型的開發階段、優化策略、模…

JVM深入原理(一+二):JVM概述和JVM功能

目錄 1. JVM概述 1.1. Java程序結構 1.2. JVM作用 1.3. JVM規范和實現 2. JVM功能 2.1. 功能-編譯和運行 2.2. 功能-內存管理 2.3. 功能-即時編譯 1. JVM概述 1.1. Java程序結構 1.2. JVM作用 JVM全稱是Java Virtual Machine-Java虛擬機 JVM作用:本質上是一個運行在…

SQL Server Integration Services (SSIS) 服務無法啟動

問題現象&#xff1a; 安裝 SQL Server 2022 后&#xff0c;SQL Server Integration Services (SSIS) 服務無法啟動&#xff0c;日志報錯 “服務無法響應控制請求”&#xff08;錯誤代碼 1067&#xff09;或 “依賴服務不存在或已標記為刪除”。 快速診斷 檢查服務狀態與依賴項…

Spring Boot 定時任務的多種實現方式

&#x1f31f; 前言 歡迎來到我的技術小宇宙&#xff01;&#x1f30c; 這里不僅是我記錄技術點滴的后花園&#xff0c;也是我分享學習心得和項目經驗的樂園。&#x1f4da; 無論你是技術小白還是資深大牛&#xff0c;這里總有一些內容能觸動你的好奇心。&#x1f50d; &#x…

Java基礎之反射的基本使用

簡介 在運行狀態中&#xff0c;對于任意一個類&#xff0c;都能夠知道這個類的所有屬性和方法&#xff1b;對于任意一個對象&#xff0c;都能夠調用它的任意屬性和方法&#xff1b;這種動態獲取信息以及動態調用對象方法的功能稱為Java語言的反射機制。反射讓Java成為了一門動…

AI產品的上層建筑:提示詞工程、RAG與Agent

上節課我們拆解了 AI 產品的基礎設施建設&#xff0c;這節課我們聊聊上層建筑。這部分是產品經理日常工作的重頭戲&#xff0c;包含提示詞、RAG 和 Agent 構建。 用 AI 客服產品舉例&#xff0c;這三者的作用是這樣的&#xff1a; 提示詞能讓客服很有禮貌。比如它會說&#x…

藍橋杯刷題記錄【并查集001】(2024)

主要內容&#xff1a;并查集 并查集 并查集的題目感覺大部分都是模板題&#xff0c;上板子&#xff01;&#xff01; class UnionFind:def __init__(self, n):self.pa list(range(n))self.size [1]*n self.cnt ndef find(self, x):if self.pa[x] ! x:self.pa[x] self.fi…

海外SD-WAN專線網絡部署成本分析

作為支撐企業國際業務的重要基石&#xff0c;海外SD-WAN專線以其獨特的成本優勢和技術特性&#xff0c;正成為企業構建高效穩定的全球網絡架構的首選方案。本文將從多維度解構海外SD-WAN專線部署的核心成本要素&#xff0c;為企業的全球化網絡布局提供戰略參考。 一、基礎資源投…

操作系統(二):實時系統介紹與實例分析

目錄 一.概念 1.1 分類 1.2 主要指標 二.實現原理 三.主流實時系統對比 一.概念 實時系統&#xff08;Real-Time System, RTS&#xff09;是一類以時間確定性為核心目標的計算機系統&#xff0c;其設計需確保在嚴格的時間約束內完成任務響應。 1.1 分類 根據時間約束的嚴…

Golang的消息中間件選型

# Golang的消息中間件選型 消息中間件的作用 消息中間件是一種用于分布式系統中應用程序之間進行通信的基礎架構工具&#xff0c;它能夠有效地解耦發送者和接收者&#xff0c;并提供高可用性和可靠性的消息傳遞機制。在Golang應用程序中&#xff0c;選擇適合的消息中間件對于構…

大模型中的參數規模與顯卡匹配

在大模型訓練和推理中&#xff0c;顯卡&#xff08;GPU/TPU&#xff09;的選擇與模型參數量緊密相關&#xff0c;需綜合考慮顯存、計算能力和成本。以下是不同規模模型與硬件的匹配關系及優化策略&#xff1a; 一、參數規模與顯卡匹配參考表 模型參數量訓練階段推薦顯卡推理階…

帶頭結點 的單鏈表插入方法(頭插法與尾插法)

帶頭結點的單鏈表插入方法&#xff08;頭插法與尾插法&#xff09; 在單鏈表的操作中&#xff0c;插入是最常見的操作之一&#xff0c;本文介紹 帶頭結點的單鏈表 如何實現 后插法 和 前插法&#xff08;包括 插入法 和 后插數據交換法&#xff09;&#xff0c;并提供完整的 C …

Prometheus的工作流程

Prometheus 是一個開源的監控和告警系統&#xff0c;專為監控分布式系統而設計。它的工作流程主要包括以下幾個關鍵步驟&#xff1a; 1. 數據采集 (Scraping) 目標發現 (Service Discovery)&#xff1a; Prometheus 自動或手動配置監控目標&#xff0c;通過 DNS、Kubernetes、…