虚拟化技术
本文最后更新于 163 天前,其中的信息可能已经过时,如有错误请发送邮件到 2639131093@qq.com
中文 英文 韩语 日语

这一章内容,是我看书之后的总结,也就是为了博主自己看的,也算是自己的心得吧,真不知道怎么学这个,网上教程也没有,就算有,太杂乱了 = =

虚拟化

定义

虚拟化是一种将物理资源(如计算机硬件、存储设备、网络资源等)抽象为逻辑资源的技术手段;也可以理解为将计算单元在虚拟而不是真实的环境中运行,是一个为了简化管理,优化资源的解决方案。可以提高资源利用率、增强系统的灵活性和可扩展性、提供隔离和安全保障,为现代信息技术的发展提供了重要的支持

分类

桌面虚拟化,应用虚拟化,服务器虚拟化,网络虚拟化

三种网络模式

桥接模式

桥接模式就是将主机网卡和虚拟机的虚拟网卡,利用虚拟桥接进行通信。

两者能够相互 ping 通,理论上能够 ping 外网

能够 ping 外网需要配置虚拟机和主机在同一网段,dns, 网关一致

学校内网好像不行,和老师讨论了下,应该是用户权限,或者是学校网络做了相关权限的控制

nat 模式

nat 模式,是主机网卡直接与虚拟 nat 设备相连,nat 直接使用主机网卡分配的 ip,能够 ping 通外网,两者能够相互 ping 通。

理论上 nat 模式下,nat 网络能够 ping 通桥接,仅主机模式网络,但是反过来不行。因为在 nat 模式下,可以将主机网卡看作一台路由器,这台路由器为 nat 虚拟机提供网络转换服务,使得 nat 网络能和主机 ping 通,能够连接外网,当需要连接桥接,仅主机 ip 的时候,会转换至相应模式 ip,所以 nat 模式能够 ping 仅主机,桥接模式 ip。反过来,由于仅主机,桥接模式的原理,无法转换网络 ip,所以无法 ping 至 nat 网络,仅主机,桥接之间也无法互相 ping 通。

手机热点的原理与之类似,当你手机开启热点的时候,你的手机就类似一个路由器,具有网络转换功能,其实每个人的手机都有属于自己的 ip 地址,当你连接热点的时候,手机路由器将你的私有 ip 转换至能够连接外部网络的 ip。

仅主机模式

仅主机模式下,虚拟机只能与主机进行通信,不能直接访问外部网络。虚拟机和主机之间形成一个封闭的网络环境

所以仅主机最好理解,只能和处于主机网段下的 ip 互 ping

kvm 虚拟化技术

kvm

基本概念

KVM 的全称是 kernel-Based Virtual Machine ,KVM 是基于 linux 内核实现的

KVM 的核心模块 ——KVM.Ko,只用于管理虚拟 CPU 和内存

I/O 的虚拟化 (如存储和网络设备),由 llinux 内核和 Qemu 来实现

KVM 框架

KVM 核心模块:包括 KVM 虚拟化核心模块 KVM.Ko,硬件相关的有 KVM.intel 与 KVM_AMD 模块

简而言之 kvm 负责提供对 CPU, 内存的虚拟化

Qemu 设备模拟:Qemu 是用户态工具,可以为客户机提供设备模拟的功能,包括 BIOS,数据总线,磁盘,网卡,显卡,声卡,键盘,鼠标等

简而言之 Qemu 负责除 CPU 和内存外的其他设备的虚拟化以及各种虚拟化设备的创建与调用

kvm 安装

关闭 firewalld,关闭 selinux,然后重启

建立挂载目录 kvm,挂载本地 yum 源,配置本地 yum 源,清缓存,建立缓存

安装 libvirt,qemu-kvm openssl

开启 libvirtd 服务

systemctl start libvirtd
systemctl enable libvirtd

列出当前虚拟机列表状态

virsh -c qemu:///system list

查看 virsh 版本

virsh -version

配置 kvm 虚拟机 nat 网络

配置 kvm,cirros 源 iso,nat 模式

上传 iso 镜像源到虚拟机中

上传 cirros 源到虚拟机 /root 下,作为启动源

添加 kvm 环境变量

创建 nat 脚本

#!/bin/bash
# qemu-ifup-nat script for QEMU/KVM with NAT netowrk mode
# set your bridge name
BRIDGE=virbr0
# Network information
NETWORK=192.168.122.0
NETMASK=255.255.255.0
# GATEWAY for internal guests is the bridge in host
GATEWAY=192.168.122.1
DHCPRANGE=192.168.122.2,192.168.122.254
# Optionally parameters to enable PXE support
TFTPROOT=
BOOTP=
function check_bridge()
{
if brctl show | grep "^$BRIDGE" &> /dev/null; then
return 1
else
return 0
fi
}
function create_bridge()
{
brctl addbr "$BRIDGE"
brctl stp "$BRIDGE" on
brctl setfd "$BRIDGE" 0
ifconfig "$BRIDGE" "$GATEWAY" netmask "$NETMASK" up
}
function enable_ip_forward()
{
echo 1 > /proc/sys/net/ipv4/ip_forward
}
function add_filter_rules()
{
iptables -t nat -A POSTROUTING -s "$NETWORK"/"$NETMASK" \
! -d "$NETWORK"/"$NETMASK" -j MASQUERADE
}
function start_dnsmasq()
{
# don't run dnsmasq repeatedly
ps -ef | grep "dnsmasq" | grep -v "grep" &> /dev/null
if [ $? -eq 0 ]; then
echo "Warning:dnsmasq is already running. No need to run it again."
return 1
fi
dnsmasq \
--strict-order \
--except-interface=lo \
--interface=$BRIDGE \
--listen-address=$GATEWAY \
--bind-interfaces \
--dhcp-range=$DHCPRANGE \
--conf-file="" \
--pid-file=/var/run/qemu-dnsmasq-$BRIDGE.pid \
--dhcp-leasefile=/var/run/qemu-dnsmasq-$BRIDGE.leases \
--dhcp-no-override \
${TFTPROOT:+"--enable-tftp"} \
${TFTPROOT:+"--tftp-root=$TFTPROOT"} \
${BOOTP:+"--dhcp-boot=$BOOTP"}
}
function setup_bridge_nat()
{
check_bridge "$BRIDGE"
if [ $? -eq 0 ]; then
create_bridge
fi
enable_ip_forward
add_filter_rules "$BRIDGE"
start_dnsmasq "$BRIDGE"
}
# need to check $1 arg before setup
if [ -n "$1" ]; then
setup_bridge_nat
ifconfig "$1" 0.0.0.0 up
brctl addif "$BRIDGE" "$1"
exit 0
else
echo "Error: no interface specified."
exit 1
fi

添加权限

运行脚本

qemu-kvm -m 1024 -drive file=cirros-0.6.1-x86_64-disk.img,if=virtio -net nic,model=virtio -net tap,script=/etc/qemu-ifup-NAT -nographic -vnc :1

查看 ip

查看 kvm 虚拟机网络

配置 kvm 虚拟机桥接网络

上传 iso 镜像源到虚拟机中

添加 kvm 环境变量

创建 桥接 脚本

#!/bin/bash
switch=br0
if [ -n "$1" ]; then
ifconfig $1 up
sleep 1
brctl addif $switch $1
exit 0
else
echo 'error'
exit 1
fi

添加权限

创建 bridge

创建桥接,使网卡 br0 绑定网卡 ens33

编辑 ens33

编辑 br0

运行脚本

查看 ip ping 外网

查看网卡桥接

kvm 中的 openstack (国赛内容)

使用 centos 7 dvd 2009

chinaskills _cloud_iaas_v2.0.3.iso

就是脚本搭建 openstack 基础平台

网络配置

节点网络
controller192.32.61.100
192.32.62.100
compute192.32.61.101
192.32.62.101
61 为仅主机 62 为 nat

创建分区

在 compute 节点下

首先添加一块硬盘,书上给的 5G

依次输入:

parted /dev/sdb

mklabel gpt

mkpart cinder 0G 1.5G

mkpart swift 1.5G 3G

p

yum 源配置

controller 节点

[centos]
name=centos
baseurl=file:///opt/centos
gpgcheck=0
enabled=1
[iaas]
name=iaas
baseurl=file:///opt/iaas-repo
gpgcheck=0
enabled=1
~

compute 节点

镜像挂载,只需在 controller,将 chinaskill_cloud_iaas_2.0.3iso 文件上传

如果没有使用 CentOS-7-X86_64-DVD-1804.iso 镜像也需要上传,若是该镜像直接挂载 media

首先挂载 CentOS-7-X86_64-DVD-1804.iso, 这里显示以磁盘为引导盘方式

mount /dev/sr0 /mnt/ 将 sr0 内 的内容挂载到 mnt 下

cp -rvf /mnt/* /opt/centos 递归复制 mnt 下的所有内容到 centos 下

复制完了后取消挂载

mount -o loop chinaskills_cloud_iaas_v2.0.3.iso/mnt/ 以 loop 方式挂载到 mnt 下

递归复制

查看 iso 源,取消挂载

ftp 服务器搭建

使用共享服务器共享源文件给 compute,减少内存消耗

下载 vsftpd

配置文件最后一行添加 anon_root=/opt/

设置开机自启

配置防火墙和 selinux

两个节点都需要

controller

selinux

防火墙

移除网络,防火墙组建

下载 iptables 防火墙

设置开机自启

iptables -F 清空(flush)所有规则链中的规则

iptables -X 删除(delete)用户自定义的链

iptables -Z 将计数器清零(zero)

compute 节点一样配置

源检测

controller

compute

安装组件环境变量

controller 和 compute 都需要

yum -y install openstack-iaas -y

下载完后,由于本地 openstack 源已经死了,所以换成在线源,前提是 openstack-iaas 已经下载

[base]
name=base
baseurl=http://repo.huaweicloud.com/centos/7/os/x86_64/
enable=1
gpgcheck=0
[extras]
name=extras
baseurl=http://repo.huaweicloud.com/centos/7/extras/x86_64/
enable=1
gpgcheck=0
[updates]
name=updates
baseurl=http://repo.huaweicloud.com/centos/7/updates/x86_64/
enable=1
gpgcheck=0
[train]
name=train
baseurl=http://repo.huaweicloud.com/centos/7/cloud/x86_64/openstack-train/
enable=1
gpgcheck=0
[virt]
name=virt
baseurl=http://repo.huaweicloud.com/centos/7/virt/x86_64/kvm-common/
enable=1
gpgcheck=0

内核升级

yum -y upgrade

具体配置参数

[root@controller ~]# cat /etc/openstack/openrc.sh | grep -v '#'
HOST_IP=192.32.61.100 控制节点节点ip
HOST_PASS=000000 控制节点密码
HOST_NAME=controller 控制节点名称
HOST_IP_NODE=192.32.61.101 计算节点ip
HOST_PASS_NODE=000000 计算节点密码
HOST_NAME_NODE=compute 计算节点名称
network_segment_IP=192.32.62.0/24 时间同步 网段
RABBIT_USER=openstack 消息队列用户名
RABBIT_PASS=000000 消息队列密码
DB_PASS=000000 数据库密码
DOMAIN_NAME=demo keystone相关 指定域名
ADMIN_PASS=000000 指定管理员密码
DEMO_PASS=000000 域下用户密码
KEYSTONE_DBPASS=000000 keystone数据库密码
GLANCE_DBPASS=000000 镜像组建数据库密码
GLANCE_PASS=000000 与认证组建交互密码
PLACEMENT_DBPASS=000000 放置组建数据库密码
PLACEMENT_PASS=000000 与认证组建交互密码
NOVA_DBPASS=000000 nova数据库密码
NOVA_PASS=000000 与认证组建交互密码
NEUTRON_DBPASS=000000 网络组建数据库密码
NEUTRON_PASS=000000 网络组建于认证组建交互密码
METADATA_SECRET=000000 元数据库密码
INTERFACE_NAME=ens33 对外网络名称
Physical_NAME=provider 外部网络物理适配器
minvlan=1 VLAN 网络中第一个 VLAN ID 的起始值
maxvlan=1000 VLAN 网络最大 VLAN ID 的起始值
CINDER_DBPASS=000000 卷组建数据库密码
CINDER_PASS=000000 与认证组建交互密码
BLOCK_DISK=sdb1 块存储磁盘
SWIFT_PASS=000000 swift用户密码
OBJECT_DISK=sdb2 swift节点对象磁盘
STORAGE_LOCAL_NET_IP=192.32.61.101 指定 Swift 存储网络的节点 IP 地

主机映射

两个节点都需要

路由设置

这个适用于命令行模式下,两个节点都需要

因为安装 openstack-iaas 以及基础脚本后,默认以仅主机为路由,而 centos7 的源关了,无法使用本地源,所以要使用在线源,我们更改默认路由让其能 ping 外网

显示当前默认路由

route -n

可见当前是以 ens36,即仅主机网关默认,无法 ping 外网,所以我们要删除,然后使用 ens33 nat 的网关网络

删除默认路由,即第一个

route del default gw 网关

添加新的默认路由

route add default gw 网关 dev 网卡名

openstack 部署

采用分脚本进行,熟悉 openstack 组建很容易

双节点运行 iaas-pre-host.sh

首先基础脚本,controller 和 compute 都需要

iaas-pre-host.sh

出现下图重启

在 controller 节点运行 iaas-install-mysql.sh 脚本

此脚本是所有基础环境脚本

iaas-install-mysql.sh

部署 Keystone 服务脚本

在 controller 节点执行脚本部署 keystone 服务

iaas-install-keystone.sh

部署 glance 服务脚本

在 controller 节点执行脚本部署 Glance 服务

iaas-install-glance.sh

部署 placement 服务脚本

在 controller 节点执行脚本部署 placement 服务

iaas-install-placement.sh

部署 Nova 服务脚本

controller 节点

iaas-install-nova-controller.sh

compute 节点

iaas-install-nova-compute.sh

部署 Neturon 服务脚本

在 controller 节点执行脚本部署 Neutron 组件的控制服务

iaas-install-neutron-controller.sh

在 compute 节点执行脚本部署 Neutron 组件的计算服务

iaas-install-neutron-compute.sh

部署 dashboard 服务脚本

在 controller 节点执行脚本部署 Dashboard 组件服务

iaas-install-dashboard.sh

正常情况

部署 cinder 服务脚本

在 controller 节点执行脚本部署 Cinder 组件的控制服务

iaas-install-cinder-controller.sh

controller 节点脚本执行完成后,在 compute 节点执行脚本部署 Cinder 组件的计算服务

iaas-install-cinder-compute.sh

部署 swift 服务脚本

在 controller 节点执行脚本部署 Swift 组件的控制服务

iaas-install-swift-controller.sh

controller 节点脚本执行完成后,在 compute 节点执行脚本部署 Swift 组件的计算服务

iaas-install-swift-compute.sh

基于块存储的操作系统安装

创建磁盘,存放虚拟机操作系统

语法

qemu-img create -f 磁盘类型 名称 大小 ##创建
qemu-img info 名称 ##查看参数

添加环境变量

ln /usr/libexec/qemu-kvm /usr/bin/

vnc 服务配置

虚拟机端下载 vnc 服务

yum install tigervnc tigervnc-server.x86_64 -y

设置 vnc 密码

关闭防火墙

客户端登录

在主机上使用 realvnc viewer

登录 ip + 5901 端口,登录时候密码为设置的 vncserver 密码

画质过低时选择此处

安装系统

命令:

qemu-kvm -m 1024 -smp 1 -name test -hda 磁盘名称 -cdrom iso光盘名称

在主机服务端输入:

vncviewer :5900

在下次进去时,直接输入 vncviewer :5900,在 virt-manager 是没有显示的


虚拟机迁移

静态迁移

确保两台虚拟机互通

kvm01 : 192.32.62.143

kvm02:192.32.62.145

虚拟机迁移

将源虚拟机的要迁移的虚拟机配置文件和磁盘文件迁移到目的虚拟机,要确保目的虚拟机没有对应的虚拟机包括其磁盘

虚拟机配置文件迁移,首先找寻其位置

动态迁移

三台虚拟机互通

kvm01 192.32.62.143

kvm02 192.32.62.146

kvm03 192.32.62.147

前置准备

关闭防火墙,selinux,三台虚拟机都需要,这里演示共享服务器 kvm03

主机映射

在 kvm01 上映射 kvm01,kvm02 主机信息,即源主机和宿主机

共享服务准备

kvm03 作为共享服务器,下载 rpcbind 以及 nfs 服务

建立共享目录

在 kvm03 上建立共享目录,并赋权

修改 nfs 服务配置文件

服务启动,nfs,rpcbind

在源宿主机 (kvm01) 和目的宿主机 (kvm02) 上创建共享文件夹,并赋予权限

挂载共享目录

kvm01,kvm02 都需要,挂载成功与否桌面会显示挂载文件夹

目的宿主机创建壳 (磁盘)

源主机动态迁移

需要确保要迁移的虚拟机是开启状态

virsh migrate --live --verbose centos7.0 qemu+ssh://目的宿主机ip/system tcp://目的宿主机ip

说是动态迁移。。感觉更像映射,因为虚拟机还是再 kvm01 上,对 kvm02 上虚拟机做操作是直接影响 kvm01 对应虚拟机上,而且 kvm02 上创的壳并没有太大内存波动,完全是缓存使用内存

文末附加内容

评论

  1. c
    ccc
    Windows Edge
    2024-10-28
    2024-10-28 18:37:25

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
🧟 AI 助手
欢迎阅读「 虚拟化技术 – cuo的小窝 」