2024-12-09 mutilpass部署openstack devstack形式

在 macOS 上通过 Multipass 部署 OpenStack 测试环境是一个非常方便的方式,尤其是使用 All-in-One 部署方式来简化环境配置。All-in-One 部署将 OpenStack 的所有核心组件(如 Nova、Keystone、Glance、Cinder、Neutron 等)部署在一台虚拟机上,适合用于测试和开发环境。

使用 Multipass 部署 OpenStack #

1. 准备工作: #

  • 安装 Multipass:确保你已经安装了 Multipass。你可以通过官网(Multipass 官方网站)下载并安装。
  • 安装 Ubuntu 虚拟机:创建一个 Ubuntu 虚拟机来部署 OpenStack。

2. 创建虚拟机: #

使用 Multipass 创建 Ubuntu 虚拟机时,你可以指定虚拟机的资源配置(如 CPU 核数、内存和硬盘空间)。以下是创建虚拟机的命令:

multipass launch --name openstack-vm --cpus 4 --mem 8G --disk 40G 22.04
  • --name openstack-vm:虚拟机的名称。
  • --cpus 4:分配 4 个 CPU 核心。
  • --mem 8G:分配 8GB 内存。
  • --disk 40G:分配 40GB 硬盘空间。
  • 20.04:指定使用 Ubuntu 20.04 LTS 版本。

这将创建一台名为 openstack-vm 的虚拟机,具有 4 核 CPU、8GB 内存和 40GB 硬盘空间。

3. 连接到虚拟机: #

创建虚拟机后,你可以通过以下命令连接到虚拟机的终端:

multipass shell openstack-vm

进入虚拟机后,你可以开始在里面安装 OpenStack。

4. 在虚拟机中部署 OpenStack: #

有几种方式可以在 Ubuntu 虚拟机中安装 OpenStack:

  • 使用 DevStack:这是最常见的开发环境部署工具,适合在单一节点(All-in-One)部署 OpenStack。DevStack 会自动配置所有 OpenStack 组件,并且可以通过简单的配置来启动整个环境。
  • 使用 Packstack:这是 Red Hat 开发的脚本工具,适用于 OpenStack 的快速部署。

下面是通过 DevStack 在虚拟机中部署 OpenStack 的简单步骤:

5. 使用 DevStack 安装 OpenStack #

  1. 更新系统

    sudo apt update
    sudo apt upgrade -y
    sudo apt install git -y
    
  2. 克隆 DevStack 仓库

    
    
    git clone https://opendev.org/openstack/devstack
    cd devstack
    
  3. 配置 DevStack: 你可以使用默认的配置文件,也可以创建一个自定义配置文件。在 devstack 目录下创建一个配置文件 local.conf,例如:

    vim local.conf
    

    配置内容如下(修改为你自己的用户名和密码):

    [[local|localrc]]
    ADMIN_PASSWORD=yourpassword
    DATABASE_PASSWORD=$ADMIN_PASSWORD
    RABBIT_PASSWORD=$ADMIN_PASSWORD
    SERVICE_PASSWORD=$ADMIN_PASSWORD
    
    [[local|localrc]]
    ADMIN_PASSWORD=1234
    DATABASE_PASSWORD=1234
    RABBIT_PASSWORD=1234
    SERVICE_PASSWORD=1234
    
  4. 运行 DevStack 安装 OpenStack: 运行以下命令来安装 OpenStack:

    ./stack.sh
    
    FORCE=yes ./stack.sh
    

    这个过程会下载和安装所有需要的依赖,并配置 OpenStack 所有组件。安装过程可能需要一些时间。

你遇到的错误信息表明 stack.sh 脚本在执行过程中遇到了一些问题。根据报错信息,可能是以下几个原因导致的:

  1. 权限问题或目录不存在
    • 错误消息显示 functions-common 脚本试图访问 /opt/stack/logs/error.log 文件时找不到该目录。这通常是由于目标目录没有创建或当前用户没有足够权限导致的。
  2. 缺少必要的目录
    • OpenStack 的安装脚本会创建一些日志和临时目录。如果这些目录没有正确创建,可能会导致后续操作失败。

解决方案 #

1. 创建缺少的目录 #

尝试手动创建日志目录 /opt/stack/logs,并设置正确的权限:

sudo mkdir -p /opt/stack/logs
sudo chown -R ubuntu:ubuntu /opt/stack

这里假设你是以 ubuntu 用户身份运行的(根据错误信息中的 ubuntu@openstack-vm)。

2. 确保脚本具有执行权限 #

如果是权限问题,确保脚本具有正确的执行权限:

chmod +x stack.sh

3. 使用 FORCE=yes 重新运行脚本 #

如果你想绕过当前的错误并强制运行安装脚本,可以使用 FORCE=yes 环境变量来继续执行脚本:

FORCE=yes ./stack.sh

这会强制脚本继续执行,但需要注意,这种方式可能会跳过一些错误检查。

4. 查看更详细的日志 #

如果问题依旧没有解决,查看脚本日志的详细信息可以帮助找出根本原因。你可以查看 stack.sh 脚本所在目录中的其他日志文件,通常这些文件会有更多的错误信息。

cat /opt/stack/logs/error.log

5. 清理之前的安装并重新开始 #

如果前面的步骤都没有解决问题,可以尝试清理之前的安装并重新运行:

./unstack.sh
./clean.sh

然后再尝试重新运行 stack.sh

./stack.sh

6. 检查依赖和配置 #

确保系统已安装所有必要的依赖项,特别是网络相关的工具(如 gitpython 等),并且你的配置文件(如 local.conf)没有遗漏或配置错误。


总结 #

  • 检查并创建缺少的目录 /opt/stack/logs
  • 确保脚本具有正确的执行权限。
  • 尝试使用 FORCE=yes 重新运行脚本。
  • 查看错误日志获取更多信息。
  • 清理并重新开始安装过程。

这些步骤应该能帮助你解决安装过程中的问题。

6. 完成安装后访问 OpenStack#

安装完成后,DevStack 会启动一个默认的 Horizon Web 界面,你可以在浏览器中访问并登录。

  1. 获取虚拟机的 IP 地址:

    multipass list
    
  2. 在浏览器中访问 Horizon Web 界面: 访问 http://<VM-IP>/dashboard,并使用 DevStack 安装过程中设置的 ADMIN_PASSWORD 登录。


推荐配置 #

  • CPU:4 核 CPU(可以根据需要调整,2 核也能满足基础体验)
  • 内存:8GB 内存(OpenStack 虽然可以在 4GB 内存上运行,但 8GB 会带来更好的体验,尤其是在启动虚拟机和运行服务时)
  • 硬盘空间:40GB 硬盘(40GB 适合测试环境,如果需要运行多个虚拟机,可能需要更多存储空间)

总结 #

通过 Multipass 和 DevStack,你可以轻松在 macOS 上的 Ubuntu 虚拟机中部署一个测试用的 OpenStack 环境。资源配置方面,4 核 CPU、8GB 内存和 40GB 硬盘是一个合适的基础配置,可以支撑 OpenStack 的基础功能和一些虚拟机的运行。如果需要更多的虚拟机或服务,可以根据需求适当调整资源配置。

/opt/stack/requirements/upper-constraints.txt

zipp

image-20241208081930313

image-20241208082146901

admin-openrc.sh 是一个环境配置文件,它包含了 OpenStack 管理员账户的认证信息,通常在安装和部署 OpenStack 时生成。这个文件用于设置环境变量,使得你可以通过 openstack 命令行工具与 OpenStack 进行交互。

如何使用 admin-openrc.sh 文件: #

  1. 下载 admin-openrc.sh 文件

    如果你从 OpenStack 的 Web 控制面板(Horizon)下载了 admin-openrc.sh 文件,你需要在本地环境中使用它来设置命令行环境。

    通常,你可以在 Horizon 控制面板中找到 “Download OpenRC file” 的选项,选择下载 admin-openrc.sh,这个文件会包含你 OpenStack 管理员账号的认证信息(如用户名、密码等)。

  2. 使用 source 命令加载环境变量

    打开终端并定位到 admin-openrc.sh 文件所在的目录,使用 source 命令加载该文件,这样文件中定义的环境变量就会在当前的 shell 会话中生效。

    source admin-openrc.sh
    

    执行后,它会要求你输入 OpenStack 管理员账号的密码。输入密码后,环境变量会设置好,你就可以使用 OpenStack 的命令行工具进行操作了。

  3. 验证环境变量设置

    加载环境变量后,可以通过 openstack 命令验证是否设置成功。例如,查看当前项目的信息:

    openstack project list
    

    如果环境变量设置正确,你应该能够看到当前 OpenStack 环境中的所有项目。

  4. 使用 openstack 命令行工具

    加载了环境变量之后,你就可以开始使用 OpenStack 的命令行工具(如 openstack server createopenstack image listopenstack flavor list 等)来管理你的 OpenStack 实例和资源。

    示例:

    • 查看所有镜像:

      openstack image list
      
    • 查看所有实例:

      openstack server list
      
    • 创建一个新的实例:

      openstack server create --image <image_name> --flavor <flavor_name> --network <network_name> --key-name <key_name> <server_name>
      

示例步骤:如何使用 admin-openrc.sh 创建实例 #

  1. 加载 OpenRC 文件

    source admin-openrc.sh
    
  2. 查看可用的镜像

    openstack image list
    

    你会看到类似下面的输出:

    +--------------------------------------+------------------+--------+
    | ID                                   | Name             | Status |
    +--------------------------------------+------------------+--------+
    | 1234abcd-5678-efgh-ijkl-mnopqrstuv  | ubuntu-22.04     | active |
    | abcd1234-5678-efgh-ijkl-mnopqrstuv  | centos-7         | active |
    +--------------------------------------+------------------+--------+
    
  3. 查看可用的 flavor

    openstack flavor list
    

    你会看到如下输出:

    +---------+--------+------+------+
    | ID      | Name   | RAM  | Disk |
    +---------+--------+------+------+
    | 1       | m1.small | 2048 | 20   |
    | 2       | m1.medium | 4096 | 40   |
    +---------+--------+------+------+
    
  4. 创建实例

    假设你想使用 ubuntu-22.04 镜像,m1.small 规格,并连接到名为 private 的网络,命令如下:

    openstack server create --image ubuntu-22.04 --flavor m1.small --network private --key-name my-key test-instance
    

    这会创建一个名为 test-instance 的实例。

  5. 查看实例状态

    openstack server list
    

    你会看到实例的状态变为 ACTIVE,并且可以访问它。


总结 #

  • admin-openrc.sh 是一个包含 OpenStack 管理员认证信息的文件,加载它之后,你可以使用 OpenStack 的命令行工具来管理资源。
  • 使用 source admin-openrc.sh 加载文件后,你可以创建实例、查看镜像、管理网络等。
  • 加载后,你就可以使用 openstack 命令行工具执行各种操作,例如创建实例、查看网络、配置安全组等。

通过这些步骤,你可以成功使用 OpenStack 的 CLI 创建实例并管理资源。

openstack compute service list


ubuntu@openstack-vm:~$ openstack compute service list
+--------------------------------------+----------------+--------------+----------+---------+-------+----------------------------+
| ID                                   | Binary         | Host         | Zone     | Status  | State | Updated At                 |
+--------------------------------------+----------------+--------------+----------+---------+-------+----------------------------+
| 0aab74ff-7591-4f21-9d1e-eafc61e1a76f | nova-scheduler | openstack-vm | internal | enabled | up    | 2024-12-08T22:40:48.000000 |
| c2a831c6-6a29-4222-aa46-a6241de24d4f | nova-conductor | openstack-vm | internal | enabled | up    | 2024-12-08T22:40:58.000000 |
| ff2187dc-c994-44a2-92e3-db4be37f1005 | nova-conductor | openstack-vm | internal | enabled | up    | 2024-12-08T22:41:21.000000 |
| 6d0341c1-bacb-409e-8628-61e870bb83ac | nova-compute   | openstack-vm | nova     | enabled | up    | 2024-12-08T22:41:16.000000 |
+--------------------------------------+----------------+--------------+----------+---------+-------+----------------------------+
ubuntu@openstack-vm:~$

在 DevStack 环境中重启 Nova 服务有几种方式:

  1. 使用 systemctl 命令(如果是 systemd 管理的服务):
# 重启所有 nova 相关服务
sudo systemctl restart devstack@n-*

# 重启具体服务
sudo systemctl restart devstack@n-api.service
sudo systemctl restart devstack@n-cpu.service
sudo systemctl restart devstack@n-cond.service
sudo systemctl restart devstack@n-sch.service
  1. 使用 DevStack 自带的脚本:
# 进入 devstack 目录
cd /opt/stack/devstack

# 重启所有服务
./unstack.sh
./stack.sh

# 或者使用 rejoin-stack.sh
./rejoin-stack.sh
  1. 使用 screen 会话方式:
# 查看所有 screen 会话
screen -ls

# 重新连接到 nova 相关的 screen
screen -r stack
# 按 Ctrl-A + " 切换到需要的窗口(n-api, n-cpu 等)
# 按 Ctrl-C 停止服务
# 重新运行服务命令
  1. 检查服务状态:
# 查看 nova 服务状态
openstack compute service list

# 查看具体服务日志
sudo tail -f /var/log/nova/nova-api.log
sudo tail -f /var/log/nova/nova-compute.log

如果遇到问题:

  1. 检查日志文件:
# 查看系统日志
sudo journalctl -u devstack@n-*

# 查看 nova 日志
cd /var/log/nova/
tail -f *.log
  1. 检查服务配置:
# 检查 nova 配置文件
cat /etc/nova/nova.conf

# 检查服务状态
openstack compute service list
nova service-list
  1. 常见问题处理:
# 清理数据库(谨慎使用)
mysql -u root -p
> use nova;
> show tables;
> truncate table instances;

# 重置 nova 数据库
cd /opt/stack/devstack
./unstack.sh
mysql -u root -p -e "drop database nova;"
./stack.sh

注意事项:

  1. 重启前最好先检查服务状态
  2. 建议查看日志确认是否有错误
  3. 如果单个服务重启失败,可能需要重启相关依赖服务
  4. 重要数据操作前做好备份

使用 unstack.sh 关闭后再用 stack.sh 重启,实例是否还在取决于几个因素:

  1. 默认情况下:
  • 实例的数据会保留在数据库中
  • 实例的状态可能会变为 SHUTOFFERROR
  • 重启后需要手动启动实例
  1. 检查和恢复实例:
# 查看实例状态
openstack server list --all

# 启动处于关闭状态的实例
openstack server start 实例ID

# 如果实例状态异常,可以尝试重置状态
openstack server reset-state --active 实例ID
  1. 如果想完全清除环境:
# 清理所有数据(包括实例)
cd /opt/stack/devstack
./clean.sh

# 或者清理数据库
mysql -u root -p
> drop database nova;
> drop database neutron;

注意事项:

  1. 建议在关闭前备份重要数据
  2. 如果实例很重要,最好在关闭前做快照
  3. 重启后检查网络和存储是否正常挂载
  4. 可能需要重新配置安全组和浮动IP

最佳实践:

# 关闭前
openstack server list --all  # 记录实例信息
openstack server stop 实例ID  # 优雅关闭实例

# 关闭 devstack
./unstack.sh

# 重启后
./stack.sh
openstack server start 实例ID  # 启动实例