这一章内容,是我看书之后的总结,也就是为了博主自己看的,也算是自己的心得吧,真不知道怎么学这个,网上教程也没有,就算有,太杂乱了= =
虚拟化
定义
虚拟化是一种将物理资源(如计算机硬件、存储设备、网络资源等)抽象为逻辑资源的技术手段;也可以理解为将计算单元在虚拟而不是真实的环境中运行,是一个为了简化管理,优化资源的解决方案。可以提高资源利用率、增强系统的灵活性和可扩展性、提供隔离和安全保障,为现代信息技术的发展提供了重要的支持
分类
桌面虚拟化,应用虚拟化,服务器虚拟化,网络虚拟化
三种网络模式
桥接模式
桥接模式就是将主机网卡和虚拟机的虚拟网卡,利用虚拟桥接进行通信。
两者能够相互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基础平台
网络配置
节点 | 网络 |
controller | 192.32.61.100 |
192.32.62.100 | |
compute | 192.32.61.101 |
192.32.62.101 |
创建分区
在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上创的壳并没有太大内存波动,完全是缓存使用内存
https://blog.csdn.net/weixin_53466908/article/details/122591179