虚拟化技术
本文最后更新于27 天前,其中的信息可能已经过时,如有错误请发送邮件到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. ccc
    Windows Edge
    4 周前
    2024-10-28 18:37:25

发送评论 编辑评论


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