OpenStack 使用教程:从入门到实践
本教程将分为以下几个部分:

- 第一部分:OpenStack 核心概念 - 在动手之前,你必须知道这些。
- 第二部分:准备工作与环境搭建 - 如何获取一个可以操作的 OpenStack 环境。
- 第三部分:Web 界面操作指南 - 通过最直观的 Horizon 控制台进行操作。
- 第四部分:命令行操作指南 - 使用 OpenStack Client 进行更高效的操作。
- 第五部分:进阶与最佳实践 - 日常运维和开发的建议。
- 第六部分:学习资源与社区 - 持续学习的路径。
第一部分:OpenStack 核心概念
OpenStack 是一个云操作系统,它通过一系列相互协作的开源项目来管理计算、存储、网络等资源,你可以把它想象成一个“云操作系统的内核”,理解其核心组件是使用它的第一步。
核心架构:项目
OpenStack 由多个独立的项目组成,每个项目负责一个特定的功能,以下是几个最核心的项目:
-
Nova (计算)
- 作用:虚拟机生命周期管理,负责创建、启动、停止、删除虚拟机(在 OpenStack 中称为 实例 Instance)。
- 类比:数据中心的物理服务器集群和电源管理系统。
-
Neutron (网络)
(图片来源网络,侵删)- 作用:为实例提供网络连接,可以创建虚拟网络、路由器、防火墙、负载均衡器等,实现复杂的网络拓扑。
- 类比:数据中心的交换机、路由器和防火墙。
-
Cinder (块存储)
- 作用:为实例提供持久的块存储设备(类似硬盘),你可以为实例附加一个或多个云硬盘,并在实例删除后保留数据。
- 类比:连接到服务器的 SAN/NAS 存储。
-
Glance (镜像)
- 作用:虚拟机镜像管理,存储和分发虚拟机的模板(操作系统、软件预装等),创建实例时,需要从一个镜像开始。
- 类比:服务器的系统安装光盘和系统备份。
-
Keystone (身份认证)
- 作用:OpenStack 的“门卫”,负责用户认证、授权和服务目录,所有的 API 请求都必须经过 Keystone 的验证。
- 类比:公司的门禁卡系统和员工花名册。
-
Horizon (仪表盘)
(图片来源网络,侵删)- 作用:提供 Web 界面,用户可以通过浏览器图形化地管理所有资源(实例、网络、镜像等)。
- 类比:公司的管理面板和操作界面。
关键术语
- Tenant (租户):一个项目或用户组的隔离环境,你可以把它理解为一个“虚拟的数据中心”或一个“账户”,不同租户之间的资源是完全隔离的。
- User (用户):租户下的具体操作者。
- Role (角色):定义了用户在租户内的权限(如
admin管理员,member普通成员,reader只读用户)。 - Flavor (规格):定义虚拟机硬件配置的模板,包括 CPU 核心数、内存大小、磁盘大小。
- Image (镜像):虚拟机的模板或快照。
- Instance (实例):正在运行的虚拟机。
- Security Group (安全组):虚拟机的虚拟防火墙,你可以在其中定义入站和出站的规则(如允许 SSH 端口 22,允许 HTTP 端口 80)。
- Key Pair (密钥对):用于通过 SSH 无密码登录到实例的一对公钥和私钥。
第二部分:准备工作与环境搭建
“工欲善其事,必先利其器”,你需要一个 OpenStack 环境来练习。
获取 OpenStack 环境
对于初学者,强烈推荐使用公有云或实验室环境,而不是自己从头搭建一个生产级环境,因为后者非常复杂。
-
公有云平台(推荐新手)
- Rackspace Cloud:OpenStack 的创始者之一,提供最“原生”的 OpenStack 体验。
- 华为云、腾讯云、阿里云:虽然它们有自己封装的控制台,但通常也提供 OpenStack API 兼容接口,并会提供 OpenStack RC 文件。
- 优点:环境稳定,无需自己维护,按需付费。
- 如何开始:注册一个账号,创建一个项目,然后在控制台找到“API 密钥”或类似选项,下载
openrc.sh文件。
-
实验室环境(推荐有一定基础的用户)
- DevStack:一套用 Shell 脚本快速在单机上部署一个完整 OpenStack 环境的工具,非常适合开发和测试。
- Kolla / TripleO:更复杂的部署工具,用于生产环境的安装。
- OpenLab:一个在线的、免费的 OpenStack 沙盒环境,可以临时租用资源进行实验。
配置 OpenStack Client
OpenStack Client (openstack) 是一个强大的命令行工具,比 Web 界面更高效。
-
安装:
# Ubuntu/Debian sudo apt update && sudo apt install python3-openstackclient # CentOS/RHEL sudo yum install python3-openstackclient
-
配置认证信息: 从你的云平台下载
openrc.sh文件(通常命名为admin-openrc.sh或demo-openrc.sh),然后执行它:# 假设你下载了 demo-openrc.sh 文件 source demo-openrc.sh
执行后,它会要求你输入密码,之后,你的环境变量(如
OS_AUTH_URL,OS_PROJECT_NAME)就设置好了。 -
测试连接:
openstack token issue
如果能成功返回你的 token 信息,说明连接成功。
第三部分:Web 界面操作指南
以 Horizon 为例,这是最直观的方式。
-
登录:用你的用户名和密码登录 Horizon 的 Web 界面。
-
创建密钥对
- 路径:
Project->Compute->Key Pairs - 操作:点击
Create Key Pair,输入一个名称(如my-key),然后点击Create。 - 重要:页面会自动下载一个
my-key.pem文件。妥善保管这个私钥文件,你将用它来登录实例,注意文件权限:chmod 400 my-key.pem。
- 路径:
-
创建安全组
- 路径:
Project->Compute->Security Groups - 操作:点击
Create Security Group,输入名称(如default-ssh-http),描述可以不填。 - 添加规则:点击你刚创建的安全组名称,进入
Rules标签页,点击Add Rule。- 规则1 (SSH):
Direction为Ingress(入站),Protocol为TCP,Port Range为22,Remote为0.0.0/0(允许所有 IP 访问)。 - 规则2 (HTTP):同样添加一条
TCP端口80的规则。
- 规则1 (SSH):
- 路径:
-
启动一个实例
- 路径:
Project->Compute->Instances - 操作:点击
Launch Instance。 - 基本信息:
Instance Name:给你的虚拟机起个名字(如my-first-vm)。
- 源:选择一个镜像(如
Ubuntu 22.04 LTS)。 - 实例类型:选择一个
Flavor(如m1.tiny,配置最小)。 - 网络:选择一个网络(通常是
selfservice或private)。 - 安全组:勾选你刚才创建的
default-ssh-http。 - 密钥对:选择你创建的
my-key。 - 点击
Launch。
- 路径:
-
管理实例
- 查看:回到
Instances页面,你会看到my-first-vm的状态从Building变为Active。 - 获取 IP 地址:点击实例名称,在详情页的
Access & Security标签页下,找到浮动 IP 地址,如果没有,可以点击Associate Floating IP分配一个。 - 登录实例:
# 使用你下载的私钥和浮动 IP ssh -i my-key.pem ubuntu@<你的浮动IP地址>
- 操作:在实例列表中,你可以对实例进行
Pause(暂停),Suspend(休眠),Reboot(重启),Terminate(删除) 等操作。
- 查看:回到
第四部分:命令行操作指南
命令行操作更快速,适合自动化和脚本。
创建密钥对
# 创建密钥对,公钥会上传到 OpenStack,私钥会保存到 local-key.pem openstack keypair create --public-key ~/.ssh/id_rsa.pub my-key-cli
创建安全组
# 创建安全组 openstack security group create default-ssh-http-cli # 添加 SSH 规则 openstack security group rule create --proto tcp --dst-port 22:22 --remote-ip 0.0.0.0/0 default-ssh-http-cli # 添加 HTTP 规则 openstack security group rule create --proto tcp --dst-port 80:80 --remote-ip 0.0.0.0/0 default-ssh-http-cli
启动实例
# 查看可用的镜像和规格 openstack image list openstack flavor list # 启动实例 openstack server create \ --flavor m1.tiny \ --image "Ubuntu 22.04 LTS" \ --security-group default-ssh-http-cli \ --key-name my-key-cli \ my-second-vm
管理实例
# 查看实例列表和状态 openstack server list # 获取实例的 IP 地址 openstack server show my-second-vm # 登录实例 (需要先获取 Floating IP) openstack server add floating ip my-second-vm <你的浮动IP地址> ssh -i ~/.ssh/id_rsa ubuntu@<你的浮动IP地址> # 重启实例 openstack server reboot --hard my-second-vm # 删除实例 (这将同时删除其磁盘) openstack server delete my-second-vm
第五部分:进阶与最佳实践
当你掌握了基本操作后,可以探索更高级的功能。
- 使用 Cinder 卷:
- 创建一个卷:
openstack volume create --size 10 my-volume - 在创建实例时附加它,或者在实例运行时附加/分离它。
- 创建一个卷:
- 使用 Swift 对象存储:
- 适合存储非结构化数据,如图片、视频、备份文件,使用
swift命令行工具或 API 进行文件的上传下载。
- 适合存储非结构化数据,如图片、视频、备份文件,使用
- 使用 Heat 编排:
编写一个 YAML 文件来定义和部署一整套云资源(如“一键部署一个包含 Web 服务器和数据库的完整应用”),实现基础设施即代码。
- 使用 Sahara 大数据处理:
在 OpenStack 上快速创建和管理 Hadoop、Spark 等大数据集群。
- 监控与日志:
- 集成 Ceilometer (监控) 和 Aodh (告警) 来收集资源使用数据,设置阈值告警。
第六部分:学习资源与社区
- 官方文档:docs.openstack.org - 最权威、最全面的资料,但可能对新手不友好,建议从特定项目的文档入手。
- OpenStack 用户指南:OpenStack User Documentation - 从用户角度出发的指南,非常适合初学者。
- OpenLab:OpenLab - 免费的在线实验环境,边学边练。
- Rackspace OpenStack 简明教程:Rackspace OpenStack Essentials - 非常经典的入门文章。
- 社区:
- 邮件列表:每个项目都有自己的邮件列表,是提问和交流的好地方。
- IRC (Internet Relay Chat):
#openstack频道有大量开发者和活跃用户可以实时交流。 - Stack Overflow:使用
openstack标签提问。
学习 OpenStack 是一个循序渐进的过程:
- 理解概念:不要急于操作,先搞懂 Nova, Neutron, Cinder 等核心组件是做什么的。
- 动手实践:从 Horizon 或 OpenStack Client 开始,完成“创建密钥 -> 启动实例 -> 登录实例”这个完整流程。
- 掌握 CLI:熟悉命令行工具,这是日常运维和自动化的基础。
- 探索进阶:根据你的需求,深入学习网络、存储、编排等高级特性。
- 善用资源:遇到问题时,官方文档和社区是你的最佳朋友。
祝你学习顺利!
