#注意需要开启虚拟化引擎

1.0 安装kvm 环境

#在宿主机安装kvm环境:
[root@localhost data]# yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-* libvirt-client 

#启动服务
[root@localhost data]# systemctl start libvirtd
[root@localhost data]# systemctl enable libvirtd
[root@localhost data]# echo "net.ipv4.ip_forward =1">>/etc/sysctl.conf
[root@localhost data]# sysctl -p

#创建源镜像目录
[root@localhost data]# mkdir /data

2.0 将centos 镜像上传到data 目录

#上传原版Centos iso镜像文件到/data目录
[root@localhost data]# ls /data
CentOS-7-x86_64-DVD-2009.iso

#CentOS7镜像阿里云下载地址
http://mirrors.aliyun.com/centos/7/isos/x86_64/

2.1 创建qcow2 格式镜像文件

[root@localhost data]# qemu-img create -f qcow2 /data/CentOS7_YF.qcow2 100G

#创建qcow2 格式 容量为 100G的文件用于之后的操作,此设置,设置了镜像文件启动之后,磁盘大小

3.0 创建kvm虚拟机

virt-install --name CentOS_YF --virt-type kvm \  #创建kvm虚拟机的名字 虚拟化类型
--ram 2048 \                                     #内存大小 随意设置
--vcpus=2 \                                      #cpu 个数 随意设置
--cdrom=/data/CentOS-7x86_64-DVD-2009.iso \      #源镜像文件位置
--disk paht=/data/CentOS7_YF.qocw2 \             #数据盘位置
--network bridge=br0 \                           #使用br0 网络
--graphics vnc,listen=0.0.0.0 \                  #使用vnc登录
--noautoconsole

3.1 使用vnc 链接 下载地址 Download VNC Viewer | VNC® ConnectControl VNC® enabled computers with VNC® Viewer.https://www.realvnc.com/en/connect/download/viewer/3.1.1 虚拟机链接后可进行初始化设置,安装所需要的环境

#关闭网卡图形化设置模式
[root@localhost data]#systemctl stop NetworkManager
[root@localhost data]#systemctl disable NetworkManager

#防火墙优化
[root@localhost data]#systemctl disable firewalld
[root@localhost data]#systemctl stop firewalld

#下载常用命令
[root@localhost data]#yum -y install vim lrzsz wget lsof net-tools tree screen tcpdump gcc gcc-c++ make telnet ntpdate acpid

#更改源
[root@localhost data]#curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
[root@localhost data]#curl -o /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
[root@localhost data]#sed -i '/UUID/d' /etc/sysconfig/network-scripts/ifcfg-eth*
[root@localhost data]#sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

#容器环境搭建脚本如下:
#!/bin/bash

# 安装依赖包

yum -y install yum-uitls device-mapper-persistent-data lvm2

yum -y install gcc gcc-c++ make

if [ $? -eq 0 ];then
yum -y install docker-ce
else
continue
#!/bin/bash

# 安装依赖包

yum -y install yum-uitls device-mapper-persistent-data lvm2

yum -y install gcc gcc-c++ make

if [ $? -eq 0 ];then
yum -y install docker-ce
else
continue
fi

if [ $? -eq 0 ];then
systemctl start docker
systemctl enable docker
else
echo "docker安装成功"
fi

[ -f /etc/docker/daemon.json ] || touch /etc/docker/daemon.json
cat > /etc/docker/daemon.json <<EOF
{
"registry-mirrors":[ "https://registry.docker-cn.com" ]
}
EOF

echo "重新加载配置"
systemctl daemon-reload
systemctl restart docker

# docker-compose 下载
if [ $? -eq 0 ];then
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose
if [ $? -eq 0 ];then
chmod +x /usr/bin/docker-compose
else
echo "重新加载"
fi
else
echo "重新加载docker-compose"
continue
fi

if [ $? -eq 0 ];then
echo " docker 安装成功\n docker-compose 安装成功"
else
echo " 安装失败 "
fi
注意: 如果需要修改docker版本可直接修改脚本中版本号

3.2 安装完成关机,清理虚拟机碎片

清理机器信息 virt-sysprep -d CentOS7_YF
[root@localhost data]# virt-sysprep -d CemtOS_YF
[ 0.0] Examining the guest ...
[ 4.7] Performing "abrt-data" ...
[ 4.7] Performing "backup-files" ...
[ 5.9] Performing "bash-history" ...
[ 5.9] Performing "blkid-tab" ...
[ 5.9] Performing "crash-data" ...
[ 5.9] Performing "cron-spool" ...
[ 6.0] Performing "dhcp-client-state" ...
[ 6.0] Performing "dhcp-server-state" ...
[ 6.0] Performing "dovecot-data" ...
[ 6.0] Performing "logfiles" ...
[ 6.0] Performing "machine-id" ...
[ 6.0] Performing "mail-spool" ...
[ 6.0] Performing "net-hostname" ...
[ 6.1] Performing "net-hwaddr" ...
[ 6.1] Performing "pacct-log" ...
[ 6.1] Performing "package-manager-cache" ...
[ 6.2] Performing "pam-data" ...
[ 6.2] Performing "passwd-backups" ...
[ 6.2] Performing "puppet-data-log" ...
[ 6.2] Performing "rh-subscription-manager" ...
[ 6.3] Performing "rhn-systemid" ...
[ 6.3] Performing "rpm-db" ...
[ 6.3] Performing "samba-db-log" ...
[ 6.3] Performing "script" ...
[ 6.3] Performing "smolt-uuid" ...
[ 6.3] Performing "ssh-hostkeys" ...
[ 6.3] Performing "ssh-userdir" ...
[ 6.3] Performing "sssd-db-log" ...
[ 6.3] Performing "tmp-files" ...
[ 6.3] Performing "udev-persistent-net" ...
[ 6.3] Performing "utmp" ...
[ 6.3] Performing "yum-uuid" ...
[ 6.3] Performing "customize" ...
[ 6.3] Setting a random seed
[ 6.3] Setting the machine ID in /etc/machine-id
[ 6.7] Performing "lvm-uuids" ...

3.3 virt-sparsify compress 压缩镜像

mkdir /data/tmp
chmod 1777 /data/tmp/
export TEMP=/data/tmp
export TMPDIR=/data/tmp
echo 'export TEMP=/data/tmp' >> /etc/profile
echo 'export TMPDIR=/data/tmp' >> /etc/profile
source /etc/profile

压缩镜像;
[root@localhost data]#virt-sparsify --compress /data/CentOS7_YF.qcow2 /data/CentOS7_YF_allinone.qcow2
[ 0.1] Create overlay file in /data/tmp to protect source disk
[ 0.2] Examine source disk
◓ 25% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒═══════════════════════════════════════════════════════════⟧ --:--
100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ --:--
[ 24.8] Fill free space in /dev/centos/root with zero
100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[ 504.3] Clearing Linux swap on /dev/centos/swap
100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[ 511.3] Fill free space in /dev/sda1 with zero
[ 511.7] Fill free space in volgroup centos with zero
[ 515.2] Copy to destination and make sparse
[1540.3] Sparsify operation completed with no errors.
virt-sparsify: Before deleting the old disk, carefully check that the
target disk boots and works correctly.

4.0 执行命令创建虚拟机

#测试镜像文件
[root@localhost data]#virt-install \
--virt-type kvm \
--name test01 \
--ram 2048 \
--vcpus=1 \
--import \
--disk path=/data/test.qcow2 \
--network bridge=br0 \
--graphics vnc,listen=0.0.0.0,port=8899 \
--os-type=linux

注意:模板机创建的网路类型,通过模板文件启动的时候,需要和创建模板机时的网络类型一至,如果不一致,会导致网卡启动不起来;

5.0 kvm常用命令

#virt-install [选项]
-h 查看帮助
--connect=CONNECT   #连接非默认的hypervisor,默认为qemu:///system
-n name             #新的虚拟机主机实例名称
--virt-type kvm     #虚拟化的类型
--os-type=linux     #系统类型
--os-variant fhel7  #系统版本
-r MEMORT           #虚拟机内存设置
--arch=ARCH cpu     #架构
--machine=MACHINE   #虚拟机模拟机类型,Xen或者KVM等。
--vcpus=VCPUS       #虚拟主机CPU个数
-c CDROM            #设置光盘镜像或光盘设备路径
-l LOCATION         #指定安装源路径
--pxe               #使用pxe协议启动
--import            #导入现有的虚拟机
-x EXTRA            #附加的内核参数,如-x "ks=http://server/server.ks"
--os-type=Type      #操作系统类型,如linux、windwos等
--disk=DISKOPTS     #设置虚拟机磁盘,如--disk /dev/storage/path
-w NETWORK          #设置虚拟机网络,如-w bridge=br0
--noneworks         #虚拟机不设置任何网络接口
-m MAC              #设置虚拟机MAC地址
--vnc               #设置通过vnc查看虚拟机
--hvm               #使用全虚拟化
--paravirt          #使用半虚拟化技
--soundhw MODEL     #设置声卡设备
--autostart         #设置虚拟机为开机启动
--disk /opt/centos2.raw,format=raw,size=10   #设置硬盘大小,位置
--cdrom /opt/centos-7-x86_64-DVD.iso         #设置镜像
#kvm虚拟机管理工具的部分常用命令;
virt-install # 建立kvm虚拟机
virsh list --all # 查看正在运行的KVM虚拟机
virsh list --all # 查看所有KVM虚拟机
virsh start name # 启动KVM虚拟机
virsh shutdown name # 正常关闭KVM虚拟机(一般要等几分钟)
virsh destroy name # 强制关闭KVM虚拟机(类似于直接断电)
virsh suspend name # 挂起KVM虚拟机
virsh resume name # 恢复挂起的KVM虚拟
virsh dumpxml name # 查看KVM虚拟机配置文件
virsh edit name # 编辑KVM虚拟机的xml配置文件(虚拟机关机后生效)
virsh undefine name # 彻底删除KVM虚拟机,建议先用virsh dumpxml name > xxx.xml 保存配置文件)
virsh define xxx.xml # 根据xxx.xml文件定义虚拟机
virsh console name # 字符界面控制虚拟机
virsh domiflist name # 显示虚拟机的网卡信息
virsh attach-interface name --type bridge --source br0 --medol virtio--config
# 给虚拟机增加网卡,后面是网卡参数,根据 domiflist 查看情况来确定(虚拟机关机后生效,宿主机重启后失效,需要保存到配置文件中,在重新define)
virsh detach-interface name --type bridge --mac 物理地址
# 删除虚拟机网卡,参数根据 domiflist 查看情况来

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐