環境準備node
IP 主機名 操做系統 192.168.56.11 linux-node1 centos7
禁用Selinux,禁用防火牆python
接下來,開始安裝linux
(1)首先查看是否支持虛擬化ios
[root@linux-node1 ~]# grep -E -o 'svm|vmx' /proc/cpuinfo vmx vmx vmx vmx
有結果,說明支持虛擬化。c++
我這裏用的是虛擬機,在處理器配置頁面,選擇了「虛擬化Intel VT-x/EPT或AMD-V/RVI(V)」,支持虛擬化。redis
若是是物理機,並且執行執行上面的命令沒有返回結果,那麼就得去BIOS中找Virtualization Technology或者VT關鍵字,設置爲enabled或on。vim
(2)安裝KVMcentos
yum -y install qemu-kvm qemu-kvm-tools libvirt
安裝完後,啓動libvirtapi
systemctl start libvirtd systemctl enable libvirtd #設置開機啓動
libvirtd用來管理kvm網絡
啓動libvirtd後,執行ifconfig
[root@linux-node1 ~]# ifconfig eth0: flags=4163mtu 1500 inet 192.168.56.11 netmask 255.255.255.0 broadcast 192.168.56.255 inet6 fe80::20c:29ff:fe83:fcc2 prefixlen 64 scopeid 0x20 ether 00:0c:29:83:fc:c2 txqueuelen 1000 (Ethernet) RX packets 411241 bytes 334142719 (318.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 431982 bytes 449719632 (428.8 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10loop txqueuelen 0 (Local Loopback) RX packets 252754 bytes 20684384 (19.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 252754 bytes 20684384 (19.7 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099mtu 1500 inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255 ether 52:54:00:c5:ce:47 txqueuelen 0 (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
自動建立了一個virbr0網卡,地址是192.168.122.1,這是安裝kvm時都會建立的。
執行ps aux|grep dns
[root@linux-node1 ~]# ps -ef|grep dns nobody 2529 1 0 Sep04 ? 00:00:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper root 2530 2529 0 Sep04 ? 00:00:00 /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
libvirt啓動了一個dnsmasq進程,這個進程有dns和dhcp的功能,幫助咱們分配地址。
qemu-img命令用於建立虛擬硬盤
[root@linux-node1 ~]# whereis qemu-img qemu-img: /usr/bin/qemu-img /usr/share/man/man1/qemu-img.1.gz [root@linux-node1 ~]# rpm -qf /usr/bin/qemu-img qemu-img-1.5.3-105.el7_2.7.x86_64
rpm -qf用於查看一個已經安裝的文件屬於哪一個軟件包
qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G -f raw 是建立虛擬機磁盤的文件格式 /opt/CentOS-7-x86_64.raw 是文件名稱 10G 是文件大小
使用xftp往192.168.56.11主機裏上傳一個centos鏡像
[root@linux-node1 /opt]# ll /opt/CentOS-7-x86_64-DVD-1511.iso -rw-r--r-- 1 qemu qemu 4329570304 Sep 4 01:55 /opt/CentOS-7-x86_64-DVD-1511.iso
virt-install其實就是一個python寫的腳本 。它是qemu-kvm工具的人性化實現。能夠利用該工具在終端下建立KVM guest主機。
直接用yum安裝
yum -y install virt-install
[root@linux-node1 ~]# whereis virt-install virt-install: /usr/bin/virt-install /usr/share/man/man1/virt-install.1.gz [root@linux-node1 ~]# cat /usr/bin/virt-install #!/bin/sh exec "/usr/share/virt-manager/virt-install" "$@" [root@linux-node1 ~]# more /usr/share/virt-manager/virt-install #!/usr/bin/python2 -tt # # Copyright 2005-2014 Red Hat, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version.
安裝kvm guest主機
virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 2048 --cdrom=/opt/CentOS-7-x86_64-DVD-1511.iso --disk path=/opt/CentOS-7-x86_64.raw --network=default --graphics vnc,listen=0.0.0.0 --noautoconsole --virt-type kvm #虛擬機類型是kvm --name #虛擬機名稱 --ram #內存 --cdrom #磁盤鏡像 --disk #虛擬磁盤路徑 --network #默認是default,虛擬機裝好後,用此網段的地址 --graphics #使用的圖形界面 --noautoconsole #使用本選項指定不自動試圖鏈接到客戶機控制檯
執行完成後,會有以下提示
Starting install... Creating domain... Domain installation still in progress.You can reconnect to the console to complete the installation process.
查看系統的端口占用狀況
netstat -lntp|grep 5900 vnc的端口是從5900開始的。使用vnc鏈接時,默認不用輸入端口號
使用vnc鏈接後,進入CentOS7的安裝界面
CentOS7安裝時,默認的網卡名稱不是eth0,爲了標準化,在安裝以前,先修改網卡名稱。進入安裝界面後,敲擊tab鍵,來進行修改
在vmlinuz initrd=initrd.img......語句後面添加 net.ifnames=0 biosdevname=0
往下的步驟就是安裝操做系統,選擇時區、語言、密碼、軟件最小安裝、分區等等,這些步驟能夠在網上查到,再也不詳述。
安裝完後點擊reboot
注意: 注意: 注意:新安裝的虛擬機它是沒法啓動的。
顯示虛擬機
[root@linux-node1 ~]# virsh list --all Id Name State ---------------------------------------------------- - CentOS-7-x86_64 shut off virsh list --all #顯示本地全部的虛擬機(活動的+不活動的) virsh list #顯示本地活動虛擬機
啓動虛擬機
[root@linux-node1 ~]# virsh start CentOS-7-x86_64 Domain CentOS-7-x86_64 started [root@linux-node1 ~]# virsh list --all Id Name State ---------------------------------------------------- 2 CentOS-7-x86_64 running
再次使用TightVNC鏈接虛擬機,這時能夠鏈接。
因爲是最小化安裝,因此不少軟件包都沒有安裝,先配置網卡,調通網絡,進行yum安裝。
配置網卡
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE=Ethernet BOOTPROTO=dhcp DEFROUTE=yes PEERDNS=no PEERROUTES=yes IPV4_FAILURE_FATAL=no #IPV6INIT=yes #IPV6_AUTOCONF=yes #IPV6_DEFROUTE=yes #IPV6_PEERDNS=yes #IPV6_PEERROUTES=yes #IPV6_FAILURE_FATAL=no NAME=eth0 #UUID=b662ea05-2764-49e2-9eba-94c4fff38456 DEVICE=eth0 ONBOOT=yes
[root@localhost ~]# ip ad li 1: lo:mtu 65536 qdisc noqueue state UNKNOWN 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: eth0:mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 52:54:00:45:2f:9d brd ff:ff:ff:ff:ff:ff inet 192.168.122.22/24 brd 192.168.122.255 scope global dynamic eth0 valid_lft 2920sec preferred_lft 2920sec inet6 fe80::5054:ff:fe45:2f9d/64 scope link valid_lft forever preferred_lft forever 3: virbr0:mtu 1500 qdisc noqueue state DOWN link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff inet 192.168.124.1/24 brd 192.168.124.255 scope global virbr0 valid_lft forever preferred_lft forever 4: virbr0-nic:mtu 1500 qdisc pfifo_fast state DOWN qlen 500 link/ether 52:54:00:13:0d:2e brd ff:ff:ff:ff:ff:ff [root@localhost ~]#
這樣就能夠yum安裝軟件了
yum install net-tools yum install vim screen mtr nc nmap tree lrzsz openssl-devel gcc glibc gcc-c++ make zip dos2unix systat
[root@linux-node1 ~]# ps -ef|grep kvm root 844 2 0 Sep04 ? 00:00:00 [kvm-irqfd-clean] qemu 17214 1 12 14:58 ? 00:02:13 /usr/libexec/qemu-kvm -name CentOS-7-x86_64 -S -machine pc-i440fx-rhel7.0.0,accel=kvm,usb=off -cpu Nehalem -m 2048 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid 317f5d1e-6fd1-47f3-bb86-fa4505d3ef30 -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-CentOS-7-x86_64/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -global PIIX4_PM.disable_s3=1 -global PIIX4_PM.disable_s4=1 -boot strict=on -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -device virtio-serial-pci,id=virtio-serial0,bus=pci.0,addr=0x4 -drive file=/opt/CentOS-7-x86_64.raw,if=none,id=drive-virtio-disk0,format=raw -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive if=none,id=drive-ide0-0-0,readonly=on,format=raw -device ide-cd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 -netdev tap,fd=23,id=hostnet0,vhost=on,vhostfd=24 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=52:54:00:45:2f:9d,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-CentOS-7-x86_64/org.qemu.guest_agent.0,server,nowait -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,id=channel0,name=org.qemu.guest_agent.0 -device usb-tablet,id=input0 -vnc 0.0.0.0:0 -vga cirrus -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on root 17219 2 0 14:58 ? 00:00:00 [kvm-pit/17214] root 17593 17549 0 15:16 pts/3 00:00:00 grep --color=auto kvm
經過查看進程咱們能夠看到,咱們啓動的一個虛擬機,從宿主機的角度看,就是啓動了一個進程,這個進程經過qemu用戶啓動。
若是咱們kill掉這個進程,虛擬機就像斷電同樣,關機了。
libvirt能夠管理的虛擬化: Xen KVM VMware VirtualBox Hyper-V
libvirt須要後臺啓動一個libvirtd進程
若是中止了libvirtd進程,虛擬機仍然運行。這說明libvirtd進程中止後,虛擬機會獨立運行,但再也不受libvirt管理。
進入/etc/libvirt/qemu目錄,咱們能夠看到一個xml文件
[root@linux-node1 /etc/libvirt/qemu]# ll total 4 -rw------- 1 root root 3886 Sep 4 02:51 CentOS-7-x86_64.xml drwx------ 3 root root 40 Sep 4 02:29 networks [root@linux-node1 /etc/libvirt/qemu]#
libvirt是經過這個xml文件來管理虛擬機的
[root@linux-node1 /etc/libvirt/qemu]# vim CentOS-7-x86_64.xml WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE OVERWRITTEN AND LOST. Changes to this xml configuration should be made using: virsh edit CentOS-7-x86_64 or other application using the libvirt API. 這段話是說,這個文件是自動生成的,並且不能更改。 若是想編輯,須要使用virsh edit CentOS-7-x86_64 或者調用libvirt API
當咱們須要使用virsh來執行某個命令時,須要使用virsh --help來查看virsh提供哪些參數及功能。
備份xml文件
[root@linux-node1 /etc/libvirt/qemu]# virsh dumpxml CentOS-7-x86_64 > backup.xml [root@linux-node1 /etc/libvirt/qemu]# ls backup.xml CentOS-7-x86_64.xml networks
關閉虛擬機
virsh shutdown CentOS-7-x86_64
啓動虛擬機
virsh start CentOS-7-x86_64
掛起虛擬機
virsh suspend CentOS-7-x86_64
恢復虛擬機
virsh resume CentOS-7-x86_64
建立快照
virsh snapshot-create CentOS-7-x86_64 注意:raw格式不支持建立快照 virsh snapshot-list #查看快照
以上能夠對比vmware workstation的功能
修改cpu數量
在使用virt-install安裝虛擬機時就能夠指定cpu個數
[root@linux-node1 ~]# virt-install --help|grep cpu --vcpus VCPUS Number of vcpus to configure for your guest. Ex: --vcpus 5 --vcpus 5,maxcpus=10,cpuset=1-4,6,8 --vcpus sockets=2,cores=4,threads=2, --cpu CPU CPU model and features. Ex: --cpu coreduo,+x2apic --cpu host 使用--vcpus能夠指定客戶機cpu的個數 能夠實現動態修改 可是不能超過cpu個數最大值
修改cpu個數
編輯xml文件 [root@linux-node1 /etc/libvirt/qemu]# virsh edit CentOS-7-x86_64<vcpu placement='auto' current="1">4</vcpu>把原來文件中的static改爲auto,添加current="1",再把原來值由1改成4 <vcpu placement='auto' current="1">4</vcpu>
修改後,重啓客戶機
virsh shutdown CentOS-7-x86_64 virsh start CentOS-7-x86_64
而後再執行以下命令便可
virsh setvcpus CentOS-7-x86_64 2 --live
修改
virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512
查看
virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon
登陸到客戶機執行free -m查看是否與修改的一致。
擴容有風險,操做需謹慎