基于Java实现的轻量级私有云平台,让企业拥有自己的云平台

一、开源项目简介

KVM Cloud 是一款基于Java实现的轻量级私有云平台,旨在帮助中小企业快速实现计算、存储、网络等资源的管理,让企业拥有自己的云平台。

二、开源协议

使用Apache-2.0开源协议

三、界面展示

图片

图片

图片

图片

图片

图片

四、功能概述

KVM Cloud 是一款基于Java实现的轻量级私有云平台,旨在帮助中小企业快速实现计算、存储、网络等资源的管理,让企业拥有自己的云平台,包括但不限于如下功能:

1、基于KVM的VM基础功能(创建、启动、停止、重装、webVNC等功能)

2、使用NFS作为磁盘存储池

3、支持磁盘动态添加取消

4、多主机管理

5、支持模版维护,用于快速创建VM

6、虚拟机IP自动管理

7、多网卡支持

8、支持 raw、qcow、qcow2、vdi、vmdk、vpc磁盘格式

9、磁盘快照支持

10、通过OVS支持VPC概念

11、支持cloud-init配置系统密码

五、技术选型

操作系统

Linux(intel)

SELinux配置

setenforce 0
vi /etc/selinux/config
SELINUX=permissive

SELinux配置

vim /etc/sysctl.conf
net.ipv4.ip_forward=1               # 设置转发并保存
sysctl -p

防火墙配置

systemctl stop firewalld
systemctl disable firewalld
systemctl stop iptables
systemctl disable iptables

NFS配置

1、安装NFS软件包

yum -y install nfs-utils rpcbind

2、设置开机自启以及启动服务

systemctl enable rpcbind
systemctl enable nfs-server
systemctl start rpcbind
systemctl start nfs-server

3、新建存储文件夹

mkdir -p /data/nfs

4、编辑配置

vi /etc/exports
/data/nfs *(rw,async,no_root_squash)

5、重新加载exportfs文件

exportfs -a

6、编辑nfs配置

vi /etc/sysconfig/nfs
    LOCKD_TCPPORT=32803
    LOCKD_UDPPORT=32769
    MOUNTD_PORT=892
    RQUOTAD_PORT=875
    STATD_PORT=662
    STATD_OUTGOING_PORT=2020

7、重新服务

systemctl restart rpcbind
systemctl restart nfs-server

8、测试挂载是否正常

mount -t nfs 127.0.0.1:/data/nfs /mnt
df -h        ###查看有了代表成功
umount /mnt

KVM

1、验证主机是否支持虚拟化

lsmod | grep kvm #查看结果确认是否支持虚拟化
如果是vmware开启的虚拟机,请启用虚拟化技术

2、主机安装KVM

yum install qemu-kvm libvirt bridge-utils
yum install java-1.8.0-openjdk* -y

3、配置KVM 主机网桥,增加一个网桥

这一步一定注意:使用ip addr查看你的网卡名,在CentOS 7中网卡名可能不是eth0,错误的网卡名会导致后期配置的虚拟机无法正常被访问到!确认网卡名无误后配置网桥:

vi /etc/sysconfig/network-scripts/ifcfg-br0
    DEVICE=br0
    TYPE=Bridge
    ONBOOT=yes
    BOOTPROTO=static
    IPADDR=192.168.2.130
    NATMASK=255.255.255.0
    PREFIX=24
    GATEWAY=192.168.2.1
    DNS1=8.8.4.4
    DNS2=8.8.8.8

# 务必使用 ip addr 命令查看你的实际网卡名,他很可能不是eth0
# 如需ovs配置,请参考[OVS 网卡设置参考.txt](scripts%2FOVS%20%E7%BD%91%E5%8D%A1%E8%AE%BE%E7%BD%AE%E5%8F%82%E8%80%83.txt)
# 下面这个编辑命令注意改成 ifcfg-实际网卡名
vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 下面这个DEVICE注意改成 实际网卡名
    BOOTPROTO=none
    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    NM_CONTRLLED=no
    BRIDGE=br0

4、VNC 配置

vi /etc/libvirt/qemu.conf
    vnc_listen="0.0.0.0"

5、Libvirtd配置

vi /etc/libvirt/libvirtd.conf
    listen_tls = 0
    listen_tcp = 1
    unix_sock_group = "root"
    unix_sock_rw_perms = "0777"
    auth_unix_ro = "none"
    auth_unix_rw = "none"
    tcp_port = "16509"
    listen_addr = "0.0.0.0"
    auth_tcp = "none"
vi /etc/sysconfig/libvirtd
    LIBVIRTD_ARGS="--listen"
systemctl restart libvirtd

项目编译

mvn clean package

完成配置

1、导入mysql表及相关数据

脚本位于scripts下

2、安装Redis

3、修改配置文件

4、分别启动管理端及Agent端,浏览页面:http://localhost:8080/

管理端: java -jar cloud-management-1.0-SNAPSHOT.jar --spring.config.location=server.yaml
Agent: java -jar cloud-agent-1.0-SNAPSHOT.jar --spring.config.location=client.properties
 --spring.config.location 是可选项,用于指定配置文件,如果不需要修改,可以去掉,配置文件为各自模块下的src/main/resources/application.properties文件

5、平台登陆账号默认用户名/密码:admin/123456

6、创建基础网络

采用桥接网络配置,IP地址段与主机主机段需保持一致,可通过起始IP与结束IP和主机网络进行分离,防止IP冲突,Vlan只支持OVS方式

7、创建主机

8、创建存储池(只支持nfs)

9、下载基础模版(系统模版选择cloud/v3/Cloud-System-V3.1.qcow2)

链接: https://pan.baidu.com/s/1bOAeuvFj8hG4skDaoZnYtQ?pwd=1bpn 提取码: 1bpn

10、安装nginx,配置基础下载地址,并在页面完成模版配置

11、等待系统模版下载完成,并初始化系统VM成功

12、windows附加磁盘时请安装virtio-win.iso驱动

13、创建VM

相关问题

1、关于找不到配置文件问题导致数据库连接问题

server.yaml 和 client.properties 内容分别为management和agent项目下的application.yaml和application.properties的文件,运行时自行修改名称及相关配置

2、关于备份与恢复

对数据库和存储池进行完整备份;
数据无价,建议对虚拟机中的数据进行备份

3、关于网络隔离

    1)、目前只支持OVS桥接状态下的Vlan模式,如需使用,请自行安装OVS。
    2)、负载均衡器可通过挂载基础网络网卡的方式自行实现。

4、个别windows系统无法找到引导的问题

    1)、首先确认创建的ISO系统类型是否正确
    2)、如果确认系统类型没有问题,可以通过老毛桃做一个PE的ISO镜像,在创建系统的时候可以通过PE镜像创建,然后进入PE系统,在页面上卸载光盘,重新挂载你要安装的操作系统,然后通过PE安装就可以正常安装了

5、windows系统磁盘不识别问题

    1)、windows没有virto的驱动,请安装virtio-win.iso驱动
    2)、如果是系统盘则需要在磁盘选择页面临时挂载virtio-win.iso驱动后安装或选择ide总线方式

6、服务器掉电重启后处理

   1、服务器掉电重启后,请在页面手动关闭所有自己创建的虚拟机,然后重新启动,系统虚拟机有自动检测重启功能,无需处理
   2、掉电可能引起虚拟磁盘损坏,如无法启动,可通过qemu-img check检查并进行相应修复

7、虚拟机虚拟化嵌套

1、验证KVM 宿主机是否启用了嵌套虚拟化:
    基于 Intel 的处理器运行以下命令:cat /sys/module/kvm_intel/parameters/nested
    基于 AMD 的处理器运行以下命令: cat /sys/module/kvm_amd/parameters/nested
    上述命令输出N /0表示嵌套虚拟化是禁用的。如果我们得到的输出是Y/1 则表示在您的宿主机已启用嵌套虚拟化
2、如果需要启用嵌套虚拟化,使用以下内容创建一个文件名为/etc/modprobe.d/kvm-nested.conf 的文件:
    options kvm-intel nested=1
    options kvm-intel enable_shadow_vmcs=1
    options kvm-intel enable_apicv=1
    options kvm-intel ept=1
3、reboot 重启机器
4、现在验证嵌套虚拟化功能是否启用
    cat /sys/module/kvm_intel/parameters/nested

8、cloud-init相关配置(如需禁用,请在管理配置文件中设置app.route.type:dhcp)

1、cloud-init只支持dnsmasq下发方式
2、cloud-init数据源采用NoCloud,请修改cloud相关配置如下:
    datasource:
      NoCloud:
        seedfrom: http://169.254.169.254/
    datasource_list: [  NoCloud ]

3、系统模板在安装cloud-init后手动设置相关配置
    1)、设置允许密码登录:设置ssh_pwauth:   1
    2)、可设置允许root登录:disable_root: 1 
    3)、ubuntu修改/etc/cloud/cloud.cfg.d/50-curtin-networking.cfg 保证默认网卡名和分配网卡名一致
    4)、目前只测试了Centos与Ubuntu,Windows请自行实现相关初始化行为
    5)、密码只对应默认用户,具体请查看system_info.default_user相关配置
    6)、其他配置请参照cloud-init相关配置进行安装
    7)、对系统模板请安装qemu-command-agent,并进行相关配置
    
    
4、目前只提供Centos7及Ubuntu18.04的系统模版,其他系统模版,请自行实现
    1)、Centos默认用户名为centos,密码为创建系统时输入的密码
    2)、Ubuntu默认用户名为ubuntu,密码为创建系统输入的密码
    3)、系统模版不支持root用户名密码登录,如需root登录,请自行修改

9、页面删除主机后,如需要重新加入主机,请删除该主机Agent目录下config.json,然后重启Agent

10、关于提示签名错误问题,请确保管理端跟agent端时间同步

六、源码地址

kvm-cloud: KVM Cloud 是一款基于Java实现的轻量级私有云平台,旨在帮助中小企业快速实现计算、存储、网络等资源的管理,让企业拥有自己的云平台。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/143549.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cesium和Three.js的初步认识

一、Threejs和Cesium的对比 相同点: 都是基于WebGL技术开发的Javascript库,用于在浏览器中创建和显示动画3D计算机图形。 不同点: Threejs:受众面比较广,是封装了webgl的一些底层用法,让初学者更容易上…

Istio学习笔记- 服务网格

Istio 服务网格 参考:Istio / Istio 服务网格 Istio 使用功能强大的 Envoy 服务代理扩展了 Kubernetes,以建立一个可编程的、可感知的应用程序网络。Istio 与 Kubernetes 和传统工作负载一起使用,为复杂的部署带来了标准的通用流量管理、遥…

DNS域名解析服务

1.概述 1.1.产生原因 IP 地址:是互联网上计算机唯一的逻辑地址,通过IP 地址实现不同计算机之间的相互通信,每台联网计算机都需要通过I 地址来互相联系和分别,但由于P 地址是由一串容易混淆的数字串构成,人们很难记忆所有计算机的…

labview实现仪器的控制visa

*IDN? 是识别大多数仪器的查询指令。仪器会回应一个用于描述仪器的识别字符串。如果仪器不接受该指令,请在仪器手册中查询仪器能识别的指令列表。 如下图所示: 程序如下:

【汇编】计算机的组成

文章目录 前言一、计算机的基本组成1.1 中央处理器(CPU)1.2 内存指令和数据存储的位置计算机中的存储单元计算机中的总线地址总线数据总线控制总线 1.3 输入设备和输出设备1.4 存储设备 二、计算机工作原理三、计算机的层次结构总结 前言 计算机是现代社…

容器化nacos部署并实现服务发现(gradle)

1.如何容器化部署mysql 2. 如何容器化部署nacos 为不暴露我的服务器地址,本文全部使用localhost来代替服务器地址,所有的localhost都应该调整为你自己的服务器地址。 为不暴露我的服务器地址,本文全部使用localhost来代替服务器地址&#x…

Centos上删除文件及目录的命令积累

01-如果我想删除Centos上当前目录下的文件 test06-2023-11-14-01.sql 该怎么操作? 答:如果你想删除CentOS上当前目录下的文件 test06-2023-11-14-01.sql,可以使用 rm 命令。以下是删除文件的基本语法: rm test06-2023-11-14-01.s…

《QT从基础到进阶·二十三》弹窗提示框QMessageBox和QCloseEvent事件

1、正常信息提示 QMessageBox::information(NULL, "Title", "Content", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);消息框按钮判断: if(QMessageBox::Ok QMessageBox::warning(this,"温馨提示","是否保存设置?…

BGP路由控制实验

目录 一、实验拓扑 二、实验需求 三、实验步骤 1、IP地址配置 2、As 200 内部配置OSPF 3、建立BGP邻居关系 4、宣告网段,在BGP中传递网段 5、通过修改MED 使 R1 到达 192.168.2.0/24 网段的路由经过 R3 6、通过修改Preferred-value 属性,使 R4 …

6.6二叉树的最大深度(LC104-E)、N叉树的最大深度(LC559-E)

二叉树的最大深度: 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 二叉树的最大深度二叉树的高度 算法: 这道题既可以求深度,也可以直接求高度。不过高度和深度用的遍历方式不同。 二叉树写代码之前要确定遍历顺序…

从零开始,掌握Nacos搭建的艺术(单点、集群、docker-compose)

🎏:你只管努力,剩下的交给时间 🏠 :小破站 从零开始,掌握Nacos 前言:前提:建表语句第一: 单节点搭建:第二: 集群搭建:第三&#xff1a…

BUUCTF 来首歌吧 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 密文: 下载附件,解压得到一个.wav音频文件。 解题思路: 1、得到一个音频文件,放到Audacity看看。看到有两条音轨,放大上面的那条音轨,看到这…

Shiro快速入门之三

一、前言 接Shiro快速入门之二,上篇侧重于介绍认证,这篇介绍一下Shiro的授权,先初始化5张表的数据。 注:创建三条权限记录,一个admin角色分配查询和添加用户权限,一个账户qingcai18036授予管理员角色。 二…

python数据结构与算法-04_队列

队列和栈 前面讲了线性和链式结构,如果你顺利掌握了,下边的队列和栈就小菜一碟了。因为我们会用前两章讲到的东西来实现队列和栈。 之所以放到一起讲是因为这两个东西很类似,队列是先进先出结构(FIFO, first in first out), 栈是…

android studio开发flutter应用,使用mumu模拟器调试软件

安装好mumu模拟器,先打开网易mumu模拟器的开发者模拟。系统应用 > 设置 > 关于手机 > 版本号 多点击几次调出开发者模式: 然后在android studio中刷新设备列表,就能看到新设备了: 如何确定这个设备就是你的mumu模拟器呢…

2012年11月10日 Go生态洞察:Go语言三周年回顾

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

预览PDF并显示当前页数

这里写目录标题 步骤实例实例效果图 步骤 1.安装依赖 npm install --save vue-pdf2.在需要的页面&#xff0c;引入插件 import pdf from vue-pdf3.使用 单页pdf可以直接使用 <pdf :src"获取到的pdf地址"></pdf>多页pdf通过循环实现 html标签部分 &l…

电子零部件工厂的WMS系统:业务特点、产品特点与优势

一、电子零部件工厂的业务特点 电子零部件工厂的业务涉及各种电子元器件的生产、组装和配送。其业务特点包括&#xff1a; 高度复杂性&#xff1a;电子零部件工厂的生产流程涉及多种原材料、半成品和成品&#xff0c;每种产品都有不同的规格、属性及存储要求。 严格的质量控…

基于Rabbitmq和Redis的延迟消息实现

1 基于Rabbitmq延迟消息实现 支付时间设置为30&#xff0c;未支付的消息会积压在mq中&#xff0c;给mq带来巨大压力。我们可以利用Rabbitmq的延迟队列插件实现消息前一分钟尽快处理 1.1定义延迟消息实体 由于我们要多次发送延迟消息&#xff0c;因此需要先定义一个记录消息…