杰瑞科技汇

openstack搭建教程

OpenStack 是一个极其复杂的项目,由众多相互关联的服务组成,搭建 OpenStack 的过程也相对繁琐,本教程将以最主流和推荐的 Kolla 方式,在 CentOS 8 系统上部署一个 All-in-One (AIO) 环境。

openstack搭建教程-图1
(图片来源网络,侵删)

AIO 模式意味着所有 OpenStack 服务(计算、网络、存储、身份认证等)都安装在同一台物理服务器或虚拟机上,这非常适合学习、测试和开发环境,不适用于生产环境


核心概念

在开始之前,您需要了解几个核心组件:

  1. Keystone (身份服务):OpenStack 的“大脑”,负责用户认证、授权和服务目录,所有其他服务都需要向 Keystone 注册。
  2. Glance (镜像服务):负责管理虚拟机磁盘镜像,就像一个云端的“操作系统ISO仓库”。
  3. Nova (计算服务):负责管理虚拟机生命周期,包括创建、启动、停止、删除虚拟机,是 OpenStack 的计算核心。
  4. Neutron (网络服务):负责管理虚拟网络,为虚拟机提供 IP 地址、配置防火墙、创建 VPN 等。
  5. Cinder (块存储服务):为虚拟机提供持久化的块存储设备(类似硬盘),虚拟机关机后,数据不会丢失。
  6. Horizon (仪表板):OpenStack 的 Web 管理界面,方便用户通过图形界面操作。

第一部分:环境准备

硬件要求

对于 AIO 环境,建议配置如下:

  • CPU: 8 核或以上
  • 内存: 16 GB 或以上
  • 硬盘: 200 GB 或以上(SSD 更佳)
  • 操作系统: CentOS 8 Stream (推荐) 或 CentOS 8

网络规划

在 AIO 模式下,我们通常使用两个网络接口:

openstack搭建教程-图2
(图片来源网络,侵删)
  • 管理网络 (Management Network):
    • 用途: OpenStack 内部组件通信、API 访问、SSH 连接。
    • IP 地址: 0.0.1/24 (将作为控制节点的 IP)
    • 网关: 0.0.254
    • DNS: 8.8.8114.114.114
  • 外部网络 (External Network):
    • 用途: 为虚拟机提供外部访问能力(Floating IP)。
    • IP 地址: 168.1.0/24 (请根据您的实际局域网环境修改)
    • 网关: 168.1.1 (您局域网的网关)

基础系统配置

登录您的 CentOS 8 服务器,执行以下命令。

a. 设置主机名

sudo hostnamectl set-hostname openstack-aio

确保 /etc/hosts 文件包含正确的条目:

echo "127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4" | sudo tee /etc/hosts
echo "::1         localhost localhost.localdomain localhost6 localhost6.localdomain6" | sudo tee -a /etc/hosts
echo "10.0.0.1    openstack-aio" | sudo tee -a /etc/hosts

b. 配置网络 使用 nmcli 命令行工具配置网络,假设您的第一个网卡是 ens33

openstack搭建教程-图3
(图片来源网络,侵删)

管理网络配置 (ens33):

sudo nmcli con mod ens33 ipv4.method manual ipv4.addresses 10.0.0.1/24 ipv4.gateway 10.0.0.254 ipv4.dns 8.8.8.8
sudo nmcli con mod ens33 connection.autoconnect yes
sudo nmcli con up ens33

外部网络配置 (ens34 - 假设这是您的第二张网卡):

sudo nmcli con add type ethernet ifname ens34 con-name external
sudo nmcli con mod external ipv4.method manual ipv4.addresses 192.168.1.10/24 ipv4.gateway 192.168.1.1
sudo nmcli con mod external connection.autoconnect yes
sudo nmcli con up external

注意: ens34168.1.10 请根据您的实际情况修改。

c. 更新系统

sudo dnf update -y

d. 安装必要工具

sudo dnf install -y git python3-pip wget curl

e. 关闭防火墙和 SELinux OpenStack 的网络配置非常复杂,在学习阶段,关闭它们可以避免大量不必要的麻烦。

# 关闭防火墙
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# 关闭 SELinux
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

第二部分:使用 Kolla-Ansible 部署 OpenStack

Kolla-Ansible 是 OpenStack 官方推荐的 Ansible 部署工具,它通过 Docker 容器来运行 OpenStack 服务,使部署和升级过程标准化。

安装 Docker

Kolla 依赖 Docker。

# 安装 Docker
sudo dnf install -y docker
# 启动并设置开机自启
sudo systemctl enable --now docker
# 将当前用户加入 docker 组,避免每次使用 sudo
sudo usermod -aG docker $USER

重要: 执行完上面命令后,请注销并重新登录,以使用户组变更生效。

安装 Kolla-Ansible

# 创建 Python 虚拟环境 (推荐)
python3 -m venv venv
source venv/bin/activate
# 安装 Kolla-Ansible
pip install kolla-ansible

配置 Kolla-Ansible

a. 创建配置文件目录

mkdir -p ~/kolla
cp -r /usr/share/kolla-ansible/etc_examples/kolla/ ~/kolla/
cp /usr/share/kolla-ansible/ansible/inventory/* ~/kolla/

您的配置文件在 ~/kolla 目录下。

b. 编辑密码文件 (~/kolla/passwords.yml) 这是 OpenStack 各个服务组件的密码,必须修改!

vim ~/kolla/passwords.yml

您可以简单地使用一个强密码替换所有 {{ some_password }}

# 将所有服务的密码都设置为一个强密码,"Your_Secure_Password_123"
keystone_admin_password: "Your_Secure_Password_123"
nova_libvirt_password: "Your_Secure_Password_123"
neutron_l3_agent_password: "Your_Secure_Password_123"
# ... 等等,确保所有条目都被替换

c. 编辑 globals.yml 文件 (~/kolla/globals.yml) 这是全局配置文件,告诉 Kolla-Ansible 如何部署。

vim ~/kolla/globals.yml

修改以下关键项:

# 基础设置
kolla_base_distro: "centos"
kolla_install_type: "source"  # 从源码构建,功能最全
# 网络设置
network_interface: "ens33"  # 管理网络接口
neutron_external_interface: "ens34"  # 外部网络接口
# 注意:确保这里的 IP 地址和网关与您之前配置的一致
kolla_internal_address: "10.0.0.1"  # 控制节点 IP
kolla_external_vip_address: "10.0.0.1" # AIO 模式下与管理 IP 相同
# 启用需要的服务
# AIO 模式下,默认启用所有服务,无需修改
# enable_haproxy: "yes" # 启用 HAProxy (AIO 下可选)
enable_cinder: "yes" # 启用块存储
enable_neutron: "yes" # 启用网络
enable_heat: "yes"   # 启用编排服务

d. 编辑 Ansible 清单文件 (~/kolla/ansible/inventory/multinode) 在 AIO 模式下,所有服务都在一台机器上,multinode 文件很简单。

vim ~/kolla/ansible/inventory/multinode
```如下:
```ini
[control]
localhost
[network]
localhost
[compute]
localhost
[storage]
localhost
[monitoring]
localhost
[selfservice]
localhost
[zmq]
localhost

localhost 代表所有节点都在本机。

部署 OpenStack

a. 生成 SSH 密钥 (如果还没有)

ssh-keygen -t rsa
# 一路回车即可

b. 将公钥添加到授权列表

ssh-copy-id localhost
# 输入 yes 和您的用户密码

c. 拉取 Docker 镜像 这一步会下载所有 OpenStack 服务所需的 Docker 镜像,非常耗时且消耗大量带宽,请耐心等待。

source venv/bin/activate
kolla-ansible pull -i ~/kolla/ansible/inventory/multinode

d. 执行部署 这是最关键的一步,Kolla-Ansible 将根据配置开始安装和配置所有服务。

kolla-ansible deploy -i ~/kolla/ansible/inventory/multinode

这个过程会持续很长时间(通常在 30 分钟到数小时,取决于网络和硬件速度),请保持终端开启,观察日志输出,如果出现错误,请根据错误信息排查。


第三部分:配置和验证

部署成功后,需要进行一些后续配置才能正常使用。

初始化 OpenStack 环境

运行 post-deploy 脚本,它会生成 admin-openrc.sh 等配置文件。

kolla-ansible post-deploy -i ~/kolla/ansible/inventory/multinode

加载环境变量

这个脚本设置了 OS_PROJECT_NAME, OS_USERNAME, OS_PASSWORD 等环境变量,让您可以使用 openstack 命令行工具。

source ~/kolla/ansible/inventory/multi-node/keystone-admin

提示: 每次新开终端后,如果需要使用 openstack 命令,都需要重新执行 source 这一行。

验证安装

您可以使用 openstack 命令来验证各个服务是否正常运行。

a. 查看服务列表

openstack service list

您应该能看到 Keystone, Nova, Neutron, Glance, Cinder 等服务。

b. 查看镜像列表

openstack image list

列表应该是空的,因为我们还没有添加镜像。

c. 查看网络列表

openstack network list

您应该能看到 default 网络和 external 网络。

创建网络和镜像

a. 创建外部网络

openstack network create --external --share --provider-physical-network external --provider-network-type flat public
openstack subnet create --network public --gateway 192.168.1.1 --subnet-range 192.168.1.0/24 --allocation-pool start=192.168.1.100,end=192.168.1.200 public-subnet

b. 创建 Cirros 测试镜像

# 下载 Cirros 镜像
wget https://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img
# 上传镜像到 Glance
openstack image create --file cirros-0.5.2-x86_64-disk.img --disk-format qcow2 --container-format bare --public cirros

创建实例并测试

a. 创建安全组规则

# 允许 ICMP (ping)
openstack security group rule create --ingress --proto icmp default
# 允许 SSH (22) 端口
openstack security group rule create --ingress --proto tcp --dst-port 22 default

b. 创建密钥对

# 生成密钥对
ssh-keygen -t rsa -f mykey
# 将公钥添加到 OpenStack
openstack keypair create --public-key mykey.pub mykey

c. 创建虚拟机实例

# 创建一个名为 `my-vm` 的虚拟机,使用 `m1.tiny` 规格和 `cirros` 镜像
openstack server create --flavor m1.tiny --image cirros --nic net-id=$(openstack network list | grep default | awk '{print $2}') --security-group default --key-name mykey my-vm

d. 为实例分配浮动 IP

openstack floating ip create public
# 记下输出的 floating IP 地址
#  192.168.1.101
# 将这个浮动 IP 绑定到实例上
openstack server add floating ip my-vm <floating-ip-address>

e. SSH 连接到虚拟机

# 使用密钥登录
ssh cirros@<floating-ip-address>
# 密码是 'cubswin:)'

如果能成功登录,恭喜您!您的 OpenStack AIO 环境已经搭建成功!


常见问题与后续步骤

  • 问题: kolla-ansible pulldeploy 失败。
    • 排查: 检查网络连接、Docker 是否正常运行、globals.ymlpasswords.yml 配置是否正确,查看日志 /var/log/kolla/ 目录下的日志文件。
  • 问题: openstack 命令找不到或认证失败。
    • 排查: 确保已经 sourceadmin-openrc.sh 文件,检查 OS_PASSWORD 等环境变量是否正确。
  • 后续学习:
    • 使用 Horizon: 访问 http://<您的控制节点IP>,使用 admin 用户和您在 passwords.yml 中设置的密码登录。
    • 自定义镜像: 学习如何制作自己的 CentOS 或 Ubuntu 镜像。
    • Cinder 存储: 创建卷并挂载到虚拟机上。
    • Swift 对象存储: 如果需要,可以启用 Swift 服务来存储对象文件。

这份教程涵盖了从零开始搭建一个功能完备的 OpenStack AIO 环境的全过程,祝您学习愉快!

分享:
扫描分享到社交APP
上一篇
下一篇