kvm-新

kvm-新

KVM

IBM,文档:http://www.ibm.com/developerworks/cn/linux/l-using-kvm/
lxd容器虚拟化:https://linuxcontainers.org/lxd/introduction/

准备前

安装系统时,关闭网卡自动命名,装完系统网卡名为eth0
kvm

关闭selinux 防火墙

systemctl disable firewalld
systemctl disable NetworkManager

准备前配置好网卡IP

bond0=eth0+eth1
yum install bridge-utils -y
[root@Final network-scripts]# cat ifcfg-eth0
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
USERCTL=no
SLAVE=yes
[root@Final network-scripts]# cat ifcfg-eth1
BOOTPROTO=none
NAME=eth1
DEVICE=eth1
ONBOOT=yes
NM_CONTROLLED=no
MASTER=bond0
USERCTL=no
SLAVE=yes
[root@Final network-scripts]# cat ifcfg-bond0 
BOOTPROTO=static
NAME=bond0
DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
BOOTPROTO=static
ONBOOT=yes
BONDING_OPTS="mode=0 miimon=500"
BRIDGE=br0
[root@Final network-scripts]# cat ifcfg-br0 
TYPE=Bridge
BOOTPROTO=static
NAME=br0
DEVICE=br0
ONBOOT=yes
IPADDR=192.168.10.254
NETMASK=255.255.255.0

[root@Final network-scripts]# cat ifcfg-eth2 
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
NAME=eth2
DEVICE=eth2
ONBOOT=yes
NM_CONTROLLED=no

注:弄了半天网卡服务起不来
eth2用dhcp的地址,要加NM_CONTROLLED=no
若网卡服务起不来,使用journalctl -f -u network 查看日志

1、确认CPU已经支持虚拟化,intel的CPU虚拟化技术交vmx,AMD的CPU交svm

grep -E "vmx|svm" /proc/cpuinfo

2、安装kvm平台及工具包及桌面

yum -y install qemu-kvm qemu-kvm-tools libvirt virt-manager virt-install
yum groupinstall "GNOME Desktop" -y
注安装桌面环境若有问题
file /boot/efi/EFI/centos from install of fwupdate-efi-12-5.el7.centos.x86_64 conflicts with file from package grub2-common-1:2.02-0.65.el7.centos.2.noarch
Error Summary
解决方法
yum update grub2-common -y

3、启动 libvirtsd 并设置为开机启动,librirtd 会创建一个桥接的网卡 virbr0 而且 IP 地址是 192.168.122.1

systemctl  start libvirtd
systemctl  enable  libvirtd
ifconfig  virbr0

4、为虚拟机分配 IP 地址的服务

ps -aux | grep dns

5、创建磁盘

qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G #创建一个格式为raw大小为10G的裸磁盘
qemu-img create -f qcow2 /var/lib/libvirt/images/centos7.5.qcow2 50G  #创建一个稀疏格式为qcow2大小为50G的裸磁盘

6、开始安装

#virsh-install命令帮助:
[root@linux-node1 ~]# virt-install  --help
usage: virt-install --name NAME --ram RAM STORAGE INSTALL [options]

使用指定安装介质新建虚拟机。

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --connect URI         使用 libvirt URI 连接到 hypervisor

通用选项:
  -n NAME, --name NAME  客户端事件名称
  --memory MEMORY       配置虚拟机内存分配。例如:
                        --memory 1024 (in MiB)
                        --memory 512,maxmemory=1024
  --vcpus VCPUS         为虚拟机配置的 vcpus 数。例如:
                        --vcpus 5
                        --vcpus 5,maxcpus=10,cpuset=1-4,6,8
                        --vcpus sockets=2,cores=4,threads=2,
  --cpu CPU             CPU 型号及功能。例如:
                        --cpu coreduo,+x2apic
                        --cpu host
  --metadata METADATA   配置虚拟机元数据。例如:
                        --metadata name=foo,title="My pretty title",uuid=...
                        --metadata description="My nice long description"

安装方法选项:
  --cdrom CDROM         光驱安装介质
  -l LOCATION, --location LOCATION
                        安装源(例如:nfs:host:/pathhttp://host/path
                        ftp://host/path)
  --pxe                 使用 PXE 协议从网络引导
  --import              在磁盘映像中构建虚拟机
  --livecd              将光驱介质视为 Live CD
  -x EXTRA_ARGS, --extra-args EXTRA_ARGS
                        附加到使用 --location 引导的内核的参数
  --initrd-inject INITRD_INJECT
                        使用 --locationinitrdroot
                        添加给定文件
  --os-variant DISTRO_VARIANT
                        在其中安装 OS 变体的虚拟机,比如
                        'fedora18'、'rhel6'、'winxp' 等等。
  --boot BOOT           配置虚拟机引导设置。例如:
                        --boot hd,cdrom,menu=on
                        --boot init=/sbin/init (for containers)
  --idmap IDMAPLXC 容器启用用户名称空间。例如:
                        --idmap uid_start=0,uid_target=1000,uid_count=10

设备选项:
  --disk DISK           使用不同选项指定存储。例如:
                        --disk size=10 (new 10GiB image in default location)
                        --disk /my/existing/disk,cache=none
                        --disk device=cdrom,bus=scsi
                        --disk=?
  -w NETWORK, --network NETWORK
                        配置虚拟机网络接口。例如:
                        --network bridge=mybr0
                        --network network=my_libvirt_virtual_net
                        --network network=mynet,model=virtio,mac=00:11...
                        --network none
                        --network help
  --graphics GRAPHICS   配置虚拟机显示设置。例如:
                        --graphics vnc
                        --graphics spice,port=5901,tlsport=5902
                        --graphics none
                        --graphics vnc,password=foobar,port=5910,keymap=ja
  --controller CONTROLLER
                        配置虚拟机控制程序设备。例如:
                        --controller type=usb,model=ich9-ehci1
  --input INPUT         配置虚拟机输入设备。例如:
                        --input tablet
                        --input keyboard,bus=usb
  --serial SERIAL       配置虚拟机串口设备
  --parallel PARALLEL   配置虚拟机并口设备
  --channel CHANNEL     配置虚拟机沟通频道
  --console CONSOLE     配置虚拟机与主机之间的文本控制台连接
  --hostdev HOSTDEV     将物理 USB/PCI/etc
                        主机设备配置为与虚拟机共享
  --filesystem FILESYSTEM
                        将主机目录传递给虚拟机。例如:
                        --filesystem /my/source/dir,/dir/in/guest
                        --filesystem template_name,/,type=template
  --sound [SOUND]       配置虚拟机声音设备模拟
  --watchdog WATCHDOG   配置虚拟机 watchdog 设备
  --video VIDEO         配置虚拟机视频硬件。
  --smartcard SMARTCARD
                        配置虚拟机智能卡设备。例如:
                        --smartcard mode=passthrough
  --redirdev REDIRDEV   配置虚拟机重定向设备。例如:
                        --redirdev usb,type=tcp,server=192.168.1.1:4000
  --memballoon MEMBALLOON
                        配置虚拟机 memballoon 设备。例如:
                        --memballoon model=virtio
  --tpm TPM             配置虚拟机 TPM 设备。例如:
                        --tpm /dev/tpm
  --rng RNG             配置虚拟机 RNG 设备。例如:
                        --rng /dev/random
  --panic PANIC         配置虚拟机 panic 设备。例如:
                        --panic default

虚拟机配置选项:
  --security SECURITY   设定域安全驱动器配置。
  --numatune NUMATUNE   为域进程调整 NUMA 策略。
  --memtune MEMTUNE     为域进程调整内粗策略。
  --blkiotune BLKIOTUNE
                        为域进程调整 blkio 策略。
  --memorybacking MEMORYBACKING
                        为域进程设置内存后备策略。例如:
                        --memorybacking hugepages=on
  --features FEATURES   设置域 <features> XML。例如:
                        --features acpi=off
                        --features apic=on,eoi=on
  --clock CLOCK         设置域 <clock> XML。例如:
                        --clock offset=localtime,rtc_tickpolicy=catchup
  --pm PM               配置 VM 电源管理功能
  --events EVENTS       配置 VM 生命周期管理策略
  --resource RESOURCE   配置 VM 资源分区(cgroups)

虚拟化平台选项:
  -v, --hvm             客户端应该是一个全虚拟客户端
  -p, --paravirt        这个客户端一个是一个半虚拟客户端
  --container           这台虚拟机需要一个容器客户端
  --virt-type HV_TYPE   要使用的管理程序名称(kvmqemuxen
                        等等)
  --arch ARCH           模拟的 CPU 构架
  --machine MACHINE     要模拟的机器类型

其它选项:
  --autostart           引导主机时自动启动域。
  --wait WAIT           等待安装完成的分钟数。
  --noautoconsole       不要自动尝试连接到客户端控制台
  --noreboot            完成安装后不要引导虚拟机。
  --print-xml [XMLONLY]
                        输出所生成域 XML,而不是创建虚拟机。
  --dry-run             完成安装步骤,但不要创建设备或者定义
                        虚拟机。
  --check CHECK         启用或禁用验证检查。例如:
                        --check path_in_use=off
                        --check all=off
  -q, --quiet           禁止无错误输出
  -d, --debug           输入故障排除信息

使用 '--option=?' 或者 '--option help' 查看可用子选项
有关示例及完整选项语法,请查看 man page
  • 默认网络
[root@linux-node1 ~]# virt-install  --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --cdrom=/opt/CentOS-7-x86_64-DVD-1511.iso --disk path=/opt/CentOS-7-x86_64.raw  --network network=default --graphics  vnc,listen=0.0.0.0 --noautoconsole
  • 桥接网络:
virt-install  --virt-type kvm --name  openstack-middleware1    --ram 1024  --vcpus 4 --cdrom=/ISO/CentOS-7-x86_64-DVD-1804.iso --disk path=/var/lib/libvirt/images/centos7.5.qcow2 --network bridge=br0  --graphics  vnc,listen=0.0.0.0  --noautoconsole
  • 安装Windows:
qemu-img create -f qcow2   /var/lib/libvirt/images/Windows-2008_r2-x86_64.qcow2  200G
virt-install --virt-type kvm  --name  Win_2008_r2-x86_64 --ram 3072  --vcpus=2 --os-type=windows --cdrom=/usr/local/src/windows_server_2008_r2.iso --disk path=/var/lib/libvirt/images/Windows-2008_r2-x86_64.qcow2,format=qcow2,bus=virtio   --disk path=/usr/local/src/virtio-win-0.1.141_amd64.vfd,device=floppy     --network bridge=br0,model=virtio  --graphics  vnc,listen=0.0.0.0 --noautoconsole

开始安装......

我们可以用VNC客户端来连接
vnc

  • 注:若SSH连接很慢
1、使用了 dns 反查,这样的话当 ssh 某个 IP 时,系统会试图通过 DNS 反查相对应的域名,如果 DNS 中没有这个 IP 的域名解析,则会等到 DNS 查询超时才会进行下一步,消耗很长时间

vim /etc/ssh/sshd_config
UseDNS no

默认情况下会有一行被注释掉的记录 #UseDNS yes,虽然这条记录被注释掉了,但 ssh 缺省情况下 UseDNS 的值是 yes,所以要显式的指定该值为 no
重新启动 ssh 服务
service sshd restart

2、这种情况在本地主机或远程主机启动图形的情况下比较明显,该参数似乎是在做图形方面的认证,具体功能还不清楚,但修改以后可以明显提高 ssh 远程登录速度
修改 GSSAPIAuthentication 参数为 no,默认是 yes
重新启动 ssh 服务
service sshd restart

虚拟机磁盘的格式

根据存储数据方式的不同可以分为两种格式,一种是稀疏模式。一种是全镜像模式,全镜像模式无法做快照,IO 层面是有 qemu 模拟的,CPU 和内存是有 KVM 实现的,以下是 KVM 的功能:

KVM 所支持的功能包括:

  • 支持CPU 和 memory 超分(Overcommit)
  • 支持半虚拟化I/O (virtio)
  • 支持热插拔 (cpu,块设备、网络设备等)
  • 支持实时迁移(Live Migration)
  • 支持 PCI 设备直接分配和 单根I/O 虚拟化 (SR-IOV)
  • 支持 内核同页合并 (KSM )
  • 支持 NUMA (Non-Uniform Memory Access,非一致存储访问结构

磁盘格式的转换

https://www.ibm.com/developerworks/cn/linux/l-cn-mgrtvm3/index.html
raw 转换为 qcow2

qemu-img convert -f raw centos.img -O qcow2 centos.qcow2

qcow2 转换为 raw

qemu-img convert -O qcow2 my.raw myqow.qcow

VMDK 转换为 qcow2

qemu-img convert -f vmdk -O qcow2 xxx.vmdk    xxx.img

查看磁盘详细信息

qemu-img   info xxx.raw  #查看raw格式的磁盘信息
qemu-img  info xxx.qcow #查看qcow格式的磁盘信息

宿主机的优化

全虚拟化和半虚拟化,内核态 Ring 0 可以直接访问周边的硬件设备,CPU、内存、网卡和硬盘等,应用运行在 Ring 3 是用户态,用户态不能直接操作硬件,如果要操作硬件会产生系统调用,客户端的操作系统不能工作在 Ring 0,因此 Intel 提供 vt-x 提供加速上下文切换,KVM 在系统里面是一个 qemu 进程,进程要受到 CPU 的调度,在多核 CPU 进程可能会被调度到任意 CPU 核心,CPU 的一级缓存是使用静态内存做的,二级缓存是使用高速的动态内存,缓存是将经常访问的数据缓存下来以加速访问速度,将进程绑定在一个 CPU 可以提高缓存的命中率:

CPU 绑定优化

taskset  --help
用法:taskset [选项] [掩码 | cpu列表] [pid|命令 [参数...]]

选项:
 -a, --all-tasks         在给定 pid 的所有任务(线程)上操作
 -p, --pid               在存在的给定 pid 上操作
 -c, --cpu-list          以列表格式显示和指定 CPU
 -h, --help              显示此帮助
 -V, --version           输出版本信息

默认行为是运行一条新命令:
taskset 03 sshd -b 1024
您可以获取现有任务的掩码:
taskset -p 700
或设置掩码:
taskset -p 03 700
使用逗号分隔的列表格式而不是掩码:
taskset -pc 0,3,7-11 700
列表格式中的范围可以带一个跨度参数:
例如 0-31:2 与掩码 0x55555555 等效

taskset -cp 2 42340 #将进程号为42340的进程指定运行在第二核心CPU

内存优化

内存 EPT 技术:
系统将内存识别为虚拟内存,包含物理内存和交换分区,KVM 是一个进程,EPT 是 Intel 用于加快内存映射的技术

大页内存,加快内存寻址:
cat /proc/meminfo
...
Hugepagesize: 2048 kB #Centos 7默认已开启

开启内存合并
cat /sys/kernel/mm/transparent_hugepage/enabled #将连续的没有使用的内存合并为2M一个表,减少内存碎片

IO 优化

使用 virtIO 半虚拟化的 IO 技术,让磁盘知道其运行在虚拟机环境当中

磁盘的调度算法

顺序读写远大于随机读写,系统的 IO 调度器是

cat /sys/block/sda/queue/scheduler #Centos 7 默认只有 3 个,Centos 6 有 4 个
noop:不进行调度,用于 SSD

[deadline]:最后期限算法,防止写操作因为不能读取而被饿死的情况

cfq:完全公平,公平分配 IO 访问,Centos 6 的默认算法

写入磁盘的几种方式

writeback:同时使用了虚拟机和物理机的 pagecache,会被同时写入到虚拟机和物理机的 pagecache 在写入到物理磁盘缓存,这种方式写入速度快但是假如突然断电会导致出现数据丢失而导致数据一致性出现问题,本方式性能最好但是不安全。

None:将数据直接写入到物理磁盘缓存在写入磁盘,速度次于 writeback。

writethrough:直接写入到物理磁盘,突然断电的话数据丢失最少,但是速度比较慢,因为绕过了上面的两层 pagecache 即没有使用缓存。

web 站点适用于使用 writeback,即读多写少的情况,对于需要提供数据安全的场景必须数据库等推荐使用 writethrough,KVM 默认就是使用的 writethrough:
disk

注:此笔记部分为摘录

转载于:https://www.cnblogs.com/fina/p/11194464.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值