本文主要是介绍KVM详解-WEB管理界面及安装win2016,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- KVM的简介
- KVM简介
- 2 关于virtual machine manager的介绍
- 二、安装及环境的部署
- 1.安装时系统要求
- 3.安装KVM虚拟化软件
- kvm部署
- kvm安装
- 启动服务
- 验证安装结果
- 测试并验证安装结果
- 查看网桥信息
- kvm web管理界面-WebVirtMgr安装
- 安装依赖包
- 从github上下载webvirtmgr代码
- 安装webvirtmgr
- 检查sqlite3是否安装
- 初始化帐号信息
- 设备Nninx
- 拷贝web网页至指定目录
- 生成密钥
- 端口转发
- 配置nginx
- 设置supervisor
- 报错 : accept() failed (24: Too many open files)
- KVM WEB界面管理
- kvm存储管理
- 先创建ISO镜像系统的存储池
- 注意:这个目录和镜像的权限都要是777,没改就没法克隆 再看看WEB界面   
- 添加镜像
- kvm网络管理
- 实例管理----创建虚机
- 在这里插入图片描述 
- 安装noVNC
- 启动服务,新建一个VNC链接:
- 安装noVNC
- 运行noVNC
- 再次回到KVM管理界面,启动镜像
- 克隆虚机
- 虚机磁盘扩容-新增磁盘
- 创建虚机快照
- 创建Win2016 实例
- virtio-win驱动
- 命令行管理KVM
- 一、虚拟机的存储池
- 定义存储池
- 启动存储池
- 使用 virsh pool-create-as 命令创建临时性存储池。
- 删除存储池
- 更多的存储池、存储卷操作
- 二、虚拟机快照
- 2 给指定虚拟机创建快照
- 3 查看快照
- 4 恢复快照
- 5 删除快照
- 三、虚拟机网络
- 1 查询虚拟网桥
- 2 查看网络接口信息
- 3设置桥接网络
- 安装虚拟机
- centos7虚拟机
- win7虚拟机
- 虚拟机常用操作
- 虚拟机改固定IP
- 显示虚拟机列表
- 开关机、删除
- 查看某个虚拟机对应的VNC端口
- 重命名
- 挂起&恢复
- 开机启动
- 完整克隆
- 手动克隆
- 导出、导入虚拟机
- 加硬盘和扩容
- 扩容
- KVM热迁移
- 热迁移操作
- 安装NFS
- 故障问题
- VNC连接linux进桌面进行热迁移
KVM的简介
KVM简介
KVM(用于基于内核的虚拟机)是用于 x86 硬件上的 Linux 的完整虚拟化解决方案,包含虚拟化扩展(Intel VT 或 AMD-V)。它由一个可加载的内核模块 kvm.ko 和一个处理器特定模块 kvm-intel.ko 或 kvm-amd.ko 组成,该模块提供核心虚拟化基础设施。
使用 KVM,可以运行多个运行未修改的 Linux 或 Windows 映像的虚拟机。每个虚拟机都有私有的虚拟化硬件:网卡、磁盘、图形适配器等。
KVM 是开源软件。从 2.6.20 开始,KVM 的内核组件包含在主线 Linux 中。从 1.3 开始,KVM 的用户空间组件包含在主线 QEMU 中。
1.KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。
2.是x86架构且硬件支持虚拟化技术的Linux全虚拟化解决方案。
3.它包含一个为处理器提供底层虚拟化,可加载的核心模块kvm.ko。
4.kvm还需要一个经过修改的QEMU软件,作为虚拟机上层控制和界面。
5.kvm能在不改变Linux或Windows镜像的情况下同时运行多个虚拟机(即多个虚拟机使用同一镜像),并为每个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器等),同时kvm还能够使用KSM技术帮助宿主服务器节约内存。
2 关于virtual machine manager的介绍
红帽的virtual machine manager是一个虚拟机管理员,可以让用户管理多个虚拟机。
基于内核的虚拟机libvirt和virtual machine manager。
virtual machine manager可以让用户:1.创建、编辑、引导或停止虚拟机
2.查看并控制每个虚拟机的控制台
3.查看每个虚拟机的性能以及使用率
4.查看每个正在运行中的虚拟机以及主控制端的即时性能及使用率信息
5.不论是在本机或远程,皆可使用kvm、Xen、QEMU
二、安装及环境的部署
1.安装时系统要求
Host system requirements• One core or thread for each virtualized CPU and one for the host. • 2 GB of RAM, plus additional RAM for virtual machines. • 6 GB disk space for the host, plus the required disk space for the virtual machine(s). KVM hypervisor requirements # lscpu
Virtualization: VT-x
# egrep 'svm|vmx' /proc/cpuinfo
Intel CPU: VT-x
AMD CPU: AMD -V
BIOS Enable Virtualization
2、嵌套虚拟化
先用虚拟机,然后再在虚拟机里使用虚拟化,这就是嵌套虚拟化。
VMware 嵌套虚拟化
产品:Workstation、player、ESXi
支持:ESXi、Hyper-V、KVM、Xen
3.安装KVM虚拟化软件
在VM虚拟机配置时 处理器这边要选上虚拟化
开启虚拟机,开始安装过程。
centOS 7最小化安装
kvm部署
部署前请确保你的CPU虚拟化功能已开启。分为两种情况:
虚拟机要关机设置CPU虚拟化
物理机要在BIOS里开启CPU虚拟化
安装KVM前,还需要具备相应的条件:
验证CPU是否支持KVM;如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的
# egrep -o 'vmx|svm' /proc/cpuinfovmxvmxvmxvmx
# lsmod | grep kvm
关闭防火墙与selinux
# systemctl stop firewalld
# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
# setenforce 0
# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
配置网络源
\\最小化安装可能网络还没启用,先用nmtui启用网络
# nmcli device status
# nmtui # curl -o /etc/yum.repos.d/CentOS7-Base-163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
# sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-163.repo
# sed -i 's/^enabled=.*/enabled=1/g' /etc/yum.repos.d/CentOS7-Base-163.repo
# yum -y install epel-release vim wget net-tools unzip zip gcc gcc-c++ lrzsz
kvm安装
# yum -y install qemu-kvm qemu-kvm-tools qemu-img libvirt libvirt-python libvirt-client virt-manager virt-install virt-viewer bridge-utils libguestfs-tools//安装过程省略......
其中:
libvirt #虚拟机管理
virt #虚拟机安装克隆
qemu-kvm #管理虚拟机磁盘
因为虚拟机中网络,我们一般都是和公司的其他服务器是同一个网段,所以我们需要把 KVM服务器的网卡配置成桥接模式。这样的话KVM的虚拟机就可以通过该桥接网卡和公司内部 其他服务器处于同一网段
这里网卡是ens33,所以用br0来桥接ens33网卡
//新建br0
# vim /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
DEVICE=br0
NM_CONTROLLED=no
BOOTPROTO=static
NAME=br0
ONBOOT=yes
IPADDR=192.168.118.128
NETMASK=255.255.255.0
GATEWAY=192.168.118.2
DNS1=8.8.8.8# vim /etc/sysconfig/network-scripts/ifcfg-ens33
\\注释掉IPv4和IPv6、UUID等
TYPE=Ethernet
##PROXY_METHOD=none
##BROWSER_ONLY=no
BOOTPROTO=static
##DEFROUTE=yes
##IPV4_FAILURE_FATAL=no
##IPV6INIT=yes
##IPV6_AUTOCONF=yes
##IPV6_DEFROUTE=yes
##IPV6_FAILURE_FATAL=no
##IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
##UUID=c32fb339-09d4-4f69-b6f4-cb78dd1c819e
DEVICE=ens33
ONBOOT=yes\\新增
BRIDGE=br0
NM_CONTROLLED=no
# systemctl restart network
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000link/ether 00:0c:29:ab:f5:e4 brd ff:ff:ff:ff:ff:ffinet6 fe80::20c:29ff:feab:f5e4/64 scope link valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 00:0c:29:ab:f5:e4 brd ff:ff:ff:ff:ff:ffinet 192.168.118.128/24 brd 192.168.118.255 scope global br0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:feab:f5e4/64 scope link valid_lft forever preferred_lft forever
启动服务
# systemctl start libvirtd
# systemctl enable libvirtd
验证安装结果
# lsmod | grep kvm
kvm_intel 188740 0
kvm 637289 1 kvm_intel
irqbypass 13503 1 kvm
测试并验证安装结果
# virsh --version
4.5.0
# virt-install --version
1.5.0
# ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm //映射文件到bin下
# ll /usr/bin/qemu-kvm
lrwxrwxrwx 1 root root 21 5月 31 15:09 /usr/bin/qemu-kvm -> /usr/libexec/qemu-kvm
查看网桥信息
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29abf5e4 no ens33
virbr0 8000.5254000e4000 yes virbr0-nic
kvm web管理界面-WebVirtMgr安装
kvm 的 web 管理界面是由 webvirtmgr 程序提供的。
安装python需求并设置Django环境
安装依赖包
# yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor nginx python-devel
//升级pip
# pip install --upgrade pip
从github上下载webvirtmgr代码
注意,Git 经常会有不好连接的情况,可以把地址前的 git 更换成 https 试下
# cd /usr/local/src/
# git clone git://github.com/retspen/webvirtmgr.git
正克隆到 'webvirtmgr'...
fatal: unable to connect to github.com:
github.com[0: 20.205.243.166]: errno=????# git clone https://github.com/retspen/webvirtmgr.git
正克隆到 'webvirtmgr'...
remote: Enumerating objects: 5614, done.
remote: Total 5614 (delta 0), reused 0 (delta 0), pack-reused 5614
接收对象中: 100% (5614/5614), 2.97 MiB | 520.00 KiB/s, done.
处理 delta 中: 100% (3606/3606), done.
安装webvirtmgr
# cd webvirtmgr/
# pip install -r requirements.txt
。。。。
Successfully installed django-1.5.5 gunicorn-19.5.0 lockfile-0.12.2
You are using pip version 8.1.2, however version 22.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
检查sqlite3是否安装
# python
Python 2.7.5 (default, Nov 16 2020, 22:23:17)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> exit()
初始化帐号信息
# python manage.py syncdb
WARNING:root:No local_settings file found.
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table servers_compute
Creating table instance_instance
Creating table create_flavorYou just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes //问你是否创建超级管理员帐号
Username (leave blank to use 'root'): //指定超级管理员用户名,默认为root
Email address: 3683885@qq.com //设置超级管理员邮箱
Password: //设置超级管理员密码
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 6 object(s) from 1 fixture(s)
官网上还有一步??先不设置
$ . manage.py collectstatic
设备Nninx
警告:通常 WebVirtMgr 只能从 localhost 的 8000 端口访问。此步骤将使 WebVirtMgr 对端口 80 上的每个人都可用。Web 界面也不受保护(没有 https),这意味着您和服务器之间的每个人(同一wifi、您的本地路由器、您的提供商、服务器提供商、主干网等)可以以明文形式查看您的登录凭据!
相反,您也可以完全跳过此步骤 + 卸载 nginx。只需通过 SSH 将端口 8000 重定向到本地计算机即可。这更安全,因为 WebVirtMgr 不再对公众开放,您只能通过加密连接访问它。
拷贝web网页至指定目录
# mkdir /var/www
# cp -r /usr/local/src/webvirtmgr/ /var/www
# chown -R nginx:nginx /var/www/webvirtmgr/
生成密钥
# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:mQheT6e4vc/QPifjnhgxKsNCnl/j2DiZHC/nyakMcTg root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| |
| |
| . . . . |
| o o = = |
| E o o S |
| o *. + + |
| =.+== + . |
| =*Xo+ B+.. |
| **B o+B= |
+----[SHA256]-----+
由于这里webvirtmgr和kvm服务部署在同一台机器,所以这里本地信任。如果kvm部署在其他机器,那么这个是它的ip
# ssh-copy-id 192.168.118.128
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.118.128 (192.168.118.128)' can't be established.
ECDSA key fingerprint is SHA256:dc2pPFqmpCMJLPEWQe23RN/YafBWsDQXcDcd2JJ+4xs.
ECDSA key fingerprint is MD5:05:77:0b:d1:a0:fa:32:25:3c:c2:fa:8c:a8:bd:33:1b.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.118.128's password: Number of key(s) added: 1Now try logging into the machine, with: "ssh '192.168.118.128'"
and check to make sure that only the key(s) you wanted were added.
端口转发
例子:
$ ssh user@server:port -L localhost:8000:localhost:8000 -L localhost:6080:localhost:6080
# ssh 192.168.118.128 -L localhost:8000:localhost:8000 -L localhost:6080:localhost:6080
Last login: Tue May 31 11:04:35 2022 from 192.168.118.1# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 127.0.0.1:6080 *:*
LISTEN 0 128 127.0.0.1:8000 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
LISTEN 0 128 [::1]:6080 [::]:*
LISTEN 0 128 [::1]:8000 [::]:*
配置nginx
# vim /etc/nginx/nginx.conf
对server部分进行修改
--------------server {listen 80;listen [::]:80;server_name _;root /usr/share/nginx/html;# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
------------
改成
----------server {listen 80;
## listen [::]:80;server_name localhost;
## root /usr/share/nginx/html;location / {root html;index index.html index.htm;}# Load configuration files for the default server block.include /etc/nginx/default.d/*.conf;error_page 404 /404.html;location = /404.html {}error_page 500 502 503 504 /50x.html;location = /50x.html {}}
------------
改成
----------
# server {
# listen 80 default_server;
# server_name localhost;
# root /usr/share/nginx/html;
#
# #charset koi8-r;
#
# #access_log /var/log/nginx/host.access.log main;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# # redirect server error pages to the static page /40x.html
# #
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# # redirect server error pages to the static page /50x.html
# #
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
在/etc/nginx/conf.d中添加文件 webvirtmgr.conf
# vim /etc/nginx/conf.d/webvirtmgr.conf
server {listen 80 default_server;server_name $hostname;#access_log /var/log/nginx/webvirtmgr_access_log; location /static/ {root /var/www/webvirtmgr/webvirtmgr; # or /srv instead of /varexpires max;}
//官网上这段不能要,不然启动后,界面显示不正常
# location ~ .*\.(js|css)$ {
# proxy_pass http://127.0.0.1:8000;
# }location / {proxy_pass http://127.0.0.1:8000;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;proxy_set_header Host $host:$server_port;proxy_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 600;proxy_read_timeout 600;proxy_send_timeout 600;client_max_body_size 1024M; # Set higher depending on your needs }
}
确保bind绑定的是本机的8000端口
基本不用改动
# vim /var/www/webvirtmgr/conf/gunicorn.conf.py.....bind = '127.0.0.1:8000' //确保此处绑定的是本机的8000端口,这个在nginx配置中定义了,被代理的端口backlog = 2048.....
重启nginx
# systemctl restart nginx
# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 127.0.0.1:6080 *:*
LISTEN 0 128 127.0.0.1:8000 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
LISTEN 0 128 [::1]:6080 [::]:*
LISTEN 0 128 [::1]:8000 [::]:*
更新 SELinux 政策使其成为永久服务
# /usr/sbin/setsebool httpd_can_network_connect true
# chkconfig supervisord on
设置supervisor
vim /etc/supervisord.conf
在文件最后加上以下内容
[program:webvirtmgr]
command=/usr/bin/python /var/www/webvirtmgr/manage.py run_gunicorn -c /var/www/webvirtmgr/conf/gunicorn.conf.py
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
logfile=/var/log/supervisor/webvirtmgr.log
log_stderr=true
user=nginx[program:webvirtmgr-console]
command=/usr/bin/python /var/www/webvirtmgr/console/webvirtmgr-console
directory=/var/www/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=nginx
启动supervisor并设置开机自动启动
# systemctl start supervisord
# systemctl enable supervisord
# systemctl status supervisord# ss -antl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:80 *:*
LISTEN 0 5 192.168.122.1:53 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 127.0.0.1:6080 *:*
LISTEN 0 128 127.0.0.1:8000 *:*
LISTEN 0 128 [::]:22 [::]:*
LISTEN 0 100 [::1]:25 [::]:*
LISTEN 0 128 [::1]:6080 [::]:*
LISTEN 0 128 [::1]:8000 [::]:*
配置nginx用户
//未创建nginx用户,所以用su命令赋予它交互式登录的权限
[root@localhost ~]# su - nginx -s /bin/bash
-bash-4.2$ ssh-keygen -t rsa
//全部保持默认,回车即可,密码除外(也回车了)。
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/nginx/.ssh/id_rsa):
Created directory '/var/lib/nginx/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/lib/nginx/.ssh/id_rsa.
Your public key has been saved in /var/lib/nginx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:z3yKKKZStQL+SBKUe4nKVBIaJEuAu/y5OC1Lrnh8Cto nginx@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|B+o |
|=* . |
|+.= . |
|++ o. |
|*+.. . S |
|+=o . + |
|++=.. + . |
|**+=+ . . o |
|=*E*... . . |
+----[SHA256]-----+-bash-4.2$ touch ~/.ssh/config && echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config
-bash-4.2$ chmod 0600 ~/.ssh/config
-bash-4.2$ ssh-copy-id root@192.168.118.128
/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/var/lib/nginx/.ssh/id_rsa.pub"
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Warning: Permanently added '192.168.118.128' (ECDSA) to the list of known hosts.
root@192.168.118.128's password: Number of key(s) added: 1Now try logging into the machine, with: "ssh 'root@192.168.118.128'"
and check to make sure that only the key(s) you wanted were added.-bash-4.2$ exit
登出[root@localhost ~]# vim /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla[Remote libvirt SSH access]
Identity=unix-user:root
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes
# chown -R root.root /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
# systemctl restart nginx
# systemctl restart libvirtdsystemctl stop nginx
systemctl stop libvirtdsystemctl status nginx
报错 : accept() failed (24: Too many open files)
使用nginx作为web服务,访问的时候报错
解决办法:永久生效方法:
修改/etc/security/limits.conf,在文件底部添加:
* soft nofile 655360
* hard nofile 655360星号代表全局, soft为软件,hard为硬件,nofile为这里指可打开文件数。另外,要使limits.conf文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中。
查看 /etc/pam.d/login 文件中有:session required /lib/security/pam_limits.so这样,问题就迎刃而解了!
KVM WEB界面管理
通过ip地址在浏览器上访问kvm,例如我这里就是:http://http://192.168.118.128/
此处的用户为:root
密码为:执行python manage syncdb时设置的超级管理员密码
此处的Label要与下面的FQDN / IP一致!
kvm存储管理
创建存储
先创建ISO镜像系统的存储池
添加一个100G的磁盘,分区后挂截/data
如要删除可以在状态这边选停掉再删
池路径 /var/lib/libvirt/images:磁盘镜像ISO文件存储的位置
可以通过远程连接软件上传ISO镜像文件至存储目录/var/lib/libvirt/images/
可以用 SecureCRT中的 SFTP传输方式
上传后
[root@localhost webvirtmgr]# cd /var/lib/libvirt/images/
[root@localhost images]# ll
总用量 4167040
-rw-r--r-- 1 root root 4267048960 7月 8 2011 ASUS_WIN7_SP1_9in1.iso
# chmod -R 777 /var/lib/libvirt/images/
# ll
总用量 4167040
-rwxrwxrwx 1 root root 4267048960 7月 8 2011 ASUS_WIN7_SP1_9in1.iso
注意:这个目录和镜像的权限都要是777,没改就没法克隆
再看看WEB界面



添加镜像
kvm网络管理
实例管理----创建虚机
这两个进都是一样界面
虚似机 接入ISO 光盘
设置在Web上访问 虚拟机的密码
启动虚拟机
故障: 无法显示启动界面
解决方法:是安装novnc并通过novnc_server启动一个vnc
安装好noVNC后,添加到系统启动时运行:
[root@localhost ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 5月 31 17:16 /etc/rc.local -> rc.d/rc.local
//这里可以看到是2个链接的文件,随便改一个就可以
[root@localhost ~]# vim /etc/rc.local
//最后面添加如下信息
/root/utils/novnc_proxy --vnc localhost:5901--------
安装noVNC
安装依赖软件包
# yum install -y epel*
# yum install -y git
# yum install -y tigervnc-server
使用前请确认关闭防火墙了
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
启动服务,新建一个VNC链接:
# vncserver :1
或You will require a password to access your desktops.需要密码才能访问桌面。Password:
Verify:
Would you like to enter a view-only password (y/n)? y
Password:
Verify:New 'localhost.localdomain:1 (root)' desktop is localhost.localdomain:1Creating default startup script /root/.vnc/xstartup
Creating default config /root/.vnc/config
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/localhost.localdomain:1.log
或 vncserver :n
这里的n就是sessionnumber,不指定的话默认为1,第一次启动时会提示输入密码,以后也可以使用vncpasswd命令修改密码。VNC的默认端口号是5900,而远程桌面连接端口号则是5900+n。如果使用“vncserver :1”命令启动VNC Server,那么端口应该是5901。
查看vncserver的配置文件:
# rpm -qc tigervnc-server
/etc/sysconfig/vncservers
# vi /etc/sysconfig/vncservers
安装noVNC
git clone git://github.com/kanaka/noVNC
//这里同样的,git下载不了就换成https
创建安全连接(一路回车下去…)
# cd ./noVNC/utils/# openssl req -new -x509 -days 365 -nodes -out self.pem -keyout self.pem
Generating a 2048 bit RSA private key
.............................+++
.......................................+++
writing new private key to 'self.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:
# ls
。。。。 self.pem
注: VNC的默认会话不是安全的,需要创建一个安全的VNC连接。创建完毕的证书 self.pem 需要放置到 noVNC/utils 目录下,当启动 noVNC 时,websockify将自动装载证书。
运行noVNC
在noVNC目录下,执行
./utils/novnc_proxy --vnc localhost:5901
注意: noVNC会有版本更新,有可能到时就不是这个文件启动,如果不对,请查看官网信息
有连接后查看VNC连接:
# vncserver -listTigerVNC server sessions:X DISPLAY # PROCESS ID
:1 2163//如果想要删除连接,使用:
vncserver -kill :n
再次回到KVM管理界面,启动镜像
可以看到正常启动了
安装过程这里略过
克隆虚机
或者:
注意: 克隆是对存储池的存储卷-镜像做克隆,还要在实例那边新建实例并把存储卷指向刚克隆的镜像才可以使用。
Web界面没法跨存储池克隆,要在命令行下复制过去。
虚机磁盘扩容-新增磁盘
先在存储区新建一个镜像做磁盘
对虚机的xml文件的disk域添加如下代码:
//场景:新增一块磁盘找到这部分:<devices><emulator>/usr/libexec/qemu-kvm</emulator><disk type='file' device='disk'><driver name='qemu' type='qcow2'/> //添加改行代码找到新增磁盘格式<source file='/var/lib/libvirt/images/centos7-1.img'/> //指定新增磁盘路径<target dev='vda' bus='virtio'/> //指定磁盘设备名称,新增的不能和前面的相同<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/> //传输总线-插槽位不能和其他相同</disk>------新增下面的<disk type='file' device='disk'><driver name='qemu' type='qcow2'/><source file='/var/lib/libvirt/images/centos7-1-02.img'/><target dev='vdb' bus='virtio'/><address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/></disk>
启动虚机,然后在虚机系统内部对磁盘进行格式化,分区等操作
创建虚机快照
这里不支持运行状态创建快照,有点不实用。
To take a snapshot, shutdown the instance.要获取快照,请关闭实例。
如果虚机出现问题,就可以用快照进行恢复了
创建Win2016 实例
virtio-win驱动
由于KVM管理虚拟机的硬盘和网卡需要virtio驱动,linux系统默认支持virtio驱动,所以安装linux系统虚拟机的时候只需要加载iso镜像即可。
但是windows系统默认不支持virtio驱动,需要另外下载virtio驱动,在安装windowss虚拟机过程中,需要选择virtio驱动路径,继而加载驱动,最后才可以识别到驱动
# wget https://fedorapeople.org/groups/virt/virtio-win/virtio-win.repo -O /etc/yum.repos.d/virtio-win.repo# yum install virtio-win -y# rpm -ql virtio-win | grep iso //查看virtio-win提供的驱动
/usr/share/virtio-win/virtio-win-0.1.217.iso
/usr/share/virtio-win/virtio-win.iso
这个装完后,存储池会多出一个如下:
安装完后,在虚拟机2016的设置-XML里面添加如下内容,添加一个光驱,指定virtio-win驱动位置
<disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file='/usr/share/virtio-win/virtio-win-0.1.217.iso'/><target dev='hdb' bus='ide'/><readonly/><address type='drive' controller='0' bus='0' target='0' unit='0'/></disk>
注意:unit 取值原来的那个要不一样,不是0就是1
启动后到选硬盘时
后面就是分区格式化安装…
安装网卡驱动,进系统后 打开设备管理 器
命令行管理KVM
一、虚拟机的存储池
默认位置
kvm默认存储池的位置 : /var/lib/libvirt/images/
定义存储池
使用 virsh pool-define-as 命令创建持久性存储池。
# mkdir -p /vm-pool/# virsh pool-define-as --name centos-pool --type dir --target "/vm-pool/"
使用 virsh pool-list --all 命令列出所有现有的存储池。
# virsh pool-list --all名称 状态 自动开始
-------------------------------------------centos-pool 不活跃 否 Data 活动 是 default 活动 否 iso 活动 是
启动存储池
# virsh pool-autostart centos-pool
池 centos-poo1 标记为自动启动# virsh pool-list --all名称 状态 自动开始
-------------------------------------------centos-pool 活跃 是 Data 活动 是 default 活动 否 iso 活动 是
打开自动启动(可选)
默认情况下,virsh 使用自定义的存储池未设置为每次 libvirtd 启动时自动启动。
可以使用 virsh pool-autostart 命令将存储池配置为自动启动。
使用 virsh pool-create-as 命令创建临时性存储池。
临时性的不可以打开自动启动
# mkdir -p /vm-pool/centos7/vm2
# virsh pool-create-as --name centos7-pool2 --type dir --target "/vm-pool/centos7/vm2/"
创建池 centos7-pool-2
# virsh pool-list名称 状态 自动开始
-------------------------------------------centos7-pool2 活动 否 default 活动 是
删除存储池
# virsh pool-destroy centos7-poo2
销毁池 centos7-poo2
更多的存储池、存储卷操作
# virsh --help | grep poolallocpages Manipulate pages pool sizeStorage Pool (help keyword 'pool')find-storage-pool-sources-as 找到潜在存储池源find-storage-pool-sources 发现潜在存储池源pool-autostart 自动启动某个池pool-build 建立池pool-create-as 从一组变量中创建一个池pool-create 从一个 XML 文件中创建一个池pool-define-as 在一组变量中定义池pool-define 定义非活动持久性存储池或从XML文件修改现有的持久性存储池pool-delete 删除池pool-destroy 销毁(删除)池pool-dumpxml XML 中的池信息pool-edit 为存储池编辑 XML 配置pool-info 存储池信息pool-list 列出池pool-name 将池 UUID 转换为池名称pool-refresh 刷新池pool-start 启动一个(以前定义的)非活跃的池pool-undefine 取消定义一个不活跃的池pool-uuid 把一个池名称转换为池 UUIDpool-event 存储池事件Storage Volume (help keyword 'volume')vol-clone 克隆卷。vol-create-as 从一组变量中创建卷vol-create 从一个 XML 文件创建一个卷vol-create-from 生成卷,使用另一个卷作为输入。vol-delete 删除卷vol-download 将卷内容下载到文件中vol-dumpxml XML 中的卷信息vol-info 存储卷信息vol-key 为给定密钥或者路径返回卷密钥vol-list 列出卷vol-name 为给定密钥或者路径返回卷名vol-path 为给定密钥或者路径返回卷路径vol-pool 为给定密钥或者路径返回存储池vol-resize 创新定义卷大小vol-upload 将文件内容上传到卷中vol-wipe 擦除卷
二、虚拟机快照
1 查询
# qemu-img info /home/kvm/virtual-img/vm1.qcow2
2 给指定虚拟机创建快照
//运行状态建个快递照
# virsh snapshot-create-as centos7 --name centos7.snap1
已生成域快照 centos7.snap1//关机状态建个快递照
# virsh snapshot-create-as centos7 --name centos7.snap2
已生成域快照 centos7.snap2
3 查看快照
# virsh snapshot-list centos7名称 生成时间 状态
------------------------------------------------------------centos7.snap1 2023-08-05 15:19:52 +0800 running //命令执行到287centos7.snap2 2023-08-05 15:23:33 +0800 shutoff //命令执行到290
可以看到运行状态和关机状态的快照都有显示出来
4 恢复快照
# virsh snapshot-revert centos7 --snapshotname centos7.snap2
运行中执行了恢复命令,再看界在,显示关机了
恢复关机状态的快照很完整,OK
再试试恢复运行状态的快 照
# virsh snapshot-revert centos7 --snapshotname centos7.snap1
运行中再执行了恢复命令,再看界面,显示运行中,但是原来连接是断开了,重启了
检查下命令运行到哪
运行快照是在命令执行到287个时生成的,现在看来,只是恢复到上次重启的时候,并没有实时快照生成。
# ls /var/lib/libvirt/qemu/snapshot/
centos7 ELK00 ELK01 mysql00 mysql01 mysql02
# ls /var/lib/libvirt/qemu/snapshot/centos7/
centos7.snap1.xml centos7.snap2.xml
# ll /var/lib/libvirt/qemu/snapshot/centos7/
总用量 12
-rw------- 1 root root 5128 8月 5 15:34 centos7.snap1.xml
-rw------- 1 root root 3436 8月 5 15:34 centos7.snap2.xml
运行中的快照5m多,关机的才3M多,运行的的快照真是照了个寂寞。
5 删除快照
# virsh snapshot-delete centos7 --snapshotname centos7.snap1
已删除域快照 centos7.snap1
三、虚拟机网络
1 查询虚拟网桥
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29abf5e4 no ens33
virbr0 8000.5254000e4000 yes virbr0-nic
libvirt 会依赖 ip_forward 参数, 并添加响应的 iptables(防火墙)规则,允许去往和来自虚拟机的数据。有些程序可能会关闭 ip_forward 参数,因此最好的选择是将以下内容添加到 /etc/sysctl.conf。
net.ipv4.ip_forward = 1
2 查看网络接口信息
# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000link/ether 00:0c:29:ab:f5:e4 brd ff:ff:ff:ff:ff:ffinet6 fe80::20c:29ff:feab:f5e4/64 scope link valid_lft forever preferred_lft forever# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000link/ether 00:0c:29:ab:f5:e4 brd ff:ff:ff:ff:ff:ffinet6 fe80::20c:29ff:feab:f5e4/64 scope link valid_lft forever preferred_lft forever
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 00:0c:29:ab:f5:e4 brd ff:ff:ff:ff:ff:ffinet 192.168.118.128/24 brd 192.168.118.255 scope global br0valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:feab:f5e4/64 scope link valid_lft forever preferred_lft forever
3设置桥接网络
web界面没建过的话可以建下
# vim /etc/sysconfig/network-scripts/ifcfg-br0
# cat /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=Bridge
NAME=br0
DEVICE=br0
ONBOOT="yes"
BOOTPROTO=static
IPADDR=192.168.118.129 #要和宿主机在一个网络,这里我用的是宿主机的ip
GATEWAY=192.168.118.2 #宿主的网关,nat的是.2,桥接是.1
NETMASK=255.255.255.0
DNS1=114.114.114.114
DNS2=8.8.8.8
安装虚拟机
centos7虚拟机
virt-install \
--name=centos-1 \
--ram 2048 --vcpus=1 \
--disk path=/home/kvmos/images/centos7-1.qcow2,size=20,format=qcow2,bus=virtio \
--location=/home/kvmos/iso/CentOS-7-x86_64-Minimal-1908.iso \
--network bridge=virbr0,model=virtio \
--vnc --vnclisten=0.0.0.0 --vncport=5900,password=123456 \
--autostart \
-d
name 是虚拟机名称
size 是系统盘大小G
bridge是桥接网卡名字
-d是debug输出信息
autostart 开机启动
win7虚拟机
virt-install \
--accelerate \
--name windows7 \
--ram 4096 \
--vcpus=2 \
--controller type=scsi,model=virtio-scsi \
--disk path=/data/win7/windows7.qcow2,size=60,format=qcow2,bus=virtio \
--disk device=cdrom,path=/iso/ASUS_WIN7_SP1_9in1.iso \
--disk device=cdrom,path=/usr/share/virtio-win/virtio-win-0.1.217.iso \
--graphics vnc,listen=0.0.0.0,port=5900,password=123456 --noautoconsole \
--network bridge=br0,model=virtio \
--os-type=windows \
--os-variant=win7 \
--autostart \
-d
驱动加载问题看前面部分.
虚拟机常用操作
虚拟机改固定IP
由于桥接的是默认动态IP的,有时会方便管理 要改固定
vim /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="static" //dhcp改成static静态模式
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
UUID="a801346b-de37-4154-96a2-de9fc3b125fb"
DEVICE="eth0"
ONBOOT="yes" // 开机启用网络配置
//增加以下IP信息
IPADDR=192.168.118.30
NETMASK=255.255.255.0
GATEWAY=192.168.118.2
DNS1=8.8.8.8//改完重启服务
systemctl restart network
显示虚拟机列表
# virsh list //不加--all只能看正在运行的虚拟机Id Name State
----------------------------------------------------2 centos7-01 running# virsh list --all //加上-all查看所有的虚拟机状态Id Name State
----------------------------------------------------2 centos7-01 running- centos7 关闭- centos7-02 关闭- win2016A 关闭
开关机、删除
//开机
# virsh start centos7-01
域 centos7-01 已开始//"温柔"关机
# virsh shutdown centos7-01
域 centos7-01 被关闭//强制关机
# virsh destroy centos7
域 centos7-02 被删除 //这个显示真是无语,还好实际上只是关机# virsh list --allId 名称 状态
----------------------------------------------------- centos7 关闭- centos7-01 关闭- centos7-02 关闭- win2016A 关闭-
//删除虚拟机
# virsh destroy win2016A
# virsh vol-delete
查看某个虚拟机对应的VNC端口
[root@kvm01 ~]# virsh listId 名称 状态
----------------------------------------------------6 centos7-02 running8 centos7-01 running[root@kvm01 ~]# virsh vncdisplay centos7-01
:1[root@kvm01 ~]# virsh vncdisplay centos7-02
:0//:0代表5900,如果是:1就代表是5901端口.
重命名
[root@kvm01 ~]# virsh domrename centos7-01 centos7-01A
Domain successfully renamed[root@kvm01 ~]# virsh list --allId 名称 状态
----------------------------------------------------6 centos7-02 running- centos7 关闭- centos7-01A 关闭- win2016A 关闭
挂起&恢复
[root@kvm01 ~]# virsh suspend centos7-02
域 centos7-02 被挂起[root@kvm01 ~]# virsh resume centos7-02
域 centos7-02 被重新恢复
开机启动
[root@kvm01 ~]# virsh autostart centos7-01A
域 centos7-01A标记为自动开始[root@kvm01 ~]# virsh autostart --disable centos7-01A
域 centos7-01A取消标记为自动开始
完整克隆
//克隆cenots7-01A ,-o后面是旧名字,-n后面是新的虚拟机的名字
# virt-clone --auto-clone -o centos7-01A -n centos7-03
正在分配 'centos7-01-clone.img' | 20 GB 00:00:29 成功克隆 'centos7-03'。
手动克隆
复制虚拟磁盘文件
备份源虚拟机的配置文件,默认在/etc/libvirt/qemu/,另存为 centos-001
修改 centos-001的配置文件
修改name
删除uuid
删除mac
修改虚拟机磁盘路径
导入 centos-001
检查是否正常启动
导出、导入虚拟机
kvm虚拟化与vmware workstation虚拟化有些不同,vmware虚拟出来的虚拟机通常会有多个文件,而kvm的虚拟机只有两个文件:配置文件和磁盘文件,我们怎样才能找到某个虚拟机对应的文件呢?
其实很简单,先列出所有的虚拟机,然后再通过virsh edit 虚拟机名,然后过滤“source file”就会把磁盘的路径过滤出来,而虚拟机的配置文件都会存放在/etc/libvirt/qemu/这个目录里面,以虚拟机名字命名的的.xml文件。实际上virsh edit 虚拟机名打开的就是该虚拟机的配置文件,配置文件里面记录了磁盘文件的路径。通过edit命令打开配置文件有语法检测,直接通过vim打开没有语法检查,如下所示:
# ls /etc/libvirt/qemu
autostart centos7-01A.xml centos7-02.xml centos7-03.xml centos7.xml networks win2016A.xml
//导出备份配置文件
# virsh dumpxml centos7-03 > /data/centos7-03A.xml# ls /data
centos7-03A.xml # virsh undefine centos7-03
域 centos7-03 已经被取消定义# virsh list --allId 名称 状态
----------------------------------------------------6 centos7-02 running- centos7 关闭- centos7-01A 关闭- win2016A 关闭//导入
# virsh define /data/centos7-03A.xml
定义域 centos7-03(从 /data/centos7-03A.xml)
# virsh list --allId 名称 状态
----------------------------------------------------6 centos7-02 running- centos7 关闭- centos7-01A 关闭- centos7-03 关闭- win2016A 关闭
加硬盘和扩容
在线加硬盘
vda 可以看到就20G
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 4.4G 0 rom
vda 252:0 0 20G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 19G 0 part ├─centos_kvm00-root 253:0 0 17G 0 lvm /└─centos_kvm00-swap 253:1 0 2G 0 lvm [SWAP]
# fdisk -l
。。。。设备 Boot Start End Blocks Id System
/dev/vda1 * 2048 2099199 1048576 83 Linux
/dev/vda2 2099200 41943039 19921920 8e Linux LVM
回到物理机
//在指定目录下创建一块硬盘,其实在哪里创建都可以,指定磁盘类型,指定名字,指定大小5G即可。
# qemu-img create -f qcow2 /data/centos7-add01.qcow2 5G
Formatting '/data/centos7-add01.qcow2', fmt=qcow2 size=5368709120 encryption=off cluster_size=65536 lazy_refcounts=off //给centos7这台主机增加上这块盘,vdb是指明盘符,--live是在线增加,不加缓存,指定驱动
# virsh attach-disk centos7 /data/centos7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2
成功附加磁盘
再到虚拟机查看
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 4.4G 0 rom
vda 252:0 0 20G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 19G 0 part ├─centos_kvm00-root 253:0 0 17G 0 lvm /└─centos_kvm00-swap 253:1 0 2G 0 lvm [SWAP]
vdb 252:16 0 5G 0 disk
# fdisk -l //也可以看到最后面多了一个
web界面新增镜像 格式是.img,再到命令行下加是这样的
# virsh attach-disk ceph00 /data/ceph00-1.img vdb --live --cache=none --subdriver=qcow2
成功附加磁盘
扩容
如果觉得新加的这块硬盘容量还是太小,想要扩容这块盘,就要先卸载这块盘
先在物理机上操作
//卸载新增加的这块硬盘
# virsh detach-disk centos7 vdb
成功分离磁盘
//扩容,加5G,注意,原磁盘不能有快照
# qemu-img resize /data/centos7-add01.qcow2 +5G
Image resized.//再次添加上
# virsh attach-disk centos7 /data/centos7-add01.qcow2 vdb --live --cache=none --subdriver=qcow2
成功附加磁盘
到虚机上到
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 4.4G 0 rom
vda 252:0 0 20G 0 disk
├─vda1 252:1 0 1G 0 part /boot
└─vda2 252:2 0 19G 0 part ├─centos_kvm00-root 253:0 0 17G 0 lvm /└─centos_kvm00-swap 253:1 0 2G 0 lvm [SWAP]
vdb 252:16 0 10G 0 disk
注意:一旦在虚拟上使用了这块磁盘,比如已经格式化并且已经在里面创建了文件之后,再加扩容量,再挂载之后,会发现容量还是保持在原来的大小,是因为格式化之后,文件系统已经固定了,新加的空间没有格式化,如果想用的话,就得执行xfs_growfs /dev/vdb,用来更新文件系统,这仅是针对xfs的分区, 新的空间就会被添加上了,如果文件系统是ext系列的话,就得使用resizefs /dev/vdb。
KVM热迁移
所谓的热迁移就是在不停机或极短暂(几秒)即可恢复的手段。
我们在做冷迁移时,其实迁移的都是两个文件:配置文件和磁盘文件,但是热迁移时就不只这两个文件,服务器运行中时,内存中还会有数据的,大多数情况下,运行中的服务器也不会随便让停止的。
默认配置文件位置: /etc/libvirt/qemu/
默认磁盘镜像文件位置:/var/lib/libvirt/images/
热迁移操作
要求:
***VM 映像可在源主机和目标主机上访问(位于共享存储上,例如使用 nfs)。—必须条件,不能迁移时才放到NFS上
建议在两台主机上的同一路径上找到图像目录(用于写入时复制图像的迁移——使用“qemu-image create -b … .")
src 和 dst 主机必须在同一个子网上(使用 tap 时保持 guest 的网络)。
不要使用 -snapshot qemu 命令行选项。
对于 tcp:迁移协议
目标上的来宾必须以与源上相同的方式启动。
环境描述:
按理说是需要三台机器的,一台是需要迁移的服务器A,另一台是用来承载的的服务器B,还有一台是nfs用来共享存储的服务器C。但是考虑到我的电脑只有8G的内存,我们可以这样,A服务器“兼职"做NFS.
kvm00 192.168.118.128 目标
kvm01 192.168.118.50 源
nfs 192.168.118.128 共享存储 /data/nfs
准备工作:
两边都得安装kvm,别忘记启动kvm。kvm00要有虚拟机,kvm01上并不要求有虚拟机。
两边都必须是桥接,桥接完成之后别忘记重启网卡。
虚拟机最好是静态地址
安装NFS
kvm00
# yum install nfs-utils
# mkdir -p /data/nfs
# vim /etc/exports
/data/nfs 192.168.118.0/24(rw,async,no_root_squash,no_all_squash)
# chown -R nfsnobody.nfsnobody /data/nfs/
# systemctl status nfs
两边都要挂载
[root@kvm01 /]# mkdir /data-mv
[root@kvm01 /]# mount -t nfs 192.168.118.128:/data/nfs /datamv[root@kvm00 ~]# mkdir /data-mv
[root@kvm00 ~]# mount -t nfs 192.168.118.128:/data/nfs /datamv\\永久挂载
# vim /etc/fstab
192.168.118.128:/data/nfs /data-mv nfs defaults 0 0
对两台主机域名都设置下
# vim /etc/hosts
//添加如下
192.168.118.128 kvm00
192.168.118.50 kvm01
SSH免密
正常nfs服务器和两个KVM主机都要
[root@kvm01 ~]# ssh-keygen -t rsa
[root@kvm01 ~]# ssh-copy-id kvm00
新建一个镜像位于NFS上的虚拟机,这是可迁移的前提条件
[root@kvm01 ~]# virt-install --virt-type kvm --os-type=linux --name centos7-05 --memory 1024 --vcpus 1 --cdrom=/iso/CentOS-7-x86_64-DVD-2009.iso --disk /data-mv/centos7-05.img --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole --check disk_size=off
由源主机向 目标主机迁移
[root@kvm01 ~]# virsh migrate --live --verbose centos7-05 qemu+ssh://192.168.118.128/system --unsafe --persistent [root@kvm01 ~]# virsh listId 名称 状态
----------------------------------------------------[root@kvm01 ~]# -------查看目标主机
[root@kvm00 ~]# virsh listId 名称 状态
----------------------------------------------------1 centos7-05 running[root@kvm00 ~]# ls /etc/libvirt/qemu
。。。。。。 centos7-05.xml
–live 热迁移
–unsafe 即使不安全也要强制迁移、这个参数一定要加,不然会报错,不让迁移
–verbose 显示迁移进程
–persistent 持久迁移,不加这个为临时性的,不过加了这个本端也会保留一份配置-系统关闭状态的
–persistent-xml /etc/libvirt/qemu/centos7-05.xml,测试加这个迁移xml还是同上,本端还是留了一份,加不加没啥用
qemu+ssh://192.168.118.128/system qemu+ssh认证,IP为目标的IP
故障问题
错误:无法在 ‘kvm00.localdomain :49152’ 连接到服务器: 拒绝连接
原因:目标主机没有设置好静态域名解析,需要目标主机hostname和源主机hosts文件里面需一致
解决:在目标主机配置文件/etc/hostname中设置好域名解析
其他可能的问题:
….lookupByName……
原因:两台主机没有建立连接
解决:在virtual-manager上建立连接
点击迁移后闪退
主机不识别,重新定义主机名
找不到文件:/sharefile/vm2.qcow2
原因:两台主机的共享目录文件名不一致
解决:两台主机的共享目录文件名要保持相同
VNC连接linux进桌面进行热迁移
win系统下载VNC
https://www.tightvnc.com/download.php
在kvm01安装图形界面,不装图形界面连接会是一片灰屏。。。
[root@kvm01 ~]# yum groupinstall "GNOME Desktop" -y
如果Win系统连接时提示拒绝,就 再执行一次
vncserver :1
之前设置过免密登陆,不需要认证
@_@进度界面太快了,一下就没了
可以看到已经迁移过去了,本端的web界面上也没了,
不再是临时迁移了,可以保存配置文件,不用特意去保存也会生成
查看配置文件默认位置 也可以看到了
[root@kvm00 ~]# ls /etc/libvirt/qemu
。。。。。。 centos7-05.xml
这篇关于KVM详解-WEB管理界面及安装win2016的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!