从概念到实践的完整指南
在云计算技术蓬勃发展的今天,OpenStack 作为开源云计算领域的核心框架,已成为构建私有云和公有云的首选方案。本文将从云计算基础概念入手,通过详细的实验步骤,带领读者完成 OpenStack 的一键部署、控制台功能体验及云主机创建全过程,帮助初学者快速掌握 OpenStack 的核心操作。
一、云计算与 OpenStack 基础概念
1.1 云计算概述
云计算(Cloud Computing)是一种基于网络的超级计算模式,它通过分布式计算和虚拟化技术,将分散的计算资源(如服务器、存储、网络)整合为弹性可扩展的资源池,为用户提供按需分配的 IT 服务。这种模式打破了传统 IT 架构的物理限制,使用户能够像使用水电一样便捷地获取计算资源。
1.1.1 云计算的服务模型
云计算主要分为三种服务模型,每种模型对应不同的用户需求和技术层次:
IaaS(基础设施即服务):提供最底层的计算、存储和网络资源,用户可在此基础上部署操作系统和应用程序。典型场景包括虚拟机租赁、块存储服务等,OpenStack 主要实现 IaaS 功能。
PaaS(平台即服务):提供预配置的开发和运行环境,用户无需关注底层基础设施,专注于应用开发。例如 Heroku、Google App Engine 等。
SaaS(软件即服务):通过网络直接提供软件应用,用户以订阅方式使用。常见案例包括 Office 365、Salesforce 等。
1.1.2 OpenStack 的起源与定位
OpenStack 由 Rackspace 和 NASA 于 2010 年联合发起,是一个以 Apache 许可证授权的开源云计算项目。其目标是提供简单易用、可扩展的云基础设施解决方案,目前已成为全球范围内应用最广泛的 IaaS 开源平台。
OpenStack 采用模块化设计,各组件通过 API 协同工作,支持计算、存储、网络等资源的统一管理。截至最新的 Train 版本,OpenStack 已发展为包含 10 余个核心项目的成熟生态系统,被亚马逊、微软、IBM 等众多企业用于构建私有云或混合云环境。
1.2 OpenStack 核心组件解析
OpenStack 的强大功能源于其模块化的组件架构,每个组件专注于特定功能领域,通过标准化接口实现协同工作。以下是 OpenStack 的八大核心组件:
服务 | 项目名称 | 功能描述 |
---|---|---|
计算服务 | Nova | 负责虚拟机实例的生命周期管理,支持 KVM、VMware 等多种虚拟化技术,实现计算资源的弹性扩展。 |
网络服务 | Neutron | 提供虚拟网络配置功能,支持创建租户隔离的网络拓扑,包括子网、路由器、安全组等。 |
身份认证服务 | Keystone | 统一管理用户身份、权限和服务目录,实现基于角色的访问控制(RBAC)。 |
控制面板服务 | Horizon | 提供 Web 图形化管理界面,简化用户对 OpenStack 资源的操作,无需频繁使用命令行。 |
镜像服务 | Glance | 存储和管理虚拟机镜像,支持多种格式(如 QCOW2、RAW),支持镜像的上传、下载和共享。 |
块存储服务 | Cinder | 为虚拟机提供持久化块存储设备,支持动态扩展和快照功能,兼容多种存储后端。 |
对象存储服务 | Swift | 提供分布式对象存储,支持海量非结构化数据的存储,具备高可用性和无限扩展能力。 |
计量服务 | Ceilometer | 收集和监控云资源使用数据,为计费、容量规划提供依据,支持资源使用情况的实时统计。 |
这些组件通过消息队列(如 RabbitMQ)和数据库(如 MySQL)进行通信,形成一个完整的云计算管理平台。理解各组件的功能定位,是深入掌握 OpenStack 的基础。
二、OpenStack 一键部署实践
2.1 实验环境准备
2.1.1 硬件与软件要求
本次实验采用单机部署模式,建议使用以下配置的物理机或虚拟机:
硬件配置:4 核 CPU、8GB 内存、30GB 以上磁盘空间,1 个 1Gbps 网卡(支持硬件虚拟化)。
软件配置:CentOS 7.3(最小化安装),确保能访问互联网(在线安装)或准备好离线安装包。
2.1.2 环境初始化配置
在部署 OpenStack 前,需对操作系统进行基础配置:
- 设置静态 IP 与主机名
bash
# 修改IP配置(以ens33为例)
vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
IPADDR=192.168.9.137
PREFIX=24
GATEWAY=192.168.9.1
DNS1=114.114.114.114
# 设置主机名
hostnamectl set-hostname openstack
bash # 使主机名立即生效
- 关闭防火墙与 SELinux
bash
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0
- 禁用 NetworkManager 并配置 hosts
bash
systemctl stop NetworkManager
systemctl disable NetworkManager
echo "192.168.9.137 openstack" >> /etc/hosts
- 更新系统并安装常用工具
bash
yum -y update
yum -y install vim wget net-tools lrzsz
2.2 在线一键部署 OpenStack
2.2.1 配置 OpenStack YUM 源
OpenStack 官方提供了稳定的 YUM 源,以 Train 版本为例:
bash
yum install -y centos-release-openstack-train
执行后,系统会在/etc/yum.repos.d/
目录下自动生成 OpenStack 相关的 YUM 配置文件。
2.2.2 安装 packstack 部署工具
packstack 是 OpenStack 官方提供的一键部署工具,可自动完成所有组件的安装和配置:
bash
yum install -y openstack-packstack
2.2.3 执行一键部署
使用 packstack 的 - allinone 参数启动单机部署:
bash
packstack --allinone
部署过程中,packstack 会自动完成以下操作(控制台会显示详细进度):
- 安装 Puppet 并配置各组件的 Puppet 清单
- 部署 MariaDB 数据库、RabbitMQ 消息队列
- 配置 Keystone 身份认证、Glance 镜像服务
- 部署 Nova 计算服务、Neutron 网络服务
- 配置 Horizon 控制面板
当控制台出现**** Installation completed successfully ****
时,说明 OpenStack 已成功部署。部署完成后,系统会生成以下关键信息:
- Dashboard 访问地址:http://192.168.9.137/dashboard
- 认证信息文件:/root/keystonerc_admin(包含管理员账号密码)
- 安装日志:/var/tmp/packstack/.../openstack-setup.log
2.2.4 网络配置优化
部署完成后,需要为虚拟网桥 br-ex 配置固定 IP:
bash
# 复制物理网卡配置到br-ex
cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-br-ex
# 修改br-ex配置
vi /etc/sysconfig/network-scripts/ifcfg-br-ex
TYPE=Ethernet
BOOTPROTO=none
NAME=br-ex
DEVICE=br-ex
ONBOOT=yes
IPADDR=172.24.4.1
PREFIX=24
# 重启网络服务
systemctl restart network
2.3 离线一键部署 OpenStack
2.3.1 准备离线安装包
当网络环境受限无法在线安装时,可提前下载离线包并构建本地源:
- 下载 OpenStack Train 版本离线包(约 400MB),包含基础包、OpenStack 包等
- 解压到 /data 目录:
tar zxf openstack.tgz -C /data
2.3.2 配置本地 YUM 源
创建本地源配置文件/etc/yum.repos.d/local.repo
:
ini
[base]
name=base
baseurl=file:///data/base
gpgcheck=0
enabled=1
[centos-openstack-train]
name=centos-openstack-train
baseurl=file:///data/centos-openstack-train
gpgcheck=0
enabled=1
# 其他仓库配置类似,省略...
2.3.3 生成本地源索引
bash
createrepo /data/base
createrepo /data/centos-openstack-train
# 为所有解压的目录生成索引
yum clean all
yum makecache
2.3.4 执行离线部署
与在线部署步骤相同,使用 packstack --allinone 命令即可,packstack 会自动从本地源获取软件包。部署完成后,同样需要配置 br-ex 网桥 IP。
三、通过 Dashboard 体验 OpenStack 功能
3.1 登录 Dashboard
在浏览器中输入http://192.168.9.137/dashboard,进入登录界面。管理员账号密码存储在/root/keystonerc_admin
文件中,内容类似:
bash
export OS_USERNAME=admin
export OS_PASSWORD=81a7af7313ce46d2 # 实际密码以生成的文件为准
export OS_PROJECT_NAME=admin
登录后默认显示英文界面,可通过右上角 "Settings" 切换为中文。
3.2 Dashboard 功能模块解析
3.2.1 "项目" 模块
该模块包含用户可操作的核心资源,按功能分为五大类:
计算类:管理虚拟机实例、镜像、密钥对
- 实例:显示所有虚拟机,支持创建、启动、停止等操作
- 镜像:管理虚拟机模板,支持上传自定义镜像
- 密钥对:生成 SSH 密钥对,实现无密码登录虚拟机
网络类:配置虚拟网络拓扑
- 网络拓扑:图形化显示网络、路由器和接口的连接关系
- 路由:创建虚拟路由器,实现私有网络与外部网络的通信
- 安全组:设置防火墙规则,控制虚拟机的网络访问
卷类:管理块存储资源
- 卷:创建可附加到虚拟机的块存储设备
- 快照:为卷创建备份,支持数据恢复
对象存储类:管理非结构化数据存储
- 容器:创建存储容器,类似文件系统的目录
3.2.2 "管理员" 模块
拥有更高权限,包含系统级管理功能:
- 计算管理:监控虚拟机管理器状态、主机聚合配置
- 卷管理:管理卷类型、组类型,查看所有项目的卷资源
- 系统管理:配置资源配额、查看系统服务状态
3.2.3 "身份管理" 模块
管理用户、项目和角色:
- 项目:创建和管理租户(Project),隔离不同用户的资源
- 用户:添加用户并分配到项目
- 角色:定义权限集合,可分配给用户
四、创建与管理云主机实战
4.1 准备工作:上传有效镜像
OpenStack 默认提供的 cirros 镜像可能因大小问题无法使用,需上传完整镜像:
下载 cirros 镜像:
wget http://download.cirros-cloud.net/0.5.1/cirros-0.5.1-x86_64-disk.img
创建镜像:
- 在 Dashboard 中进入 "项目"→"计算"→"镜像"
- 点击 "+ 创建镜像",填写名称 "cirros01",选择镜像文件,格式设为 QCOW2,可见性设为 "公有"
4.2 创建私有网络与路由
4.2.1 创建私有网络 private
- 进入 "项目"→"网络"→"网络",点击 "+ 创建网络"
- 网络名称设为 "private",勾选 "创建子网"
- 子网信息:
- 子网名称:private_subnet
- 网络地址:192.168.100.0/24
- 网关 IP:192.168.100.1
- 子网详情:
- 激活 DHCP,地址池:192.168.100.100-192.168.100.200
- DNS 服务器:114.114.114.114
4.2.2 创建路由 my_route
- 进入 "项目"→"网络"→"路由",点击 "+ 新建路由"
- 路由名称:my_route,外部网络选择 "public",勾选 "启用 SNAT"
- 添加内部接口:
- 进入路由详情页,点击 "接口"→"+ 增加接口"
- 选择子网 "private_subnet",自动获取网关 IP
4.3 创建云主机实例
- 进入 "项目"→"计算"→"实例",点击 "+ 创建实例"
- 详情页:实例名称 "test",数量 1
- 源页:选择镜像 "cirros01",卷大小 1GB
- 实例类型页:选择资源最小的 "m1.tiny"(1CPU、512MB 内存、1GB 磁盘)
- 网络页:选择私有网络 "private"
- 安全组页:使用默认安全组(允许 ICMP 和 SSH)
- 密钥对页:可创建新密钥对或跳过
- 点击 "创建实例",等待约 10 秒,实例状态变为 "运行中"
4.4 访问与测试云主机
4.4.1 通过控制台访问
- 在实例列表中,点击实例名称右侧的下拉菜单,选择 "控制台"
- 登录用户名:cirros,密码:gocubsgo
- 登录后执行
ifconfig
,查看 IP 地址(如 192.168.100.172)
4.4.2 网络连通性测试
- 测试外网连通性:
ping -c 1 baidu.com
- 测试宿主机连通性:
ping -c 1 192.168.9.137
若 ping 不通,检查以下内容:
- br-ex 网桥是否启动:
ifconfig br-ex
- 宿主机路由转发是否开启:
bash
vi /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p