目录

Linux虚拟化-kvm虚拟机平台

kvm 虚拟机平台部署和使用.

动机

企业有 idc 机房的朋友们,日常运维避免不了要操作 kvm 虚拟机的。如果条件比较好的,可能使用 OpenStack 平台来做 kvm 的管理,没有条件的一般用 pve 或者 qemu-kvm 来做承载 kvm 的平台。

OpenStack 平时没机会搞,pve 和 qemu-kvm 倒是偶尔会部署和使用,为了方便以后自己查阅,所以记录一下 pve 和 qemu-kvm 的搭建步骤。

qemu

我们先看看 qemu-kvm ,本次 qemu-kvm 部署在 Centos7 系统上,其他系统暂无参考。

前置工作

警告
新安装完系统的机器要检查有没有关闭 selinux 和 firewalld 。
  1. 查看CPU是否支持虚拟化。

    cat /proc/cpuinfo |grep vmx

    有输出就说明支持。

  2. 查看kvm模块是否加载。

    lsmod |grep kvm

  3. 加载kvm模块。

    modprobe kvm

    modprobe kvm_intel

  4. 内核参数优化,具体根据自己的场景设置。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
    # 网卡桥接设置
    cp /etc/sysconfig/network-scripts/ifcfg-em4 /etc/sysconfig/network-scripts/ifcfg-br0
    cat << EOF > /etc/sysconfig/network-scripts/ifcfg-br0
    TYPE=Bridge
    DEVICE=br0
    ONBOOT=yes
    NM_CONTROLLED=yes
    BOOTPROTO=static
    IPADDR=192.168.17.138
    NETMASK=255.255.250.0
    GATEWAY=192.168.16.1
    DNS1=202.96.128.166
    DNS2=114.114.114.114
    EOF
    
    cat << EOF > /etc/sysconfig/network-scripts/ifcfg-em4
    DEVICE=em4
    BRIDGE=br0
    ONBOOT=yes
    TYPE=Ethernet
    EOF
    
    # 内核参数优化
    echo "net.ipv4.ip_forward=1">> /etc/sysctl.conf
    echo 1 > /proc/sys/net/ipv4/ip_forward
    /bin/echo "* soft nproc 65500" >>/etc/security/limits.conf
    /bin/echo "* hard nproc 65500" >>/etc/security/limits.conf
    /bin/echo "* soft nofile 65500" >>/etc/security/limits.conf
    /bin/echo "* hard nofile 65500" >>/etc/security/limits.conf
    

做完操作后 reboot 生效。

qemu 安装

1
2
3
4
5
6
yum install -y qemu-kvm qemu-key-tools virt-manager libvirt virt-install python-virtinst bridge-utils virt-viewer

yum install libguestfs libguestfs-tools net-tools acpid -y

systemctl start libvirtd
systemctl enable libvirtd

安装完,如果有环境可以使用 virt-manager 来作为 kvm 虚拟机的可视化管理工具,这样创建和管理 kvm 虚拟机可以方便很多倍。

pve

qemu-kvm 部署的 kvm 宿主机,一是无法通过看板分析宿主机的 kvm 资源使用情况,二是无法集中统一管理宿主机,三是宿主机之间 kvm 的迁移和配置比较麻烦。以上几个主要的痛点,我们可以使用 pve 这个开源方案来解决。

使用 pve 有以下好处:

  • 管理 kvm 资源,了解 kvm 资源的详细使用情况。

  • 支持宿主机之间的 kvm 实例冷/热迁移。

  • 集中统一管理,资源汇总。

  • Ui 可视化操作,集成 vnc 等工具,方便快捷。

准备工作

官网下载 iso 镜像,做成 u 盘启动盘,然后安装传统的系统安装的方法将 pve 安装到目标服务器上。

  • 准备一台已运行的 pve 节点,用来创建集群。

  • 准备加集群的新节点。

  • 配置好国内源和企业源(用于节点日常更新)。

  • 新节点不能有容器或者虚拟机实例,否则无法加入集群。

  • 新节点主机名和ip规划好,加入集群后不能修改。

集群组建

  1. 在现有的 pve 服务器上创建集群。Datacenter –> Cluster –> Create Cluster 。

  2. 选择网卡,条件运行的话,可以配置两块网卡,一块用于数据传输(kvm迁移和数据同步),一块用于集群之间的连接。

    /linux%E8%99%9A%E6%8B%9F%E5%8C%96-kvm%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%B9%B3%E5%8F%B0/%E5%88%9B%E5%BB%BA%E9%9B%86%E7%BE%A4.png
  3. 创建完以后,查看 Join Information ,点击 Copy Information 。

    /linux%E8%99%9A%E6%8B%9F%E5%8C%96-kvm%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%B9%B3%E5%8F%B0/%E9%A2%84%E8%A7%88%E9%9B%86%E7%BE%A4%E4%BF%A1%E6%81%AF.png
  4. 在需要加入集群的节点上,点击 Join Cluster 。

  5. 把 Copy 到的内容粘贴进来,会自动填充表单。

    /linux%E8%99%9A%E6%8B%9F%E5%8C%96-kvm%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%B9%B3%E5%8F%B0/%E8%BE%93%E5%85%A5%E9%9B%86%E7%BE%A4%E4%BF%A1%E6%81%AF.png
  6. 为了安全性,密码需要我们手动输入。

    /linux%E8%99%9A%E6%8B%9F%E5%8C%96-kvm%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%B9%B3%E5%8F%B0/%E8%BE%93%E5%85%A5%E5%AF%86%E7%A0%81.png
  7. 点击加入即可。

  8. 组建完成后,在任意节点上登录即可查看集群内所有节点的详细情况。

    /linux%E8%99%9A%E6%8B%9F%E5%8C%96-kvm%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%B9%B3%E5%8F%B0/%E9%9B%86%E7%BE%A4%E5%88%9B%E5%BB%BA%E5%AE%8C%E6%88%90.png
    集群创建完成
注意

加入过程中,会更换证书,web ui 会出现中断的情况,刷新一下网页,等待集群组建完成即可。官方原文如下:

After clicking the Join button, the cluster join process will start immediately. After the node has joined the cluster, its current node certificate will be replaced by one signed from the cluster certificate authority (CA). This means that the current session will stop working after a few seconds. You then might need to force-reload the web interface and log in again with the cluster credentials.

删除节点

  1. 登录到除被删除的机器外的任意一台节点。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    # pvecm nodes 查看节点,获取节点名称和id
    # pvecm nodes
    
    Membership information
    ~~~~~~~~~~~~~~~~~~~~~~
        Nodeid      Votes Name
            1          1 hp1 (local)
            2          1 hp2
            3          1 hp3
            4          1 hp4
    
  2. 被删除节点要确保处于关机状态,执行删除命令

    1
    2
    3
    
    hp1# pvecm delnode hp4
    
    Killing node 4
    
  3. 可能会收到无法删除节点的错误(error = CS_ERR_NOT_EXIST),这并不意味着删除节点失败。

  4. 如果删除后的节点重新安装系统后再次加入到集群,需要在集群执行 pvecm updatecerts 命令,不然可能会报 ssh fingerprint 相关的错误。

注意

删除过程中如果出现以下报错:

cluster not ready - no quorum?

解决:pvecm expected 1

总结

  1. 个人认为 qemu-kvm 是所有虚拟化平台里面最快的,没有之一,唯一的缺点是 kvm 分散在各个节点,不好管理,市面上的开源 kvm 管理系统也不是很好用,除了这个没有其他明显的缺点。

  2. pve 使用 web ui 组建集群,kvm 操作起来比较轻松便捷。

  3. pve 加入集群过程中会因为更换证书颁发机构导致的新节点的 web ui 连接中断,刷新网页即可恢复。

  4. pve 组建完集群,如果加入集群前新节点做了配置,新节点上面的配置会被当前集群的配置覆盖。