做一个能管理四十台物理机器的系统,初步设想使用openstack和openshift。
架构分析
需求限制
- 整个系统只有一个公网ip,端口是稀有资源。
- 希望同时支持虚拟机和容器,虽然说openstack也能运行容器,但k8s才更像未来。并且我们也不需要虚拟机被经常调度,只在特定教学时期,需要快速配置一百台左右的虚拟机给学生使用。平时仍然是大规模使用容器和裸机。
设计
- 取5台机器部署openstack的核心组件,另取5台部署openshift的核心组件,其余30台准备好两套系统的计算节点部署要求。
- openstack和openshift添加和去除计算节点都比较容易。
- 如果对于stateful有要求,较为容易实现的是做一个nfs服务。另一种方案是stateful应用只在有限的几台机器上调度,大多机器不保证持久化(对于k8s只需要设置调度策略即可实现,openstack需要配置nova节点的资源)。
前期实验
搭建小型多节点openstack
安装方式
- 现在openstack组件也可以容器化运行,更容易管理,配置文件均在/etc/kolla/xxx下,可以单个组件的修改,重启容器。也可以使用脚本重部署。
安装流程
deploy machine
- 参考官网,由于是python,使用venv会比较容易成功。
- 使用venv后,
password
和global
文件仍然放到真实的/etc/kolla/
下,然后就可以运行kolla-ansible了。
target machine
- pip install时,容易发生版本不足,需要更新,但是类似
requests
这样的基础库,直接pip --update requests
会报错,应该pip --update --ignore-installed requests
。 - 安装
docker python SDK
,可能引发一个bug,必须卸载掉docker-py
,然后安装docker
。 - 其他软件使用yum或apt安装没有什么问题。
config
一个令人困惑的参数
kolla_internal_vip_address: "10.10.10.254"
。- 官网的相关说明(最底部)
- 我通过在外部路由器,添加
10.10.10.0/24 interface
,并将next hop
设为master节点所在的physical switch
。 - 然后整个局域网内的节点都可以通过10.10.10.254访问到master了。
network_interface: "em1"
,用来建立内网的网卡。neutron_external_interface: "p5p1"
,用来做neutron出口的网卡。/etc/kolla/neutron-xxx/ml2_conf.ini
里有external
的物理名称pn,这个会绑定物理网卡。- 建立flag类型外部网络ext,绑定
ml2_conf.ini
里的外部网络名称pn,子网取物理地址的子集,dhcp
设定不要冲突。 floating ip
可以从外部网络ext获取,然后绑定到内部ip,这样就能从pn访问虚拟机。
deploy
- 部署过程中可能会失败,我猜测原因是下载docker image超时了,只要重新运行一下即可,或者手动pull一下。
verify
- 通过NAT将
dashboard
转发出来,用户名为admin
,密码为password.xml
中的keystone_admin_password
。 - 从
dashboard
上传镜像,size过大总是失败,原因不明。直接用master
机器,glance-cli
添加即可。 - 密钥对绑定无效,暂未解决。
- 临时办法:通过libvirt给镜像嵌入一个
root password
,先通过密码登录。
- 临时办法:通过libvirt给镜像嵌入一个
- 没有部署存储节点,compute使用的是file类型,本地存储。节点上
/
有50G,/home
有2T,dashboard显示节点的存储为50G,猜测是因为只能监测根目录大小,暂不清楚如何配置。- 想调整文件系统大小做个测试,发现
xfs
不能减小,遂放弃。 - 调整ext和xfs大小
- 想调整文件系统大小做个测试,发现
搭建openshift
待续。
正式部署
待续。
实用工具
- libvirt
- ethtool
- netstat
- traceroute
- xfs_growfs
- resizefs