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.mzph.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、…