kenneth-lin

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

第一章 kvm基础


1.安装软件

yum install libvirt virt-install qemu-kvm -y

2.启动服务

systemctl start libvirtd.service 
systemctl status libvirtd.service

3.创建虚拟机

virt-install \
--virt-type kvm \
--os-type=linux \
--os-variant rhel7 \
--name centos7 \
--memory 1024 \
--vcpus 1 \
--network network=default \
--disk /opt/centos7.raw,format=raw,size=10 \
--cdrom /opt/CentOS-7-x86_64-DVD-2003.iso \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole

命令解释:

virt-install \
--virt-type kvm \                  #虚拟化类型
--os-type=linux \                  #操作系统类型
--os-variant rhel7 \               #版本号
--name centos7 \                   #虚拟机名称      
--memory 1024 \                    #限制内存大小
--vcpus 1 \                        #CPU核数
--network network=default \        #网卡类型
--disk /opt/centos7.raw,format=raw,size=10 \     #虚拟机创建路径,格式,大小
--cdrom /opt/CentOS-7-x86_64-DVD-2003.iso \     #系统镜像路径
--graphics vnc,listen=0.0.0.0 \
--noautoconsole

3.查看正在运行的虚拟机

virsh list
virsh list --all

4.启动虚拟机

virsh start centos7

5.关闭虚拟机

virsh shutdown centos7
virsh destroy centos7

6.查看虚拟机配置

virsh dumpxml centos7

7.编辑配置文件

virsh edit centos7

vim 配置文件后需要define

查看是否被发现

ls /etc/libvirt/qemu

8.导出配置文件

virsh dumpxml centos7 >> centos7.xml

9.删除虚拟机

virsh destroy centos7			#拔电源
virsh undefine centos7

10.导入虚拟机

virsh define centos7.xml

11.主机重命名

virsh domrename centos7 web-blog

12.主机挂起

virsh suspend centos7

13.主机恢复

virsh resume centos7

14.挂起恢复实验

ssh 192.168.122.38
for i in {1..100};do echo $i;sleep 1;done
新开窗口挂起
virsh suspend centos7
然后再恢复
virsh resume centos7

15.开机自启

systemctl enable libvirtd.service
virsh autostart centos7

故障案例1:虚拟机停一个没一个

原因:
正在运行的虚拟机,直接undefine,只会删除配置文件,但是不影响虚拟机的运行
此时,正在运行的虚拟机配置文件已经没了,如果重启的话,就会被真的删掉了,但是磁盘文件还在
正在运行的虚拟机,即使配置文件被删除了,也可以把当前内存里的配置导出备份
virsh list --all
virsh undefine centos7       #删除
virsh list --all

如何防范:
入职后先把所有虚拟机的配置文件保存一份
virsh list --all
virsh dumpxml centos7 >> centos7.xml

恢复步骤:
virsh define centos7.xml
virsh edit centos7  #编辑配置文件,将数据路径修改为你有的 第45行 <source file='/kvm_data/centos7.raw'/>

故障案例2:磁盘满了,迁移到其他磁盘

操作步骤:
1.关闭虚拟机 
2.将磁盘文件移动到新挂载的目录
3.在线修改配置文件
4.导入修改后的配置文件 
5.启动虚拟机 

操作命令:
virsh list --all
virsh shutdown centos7 
virsh list --all
cp /opt/centos7.raw /data/
virsh edit centos7
virsh start centos7
virsh list --all

创建虚拟机报错提示:

1.vmware没有开启CPU虚拟化功能
ERROR Host does not support domain type kvm for virtualization type 'hvm' arch 'x86_64'

2.格式出错,手打少了空格
usage: virt-install --name NAME --memory MB STORAGE INSTALL [options]
virt-install: error: unrecognized arguments: vnc,listen=0.0.0.0

第2章 KVM连接


1.VNC连接方式

VNC默认端口是5900
启动多个虚拟机就从5900依次增加
virsh list --all
virsh vncdisplay centos7

如果Continue后闪退,操作下面步骤

2.console连接方式

ssh root@192.168.122.38 #进入kvm搭建的虚拟机
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
grep "115200" /boot/grub2/grub.cfg 
reboot
#新开一个窗口
virsh console centos7

#退出console
ctrl + ]

第3章 kvm磁盘格式转换


1.磁盘格式介绍

raw:不支持做快照,性能好
qcow2:支持快照,性能不如raw好

2.查看磁盘信息

[root@db-51 /data]# qemu-img info centos7.raw 
image: centos7.raw
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.9G     #实际占用空间

3.创建磁盘

不常用
[root@db-51 /data]# qemu-img create -f qcow2 /data/oldboy.qcow2 1G
[root@db-51 /data]# qemu-img info oldboy.qcow2
image: oldboy.qcow2
file format: qcow2
virtual size: 1.0G (1073741824 bytes)
disk size: 196K
cluster_size: 65536
Format specific information:
  compat: 1.1
  lazy refcounts: false

4.磁盘格式转换

需要停止需要转换的虚拟机

操作步骤:
  1.停止虚拟机
  virsh shutdown centos7

  2.执行转换磁盘格式命令#常用
  cd /data/
  qemu-img convert -f raw -O qcow2 centos7.raw centos7.qcow2

  3.编辑配置文件修改为新的磁盘路径和磁盘格式
  [root@db-51 /data]# virsh edit centos7
  [root@db-51 /data]# virsh dumpxml centos7 |grep qcow2
        <driver name='qemu' type='qcow2'/>
        <source file='/data/centos7.qcow2'/>
        <driver name='qemu' type='qcow2'/>

4.启动虚拟机

  virsh start centos7

第4章 KVM快照管理


1.创建快照

注意:只有 .qcow2 文件才能作快照。raw不行。

virsh snapshot-create-as --name init centos7
virsh snapshot-create-as centos7 --name snap_1

2.查看快照

virsh snapshot-list centos7

3.还原快照

virsh snapshot-revert centos7 --snapshotname init

4.删除快照

virsh snapshot-delete centos7 --snapshotname init

第5章 虚拟机克隆


1. 完整克隆

1.关闭虚拟机

virsh shutdown centos7

2.执行完整克隆命令

自动化克隆,缺点占空间

必须关机!!

virt-clone --auto-clone -o centos7 -n centos7_clone

3.完整克隆注意事项:

1).完整克隆会将原始磁盘文件不用的空间压缩,起到压缩磁盘的效果
2).完整克隆不会将原主机的快照一起克隆
3).完整克隆的机器会自己处理UUID和MAC地址
4).完整克隆的磁盘文件会和原始机器在同一个数据目录下

4.检查命令:

virsh dumpxml centos7|egrep "uuid|mac"
virsh dumpxml centos7_clone|egrep "uuid|mac"
virsh snapshot-list centos7
virsh snapshot-list centos7_clone

方法2,手动克隆:

1.cp 它的配置文件和数据目录,并改名字
2.virsh edit centos7
#删除2个配置
<uuid>a20f45f4-4b70-4c61-b31b-908b7309e324</uuid>
<mac address='52:54:00:c0:9f:43'/>

#修改2个配置
<name>centos7_clone_link</name>
<source file='/data/centos7_clone_link.qcow2'/>

2. 链接克隆

1.生成磁盘链接文件

qemu-img create -f qcow2 -b centos7_clone.qcow2 centos7_clone_link.qcow2 

2.查看磁盘信息

[root@db-51 /data]# qemu-img info centos7_clone_link.qcow2 
image: centos7_clone_link.qcow2
file format: qcow2
virtual size: 10G (10737418240 bytes) 
disk size: 196K
cluster_size: 65536
backing file: centos7_clone.qcow2
Format specific information:
    compat: 1.1
    lazy refcounts: false

3.导出配置文件

virsh dumpxml centos7_clone >> centos7_clone_link.xml

4.修改配置文件

vim centos7_clone_link.xml

#删除2个配置
<uuid>a20f45f4-4b70-4c61-b31b-908b7309e324</uuid>
<mac address='52:54:00:c0:9f:43'/>

#修改2个配置
<name>centos7_clone_link</name>
<source file='/data/centos7_clone_link.qcow2'/>

5.导入配置文件

virsh define centos7_clone_link.xml

查看配置文件是否被发现

ll /etc/libvirt/qemu

6.启动虚拟机

virsh list --all 
virsh start centos7_clone_link

7.登录使用

virsh console centos7_clone_link 

第6章 KVM热添加硬盘


1. 热添加硬盘

1.创建硬盘

qemu-img create -f qcow2 centos7_data.qcow2 5G

2.临时添加

virsh attach-disk centos7 /data/centos7_data.qcow2 vdb --subdriver qcow2

3.永久添加

virsh attach-disk centos7 /data/centos7_data.qcow2 vdb --subdriver qcow2
virsh attach-disk centos7 /data/centos7_data.qcow2 vdb --subdriver qcow2 --config

4.磁盘格式化并配置挂载

在vm虚拟机操作

virsh console centos7
fdisk -l
mkfs.xfs /dev/vdb
mkdir /data/
mount /dev/vdb /data/
df -h
blkid |grep vdb
vim /etc/fstab

5.剥离磁盘

#临时剥离
virsh detach-disk centos7 vdb

#永久剥离
virsh detach-disk centos7 vdb
virsh detach-disk centos7 vdb --config

6.调整磁盘空间大小(扩容)

qemu-img resize /data/centos7_data.qcow2 +5G
qemu-img info centos7_data.qcow2

#以下命令在虚拟机内执行
mount /dev/vdb /data/
df -h
xfs_growfs /dev/vdb 
df -h

第7章 热添加内存


1.创建虚拟机时直接添加最大内存参数

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 -- memory 512,maxmemory=2048 --vcpus 1 --disk /opt/centos7.qcow2 --boot hd --network bridge=br0 --
graphics vnc,listen=0.0.0.0 --noautoconsole

2.如果创建虚拟机的时候没有设置最大内存限制,执行如下操作添加配置

virsh shutdown centos7
virsh setmaxmem centos7 3072M
virsh start centos7
virsh console centos7
free -h

3.临时添加内存命令

virsh setmem centos7 2048M --live 
virsh console centos7
free -h 

4.永久添加命令

virsh setmem centos7 2048M --live   #临时加
virsh setmem centos7 2048M --live --config
virsh dumpxml centos7|grep currentMemory

报错提示:

error: Failed to start domain centos7
error: internal error: qemu unexpectedly closed the monitor: Cannot set up guest memory 'pc.ram': Cannot allocate memory

报错原因:
虚拟机最大内存不能超过宿主机的总内存大小

第8章 KVM热添加CPU


注意: 热添加CPU的前提是创建虚拟机的时候配置了maxvcpus=10参数

1.创建虚拟机的时候添加最大CPU参数

virt-install \
--virt-type kvm \
--os-type=linux \
--os-variant rhel7 \
--name centos7 \
--memory 1024,maxmemory=2048 \
--vcpus 1,maxvcpus=10 \
--network network=default \
--disk /opt/centos7.raw,format=raw,size=10 \
--cdrom /opt/CentOS-7-x86_64-DVD-2003.iso \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole

virt-install \
--virt-type kvm \
--os-type=linux \
--os-variant rhel7 \
--name centos7 \
--memory 512,maxmemory=2048 \
--vcpus 1,maxvcpus=10 \
--disk /data/centos7.qcow2 \
--boot hd \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0 \
--noautoconsole

2.临时热添加CPU

virsh setvcpus centos7 4 --live

3.永久添加cpu

核数 setvcpus web04 4 --config

假如创建虚拟机的时候没有添加maxvcpus=10参数解决方法:

#1.停止虚拟机
virsh shutdown centos7

#2.改配置添加参数
<vcpu placement='static'>1</vcpu>

#3.启动后热添加
virsh start centos7
virsh setvcpus centos7 4 --live

#4.进入虚拟机并查看CPU核数
virsh console centos7
ls cpu

报错:虚拟机最大CPU核数不能超过宿主机的CPU核数
[root@db-51 /data]# virsh setvcpus centos7 4 --live
error: invalid argument: requested vcpus is greater than max allowable vcpus for the live domain: 4 > 1

第9章 KVM桥接网卡


前提: VMware虚拟机配置桥接模式打开DHCP

1.创建网桥桥接到eth0

virsh iface-bridge eth0 br0

2.链接克隆虚拟机磁盘

qemu-img create -f qcow2 -b centos7.qcow2 bridge.qcow2  

3.创建新虚拟机,网络选择是桥接模式

磁盘还在,删了配置文件

virt-install \
--virt-type kvm \
--os-type=linux \
--os-variant rhel7 \
--name centos7-bridge \
--memory 1024,maxmemory=2048 \
--vcpus 1,maxvcpus=10 \
--disk /opt/bridge.qcow2 \
--boot hd \
--network bridge=br0 \                
--graphics vnc,listen=0.0.0.0 \
--noautoconsole

配置文件解释

--boot hd \         #硬盘启动
--network bridge=br0 \    #更改网络模式,桥接模式

4.使用VNC链接并查看IP地址

5.测试使用SSH能否链接

第10章 KVM在线热迁移


1.安装配置nfs

[root@nfs-31 ~]# yum install nfs-utils -y
[root@nfs-31 ~]# cat /etc/exports
/data/ 10.0.0.0/24(rw,sync,all_squash,anonuid=107,anongid=107)
[root@nfs-31 ~]# groupadd -g 107 qemu
[root@nfs-31 ~]# useradd -u 107 -g 107 -M -s /sbin/nologin qemu
[root@nfs-31 ~]# mkdir /data
[root@nfs-31 ~]# chown -R qemu:qemu /data/
[root@nfs-31 ~]# systemctl restart rpcbind nfs

2.两台KVM都挂载nfs

mkdir /data 
mount -t nfs 10.0.0.31:/data /data

3.移动虚拟机磁盘文件到NFS目录

[root@db-52 ~]# virsh shutdown centos7
[root@db-52 ~]# cp /opt/centos7.qcow2

4.修改配置

[root@db-52 ~]# virsh edit centos7
<source file='/data/centos7.qcow2'/>

5.启动虚拟机

[root@db-52 ~]# virsh start centos7

6.检查运行状态

[root@db-52 ~]# virsh list

7.执行热迁移命令

[root@db-52 ~]# virsh migrate --live --verbose centos7 qemu+ssh://10.0.0.53/system --unsafe

8.53上检查是否运行

[root@db-53 ~]# virsh list

第11章 KVM图形管理界面


1.项目地址

https://github.com/retspen/webvirtmgr/wiki/Install-WebVirtMgr

2.安装依赖

yum -y install git python-pip libvirt-python libxml2-python python-websockify supervisor gcc python-devel
python -m pip install pip==20.3.4
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple

3.安装python的Django环境

git clone git://github.com/retspen/webvirtmgr.git
cd webvirtmgr
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
./manage.py syncdb
./manage.py collectstatic

4.安装配置Nginx

rpm -ivh nginx-1.18.0-1.el7.ngx.x86_64.rpm
mkdir /code
mv /opt/webvirtmgr /code/
chown -R nginx:nginx /code
rm -rf /etc/nginx/conf.d/default.conf
cat >/etc/nginx/conf.d/webvirtmgr.conf<<EOF
server {
  listen 80 default_server;

  server_name localhost;
  access_log /var/log/nginx/webvirtmgr_access_log;
   
  location /static/ {
      root /code/webvirtmgr;        
      expires max;
  }
  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;
  }

}
EOF
nginx -t
systemctl start nginx
netstat -lntup|grep 80

5.配置Supervisor

cat >/etc/supervisord.d/webvirtmgr.ini<<EOF
[program:webvirtmgr]
command=/usr/bin/python /code/webvirtmgr/manage.py run_gunicorn -c /code/webvirtmgr/conf/gunicorn.conf.py
directory=/code/webvirtmgr
autostart=true
autorestart=true
logfile=/var/log/supervisor/webvirtmgr.log
log_stderr=true
user=nginx

[program:webvirtmgr-console]
command=/usr/bin/python /code/webvirtmgr/console/webvirtmgr-console
directory=/code/webvirtmgr
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/webvirtmgr-console.log
redirect_stderr=true
user=nginx
EOF
systemctl start supervisord.service
supervisorctl status

6.创建用户

mkdir /var/cache/nginx/.ssh/ -p
chown -R nginx:nginx /var/cache/nginx/
su - nginx -s /bin/bash
ssh-keygen
touch ~/.ssh/config && echo -e "StrictHostKeyChecking=no\nUserKnownHostsFile=/dev/null" >> ~/.ssh/config
chmod 0600 ~/.ssh/config
ssh-copy-id root@10.0.0.12

 

posted on 2022-02-17 17:29  kenneth-lin  阅读(167)  评论(0编辑  收藏  举报