谨防在家办公-建设家庭混合云来提升工(yu)作(le)效率第一弹——IaaS私有云建设
前言
最近疫情被迫在家办公。虽然家跟公司之间的距离只有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台。
服务器坐落在光猫屏蔽箱的角落
- i7 12700/64G/2T,Windows11,作为主工作机,RDP上去当PC用,同时也作为Openstack Compute节点。
- R7 2700X/32/1T,PVE,作为虚拟机服务器,用来跑一些常驻虚拟机,如Openstack Controller、ELK等。
- R5 4650GE/16G/512G,Windows11,娱乐机,用来搞一些有的没的,未来计划纳入到Openstack Compute集群中。
- i5 12400/32G/1T,Ubuntu,主要作为Openstack Compute节点。
- N5095/8G/128G,unraid,二号娱乐机。
- 蜗牛星际改的NAS,4*3T的硬盘RAID6,存储服务器。
- 华硕AX88U,主路由器,主网提供者。
- 办网送的华为路由器,openstack的provider网络的提供者,跟主网隔离。
PVE,用来替代ESXI的不错。
IaaS环境搭建
openstack是开源IaaS解决方案老大哥了,我相信国内外自建云的公司都会或多或少的致敬了openstack。所以我选择使用openstack作为IaaS的方案。搭建openstack环境有主要有三种选择。
- openstack提供了一个叫devstack的东东,可以一键完成openstack的部署。不过,这个一键部署的openstack只是一个玩具,本意是让你来开发和测试用的,即便是作为家庭用的私有云也难以胜任。
- 手动安装和配置openstack的各个服务,这个方法比较繁琐,需要注意的细节很多,坑也不少,但是搭完之后会对openstack整体有一个不错的了解,而且搭建过程各个部分的配置是可控的,所以搭出来的东西也容易符合自己的需求。
- 使用部署工具(如TripleO)直接部署,适合在生产环境使用。
为了更好的学习openstack,我选择了方法2部署。方法2本质上是相当于手动糊一个IaaS出来,整个过程经历了各种学习和调试,断断续续搞了两个周末才搞完。现阶段我还不是很确定将来搭建PaaS这个糊出来IaaS是否会满足需求,如果不满足的话我可能会选择使用方法3重新搭建一个更接近生产环境的IaaS。 由于使用方法2搭建整个过程其实就是follow 官方教程 的过程。所以具体的搭建细节我不再赘述,这里主要是提供我搭建过程中的summary和tips,方便读者避坑。
Summary
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聚合,很方便定位到出现问题的服务。
Tips
- 如果打算使用Windows/Hyper-v作为Compute Node的话,尽量不要使用最新的Yoga release。openstack对hyper-v的支持一直不是很好,为此有一家一直以bring openstack into windows为己任的公司(Cloudbase)搞了一个well-tested hyper-v driver来方便大家用hyper-v作为openstack的计算节点,但是目前却并不支持Yoga。
- 官方文档关于horizon的搭建有一处错误,具体见此链接。
- follow官方文档搭建出来的openstack只是一个default的setup,实际上有不少功能都需要额外的设置,比如默认情况下虚拟机的配置调整是不支持在同节点进行的。我们需要额外开启配置选项才能在同节点进行scaling。
- 如果你想让你的云主机与主网络隔离,那所有的openstack节点都需要双网卡。,一个网卡走控制面流量,另一张网卡作为外部网络给虚拟机使用。同时家里最好也有两个路由器来分别提供控这两种网络
- 大多数操作系统都有提供自己的cloud image,可以下载下来直接传到openstack上。这样你就可以用这些image开云主机。如果你想做windows的镜像,可以使用cloudbase提供的windows-image-tools。
- 在创建的实例类型时,指定的vcpu数量默认是单核心的socket的数量。然而,部分操作系统(如Windows)是license by sockets以及license by cores。所以有时候可能需要设置合理的cpu topnology才能识别出所有的vcpu。比如win10 pro在无lincense的情况下最多只能识别2个sockets,如果你设置了8个vcpu,openstack在默认情况下给你开了8个sockets,在系统中也就只能识别2个vcpu。
- 一些cloud image在创建云主机时会通过cloud-init将管理员密码设置为一个随机密码。随机密码只有在云主机设置了公私钥之后,才能通过openstack api 或者 horizon(需要设置)获取到。
结果展示
概况
实例页面,在这里可以像公有云一样开机器
镜像页面,可以上传镜像
创建新的云主机
相关文章
- 文章目录 Table Of Contents for Typecho
- simple_html_dom换行符丢失的问题
- nginx编译安装ngx_lua模块
- 发现一个命令ldd
- typecho源代码解析1 - 系统初始化
- typecho源代码解析4 - 业务逻辑
- typecho插件编写教程6 - 调用接口
- typecho插件编写教程1 - 从HelloWorld说起
- typecho插件编写教程3 - 保存配置
- typecho插件编写教程4 - 插件点
- typecho插件编写教程5 - 核心代码
- typecho插件编写教程7 - Helper类
- TensorFlow系列--深度学习中的激励函数
- 百度sitemap提交插件 for Typecho
- nginx的优化配置
- 缓存插件TpCache for Typecho
- 让多说支持UA的显示
- 几条命令找出服务器上的垃圾文件
- 解决ngx_lua_waf总是提示参数错误的问题
- 在centos上安装Munin监控服务器运行状态