admin管理员组文章数量:1435636
文章目录
- KVM的简介
- KVM简介
- 2 关于virtual machine manager的介绍
- 常用的虚拟化架构对比:
- 二、安装及环境的部署
- 1.安装时系统要求
- 3.安装KVM虚拟化软件
- kvm部署
- kvm安装
- 配置网桥
- 启动服务
- 验证安装结果
- 测试并验证安装结果
- 查看网桥信息
- kvm web管理界面-WebVirtMgr安装
- 安装依赖包
- 从github上下载webvirtmgr代码
- 安装webvirtmgr
- 检查sqlite3是否安装
- 初始化帐号信息
- 设置Nginx
- 拷贝web网页至指定目录
- 生成密钥
- 端口转发
- 配置nginx
- 设置supervisor
- 报错 : accept() failed (24: Too many open files)
- KVM WEB界面管理
- kvm存储管理
- 先创建ISO镜像系统的存储池
- 可以通过远程连接软件上传ISO镜像文件至存储目录/var/lib/libvirt/images/
- 注意:这个目录和镜像的权限都要是777,没改就没法克隆 再看看WEB界面   
- 添加镜像
- kvm网络管理
- 实例管理----创建虚机
- 在这里插入图片描述 
- 安装noVNC
- 启动服务,新建一个VNC链接:
- 安装noVNC
- 运行noVNC
- 再次回到KVM管理界面,启动镜像
- 克隆虚机
- 虚机磁盘扩容-新增磁盘
- 创建虚机快照
- 创建Win2016 实例
- virtio-win驱动
- WEB界面无法访问时
- 命令行管理KVM
- 一、虚拟机的存储池
- 定义存储池
- 启动存储池
- 使用 virsh pool-create-as 命令创建临时性存储池。
- 删除存储池
- 更多的存储池、存储卷操作
- 二、虚拟机快照
- 2 给指定虚拟机创建快照
- 3 查看快照
- 4 恢复快照
- 5 删除快照
- 三、虚拟机网络
- 1 查询虚拟网桥
- 2 查看网络接口信息
- 3设置桥接网络
- 安装虚拟机
- centos7虚拟机
- win7虚拟机
- 虚拟机常用操作
- 虚拟机改固定IP
- 显示虚拟机列表
- 开关机、删除
- 查看某个虚拟机对应的VNC端口
- 重命名
- 挂起&恢复
- 开机启动
- 完整克隆
- 手动克隆
- 导出、导入虚拟机
- 加硬盘和扩容
- 扩容
- KVM热迁移
- 热迁移操作
- 安装NFS
- 故障问题
- VNC连接linux进桌面进行热迁移
- 挂载U盘给上虚拟机使用-暂时不行
- 网络扩展------虚拟化网络管理
- 一、Linux Bridge网桥管理
- 二、Linux Bridge实现Vlan原理
- Linux Bridge实现Vlan
- (1)查看核心是否提供VLAN 功能,执行
- (2)安装查看用于查看Vlan配置的工具————vconfig
- (3)创建vlan接口
KVM的简介
KVM简介
KVM(用于基于内核的虚拟机)是用于 x86 硬件上的 Linux 的完整虚拟化解决方案,包含虚拟化扩展(Intel VT 或 AMD-V)。它由一个可加载的内核模块 kvm.ko 和一个处理器特定模块 kvm-intel.ko 或 kvm-amd.ko 组成,该模块提供核心虚拟化基础设施。
与VMwareESX/ESXi、微软Hyper-V和Xen等虚拟化产品不同,KVM的思想是在Linux内核的基础上添加虚拟机管理模块,重用Linux内核中已经完善的进程调度、内存管理、IO管理等代码,使之成为一个可以支持运行虚拟机的Hypervisor。因此,KVM并不是一个完整的模拟器,而只是一个提供了虚拟化功能的内核插件,具体的模拟器工作需要借助QEMU来完成。
使用 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/cpuinfo
vmx
vmx
vmx
vmx
# lsmod | grep kvm
关闭防火墙与selinux
# systemctl stop firewalld
# systemctl disable firewalld
Removed 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/.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 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::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 1000
link/ether 00:0c:29:ab:f5:e4 brd ff:ff:ff:ff:ff:ff
inet6 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 1000
link/ether 00:0c:29:ab:f5:e4 brd ff:ff:ff:ff:ff:ff
inet 192.168.118.128/24 brd 192.168.118.255 scope global br0
valid_lft forever preferred_lft forever
inet6 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
# brctl --help
Usage: brctl [commands]
commands:
addbr <bridge> #增加网桥
delbr <bridge> #删除网桥
addif <bridge> <device> #连接网口与网桥
delif <bridge> <device> 删除网口与网桥的链接
show [ <bridge> ]
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/retspen/webvirtmgr.git
正克隆到 'webvirtmgr'...
fatal: unable to connect to github.com:
github.com[0: 20.205.243.166]: errno=????
# git clone https://github/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_flavor
You 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
设置Nginx
警告:通常 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: 1
Now 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 /var
expires 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: 1
Now 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 libvirtd
systemctl stop nginx
systemctl stop libvirtd
systemctl 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/
rz无法上传太大的文件
4G以上的ISO 可以用 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:1
Creating 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/kanaka/noVNC
//这里同样的,git下载不了就换成https://github/kanaka/noVNC.git
创建安全连接(一路回车下去…)
# 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 -list
TigerVNC 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/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
启动后到选硬盘时
第2次装时,发现,这边加载驱动,直接确定会出来下面这些驱动,如果去选浏览光驱扫描又不出来。。
后面就是分区格式化安装…
安装网卡驱动,进系统后 打开设备管理 器
WEB界面无法访问时
先查看存储池及虚拟机是否正常运行并能访问,再重启几个服务,之后就恢复正常访问了
# virsh pool-list --all
名称 状态 自动开始
-------------------------------------------
Data 活动 是
iso 活动 是
# virsh list
Id 名称 状态
----------------------------------------------------
1 PacketFence177 running
3 ceph00-173 running
4 ceph01-174 running
5 ceph02-175 running
9 Centos-glpi running
# systemctl restart nginx
# systemctl restart libvirtd
# systemctl restart supervisord
命令行管理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 pool
allocpages Manipulate pages pool size
Storage 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 把一个池名称转换为池 UUID
pool-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 //命令执行到287
centos7.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 1000
link/ether 00:0c:29:ab:f5:e4 brd ff:ff:ff:ff:ff:ff
inet6 fe80::20c:29ff:feab:f5e4/64 scope link
valid_lft forever preferred_lft forever
# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::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 1000
link/ether 00:0c:29:ab:f5:e4 brd ff:ff:ff:ff:ff:ff
inet6 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 1000
link/ether 00:0c:29:ab:f5:e4 brd ff:ff:ff:ff:ff:ff
inet 192.168.118.128/24 brd 192.168.118.255 scope global br0
valid_lft forever preferred_lft forever
inet6 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 --all
Id 名称 状态
----------------------------------------------------
- centos7 关闭
- centos7-01 关闭
- centos7-02 关闭
- win2016A 关闭
-
//删除虚拟机
# virsh destroy win2016A
# virsh vol-delete
查看某个虚拟机对应的VNC端口
[root@kvm01 ~]# virsh list
Id 名称 状态
----------------------------------------------------
6 centos7-02 running
8 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 --all
Id 名称 状态
----------------------------------------------------
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 --all
Id 名称 状态
----------------------------------------------------
6 centos7-02 running
- centos7 关闭
- centos7-01A 关闭
- win2016A 关闭
//导入
# virsh define /data/centos7-03A.xml
定义域 centos7-03(从 /data/centos7-03A.xml)
# virsh list --all
Id 名称 状态
----------------------------------------------------
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 list
Id 名称 状态
----------------------------------------------------
[root@kvm01 ~]#
-------查看目标主机
[root@kvm00 ~]# virsh list
Id 名称 状态
----------------------------------------------------
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/download.php
在kvm01安装图形界面,不装图形界面连接会是一片灰屏。。。
[root@kvm01 ~]# yum groupinstall "GNOME Desktop" -y
如果Win系统连接时提示拒绝,就 再执行一次
vncserver :1
之前设置过免密登陆,不需要认证
@_@进度界面太快了,一下就没了
可以看到已经迁移过去了,本端的web界面上也没了,
不再是临时迁移了,可以保存配置文件,不用特意去保存也会生成
查看配置文件默认位置 也可以看到了
[root@kvm00 ~]# ls /etc/libvirt/qemu
。。。。。。 centos7-05.xml
挂载U盘给上虚拟机使用-暂时不行
centos7默认已有安装usbutils了,如没有可以用yum安装下
//查看宿主机上的usb设备的vender号和device号
# lsusb
Bus 002 Device 002: ID 0951:1666 Kingston Technology DataTraveler 100 G3/G4/SE9 G2/50
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
# lsusb -v
Bus 002 Device 002: ID 0951:1666 Kingston Technology DataTraveler 100 G3/G4/SE9 G2/50
。。。。。。
idVendor 0x0951 Kingston Technology
idProduct 0x1666 DataTraveler 100 G3/G4/SE9 G2/50
//在宿主机上创建一个xml文件,在文件中对照自己的宿主机修改vendor id和product id
# cat king_usb.xml
<hostdev mode='subsystem' type='usb'>
<source>
<vendor id='0x0951'/>
<product id ='0x1666'/>
</source>
</hostdev>
//虽然提示附加了设备,可以是虚拟机上没看到。。win2012和centos7都试了
# virsh attach-device Win2012 king_usb.xml
成功附加设备
# virsh detach-device Win2012 king_usb.xml
成功分离设备
# virsh attach-device Centos-glpi king_usb.xml
成功附加设备
# virsh detach-device Centos-glpi king_usb.xml
成功分离设备
网络扩展------虚拟化网络管理
参考: https://wwwblogs/zzzynx/p/10945391.html
一、Linux Bridge网桥管理
网桥的作用:
网桥将两个相似的网络连接起来,并对网络数据的流通进行管理。它工
作于数据链路层,不但能扩展网络的距离或范围,而且可提高网络的性能、可靠性和安全性。
网桥优点
1、过滤通信量。网桥可以使用局域网的一个网段上各工作站之间的信息量局限在本网段的范围内,而不会经过网桥溜到其他网段去。
2、扩大了物理范围,也增加了整个局域网上的工作站的最大数目。
3、可使用不同的物理层,可互连不同的局域网。
4、提高了可靠性。如果把较大的局域网分割成若干较小的局域网,并且每个小的局域网内部的信息量明显地高于网间的信息量,那么整个互连网络的性能就变得更好。
网桥缺点
1、由于网桥对接收的帧要先存储和查找站表,然后转发,这就增加了时延。
2、在MAC子层并没有流量控制功能。当网络上负荷很重时,可能因网桥缓冲区的存储空间不够而发生溢出,以致产生帧丢失的现象。
3、具有不同MAC子层的网段桥接在一起时,网桥在转发一个帧之前,必须修改帧的某些字段的内容,以适合另一个MAC子层的要求,增加时延。
4、网桥只适合于用户数不太多(不超过几百个)和信息量不太大的局域网,否则有时会产生较大的广播风暴
网络虚拟化是虚拟化技术中最复杂的部分,也是非常重要的资源。
创建一个名为br0的linux-bridge网桥,如果在此网桥上新建一台vm,如下图:
VM2 的虚拟网卡 vnet1 也连接到了 br0 上。 现在 VM1 和 VM2 之间可以通信,同时 VM1 和 VM2 也都可以与外网通信。
brct的一些常用命令:
# brctl --help
Usage: brctl [commands]
commands:
addbr <bridge> #增加网桥
delbr <bridge> #删除网桥
addif <bridge> <device> #连接网口与网桥
delif <bridge> <device> 删除网口与网桥的链接
show [ <bridge> ]
二、Linux Bridge实现Vlan原理
KVM 虚拟化环境下实现 VLAN 架构,如下图
eth0 是宿主机上的物理网卡,有一个命名为 eth0.10 的子设备与之相连。 eth0.10 就是 VLAN 设备了,其 VLAN ID 就是 VLAN 10。 eth0.10 挂在命名为 brvlan10 的 Linux Bridge 上,虚机 VM1 的虚拟网卡 vent0 也挂在 brvlan10 上。
这样的配置其效果就是: 宿主机用软件实现了一个交换机(当然是虚拟的),上面定义了一个 VLAN10。 eth0.10,brvlan10 和 vnet0 都分别接到 VLAN10 的 Access口上。而 eth0 就是一个 Trunk 口。VM1 通过 vnet0 发出来的数据包会被打上 VLAN10 的标签。
eth0.10 的作用是:定义了 VLAN10
brvlan10 的作用是:Bridge 上的其他网络设备自动加入到 VLAN10 中
如图ens37充当交换机的角色,添加两个网口ens37.10和ens37.20 ,再网口上分别添加上brvlan-10和brvlan-20的网桥,然后分别连接上电脑。
可以发现在不同vlan口的两台电脑无法ping通,就实现了在同一局域网内限制互相通信的功能,这在企业中有着很实际的应用。
如果有需求连接外网的话可以另外添加网卡。
Linux Bridge实现Vlan
(1)查看核心是否提供VLAN 功能,执行
# dmesg | grep -i 802
或者检查/proc/net/vlan目录是否存在。
如果沒有提供VLAN 功能,/proc/net/vlan目录是不存在的。
# cd /proc/net/vlan
# ls
br1.10 br1.20 config #此目录下保存在创建的网桥等内容
如果8021q模块没有载入系统,则可以通过使用modprobe模组命令载入802.1q模组,
並且利用lsmod命令确认模组是否已经载入到核心内。
# modprobe 8021q #加载
# lsmod | grep 8021q
8021q 33208 0
garp 14384 1 8021q
mrp 18542 1 8021q
设置开机载入8021q模块(可选)
在/etc/sysconfig/modules下增加一个8021q.modules文件,文件内容为modprobe 8021q
vim /etc/sysconfig/modules/8021q.modules
modprobe 8021q
(2)安装查看用于查看Vlan配置的工具————vconfig
提前上传好vconfig-1.9-16.el7.x86_64.rpm
# yum -y localinstall vconfig
(3)创建vlan接口
创建vlan接口前,在设备上添加一块网卡ens37.
1.执行: nmtui ,进入编辑网卡界面
2.我添加了四块网卡,这里选择有线连接1默认为添加的第一个网卡。
3.更改配置名称为ens37,然后确认就添加成功了
当然也可以直接创建ifcfg-ens37的文件进行编辑配置。
4.对已经添加的ifcfg-ens37文件稍作更改
ip获取方式改为static,其他不动
4)在ens37网卡的基础之上建立ens37.10和ens37.20网口。
vconfig add 网卡 vid
# vconfig add ens37 10
Added VLAN with VID == 10 to IF -:ens37:-
# vconfig add ens37 20
Added VLAN with VID == 20 to IF -:ens37:-
5)配置ens37.10和ens37.20的文件
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens37 ifcfg-ens37.10
vim ifcfg-ens37.10 #注意ifcfg-的前缀
VLAN=yes
TYPE=vlan
PHYSDEV=ens37
VLAN_ID=10
NAME=ens37.10
ONBOOT=yes
ZONE=trusted
DEVICE=ens37.10
BRIDGE=brvlan-10 《---------------
vim ifcfg-ens37.20
VLAN=yes
TYPE=vlan
PHYSDEV=ens37
VLAN_ID=20
NAME=ens37.20
ONBOOT=yes
ZONE=trusted
DEVICE=ens37.20
BRIDGE=brvlan-20 《---------------
6)建立brvlan-10和brvlan-20的网桥
brctl addbr bridge名
# brctl addbr brvlan-10
# brctl addbr brvlan-20
7)配置添加网桥的配置文件
编辑网桥brvlan-10配置文件:
#vim ifcfg-brvlan-10
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-10
DEVICE=brvlan-10
ONBOOT=yes
编辑网桥brvlan-20配置文件:
#vim ifcfg-brvlan-20
TYPE=bridge
BOOTPROTO=static
NAME=brvlan-20
DEVICE=brvlan-20
ONBOOT=yes
然后查看网桥连接状态
brctl show
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29e7d62c no ens33
brvlan-10 8000.000000000000 no
brvlan-20 8000.000000000000 no
virbr0 8000.5254001b9b1c yes virbr0-nic
- 将网桥brvlan-10接到ens37.10口brvlan-20接到ens37.20上
# brctl addif brvlan-10 ens37.10
# brctl addif brvlan-20 ens37.20
9)再次查看
# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29e7d62c no ens33
brvlan-10 8000.000c29e7d636 no ens37.10
brvlan-20 8000.000c29e7d636 no ens37.20
virbr0 8000.5254001b9b1c yes virbr0-nic
10)重启网卡,查看网卡状态
如下图:
可以看到配置的网卡和网桥都成功显示并且是up状态
有时候状态为down而不是up
可以尝试重启或者进入nmtui界面激活。
# ifconfig
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.253.165 netmask 255.255.255.0 broadcast 192.168.253.255
inet6 fe80::20c:29ff:fee7:d62c prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:e7:d6:2c txqueuelen 1000 (Ethernet)
RX packets 56 bytes 3902 (3.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 82 bytes 13996 (13.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
brvlan-10: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::3c:ecff:fe3f:388a prefixlen 64 scopeid 0x20<link>
ether 02:3c:ec:3f:38:8a txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 656 (656.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
brvlan-20: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::9087:b7ff:fe9b:28c8 prefixlen 64 scopeid 0x20<link>
ether 92:87:b7:9b:28:c8 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 656 (656.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:e7:d6:2c txqueuelen 1000 (Ethernet)
RX packets 106948 bytes 147633162 (140.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 30428 bytes 2175888 (2.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens37.10: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::20c:29ff:fee7:d636 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:e7:d6:36 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16 bytes 1312 (1.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ens37.20: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::20c:29ff:fee7:d636 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:e7:d6:36 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16 bytes 1312 (1.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:1b:9b:1c txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
vnet1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::fc54:ff:fef8:ca47 prefixlen 64 scopeid 0x20<link>
ether fe:54:00:f8:ca:47 txqueuelen 1000 (Ethernet)
RX packets 638 bytes 50738 (49.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1641 bytes 128613 (125.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
11)来到图形化界面
启动两个虚拟机vm1和vm2
vm1选择网桥brvlan-10和ens37.10口,启动
vm2选择网桥brvlan-20和ens37.20接口,启动
12)进入虚拟机后配置一个ip地址,与另一台相同网段
2.ipv4选择手动配置,然后激活。
3、重新启动网卡,vm2同理。
4、在vm1上执行:
ping 192.168.75.5
可以看到无法连通,说明vlan实验成功!!
13)如果有需要让两台虚拟机通信的话可以改为同一个网桥网口。
如果有连通外网的需求的话可以添加一个网卡ens33,网桥为br0
版权声明:本文标题:KVM详解-WEB管理界面及安装win2016 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1726332526a1074773.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论