做一个能管理四十台物理机器的系统,初步设想使用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后,passwordglobal文件仍然放到真实的/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,先通过密码登录。
  • 没有部署存储节点,compute使用的是file类型,本地存储。节点上/有50G,/home有2T,dashboard显示节点的存储为50G,猜测是因为只能监测根目录大小,暂不清楚如何配置。

搭建openshift

待续。

正式部署

待续。

实用工具

  • libvirt
  • ethtool
  • netstat
  • traceroute
  • xfs_growfs
  • resizefs

参考手册