最近疫情被迫在家办公。虽然家跟公司之间的距离只有2公里,但是我RDP连回公司的机器延迟居然还50ms+。这怕是IP包是先去深圳旅游了一圈才到的我家吧。再加上丁佬最近也总跟我抱怨公司的机器又又又又连不上,于是打算在家里建设一下“就算没有公司支持也能愉快工(yu)作(le)”的能力。(其实都是借口,就是我周末闲得慌) 本系列分为三弹: 第一弹是IaaS云的建设,类似于阿里云ECS/腾讯云CVM,可以随时开各种云虚拟机。 第二弹是PaaS云建设,本质上是基于IaaS建设的容器云,计划支持一些常用的服务,如mongodb、mysql、es、kafka、rabbitmq等。同时也计划支持直接跑k8s集群。 第三弹是SaaS云建设,本质上是基于PaaS建设的一些服务,把平时的一些常用安全分析需求上云。最简单的情形是弄一个IDA analyzer,当我Post binaries到endpoint时,服务器会帮我用IDA打开这些binaries并且返回IDB和分析结果给我。这样我就可以在任性的开IDA作分析,同时本地计算机算力也不受影响。 当前进度条是:第一弹已经基本完成,第二弹处于调研阶段。所以决定把第一弹先总结发出来。
目前家里的服务器区域有8台设备,其中参与本次IaaS私有云建设的有6台。
服务器坐落在光猫屏蔽箱的角落
PVE,用来替代ESXI的不错。
openstack是开源IaaS解决方案老大哥了,我相信国内外自建云的公司都会或多或少的致敬了openstack。所以我选择使用openstack作为IaaS的方案。搭建openstack环境有主要有三种选择。
为了更好的学习openstack,我选择了方法2部署。方法2本质上是相当于手动糊一个IaaS出来,整个过程经历了各种学习和调试,断断续续搞了两个周末才搞完。现阶段我还不是很确定将来搭建PaaS这个糊出来IaaS是否会满足需求,如果不满足的话我可能会选择使用方法3重新搭建一个更接近生产环境的IaaS。 由于使用方法2搭建整个过程其实就是follow 官方教程 的过程。所以具体的搭建细节我不再赘述,这里主要是提供我搭建过程中的summary和tips,方便读者避坑。
openstack是一个典型的分布式的微服务结构,其节点总的来说可以分为四类,控制节点,计算节点,存储节点,网络节点四类。按理说,不同类型的节点最好不要部署在同一个机器上。不过由于家用私有云没那么多讲究,我就把控制节点和网络节点配在了一起。此外,openstack还依赖一些其他的服务,如消息队列服务rabbitmq,mysql数据库,我也都配到了控制节点上。 控制节点的物理位置是设备2上开的一个8vcpu/16g ram的虚拟机,上面跑了身份认证服务keystone, 镜像服务glance,资源管理节点placement, GUI管理界面horizon,网络服务neuron控制面部分,计算节点nova的控制面部分。 计算节点1的物理位置是设备4,上面跑了基于kvm的计算节点nova-compute。 hyper-v的计算节点本来也打算在设备1上配一下,不过最近暂时没碰到算力不足的情形所以一直没落实(主要是懒)。 最后,为了将云主机的网络与我家庭的主网络隔离,我用设备8开了一个新网络,专供云主机使用。 由于糊出来的openstack没有任何诸如多实例灾备等高可用措施,所以是很脆弱的,笔者在配好之后的使用过程中出现过多次因为某些奇怪的原因而导致服务挂掉的事件(比如由于mysql触发了connection number limits导致服务挂了; 由于磁盘耗尽导致rabbitmq连不上;由于控制节点重启计算节点没有跟着重写注册导致开不了云主机)。每次出现这种事件,都需要去翻各个服务的log来看看排查bug,为了更高效的排查处置这类问题,我用filebeat把所有的log都聚合到了elk里面。这对问题的快速排查有很大的帮助。后续如果需要使用方法3重新部署,我会考虑加入一些措施来保障availablity。
filebeat配合ELK做log聚合,很方便定位到出现问题的服务。
概况
实例页面,在这里可以像公有云一样开机器
镜像页面,可以上传镜像
创建新的云主机