kvm使用场景


1.公司测试环境/开发环境

测试开发环境可以使用配置低点的物理机就可以

2.公司生产环境

一般小公司没有私有云或容器团队,运维人员可能就1-2个,然后公司也不舍得花钱买商业化的私有云。

那么在这种情况下搞一台或多台高配的物理机里面装多个虚拟机,可以设置基础的虚拟机模板或根据不同业务设置不同的虚拟机模板,完成初步的环境标准,便于以后自动化运维。

KVM介绍

KVM(Kernel-based Virtual Machine)是一个linux的内核模块,现在已经是内核自带默认编译,不需要单独安装。主要负责控制cpu和内存跟内核的交互调度等工作,工作在内核态。

KVM需要CPU中虚拟化功能的支持,只可在具有虚拟化支持的CPU上运行,即具有VT功能的Intel CPU和具有AMD-V功能的AMD CPU。

KVM 虚拟化特性:

  • 嵌入到Linux正式Kernel(提高兼容性)
  • 代码级资源调用(提高性能)
  • 虚拟机就是一个进程(内存易于管理)
  • 直接支持NUMA技术(提高扩展性)
  • ---------- RedHat收购KVM -----------
  • 保持开源发展模式 更好的商业支持及服务保障

虚拟机镜像:

  • 全镜像模式-RAW
  • 稀疏模式-QCOW2

KVM 管理工具:

Libvirt介绍

libvirt 提供一种虚拟机监控程序不可知的 API 来安全管理运行于主机上的客户操作系统。libvirt 本身不是一种工具, 它是一种可以建立工具来管理客户操作系统的 API。libvirt 本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的 API。libvirt 起初是专门为 Xen 设计的一种管理 API,后来被扩展为可支持多个虚拟机监控程序。

QEMU介绍

有两种主要运作模式:
* User mode模拟模式,亦即是用户模式。QEMU能启动那些为不
同中央处理器编译的Linux程序。而Wine及Dosemu是其主要目标。
* System mode模拟模式,亦即是系统模式。QEMU能模拟整个电脑系统,
包括中央处理器及其他周边设备。它使得为跨平台编写的程序进行测试及除错工作变得容易。
其亦能用来在一部主机上虚拟数部不同虚拟电脑。

配置步骤


CentOS 7.2 系统最小化安装
一,关闭Selinux,Firewalld,Networkmanager,配置dns服务器ip
  1. [root@--x-x img]# systemctl disable NetworkManager
  2. [root@--x-x img]# systemctl disable firewalld
  3. [root@--x-x img]# grep ^SELINUX /etc/selinux/config
  4. SELINUX=disabled
  5. [root@--x-x network-scripts]# more /etc/resolv.conf
  6. nameserver 114.114.114.114
  7. nameserver 8.8.8.8
二,配置阿里云yum源
  1. rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
三,安装系统常用软件包
  1. yum install net-tools vim screen mtr nc nmap tree lrzsz open-ssl-devel gcc glibc gcc-c* make zip dos2unix systat mysql lsof tcpdump ntpdate -y
四,物理机确认bios确认是否开启虚拟机技术

虚拟化 Inter VT-x/EPT(内存虚拟化)或 AMD-V/RVI(V) 开启

  1. grep -E '(vmx|svm)' /proc/cpuinfo
五,安装kvm相关的软件包

kvm是内核虚拟机,需要加载内核模块,libvirtd是用于管理kvm虚拟机

  1. yum install -y qemu-kvm qemu-kvm-tools libvirt
六,启动libvirtd
  1. systemctl start libvirtd
  2. systemctl enable libvirtd
七,安装文件存放的目录,qemu目录是存放虚拟机xml文件

xml是libvirt 自动生成,xml里面的virtio是半虚拟化渠道,hvm是硬件虚拟机,还有一些其他的虚拟机配置信息

  1. [root@192-168-x-x libvirt]# ls
  2. libvirt-admin.conf libvirt.conf libvirtd.conf lxc.conf nwfilter qemu qemu.conf qemu-lockd.conf storage virtlockd.conf virtlogd.conf
  3. [root@192-168-x-x libvirt]# pwd
  4. /etc/libvirt
八,启动libvirtd后,会自动创建virbr0 桥接网卡 IP地址永远都是192.168.122.1

可以用ifconfig命令查看

  1. #ifconfig
  2. ......
  3. virbr0: flags=<UP,BROADCAST,MULTICAST> mtu
  4. inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
  5. ether :::5c:f1:a5 txqueuelen (Ethernet)
  6. RX packets bytes (0.0 B)
  7. RX errors dropped overruns frame
  8. TX packets bytes (0.0 B)
  9. TX errors dropped overruns carrier collisions
九,查看dnsmasq进程,dns和dhcp功能 帮助分配虚拟机,dnsmasq无需配置启动就行
  1. [xiewenming@--x-x ~]$ ps aux |grep dnsmasq
  2. nobody 0.0 0.0 ? S Mar14 : /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
  3. root 0.0 0.0 ? S Mar14 : /sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
  4. xiewenm+ 0.0 0.0 pts/ S+ : : grep --color=auto dnsmasq

安装virt-install,virt-edit,virt-manager,tigervnc-server和tigervnc相关的包,分别用于 安装,编辑,管理,vnc服务来管理维护虚拟机

十,libvirt 管理kvm虚拟机

可以提供接口 virsh等 底层都是libvirt libvirtd服务停止 kvm正常,只是管理不了,virsh是用C写的

  1. yum install -y virt-install libguestfs-tools-c virt-manager tigervnc-server tigervnc
十一,配置网卡桥接方法一

使用命令重启服务器或重启网络后配置丢失 (一般用于调试用)

  1. brctl addbr br0
  2. brctl addif br0 eth0 #(执行这一步会断网,可以把所有步骤写在一个脚本里)
  3. ip addr del dev eth0 192.168.x.x/
  4. ifconfig br1 192.168.x.x/ up
  5. route add default gw 192.168.x.1
十二,配置网卡桥接方法二

桥接信息写到配置文件里面,下面以桥架网卡1为例

  1. [root@192-168-x-x network-scripts]# more ifcfg-br1
  2. TYPE=Bridge
  3. BOOTPROTO=none
  4. DEVICE=br1
  5. ONBOOT=yes
  6. IPADDR0=192.168.x.x
  7. PREFIX0=
  8. GATEWAY0=192.168.x.1
  9. [root@192-168-x-x network-scripts]# more ifcfg-eth1
  10. DEVICE=eth1
  11. TYPE=Ethernet
  12. ONBOOT=yes
  13. BRIDGE=br1
  14. [root@192-168-x-x network-scripts]# route -n
  15. Kernel IP routing table
  16. Destination Gateway Genmask Flags Metric Ref Use Iface
  17. 0.0.0.0 192.168.x.10 0.0.0.0 UG br1
  18. 169.254.0.0 0.0.0.0 255.255.0.0 U br0
  19. 169.254.0.0 0.0.0.0 255.255.0.0 U br1
  20. 192.168.x.0 0.0.0.0 255.255.255.0 U br1
  21. 192.168.122.0 0.0.0.0 255.255.255.0 U virbr0
十三,安装图形桌面方便vnc管理
  1. yum groupinstall "X Window System"
  2. yum install gnome-classic-session gnome-terminal nautilus-open-terminal control-center liberation-mono-fonts
  3. unlink /etc/systemd/system/default.target
  4. ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
十四,配置vncserver及密码默认端口是从5901开始
  1. [root@192-168-x-x network-scripts]# vncpasswd
  2. Password: #设置密码
  3. [root@192-168-x-x network-scripts]# vncserver
  4. New '192-168-x-x.xxx.com:1 (root)' desktop is 192-168-x-x.xxx.com:
  5. Starting applications specified in /root/.vnc/xstartup
  6. Log file is /root/.vnc/192-168-x-x.xxx.com:.log
  7. [root@192-168-x-x network-scripts]# netstat -an|grep 0.0.0.0:
  8. tcp 0.0.0.0: 0.0.0.0:* LISTEN
十五,vnc客户端连接管理

十六,登陆以后,打开控制台使用virt-manager打开虚拟机管理界面

十七,进行虚拟机维护

可以关机,重启,删除,增加删除配置,安装系统等等 ,也可以支持安装Windows系统虚拟机

十八,常用的维护命令

可以使用命令安装虚拟机

virt-install创建虚拟机,不熟悉可以用virt-install --help查看帮助命令

  1. virt-intall --virt-type kvm --name CentOS--x86_64 --ram --cdrom=/Data/CentOS--x86_64-DVD--.iso \
    --disk path=/Data/CentOS--x86-_64.raw --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

用VNC客户端链接(60s内) 默认从5900开始,客户端安装截图略....我一般都通过vnc然后再用virt-manager进行管理虚拟机

  1. brctl show #查看桥接网卡信息
  2. virsh edit vname.xml #修改xml文件
  3. virsh shutdown vname #关闭虚拟机
  4. virsh start vname #启动虚拟机
  5. virsh list --all #列出全部虚拟机
  6. virsh dumpxml vname > vname.bak.xml #备份
  7. qemu-img convert -f raw -O qcow2 vname test.qcow2 #镜像文件格式转换
  8. qemu-img create -f raw node-192.168.3.30-centos-7.2.disk 50G #创建磁盘镜像命令
  9. virsh undefine node1.xml (删除虚拟机域,生产环境不用此命令,非常危险)
  10. virt-clone -o centos7_mini -n centos7_mini15 --auto-clone #克隆mini,新克隆的为mini15
  11. -o #原始机名字,必须为关闭或暂停状态
  12. -n #新客户机的名称
  13. --auto-clone #从原始客户机配置中自动生成克隆名称和存储路径
  14. --replace #不检查命名冲突,覆盖任何使用相同名称的客户机
  15. -f #可以指定克隆后的主机镜像放在指定目录下
  16.  
  17. virsh autostart xxx #让子机随宿主机开机自动启动
  18. virsh autostart --disable xxx #解除自动启动
  19.  
  20. virt-install #建立kvm虚拟机
  21. virsh list #查看正在运行的KVM虚拟机
  22. virsh start name #启动KVM虚拟机
  23. virsh shutdown name #正常关闭KVM虚拟机
  24. virsh destroy name #强制关闭KVM虚拟机(类似于直接断电)
  25. virsh suspend name #挂起KVM虚拟机
  26. virsh resume name #恢复挂起的KVM虚拟机
  27. virsh dumpxml name #查看KVM虚拟机配置文件,可以把输出的内容定义到xml里,用来克隆迁移用。
  28. virsh edit name #编辑KVM虚拟机的xml配置文件
  29. virsh define /etc/libvirt/qemu/name.xml #定义注册虚拟机,需要先查看xml文件对应的镜像,img等路径是否存在或修改指定路径
  30. virsh undefine name #彻底删除KVM虚拟机,不可逆,如果想找回来,需要备份/etc/libvirt/qemu的xml文件
    virsh attach-disk centos7_mini15 /home/disk_data/centos7_mini15.img vdb #分离虚拟机硬盘
    virsh detach-disk centos7_mini15 /home/disk_data/centos7_mini15.img vdb#为虚拟机添加硬盘

遇到的一些问题


1.之前用CentOS7.3的时候windows虚拟机安装的时候黑屏,一直没有找到解决办法,最后没有办法就降到CentOS7.2,所有建议生产环境不用使用CentOS7.3部分服务有兼容的不太好

2.磁盘满了部分虚拟机进程被系统kill掉

3.没有可用内存时,也会出现部分虚拟机被系统kill掉,严重的情况下物理服务器可能会自动重启(所有在使用的过程中资源尽量不要超配)

4.有时可能会出现桥接的网卡和时间配置的网卡不是同一个 可以用ifconfig -a查看

KVM配置及维护的更多相关文章

  1. Linux DNS 服务器安装、配置和维护

    每个 IP 地址都可以有一个主机名,主机名由一个或多个字符串组成,字符串之间用小数点隔开.有了主机名,就不要死记硬背每台 IP 设备的 IP 地址,只要记住相对直观有意义的主机名就行了.这就是 DNS ...

  2. [转载]虚拟化之KVM配置

    虚拟化之KVM配置 2017-11-06 [TOC] 虚拟化:通过虚拟化工具把cpu,内存,硬盘等真实硬件资源给模拟成更少的虚拟硬件资源.进行虚拟化的好处是,最大限度的利用硬件资源.也是云计算的基础. ...

  3. Vue+webpack项目配置便于维护的目录结构

    新建项目的时候创建合理的目录结构便于后期的维护是很重要 环境:vue.webpack 目录结构: 项目子目录结构 子目录结构都差不多,主要目录是在src下面操作 src目录结构 src/common ...

  4. ES系列十六、集群配置和维护管理

    一.修改配置文件 1.节点配置 1.vim elasticsearch.yml # ======================== Elasticsearch Configuration ===== ...

  5. CentOS下KVM配置NAT网络(网络地址转换模式)

    KVM虚拟机Nat方式上网: # 查看当前活跃的网络 virsh net-list # 查看该网络的详细配置 virsh net-dumpxml default 客户机的XML配置文件中interfa ...

  6. 3、kvm配置vnc

    配置kvm通过vnc访问 virsh edit privi-server 添加如下配置: <graphics type='vnc' port='5901' autoport='no' liste ...

  7. kvm配置虚拟机[待整理]

    working note 4-12-2016 1,利用libvirt图形虚拟机管理工具virt-manager搭建虚拟机,通过存储池(storage pool )和卷(volume)存放虚拟机镜像(I ...

  8. Oracle 11g Dataguard 配置,维护与详解 (ADG)

    一.前言: 本手册主要记录如何配置,还介绍了配置原因,以及注意要点,已经主备切换,以及故障转移等重要操作步骤,我希望这个文章可以作为进行dataguard配置的一个参考手册. 二.前提 1.主库是归档 ...

  9. GitLab 安装,配置及维护

    参考: GitLab 官方文档 docker-gitlab,通过 docker-compose 快速安装 GitLab rake,是 Rails 的工具,类似 ruby 中常用的的 make.通过 R ...

随机推荐

  1. 浏览器加载不上css,样式走丢

    来自:http://www.cnblogs.com/crizygo/p/5466444.html 问题描述:使用eclipse修改样式文件,浏览器的页面一时显示一时不显示,最后直接没有加载最新的css ...

  2. 使用pinyin4j实现汉字转拼音

    1. maven项目,请在pom.xml里边添加包依赖相关配置: <dependency> <groupId>net.sourceforge.pinyin4j</grou ...

  3. wordcount(C语言)

    写在前面 上传的作业代码与测试代码放在GitHub上了 https://github.com/IHHHH/gitforwork 本次作业用的是C语言来完成,因为个人能力与时间关系,只完成了基本功能,扩 ...

  4. Python量化常用函数

    # -*- coding: utf-8 -*- # @Author: fangbei # @Date: 2017-08-26 # @Original: price_str = '30.14, 29.5 ...

  5. 一.shell基础知识

    参考网站:http://billie66.github.io/TLCL/book/chap08.html 1.字符“*”--展开 [me@linuxbox ~]$ echo * Desktop Doc ...

  6. Python并行编程(六):线程同步之条件

    1.基本概念 条件指的是应用程序状态的改变.其中某些线程在等待某一条件发生,其 他线程会在该条件发生的时候进行通知,一旦条件发生,线程会拿到共享资源的唯一权限. 2.示例代码 from threadi ...

  7. Jacl 是 TCL 的一个备用实现

    Jacl 是 TCL 的一个备用实现,它是完全使用 Java 代码编写的. wsadmin 工具使用 Jacl V1.3.2. 建议不要在 wsadmin 工具中使用 Jacl 语法 建议不要使用一个 ...

  8. 011-HQL中级1-Hive快捷查询:不启用Mapreduce job启用Fetch task三种方式介绍

    如果你想查询某个表的某一列,Hive默认是会启用MapReduce Job来完成这个任务,如下: hive; Total MapReduce jobs Launching Job out since ...

  9. 20165324 《Java程序设计》 第六周

    学号 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 第八章 常用实用类 String类 构造String对象:常量对象:String对象:引用String常 ...

  10. BZOJ 1316: 树上的询问

    挺裸的点分治 刚开始想用map水过去,然后做p次点分治,然后T到自闭 最后发现可以sort一遍,然后去重,记录每个数出现的次数,这样就可以双指针,不会漏掉了 #include <bits/std ...