赞
踩
【虚拟化】计算虚拟化技术简介,CentOS使用KVM、QEMU安装并管理虚拟机
技术栈介绍:
- 虚拟化:在本体Centos上使用KVM/Xen管理虚拟机,其中 KVM 提供了内核级别的虚拟化支持,QEMU 扮演了用户空间中的虚拟机管理和设备仿真的角色。
- 实例化:镜像管理,Packer 支持使用 KVM 作为虚拟化提供者,通过定义一个适合 KVM 的构建器(builder),Packer 能在 KVM 环境中自动化创建虚拟机映像。
- 容器化:docker容器化是一种在共享操作系统内核的基础上,将应用程序及其依赖环境封装在独立的运行环境(容器)中进行隔离的技术。
虚拟化和容器化是两种计算技术,旨在隔离应用并提供灵活的资源管理,但它们的实现方式和适用场景有所不同。
虚拟化介绍:
容器化介绍:
虚拟化与容器化对比:
特性 | 虚拟化 | 容器化 |
---|---|---|
隔离性 | 强(拥有完整的操作系统) | 较弱(共享操作系统内核) |
资源利用率 | 相对较低 | 相对较高 |
启动速度 | 慢(需要启动完整的操作系统) | 快(轻量级运行环境) |
便携性 | 依赖于虚拟机格式和平台 | 高(一次构建,到处运行) |
管理和部署 | 复杂(需要管理多个完整的操作系统) | 简单(集中管理和复制) |
典型应用 | 数据中心、高可用架构、开发测试系统等 | 微服务、DevOps、CI/CD 流程 |
KVM(Kernel-based Virtual Machine)是一种基于 Linux 内核的开源虚拟化技术,允许用户在 Linux 上运行多个虚拟机,每个虚拟机都有私有的虚拟硬件(CPU、内存、磁盘等)。
参考资料:1
工作原理:
典型使用场景:
检测是否支持KVM:
cat /proc/cpuinfo | egrep 'vmx|svm'
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 fma cx16 xtpr pdcm pcid dca sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm arat epb pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid cqm xsaveopt cqm_llc cqm_occup_llc
关闭SELinux
vi /etc/sysconfig/selinux
通过 yum 安装 kvm 基础包和管理工具
, kvm相关安装包及其作用:
qemu-kvm
主要的KVM程序包python-virtinst
创建虚拟机所需要的命令行工具和程序库virt-manager
GUI虚拟机管理工具virt-top
虚拟机统计命令virt-viewer
GUI连接程序,连接到已配置好的虚拟机libvirt
C语言工具包,提供libvirt服务libvirt-client
为虚拟客户机提供的C语言工具包virt-install
基于libvirt服务的虚拟机创建命令bridge-utils
创建和管理桥接设备的工具安装 kvm
# ------------------------
# yum -y install qemu-kvm python-virtinst libvirt libvirt-python virt-manager libguestfs-tools bridge-utils virt-install
yum -y install qemu-kvm libvirt virt-install bridge-utils
# 重启宿主机,以便加载 kvm 模块
# ------------------------
reboot
# 查看KVM模块是否被正确加载
# ------------------------
lsmod | grep kvm
kvm_intel 162153 0
kvm 525259 1 kvm_intel
开启kvm服务,并且设置其开机自动启动
systemctl start libvirtd
systemctl enable libvirtd
查看状态操作结果,如Active: active (running)
,说明运行情况良好
systemctl status libvirtd
systemctl is-enabled libvirtd
● libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
Active: active (running) since 二 2001-01-02 11:29:53 CST; 1h
创建命令
virt-install \
--virt-type=kvm \
--name=centos78 \
--vcpus=2 \
--memory=4096 \
--location=/tmp/CentOS-7-x86_64-Minimal-1511.iso \
--disk path=/home/vms/centos78.qcow2,size=40,format=qcow2 \
--network bridge=br0 \
--graphics none \
--extra-args='console=ttyS0' \
--force
# ------------------------
virt-install --virt-type=kvm --name=centos88 --vcpus=2 --memory=4096 --location=/tmp/CentOS-7-x86_64-Minimal-1511.iso --disk path=/home/vms/centos88.qcow2,size=40,format=qcow2 --network bridge=br0 --graphics none --extra-args='console=ttyS0' --force
命令行配置系统
1.带 [!] 基本都是要配置的,按照顺序往下配置,按对用的数字以此进行设置。
2.Timezone settings 时区设置选择 5) Asia亚洲,再选择城市 62) Shanghai上海
3.Installation source 安装源输入数字 2) local ISO file
4.Software selection 软件选择
5.Installation Destination 安装目的地
6.此处也可以只设置 Root 密码和Installation Destination 安装目的地其它进入系统设置比如时区设置如下:
echo "TZ='Asia/Shanghai'; export TZ" >> /etc/profile
连接/退出虚拟机
# 查看虚拟机
virsh list # 查看在运行的虚拟机
virsh list --all # 查看所有虚拟机
Id Name State
----------------------------------------------------
7 centos72 running
# 通过 virsh console <虚拟机名称> 命令来连接虚拟机
virsh console centos72
# 通过vnc连接虚拟机
virsh vncdisplay centos72
5900+:3
# 退出虚拟机
exit # 退出系统到登录界面
Ctrl+5 # 从虚拟机登录页面,退出到宿主机命令行页面
Ctrl+] # 或者下面
配置虚拟机网络
# 设置(替换成自己的ip,记得先自己到宿主机判断对应的内网ip没有被占用)
nmcli c m enp1s0 ipv4.method manual ipv4.address 10.xxx.0.xxx/26 ipv4.gate 10.xxx.0.101
nmcli c m enp1s0 ipv4.dns 114.114.114.114
# 更新&测试
nmcli c up enp1s0
ping 10.xxx.0.xxx
虚拟机状态管理(开关机等)
virsh start centos72 # 虚拟机开启(启动)
virsh reboot centos72 # 虚拟机重新启动
virsh shutdown centos72 # 虚拟机关机
virsh destroy centos72 # 强制关机(强制断电)
virsh suspend centos72 # 暂停(挂起)KVM 虚拟机
virsh resume centos72 # 恢复被挂起的 KVM 虚拟机
virsh undefine centos72 # 该方法只删除配置文件,磁盘文件未删除
virsh autostart centos72 # 随物理机启动而启动(开机启动)
virsh autostart --disable centos72 # 取消标记为自动开始(取消开机启动)
修改虚拟机配置信息
# 静态修改:
直接通过vim命令修改: vim /etc/libvirt/qemu/centos72.xml
通过virsh命令修改: virsh edit centos72
# 动态更改cpu数量和内存大小:
动态调整,如果超过给虚拟机分配的最大内存,需要重启虚拟机。
virsh list --all
# Id 名称 状态
# ----------------------------------------------------
# 2 working112 running
virsh setvcpus working112 --maximum 4 --config # 更改CPU
virsh setmaxmem working112 1048576 --config # 更改内存
virsh dominfo working112 # 查看信息
磁盘挂载与镜像
# 挂载磁盘
创建磁盘: mkdir /home/vms
查看镜像信息:
virt-filesystems --long --parts --blkdevs -h -a working112.qcow2
qemu-img info working112.qcow2
# 给虚拟机镜像添加200G大小,注意需要停止working112虚拟机
qemu-img resize working112.qcow2 +200G
# 首先,我们制作如下所示的磁盘的备份副本。
cp working112.qcow2 working112-orig.qcow2
# 然后我们运行下面的命令来增加 /dev/sda
virt-resize --expand /dev/sda1 working112-orig.qcow2 working112.qcow2
# 查看镜像信息
qemu-img info working112.qcow2
# 进入虚拟机virsh console working112 查看信息:
vgdisplay # 显示卷组大小
lvdisplay # 显示逻辑卷大小
# 卷组大小已增加,下面需要分配容量给逻辑卷
lvextend -L +60G /dev/centos/root
# 还有最后一步,分配好了需要做系统调整
# ext 系统格式使用:
resize2fs /dev/centos/root
# xfs 系统格式使用下面命令
xfs_growfs /dev/centos/root
# 通过镜像创建虚拟机
创建虚拟机镜像文件
# 复制第一次安装的干净系统镜像,作为基础镜像文件,
# 后面创建虚拟机使用这个基础镜像
cp /home/vms/centos.88.qcow2 /home/vms/centos7.base.qcow2
# 使用基础镜像文件,创建新的虚拟机镜像
cp /home/vms/centos7.base.qcow2 /home/vms/centos7.113.qcow2
创建虚拟机配置文件
# 复制第一次安装的干净系统镜像,作为基础配置文件。
virsh dumpxml centos.88 > /home/vms/centos7.base.xml
# 使用基础虚拟机镜像配置文件,创建新的虚拟机配置文件
cp /home/vms/centos7.base.xml /home/vms/centos7.113.xml
# 主要是修改虚拟机文件名,UUID,镜像地址和网卡地址,其中 UUID 在 Linux 下可以使用 uuidgen 命令生成
virsh define /home/vms/centos7.113.xml
qemu介绍
qemu-system-x86_64 -hda mydisk.img -m 1024 -boot c
qemu安装与配置
# 在 CentOS 或 Rocky Linux 上
sudo yum install qemu-kvm qemu-img
# 在 Ubuntu 或 Debian 上
sudo apt-get install qemu-system-x86
# 在 Fedora 上
sudo dnf install qemu-kvm qemu-img
# 在 macOS 上
brew install qemu
# 安装后,验证 qemu-system-x86_64 是否可以被系统找到:
qemu-system-x86_64 --version
# 检查 PATH 环境变量
export PATH=$PATH:/path/to/qemu # 临时添加
echo 'export PATH=$PATH:/usr/local/bin' >> ~/.bashrc # 永久添加
source ~/.bashrc
# 检查是否成功安装(找位置)
sudo find / -name qemu-system-x86_64
locate qemu-system-x86_64
rpm -qa | grep qemu
dpkg -l | grep qemu
yum search qemu
which qemu-system-x86_64
ls -la /usr/bin/qemu-system-x86_64
sudo chmod +x /usr/bin/qemu-system-x86_64
在QEMU中创建镜像文件通常涉及到使用`qemu-img`工具,这是一个命令行实用程序,用于创建、转换和查看QEMU虚拟磁盘镜像。以下是一些基本的`qemu-img`命令,用于创建和管理虚拟磁盘镜像。
1. 创建一个新的空白镜像
qemu-img create -f qcow2 /path/to/new_image.qcow2 20G
这里`-f qcow2`指定了镜像格式为QCOW2,这是一种支持快照和压缩的格式。`20G`是镜像的大小,可以根据需要调整。
2. 从现有的ISO文件创建镜像
qemu-img create -f qcow2 -o file=/path/to/iso_file.iso /path/to/output_image.qcow2
这个命令会从ISO文件创建一个新的QCOW2镜像。
3. 将物理磁盘转换成QEMU镜像
qemu-img convert /dev/sdx -O qcow2 /path/to/image.qcow2
`/dev/sdx`是物理磁盘的设备文件,`-O qcow2`指定输出格式。
4. 调整现有镜像的大小
qemu-img resize /path/to/image.qcow2 +10G
这个命令会增加镜像的大小10G。
5. 查看镜像信息
qemu-img info /path/to/image.qcow2
这个命令会显示镜像的格式、大小、实际使用空间等信息。
6. 克隆现有的镜像
qemu-img clone /path/to/source_image.qcow2 /path/to/cloned_image.qcow2
这个命令会创建一个镜像的完整副本。
7. 压缩QCOW2镜像
qemu-img convert -c /path/to/image.qcow2 -O qcow2 /path/to/compressed_image.qcow2
`-c`选项会在转换过程中压缩镜像。
8. 检查镜像文件的一致性
qemu-img check /path/to/image.qcow2
这个命令会检查镜像文件是否有损坏。
9. 创建一个镜像的快照
qemu-img snapshot -c snapshot_name /path/to/image.qcow2 /path/to/snapshot.qcow2
`-c`选项指定快照名称,`snapshot_name`是快照的标签。
10. 恢复到快照状态
qemu-img snapshot -a snapshot_name /path/to/image.qcow2
`-a`选项用于应用快照。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。