# 华东师范大学数据科学与工程学院上机实践报告

课程名称:云计算与虚拟化技术年级:22 级上机实践成绩
指导教师:赵明昊姓名:邓博昊学号:10225501432
上机实践名称上机实践日期:2024/10/1
上机实践编号组号上机实践时间:10:02

# 一、实验目的

本次实验旨在学习如何在虚拟机环境中配置并安装 OpenStack 云计算平台。通过实际操作,掌握虚拟化技术的应用、OpenStack 的安装与配置、镜像和实例的创建与管理,进一步理解云计算平台的核心功能与使用方法。


# 二、实验内容与设计思想

实验内容包括以下几个方面:

  1. 虚拟机的配置:在 VMware 中创建虚拟机,配置内存、磁盘空间及网络,确保能够满足 OpenStack 运行的基本需求。
  2. OpenStack 安装与部署:使用 kolla-ansible 自动化部署工具进行 OpenStack 的安装与配置,确保环境准备和各服务的顺利运行。
  3. 镜像与实例管理:通过 OpenStack Dashboard 上传 Cirros 镜像并创建实例类型,测试虚拟机的创建与运行。
  4. 网络配置:配置两个 Host-only 网络,并在 OpenStack 中创建虚拟网络,确保实例之间的网络通信。
  5. 实例测试与管理:验证创建的实例的网络连通性,使用命令行和图形界面进行实例管理与监控。

设计思想:

  • 通过分步骤操作,逐步理解 OpenStack 的安装过程及各个组件之间的协同工作原理。
  • 使用 VMware 和 Kolla-Ansible,自动化配置和部署,提高实验效率和学习效果。
  • 实验过程中注重实际操作与理论理解的结合,提升对云计算平台实际应用的能力。

# 三、实验环境

  • 虚拟机管理软件:VMware Workstation
  • 操作系统:CentOS 7
  • OpenStack 版本:Stein 版本(通过实验手册下载链接提供的 ISO 镜像)
  • 实验硬件配置
    • 内存:8GB
    • 硬盘空间:>50GB
    • 两个 Host-only 网络
  • 网络环境
    • 第一个 Host-only 网络:10.10.10.1/24
    • 第二个 Host-only 网络:192.168.109.0/24

# 四、实验过程

# 1. 虚拟机配置

  • 使用 VMware 创建新的虚拟机,分配 8GB 内存和 60GB 的硬盘空间。
  • 给虚拟机分配两张网卡
  • 配置两个 Host-only 网络,并在 VMnet 里修改分配的子网 IP。
    • 第一张网卡用于 network_interface ,第二张网卡用于 neutron_external_interface
    • image-20241010083348070
    • image-20241010162229012

# 2. 安装 OpenStack

  • 启动虚拟机,选择 OpenStack Stein 版 ISO 作为启动盘。

  • 登录虚拟机,使用账户 kolla 和密码 kollapass ,切换到 root 用户。

  • 执行以下命令进行 OpenStack 的安装:

    sudo -s
    cd
    kolla-ansible prechecks # 进行安装前的检查
    kolla-ansible deploy
  • 安装完成后,执行 kolla-ansible post-deploy ,检查是否安装成功。

    • 可以看到已经安装成功了

    • image-20241010165611576

  • 复制 admin-openrc.sh 到当前目录并使用 source 命令重新加载环境变量。

    cp /etc/kolla/admin-openrc.sh .
    source admin-openrc.sh
    

# 3. 获取登录密码

打开 cmd 输入 ssh kolla@10.10.10.2 和密码 kollapass

cat admin-openrc.sh

获得密码: cHsRl48EvHb9dRGM3I3J7Ql6fHzbXGbA6rnfyZK5

image-20240929104519255

# 4. 登录并查看系统信息

使用 admin-openrc.sh 里获得的密码登录后,进入了 Openstack 面板,其概览界面如图

从当前 OpenStack 控制面板提供的数据来看,以下是对面板各部分的分析:

# 4.1 面板概览
  • 用户登录身份:登录账号为 “admin”,这意味着当前用户具有管理员权限,可以管理 OpenStack 中的各种资源。
  • 项目名称:当前操作的项目为 “计算”,具体是在 “概览” 页面中查看计算资源的使用情况。
# 4.2 计算资源的上限与使用情况
  • 实例(已使用 0 of 10):当前项目中允许创建 10 个实例,目前没有创建任何实例。
  • VCPU 数量(已使用 0 of 20):项目最多可以使用 20 个虚拟 CPU(VCPU),当前没有分配 VCPU。
  • 内存(已使用 0 字节 of 50GB):最大可用内存为 50GB,目前没有分配任何内存资源。
  • 卷、网络等其他资源:
    • 卷:当前未显示具体信息,可能与存储卷的创建相关。
    • 网络:当前项目允许创建最多 100 个网络,目前已经创建了 1 个。
    • 安全组(已使用 1 of 10):最多可以创建 10 个安全组,目前已经创建了 1 个安全组,用于配置实例的防火墙规则。
    • 安全组规则(已使用 4 of 100):目前创建了 4 条安全组规则,这些规则通常用于允许或限制特定的网络流量。
    • 端口(已使用 1 of 500):最多可以创建 500 个端口,当前项目已使用了 1 个端口。
# 4.3 浮动 IP 与路由
  • 浮动 IP(已分配 0 of 50):最多可以使用 50 个浮动 IP,用于为实例提供外部访问的公网 IP。目前未分配任何浮动 IP。
  • 路由(已使用 0 of 10):项目最多可以创建 10 个路由,目前没有创建任何路由。
# 4.4 使用情况摘要
  • 时间范围选择:用户可以选择特定的时间范围,查询该时间段内的资源使用情况。
  • 资源统计信息:
    • “运行中的实例”:0,表示当前没有启动中的实例。
    • “使用的 VCPU 小时数、内存 GB 小时数、RAM 小时数” 均为 0,意味着该时间段内没有消耗这些资源。

image-20240929104609152

然后进入系统信息栏

从当前 OpenStack 系统信息面板的截图可以看出:

# 4.5 服务概览
  • nova_legacy 和 nova(Compute):管理虚拟机实例的创建和操作。
  • keystone(Identity):提供用户和身份认证服务。
  • neutron(Network):管理虚拟网络、子网、路由。
  • placement:负责计算资源的分配。
  • heat 和 heat-cfn(Orchestration):管理云资源编排。
  • glance(Image):管理虚拟机镜像。
# 4.6 配置与状态
  • 所有服务通过 10.10.10.254 管理网络进行通信。
  • 提供 Admin、Internal、Public 三种接口,以满足不同访问需求。

image-20240929104555674

总体来看,OpenStack 的核心服务已配置完成,环境准备就绪,可以进行云资源管理和部署了。

# 5. 镜像与虚拟机规格的创建

下载 Cirros 镜像并上传至 OpenStack。

在这里下载 Cirros 镜像:

  • 地址:http://download.cirros-cloud.net/
  • 文件:cirros-0.5.1-x86_64-disk.img

仿照实验手册的参数填写了镜像详情

下面对一些关键参数进行了解析

  1. 镜像详情:
    • 镜像名称:用户在此输入了 “cirros0” 作为镜像的名称。
    • 镜像描述:该字段为空,用户可以在此输入镜像的描述。
  2. 镜像源:
    • 文件:已选择了文件 “cirros-0.5.1-x86_64-disk.img” 作为镜像文件。
    • 镜像格式:格式被设置为 “QCOW2 - QEMU 模拟磁盘”,即 QCOW2 格式的虚拟磁盘文件。
  3. 镜像要求:
    • 内核和 Ramdisk:提供了下拉菜单,用于选择特定的内核和 Ramdisk 镜像,但这些字段目前未选择任何内容。
    • 架构:该字段为空,用户可以指定镜像的架构类型。
    • 最小磁盘和最小内存:均设置为 0,表示没有特定的磁盘空间和内存最小要求。
  4. 镜像共享:
    • 可见性:提供了 “公有” 和 “私有” 两个选项,用户可以选择镜像是否为公共可见或私有。
    • 受保护的:提供了 “是” 和 “否” 选项,表示是否保护该镜像不被删除。

image-20240929105003481

可以看到,这里已经能看到镜像在本地源里了,说明已经创建成功了

image-20240929105803553

创建虚拟机规格 “m1.tiny” 以便测试虚拟机的创建。

参考手册,输入如下命令创建了实例类型 “m1.tiny”

这条命令用于在 OpenStack 中创建一个虚拟机规格(flavor)

(openstack) flavor create --id auto --vcpus 1 --ram 512 --disk 1 m1.tiny
  1. flavor create:

    • flavor 是 OpenStack 中的虚拟机规格,定义了虚拟机实例的硬件配置,包括 CPU、内存、和磁盘等资源。
    • create 是创建 flavor 的操作,用于新建一个虚拟机规格。
  2. --id auto:

    • --id 参数用于指定虚拟机规格的唯一标识符(ID)。
    • auto 表示系统将自动分配一个 ID。用户也可以选择手动指定一个唯一 ID。
  3. --vcpus 1:

    • --vcpus 参数指定虚拟机实例将拥有的虚拟 CPU(vCPU)数量。
    • 1 表示该虚拟机规格将分配 1 个虚拟 CPU,适用于低计算需求的轻量级实例。
  4. --ram 512:

    • --ram 参数指定虚拟机实例的内存大小,单位为 MB。
    • 512 表示该虚拟机规格将分配 512 MB 内存。
  5. --disk 1:

    • --disk 参数指定虚拟机实例的根磁盘大小,单位为 GB。
    • 1 表示该虚拟机规格将分配 1 GB 的磁盘空间,适用于存储需求较少的轻量级实例。
    • 注意:这指的是根磁盘的大小,不包括临时磁盘或其他额外存储。
  6. m1.tiny:

    • 这是该虚拟机规格的名称,在 OpenStack 环境中需要唯一。
    • m1.tiny 是一个常见的轻量级规格名称,通常用于测试或开发环境中低资源消耗的实例。

创建了一个名为 m1.tiny 的轻量级虚拟机规格,配置如下:

  • 1 个虚拟 CPU(vCPU)
  • 512 MB 内存
  • 1 GB 根磁盘空间

image-20240929105620763

# 6. 创建私有网络

在实例化镜像前,还需要创建私有网络和子网,配置路由和安全组规则,确保实例能够访问外部网络。

子网划分参考了实验文档的划分

image-20241010202123664

image-20241010202038019

创建好后即可在网络里看到该私有网络

image-20240929110051191

# 7. 创建实例

# 7.1 修改虚拟化类型

首先通过 vi 命令编辑 /etc/kolla/nova-compute/nova.conf 文件

image-20241010202635281

然后将虚拟化类型更改为 qemu , 因为之前创建镜像的时候也选择的 qemu 参数

这里解释下我们修改的 libvirt 部分

[libvirt] 区块

  • connection_uri = qemu+tcp://10.10.10.2/system :指定 libvirt 的连接 URI,表示使用 QEMU 通过 TCP 协议连接到位于 IP 地址 10.10.10.2 的主机上的虚拟化服务。
  • virt_type = qemu :指定虚拟化类型为 QEMU,这表明虚拟机将通过 QEMU 虚拟化来创建。QEMU 通常用于在没有硬件虚拟化支持的环境中模拟虚拟机,或者用于轻量级的测试和开发环境。

image-20241010202907118

最后重启 Nova 计算节点并查看容器状态,确保计算节点的正常运行:

docker restart nova_compute
docker ps | grep compute

这里可以看到容器正常运行

image-20241010203114927

# 7.2 创建实例
# 7.2.1 命名

实例总计

  • 显示当前已创建实例的数量及配额限制。图中显示最大配额为 10,目前已经创建了 1 个实例,因此还可以创建 9 个实例。

  • 可以通过 ssh 连接服务器通过如下命令修复配额:

    • 使用以下命令列出所有项目并找到要修改的项目 ID:

      openstack project list
      

      image-20241010204528533

    • 使用以下命令修改特定项目的资源配额。这里以修改实例数量为例:

      openstack quota set --instances <数量> <项目ID>
      

      image-20241010204616894

    • 例如,要将实例配额设置为 20,可以执行:

      openstack quota set --instances 20 <项目ID>
      
    • 类似地,可以调整其他资源配额,如虚拟 CPU、内存、磁盘等:

      openstack quota set --cores <vCPU数量> <项目ID>
      openstack quota set --ram <内存量(MB)> <项目ID>
      openstack quota set --volumes <卷数量> <项目ID>
      
    • 执行以下命令以确认配额设置已生效:

      openstack quota show <项目ID>
      

可用域

  • 当前选项是 “nova”,这通常是 OpenStack 中默认的计算域(availability zone)。在 OpenStack 中,“可用域” 用于对物理基础设施进行逻辑分区,可以让管理员将计算资源分配到不同的地理位置、机架或其他逻辑分区。
  • 使用 “nova” 域意味着实例将在默认的计算资源池中创建。如果有其他域(如 “internal”、“external” 等),用户可以在此选择,以指定不同的资源池或硬件分布。

image-20241010203618715

# 7.2.2 选择镜像源

这里选择之前已经创建好的 cirssos 镜像即可

image-20241010203545156

# 7.2.3 选择实例类型

即之前分配好的虚拟机配额

image-20241010205755342

# 7.2.4 选择网络

选择之前创建好的私有网络即可

image-20241010205853090

# 7.2.5 创建密匙对

这里不需要额外暴露网络接口和自定义安全组,故网络接口不需要配置,安全组使用默认即可。

这里创建密匙对方便未来 SSH 连接。

image-20241010210000995

# 7.2.6 查看情况

剩下的自定义配置,服务器组,scheduler hint,元数据
由于此次实验中不需要使用,直接跳过使用默认即可

可以看到,实例已经正常运行了

image-20241010232447785

# 8. 修复

有时候会出现创建实例时 Timeout 的问题

image-20241010232153743

根据报错可以发现,该实例迟迟没有获得调度

image-20241010232202577

输入如下命令

docker ps -a | grep nova_scheduler

可以发现调度器已经死了

image-20241010231935795

使用如下命令重启调度器

docker restart nova_scheduler

image-20241010232124674

这时候就正常运行了

image-20241010232400121


# 9. 补充

下面为自己写的在 debian 上安装的脚本

#!/bin/bash
# 设置镜像源
MIRROR="https://pypi.tuna.tsinghua.edu.cn/simple"
# 更新包索引并安装必要的软件包
echo "正在更新系统并安装必要的软件包..."
sudo apt-get update && sudo apt-get install -y \
    git \
    python3-dev \
    python3-pip \
    python-is-python3 \
    python3-venv \
    yq \
    gcc \
    iproute2 \
    libssl-dev \
    libffi-dev
# 清理缓存
sudo apt-get clean && sudo rm -rf /var/lib/apt/lists/*
# 创建虚拟环境并激活
echo "正在配置Python虚拟环境..."
mkdir -p /home/openstack
cd /home/openstack
python3 -m venv test_venv
source /home/openstack/test_venv/bin/activate
# 配置 pip 镜像源并安装必要的 Python 包
echo "正在安装pip和必要的Python库..."
pip config set global.index-url "$MIRROR"
pip install -U pip
pip install ansible==6.7.0
pip install git+https://opendev.org/openstack/kolla-ansible@stable/2023.1
# 配置 Kolla-ansible 和 Ansible Galaxy 需求
echo "正在配置Kolla-Ansible..."
mkdir -p /etc/kolla
sudo chown "$USER":"$USER" /etc/kolla
cp -r /home/openstack/test_venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla
cp /home/openstack/test_venv/share/kolla-ansible/ansible/inventory/all-in-one /home/openstack/
yq eval '.kolla_base_distro = "debian"' -i /etc/kolla/globals.yml
yq eval '.kolla_internal_vip_address = "10.10.10.254"' -i /etc/kolla/globals.yml
yq eval '.network_interface = "eth0"' -i /etc/kolla/globals.yml
yq eval '.neutron_external_interface = "eth1"' -i /etc/kolla/globals.yml
yq eval '.enable_haproxy = "no"' -i /etc/kolla/globals.yml
# 提示用户确认是否继续执行 Kolla-Ansible 命令
read -p "请确保配置正确,然后继续安装Kolla-Ansible并部署。 (y/n): " confirm
if [[ "$confirm" != "y" ]]; then
    echo "安装已取消。"
    exit 1
fi
# 激活虚拟环境并执行 Kolla-Ansible 命令
echo "正在执行Kolla-Ansible部署..."
source /home/openstack/test_venv/bin/activate
kolla-ansible -i ./all-in-one bootstrap-servers
kolla-ansible -i ./all-in-one prechecks
kolla-ansible -i ./all-in-one deploy
kolla-ansible post-deploy
cd /root
cp /etc/kolla/admin-openrc.sh .
source admin-openrc.sh

# 五、总结

通过此次实验,我们成功部署并配置了 OpenStack 云计算环境,掌握了如何在虚拟机中创建和管理云平台实例、镜像和网络。实验过程中遇到的挑战主要是配置虚拟机的网络连通性和 OpenStack 的部署时间较长。通过耐心操作与详细的实验步骤,最终成功完成了实验。

此次实验帮助我们更深入理解了 OpenStack 各组件的工作原理及其在云计算环境中的实际应用。掌握了云计算平台的基础操作,为今后在云计算领域的深入学习和研究奠定了良好基础。同时,此次实验还提升了我们在面对复杂系统时的调试能力与解决问题的能力。