在 Raspberry Pi 集群上搭建 OpenStack

既然 Arm 处理器在 OpenStack 中是“一等公民”,而 Raspberry Pi 又基于 Arm 架构,为什么不将它们结合起来呢?
103 位读者喜欢这篇文章。
Raspberries with pi symbol overlay

Dwight Sipler 来自 Flickr

自从 Raspberry Pi 4 发布以来的一年里,我看到了许多关于 4GB 型号如何与 Kubernetes (K8s)、轻量级 Kubernetes (K3s) 和 Docker Swarm 等容器平台良好协作的教程(例如 这篇这篇)和 文章。 在我进行研究时,我了解到 Arm 处理器在 OpenStack 中是“一等公民”。 既然 Raspberry Pi 基于 Arm 架构,我决定通过在 Raspberry Pi 集群上安装 OpenStack 来验证这一理论。

准备工作

对于这个项目,我需要考虑几件事

  1. 是否使用 Ubuntu 64 位或 CentOS 64 位版本来引导 Raspberry Pi 进行无头启动;Raspberry Pi OS 即使是 Debian 衍生版本也不够用,因为它没有 OpenStack 软件包。
  2. 我需要可以在我的发行版中运行的最新版本的 OpenStack,因为我认为最新版本没有 AArch64 镜像。
  3. 我怀疑是否有关于自动化从头开始安装的文档,所以我将使用逐步过程。

使用的材料

  1. 四块 Raspberry Pi 4B,4GB 型号(推荐 8GB)
  2. 四张 32GB MicroSD 卡
  3. 四个带风扇和散热片的 Raspberry Pi 外壳(非常重要)
  4. 四个 Raspberry Pi 官方电源

配置基础操作系统

我使用了 CentOS AArch64 镜像;正如我所预料的那样,没有适用于 Raspberry Pi 的 CentOS 8 镜像,所以我使用了带有这个 预构建镜像 的 CentOS 7 AArch64。 当我尝试使用 dd 安装它时,它没有工作,但是当我使用 balenaEtcher 时,它像魔法一样奏效。

将镜像刻录到 SD 卡后,我将 Raspberry Pi 插入路由器以检查它们的 IP 地址,以便可以使用 SSH 远程访问它们。 我使用 nmtui 配置了它们的 WiFi 和主机名,以便在不连接任何电缆的情况下访问它们(当然,电源线除外)。 默认用户是 root,默认密码是 centos

我更新了操作系统

[root@rpi4b4-0 ~]# yum update -y

我在所有的 Raspberry Pi 上重复了这个过程,然后重启了它们。

安装 OpenStack

最新的 OpenStack 版本(Ussuri 和 Victoria)需要 CentOS 8,所以我使用了 Train,因为它是使用 CentOS 7 的最新版本。

我使用了 OpenStack 基金会的安装步骤,但我遇到了一些问题。 为了方便其他人在 CentOS 7 上安装 OpenStack,我整理了以下链接和提示。

准备工作

  1. 网络时间协议 (NTP)
    1. 控制器节点安装
    2. 计算节点安装
    3. 验证操作
  2. OpenStack 软件包: 运行 Train 版本的安装 (此链接包含所有版本)
  3. SQL 数据库:控制器节点安装
  4. 消息队列:控制器节点安装
  5. Memcached: 控制器节点安装
  6. Etcd: 控制器节点安装

OpenStack 服务

  1. 身份服务 (Keystone)
    1. 控制器节点安装
    2. 验证操作

  2. 镜像服务 (Glance)
    1. 控制器节点安装
    2. 验证操作

      提示:不要下载文档中提到的 CirrOS 镜像,请确保为 Raspberry Pi 使用 AArch64 CirrOS 镜像
  3. Placement 服务 (Placement)
    1. 控制器节点安装
    2. 验证操作

  4. 计算服务 (Nova)
    1. 控制器节点安装
    2. 计算节点安装
    3. 验证操作

      提示:在验证操作的最后一部分,由于打包错误,nova-status upgrade check 失败。 要修复它,请编辑控制器中的以下文件
      [root@rpi4b4-0 ~]# vim /etc/httpd/conf.d/00-placement-api.conf
      (…)
      <Directory /usr/bin>
         <IfVersion >= 2.4>
            Require all granted
         </IfVersion>
         <IfVersion < 2.4>
            Order allow,deny
            Allow from all
         </IfVersion>
      </Directory>

      如果您现在运行 nova-status upgrade check,它将工作。

  1. 网络服务 (Neutron)
    1. 控制器节点安装
    2. 选项 2 的控制器:自助网络安装

      要启用 br_netfiler 模块
      [root@rpi4b4-0 ~]# modprobe br_netfilter
      [root@rpi4b4-0 ~]# echo "br_netfilter" > /etc/modules-load.d/br_netfilter.conf
      [root@rpi4b4-0 ~]# lsmod|grep br_netfilter
    3. 计算节点安装
    4. 选项 2 的计算:自助网络安装

      要启用 br_netfiler 模块
      [root@rpi4b4-X ~]# modprobe br_netfilter
      [root@rpi4b4-X ~]# echo "br_netfilter" > /etc/modules-load.d/br_netfilter.conf
      [root@rpi4b4-X ~]# lsmod|grep br_netfilter
    5. 验证操作
    6. 选项 2 的验证操作:自助网络安装

  2. 仪表板服务 (Horizon)
    1. 控制器节点安装

      提示:重新启动 httpd 服务后,您将收到 404 错误。 要解决此问题,请将此行添加到 /etc/openstack-dashboard/local_settings 的末尾
      WEBROOT = '/dashboard'

      然后像往常一样重启 httpd

      [root@rpi4b4-X ~]# systemctl restart httpd.service
    2. 验证操作

它工作得怎么样?

这是一个有趣且成功的实验。 在性能方面,考虑到我的控制器只有四个核心和 4GB 内存,它相当慢,但它对于在一个仪表板中管理多台计算机很有用。 我的下一步将尝试使用 TripleO 部署和 Ceph 存储集群来启用实时迁移。 如果我考虑到更大的集群和工作负载,我可能会尝试使用 Raspberry Pi 的以太网; 目前,Grafana 在互联网监控方面工作良好。

接下来阅读
AJ Canlas
AJ Canlas 是 Micro-D International 在菲律宾的高级解决方案咨询经理。 他负责公共云和私有云基础设施及相关项目。 他的主要优势在于 Linux、OpenStack、Ansible 自动化和容器化。

评论已关闭。

© . All rights reserved.