目录
本文最终实现目标
Proxmox VE = 虚拟化+分布式存储,能够通过Ceph FS和Ceph RBD实现虚拟机5秒迁移。虚拟机磁盘一律通过RBD网络提供,物理服务器本地不保存任何磁盘卷。这样的好处是磁盘多备份,并且一旦虚拟机卡死,能在5秒内在另一台物理机甚至另一个地域启动相同虚拟机。而通过网络提供磁盘卷,则需要服务器网口是万兆的,内网网速要够快。
由于PVE无法创建子网,即类似阿里云VPC的功能。并且PVE实现Cloud-init比较困难(需要命令导入qcow文件),所以需要在PVE超融合的基础上运行Openstack。PVE为Openstack提供了多备份和稳定的运行环境,Openstack为PVE提供了浮动ip、高级网络功能、cloud-init、实例规格、中间件等一堆额外功能。比如阿里云的RDS数据库和SLB负载均衡等中间件,就可以通过Openstack的Trove组件和Octavia组件实现。难道你自己会手动在PVE里一台一台创建VM然后手动配置负载均衡吗。超融合很好,但远远不够方便。
为什么不直接把Openstack部署在物理机上?因为交付速度太慢了。如果公司做活动,临时采购了1千台服务器,部署在物理机上的Openstack如何快速扩容?另外直接部署在物理机上的Openstack,底层的linux容灾能力、稳定性、弹性都不及PVE虚拟机,毕竟RBD至少是双备份的。
最后我想说,直接使用PVE创建的VM,和使用VM中的浮动ip绑定的Openstack server性能几乎没有差别。稍微折腾一下下,你能获得更多。
华为云是如何快速上线的?他们是基于Openstack+CentOS进一步定制出一种新的iso镜像,形成Fusion Cloud系统镜像,Fusion Cloud云系统兼顾了超融合和云原生特性,将装Openstack变成了装系统,新购服务器设置好4个网络平面就能投入生产,从而实现新购服务器快速上线。可惜Openstack没有官方的iso系统镜像。
私有云的思路是,先将计算、网络、存储融合成一个资源池,再在资源池上搭建云原生。所以目前做公有云和私有云的架构是不一样的。我们希望Openstack社区能努努力,做到公私同源!
图中的Kube Operator有很多替代品,如rancher、sealos、kubesphere、kubespray、kubeclipper等
材料准备
- 企业级路由器一台,本文使用的是H3C G3200,带机量150台。各位读者可以使用华为的。
- 三层交换机一台,带Vlanif功能就行。本文使用的是华为S5735S-L48T4S-A1,带图形化管理界面,带console口,无eth口。本文的交换机买的不太合理,网口是千兆的,应该买万兆交换机的,不过也能用。
- 服务器n台(n>=3),本文使用华为RH1288V3服务器4台,1U的刀片机。每台组件为:CPU E5-2680v3两颗,2.5寸SSD 300GB 8块,内存16GB 2166Mhz 12条,板载显卡一张,600w电源两个,iBMC芯片+UEFI芯片,网卡为Intel SM233 10GE*2双口万兆 ,raid卡LSI SAS2208。
- 笔记本一台,用于配置集群,需要笔记本带网口并能接受wifi。
- IDC六类网线准备30根,以防不够。
- VGA显示器一台。
- 公网ip两个。每个上行带宽30M,下行500M。
获取公网ip的方式有两种,第一种是把设备托管给专门的IDC机房,从机房里买两个公网ip。第二种是中国电信买大宽带2个,每个上行30M,下载500M,3000元一年。购买宽带后如果没有动态公网ip,打电话找运营商要,要是运营商不给,凉凉。如果自己有公司,可以向中国电信购买BGP专线公网ip,但是很贵,本文是低成本私有云,不考虑。
路由器设置
机房静态公网ip设置WAN口
如果公网ip为机房购买的静态ip,则配置静态WAN口即可,配置简单。
- 设置双WAN口模式,其他都设置成LAN口。
- 配置静态WAN口IP。注意WAN口1和2都要设置。
- WAN口工作模式选择同运营商1:1,这样你的私有云出网SNAT的压力会一比一的分配到两个IP上,实现SNAT负载均衡。
宽带动态公网ip设置WAN口和DDNS
如果你购买的是大宽带,并拥有了动态公网ip,则配置如下:
- 光猫选择桥接模式。宽带光纤拉到你家,需要用光猫将光信号转换成电信号。但是光猫有两种模式:路由模式和桥接模式,如果做私有云则必须用到桥接模式。有的网工师傅比较坏,给你安装的光猫没有桥接功能,所以遇到这种情况请自行从某宝或夕夕上买华为的带桥接模式的光猫接上,调整配置。
- 接口转换同上
- 两个WAN口都进行PPPOE拨号。用户名和密码就是宽带账号,买的时候应该已经给了,如果忘了就打电话问。
- 多WAN工作模式同上。
- DDNS设置。宽带的公网ip每天变化一次,所以需要做DDNS。可以去路由器指定的DDNS服务提供商注册账号,然后把账号、密码、域名填入路由器中,这样无论你的宽带ip如何变化,都能通过固定的域名访问私有云中的服务
LAN口设置
目前的路由器LAN口默认都是做好了eth-trunk的,所以无论你的路由器设置了几个LAN口,你都可以将他们看成是一个网口,并且所有LAN口只有一个MAC地址。
- 配置LAN口的网关和子网掩码。这一步很关键,今后你的私有云中所有的操作系统ip都由路由器DHCP分配!
其中子网掩码的设置是根据你路由器的带机量来的。G3200的带机量是150台,所以子网掩码24就够了。如果是超级路由器,则子网掩码可以是十几。这里我设置了23.
2.配置LAN口的DHCP池。
3.打开NAT功能,让路由器变成网关。所有服务器通过路由器访问外网。
- 用网线将路由器所有LAN口与交换机相连。接下来我们配置交换机。
wifi设置
稍后配置集群的时候,笔记本电脑需要访问外网,不用网线连笔记本,所以要打开路由器的wifi功能。如果嫌麻烦,笔记本电脑用手机热点也行这里就不配置了。
交换机配置
-
长按交换机reset键10秒,将交换机恢复到出厂设置。
-
用网线将笔记本电脑和交换机相连,在笔记本的浏览器中登录华为交换机的vlan1的默认IP地址192.168.0.250
S5735S-L48T4S-A1型号的初始用户为admin , 密码是huawei@123,进入交换机Web首页
-
创建两个vlan,其中一个vlan A需要开启vlanif,用途是笔记本电脑访问iBMC。另一个vlan B不开启vlanif,保持二层状态,否则vlanif的ip会和路由器的DHCP冲突,导致NAT功能失效。用途是让所有私有云物理服务器处于路由器的NAT网络中。
其中vlan A的配置
由于Vlan A没有DHCP所以需要设置一个DHCP池
vlan B则不需要开启vlanif,保持二层让路由器的DHCP分配IP地址。
交换机配置暂时结束,后期还会回来配置LACP和eth-trunk。
服务器配置
iBMC密码和ip设置
VGA显示器连接服务器,键盘按F2进入BIOS,设置iBMC的用户名和密码。我统一设置的是user: root, password:1234qwer。iBMC内网访问所以可以公开。BMC的ip根据你的Vlanif的DHCP地址范围来就行了,设置成静态。我设置的是10.0.0.12至15四个ip。
升级固件
购买的服务器可能积压已久,所以固件版本可能很老,需要自己从官网上下载最新的固件然后升级。
华为RH1288V3服务器最新LTS版固件地址:https://support.huawei.com/enterprise/en/servers/rh1288-v3-pid-9901873/software
笔记本下载zip包后,解压,将固件文件上传到iBMC网页中升级
Bios恢复到出厂设置
键盘F2进入Bios,找到Load to Default就是将bios的配置恢复到出厂。
高手可以通过ssh连接iBMC的命令行,清除cmos电池来让Bios回复出厂设置
ipmcset -d clearcmos
PVE安装和网卡聚合mode4配置
下载PVE iso文件
官网地址:https://www.proxmox.com/en/downloads/category/iso-images-pve
iBMC设置光盘启动
方法1:通过网页设置
方法2:通过iBMC命令行设置系统启动项为CD
ipmcset -d bootdevice -v 5 permanent
登录iBMC的KVM
华为iBMC远程KVM连接工具下载连接:https://download.csdn.net/download/qq_43626147/86269951
支持windows、Mac、Linux
服务器硬盘设置
要求:服务器物理硬盘不少于5块。其中两块组raid1,用于安装PVE系统。其余的盘每块设置成raid0,不少于3块,用于Ceph分布式存储。
我的服务器都是8块盘,所以规划如下:
硬盘在服务器上的Driver编号 | raid类型 | 用途 | 设备在系统中的路径 |
---|---|---|---|
Driver0 | 双盘raid1 | 安装PVE系统 | /dev/sda |
Driver1 | 双盘raid1 | 安装PVE系统 | /dev/sda |
Driver2 | 单盘raid0 | 作为Ceph的OSD | /dev/sdb |
Driver3 | 单盘raid0 | 作为Ceph的OSD | /dev/sdc |
Driver4 | 单盘raid0 | 作为Ceph的OSD | /dev/sdd |
Driver5 | 单盘raid0 | 作为Ceph的OSD | /dev/sde |
Driver6 | 单盘raid0 | 作为Ceph的OSD | /dev/sdf |
Driver7 | 单盘raid0 | 作为Ceph的OSD | /dev/sdg |
华为RH1288V3服务器raid的设置方法:
方法1:通过WebBios界面设置硬盘Raid,这是我最常用的方法。开机后狂按Ctrl+H可进入WebBios,然后进入Configuration Wizard选项卡开始配置raid,配置方法请参考这篇博客:
https://baijiahao.baidu.com/s?id=1647443161576926246&wfr=spider&for=pc
方法2:开机后狂按Ctrl+C进入命令行式的raid配置界面,可以参考这篇博客:
https://blog.csdn.net/qq_50987736/article/details/128152038
连接虚拟CD,挂载pve系统镜像
服务器先关机,在笔记本电脑上点开KVM窗口的光驱,选择刚刚下载的PVE镜像,点击连接
如果点击连接按钮后几秒后又断开了,说明iBMC网速太慢了(低于10M),需要提高网速。
最后重启服务器开始安装。
Debug模式开始安装
安装界面中选择Advanced Options -------- Install Proxmox VE (Debug mode)
中途需要你按3次Ctrl+D。稍等片刻进入配置页面
下图同意协议。
下图页面中将PVE安装到Raid1中,一般情况下就是/dev/sda/
Country选择China,Time Zone时区选择上海(默认),键盘选择english(默认)
设置root密码和你自己的邮箱。root密码用于登录PVE网页,邮箱用于接受PVE的告警通知。我们私有云处于NAT网络下,所以可以访问外网,因此设置这个邮箱是有用的。
网络配置这里直接跳过,全部默认点击Next就好了,因为后面我们会手动配置网口聚合mode4,即使这里配置了后期也要毁掉。
确认参数并安装,安装好后点击重启,PVE安装成功。
网口聚合mode4设置
网口聚合有7中模式,mode0-mode6,但是只有mode4可用户生产。mode讲解一下:
mode0是并行模式,所有流量均匀的通过多个网口交互,所以容易导致网络包收发顺序错乱。并且需要配置交换机。狗都不用
mode1是热活备份。多个网口中只有一个工作,其他网口没有流量,当工作中的网口瘫痪,流量就会转移到另一个网口。资源利用率是1/N。不需要配置交换机。这个模式虽然资源利用率低,但是网口不会丢包,并且配置简单,所以适用于测试环境和临时环境。
mode2是哈希负载均衡。网络流量通过Hash算法分配给多个网口,需要配置交换机。了解Hash的都知道,Hash分配不是1:1的,各个网口压力不均,闲的闲死累的累死。所以狗都不用。
mode3是广播模式。每个网口传输每个网络包。这个策略容易造成广播风暴和回环,资源利用率1/N,还需要配置交换机。狗都不用
mode4是LACP协议。这个模式是最好的,但是配置难度也是最大的。资源利用率100%,不会出现丢包。适用于生产环境。但是交换机需要配置eth-Trunk并打开LACP协议。
mode5和mode6分别是balance-tlb、balance-alb。这两个协议经测试,会造成严重的丢包,丢包率20%以上。造成这个现象的原因是虚拟Mac地址在多个网口上来回切换造成的不稳定。资源利用率1.5/N。虽然不需要配置交换机,但是如此严重的丢包即使是测试环境也是不允许的。狗都不用。
所以综上,网口聚合能用的模式只有mode1和mode4。如果不想配置交换机图个方便的小土豪,则使用mode1。如果是生产,建议配mode4。
重启PVE系统进入命令行,重新配置网络:
nano /etc/network/interfaces
auto lo
iface lo inet loopback
iface enp2s0f0 inet manual # 申明物理网口1
iface enp2s0f1 inet manual # 申请物理网口2
iface bond0 inet manual # 创建虚拟网口bond0,这个名称是PVE要求的。
bond-slaves enp2s0f0 enp2s0f1 # 哪些网口参与聚合
bond-miimon 100 # 每100ms检测一次网络质量,如果有网络异常,则暂时关闭异常的网口
bond-mode 802.3ad # 802.3ad就是mode4,如果想配置mode1,填写active-backup
bond-xmit-hash-policy layer3+4 # 只有配mode4才需要这一行。规定hash策略。想配置mode1的朋友,删掉这一行
auto vmbr0 # 开机自启动
iface vmbr0 inet static # 创建虚拟网桥,桥街道bond0上,vmbr0也是PVE规定的名称
address 192.168.0.12/23
gateway 192.168.0.1
bridge-ports bond0
bridge-stp off
bridge-fd 0
交换机配置eth-Trunk并开启LACP
注意事项:同时选中两个网口,开启链路聚合,二层工作,eth-Trunk的编号自定义就行,模式为静态LACP,网口类型为Access,缺省vlan填写为路由器LAN口所在的Vlan,其他配置保持默认。
到此,系统端和交换机端的网络设置结束,重启服务器,然后ip a命令查看一下bond0虚拟网口的mac地址,填入交换机做静态DHCP绑定。
在PVE系统里ping一下百度,保证外网是通的
ping www.baidu.com
有人会问vmbr0这个网桥是做什么的?
本案例中路由器网段是192.168.0.0/23,网关(LAN口IP)是192.168.0.1
vmbr0网桥也处于192.168.0.0/23这个网段中,当你在PVE中创建虚拟机的时候,虚拟机的网卡会桥接到物理机的vmbr0网桥,虚拟机的IP地址由路由器的DHCP分配,所以虚拟机的IP也处于192.168.0.0/23范围内。
很显然,这样导致的结果是物理服务器和虚拟机处于相同网段、相同Vlan内,互相可以ping通。日后创建Openstack集群后,浮动IP和VIP也会处于这个网段中。物理服务器的PVE系统和虚拟机可以直接ping通Openstack中的浮动IP,通过PVE中创建windows可以浏览器访问Horizon面板。
物理服务器+浮动IP数 <= 路由器网段IP数。你的私有云最大支持多少物理服务器取决于你的路由器的带机量。
PVE换源
安装PVE并连同外网后,你会发现你无法执行apt update命令,原因是你没有订阅PVE的企业源,订阅要花很多钱。
为了白嫖,需要禁用企业源。
安装PVE后系统中有两个apt源文件:/etc/apt/sources.list(debian官方) , /et/capt/sources.list.d/pve-enterprise.list(PVE企业源)
所以接下来我们禁用企业源,并创建中科大的Ceph源和PVE免费源,更换Debian官方源为中科大源。
- 修改Debian官方源为中科大源,这样系统更新时网速会非常快。
nano /etc/apt/sources.list
-------------------------------------------
deb http://mirrors.ustc.edu.cn/debian bullseye main contrib
deb http://mirrors.ustc.edu.cn/debian bullseye-updates main contrib
# security updates
deb http://mirrors.ustc.edu.cn/debian-security bullseye-security main contrib
- 禁用PVE企业源
cd /etc/apt/sources.list.d/
mv pve-enterprise.list pve-enterprise.list.bak
- 使用中科大PVE免费源
nano /etc/apt/sources.list.d/pve-no-subscription.list
----------------------------------------------------
deb http://mirrors.ustc.edu.cn/proxmox/debian/pve bullseye pve-no-subscription
- 创建Ceph源并安装Ceph
nano /etc/apt/sources.list.d/ceph.list
----------------------------------------------
deb http://mirrors.ustc.edu.cn/proxmox/debian/ceph-quincy bullseye main
# 更新apt和系统包
apt update
apt -y upgrade
# 安装Ceph
apt -y install ceph
创建PVE集群
PVE的网页是8006端口,但是笔记本电脑访问不到这个网页,所以需要在路由器上做DMZ或虚拟服务器。
然后访问https://公网IP:8006即可登录PVE。
登录用户名root,密码就是安装时设置的密码。登录方式是Linux PAM
点击数据中心--------集群--------创建集群
输入公司名字或部门名字作为集群的名字,创建好后刷新浏览器。
此时集群已经创建好了,需要把其他几台机器加入这个集群中。
点击加入信息,点击复制。
路由器修改虚拟服务器的ip,登录到其他服务器的PVE网页,点击加入集群,粘贴刚才复制的集群信息,输入对方的root密码点击加入即可。
当所有服务器都加入集群后,数据中心首页可以看到总体CPU和内存。
配置Ceph
已知阿里云的ECS服务器如果瘫痪,会在另一台物理服务器上重启一份新的ECS,ECS的硬盘不变,整个过程在30秒内完成。
PVE也可以做到,这就是分布式存储的厉害之处。
VM的所有硬盘都不保存在物理服务器上,而是由Ceph RBD通过网络提供,物理服务器只负责提供CPU和内存。RBD中的大大小小系统盘通过网络挂载到PVE的/mnt/pve目录中,当服务器A宕机,则服务器B直接从/mnt/pve中找到VM的硬盘并启动。非常灵活。否则如果VM的硬盘保存在服务器A的本地硬盘中,如果A宕机,其他服务器无法获取到VM的系统盘,造成无法迁移的悲剧。而所有VM硬盘都由RBD通过网络提供则要求物理服务器和交换机网口都是万兆的,否则影响VM的IO性能。
创建Ceph Mgr管理器和Mon监控器
每台机器创建一个Mgr和Mon,防止Mgr都瘫痪的情况。
创建OSD,保存数据用的
每台服务器的8块物理硬盘中,2块用于安装PVE,剩下的6块都作为OSD,用于存储Ceph中的一切数据。对Ceph不了解的可以找一些文档读一读。
创建Ceph FS用于保存文件和系统镜像,相当于Openstack的Glance
每台服务器创建一个MDS元数据服务器,这样每次拿文件时不用直接访问OSD,而是从MDS中拿到已有文件的信息,MDS存在的意义就是降低Ceph集群的网络连接数和负载,
创建至少一个MDS后,就可以创建CephFS了用于存放ISO、模板、小文件等。
我保存的一些ISO,每个文件双备份。
创建Ceph RBD用于保存VM硬盘卷,相当于Openstack的Cinder
刚才创建Ceph FS时系统自动为我们创建了Pool,但是创建RBD时需要我们实现创建一个Pool,得手动了。
注意这里的大小是指备份数量。默认是3,即一个文件保存成3份,如果嫌浪费,可以调成2。
PG的数量和你的OSD容量总和有关,合理设置PG数可以提高性能,细节可以参考Ceph官方文档。
点击数据中心--------存储--------添加--------RBD,选择刚刚创建的pool,给RBD起个名字。
RBD创建后,会自动挂载到每台服务器上。PVE集群中创建的所有VM和LXM的硬盘卷都可以保存在RBD中。
如果你嫌数据不够安全,你可以采购专门的存储型4U服务器,一台服务器可以插200块硬盘。然后服务器安装Proxmox Backup Server系统,并挂载到PVE中。
删除local-lvm
在安装完PVE后,集群会出想local和local-lvm两种存储。local是PVE系统安装的地方,本质是一个LVM逻辑卷,并且可以存放文件。local-lvm是PVE默认存放VM硬盘卷的地方,本质也是一个LVM逻辑卷,我们已经有了RBD了,这个local-lvm就要删除,把空间让出来给local。local越大,可以存放的PVE日志就越多,集群运行时间就越长。
每台机器执行一下两个命令:
# 删除local-lvm的逻辑卷
lvremove pve/data
# 将空间都加到local中
lvextend -l +100%FREE -r pve/root
回到PVE web页面的数据中心—存储,删除local-lvm。保证页面上干干净净。
PVE超融合顺利完成,第一阶段结束
您可以向Ceph FS中上传一些ISO系统镜像。然后创建VM虚拟机,系统盘保存到RBD中,然后关闭VM,1秒钟即可将VM迁移到其他机器上。可以使用PVE中的HA功能,实现VM瘫痪后30秒自动迁移。一个小阿里云诞生啦。
Openstack安装
目前国内通过devstack无法部署Openstack,每次装到一半就报错,换源都不行。
目前生产环境可用的Openstack是通过kolla-ansible部署的,安装教程参考本人的另一篇博客:
https://blog.csdn.net/qq_43626147/article/details/124971363
(未完待续)
转载:https://blog.csdn.net/qq_43626147/article/details/128236628