news 2026/9/16 4:16:48

一天搭建OpenStack云平台:DevStack实操指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一天搭建OpenStack云平台:DevStack实操指南

有人问我,一天之内能不能把云平台搭起来,还能在上面顺利开出第一台虚拟机?我的回答是:能,但有明确的前提。你要是奔着生产环境那种多节点、高可用、带存储和网络虚拟化全家桶去的,那我劝你直接放弃这个念头;但如果你只是想在一台机器上,把云平台的核心链路完整跑通,然后用浏览器或命令行创建出属于自己的云主机,那这件事完全可以在一个工作日内完成。这篇文章不是概念科普,也不是PPT式的流程图,而是一份可以直接照着做的实操记录,适合刚开始接触云计算的运维、开发,以及想给自己团队搭一套轻量私有云做测试的人。

1. 一天搭出云平台,先搞清楚你搭的是哪种“云”

1.1 演示级云平台与生产级云平台的差距

很多人一听到“搭云平台”,脑子里立刻浮现出OpenStack那套庞大的架构:控制节点、计算节点、网络节点、存储节点,光服务名就能把人绕晕。事实确实如此,一套生产级的OpenStack集群,规划网络、配置高可用、调存储性能,没个两三周根本下不来,更别提后续的监控、日志、容器集成。但“一天搭出来的云平台”显然不是这个量级——它是单机、all-in-one、纯演示和测试用途的环境。

这个环境能做什么?它能让你直观体验到IaaS平台的核心流程:上传镜像、定义规格、创建网络、分配浮动IP、启动实例、SSH登录。你看到的操作路径和生产环境基本一致,API也是同一套,但复杂度被极度压缩。换句话说,它是一台“教学飞机”,不能载客,但能让你把起飞和降落整套动作练熟。

所以先降低心理预期:本文说的“1 Day搭建”,目标不是生产可用的云平台,而是一条能看到虚拟机真实跑起来的完整IaaS链路。搞清楚这个边界,后面每一步都不会纠结为什么有些功能不完整。

1.2 为什么选择DevStack这条路线

市面上的云平台搭建方案不少。ZStack这类商用开源产品,安装确实快,但部分高级能力跟商业版绑定;Proxmox VE本质是虚拟化集群管理平台,虚拟机管理做得很好,但缺少OpenStack那种完整的多租户、计量、API生态;OpenNebula也挺优秀,但社区资料相对少。

选DevStack的核心原因是:它本身就是OpenStack官方提供的开发测试部署工具,用一套shell脚本把一个最小可用OpenStack环境拉起来,背后是社区大量开发者每天都在用的路径。你通过DevStack搭出来的环境,今天可以用来学虚拟机创建,明天可以继续学Neutron网络,后天可以接Heat编排,功能边界很清晰,不会学歪。

另外,网上关于“openstack云平台搭建”的教程虽然多,但大部分版本老旧,或者直接拿生产部署工具(比如Kolla-Ansible)去跑单机,配置复杂度高,出了问题新手根本无从下手。DevStack的命令输出非常直白,日志全部落在/opt/stack/logs目录下,排查问题比大多数工具都容易,这一点对一天内完成搭建至关重要。

1.3 一天时间怎么分配

我说的“一天”是按8小时有效工作时间算的,不是随便点两下就完事。给你一份我实测过的时间参考:

时间段任务预估耗时
上午 8:30-10:00硬件检查、宿主机操作系统安装、基础网络配置1.5小时
上午 10:00-10:30下载DevStack代码、准备local.conf配置文件0.5小时
上午 10:30-11:30执行stack.sh安装脚本40-60分钟
上午 11:30-12:00查看安装日志、确认服务状态、登录Dashboard0.5小时
下午 14:00-15:00上传镜像、创建网络和路由、配置安全组1小时
下午 15:00-16:00创建云主机、绑定浮动IP、SSH登录验证1小时
下午 16:00-17:00排错、清理、记录踩坑点1小时

如果上午安装顺利,下午的时间会非常充裕;如果中间卡在环境问题上,下午排错时间至少要预留两小时。所以我把最费时间的安装放在了上午,前端出了问题,后面还有回旋余地,这是最稳妥的节奏。

2. 搭建前的硬件检查与环境准备

2.1 宿主机配置要求:16G内存是舒适线

DevStack虽然只有一个脚本,但它拉起来的服务非常多:Keystone认证、Nova计算、Neutron网络、Glance镜像、Horizon面板,再加上底层数据库、消息队列,十几个进程同时跑,对内存的消耗远超你的想象。

我的实测经验:8G内存勉强能跑,但创建云主机时大概率会因为内存不足出现各种莫名其妙的故障,比如nova-compute服务直接死掉,或者VM创建后一直卡在BUILD状态。如果条件允许,请直接上16G内存,这会让你省掉至少一个小时的排错时间。

CPU方面,4核是底线,8核更稳。磁盘建议预留至少50GB空间,镜像、云主机磁盘、系统日志都会占用空间。推荐用SSD,虽然机械硬盘也能跑,但创建云主机时的写入速度差距非常明显。

系统版本我建议用Ubuntu Server 22.04 LTS。之所以不用更新的24.04,是因为DevStack对各组件版本有依赖矩阵,22.04是被验证过最稳定的宿主机系统之一;当然你在Ubuntu 24.04上装最新版DevStack通常也能成功,但一旦遇到兼容性报错,网上能搜到的解决方案会比较少。

2.2 在虚拟机里跑OpenStack:先解决嵌套虚拟化

很多人会想,我没独立服务器,能不能在VMware或VirtualBox虚拟机里再搭一个云平台?可以,但有一个前置条件:必须开启嵌套虚拟化

如果你用的是VMware Workstation,先在虚拟机设置里找到“处理器”选项卡,勾选“虚拟化Intel VT-x/EPT或AMD-V/RVI”,这个选项意味着允许在虚拟机内部继续使用CPU硬件虚拟化指令。VirtualBox里也有类似选项,在“系统-加速”里勾选“启用嵌套VT-x/AMD-V”。

怎么确认到底有没有生效?进入Ubuntu系统后执行:

egrep -c '(vmx|svm)' /proc/cpuinfo

如果返回的数字大于0,说明CPU硬件虚拟化已经对系统可见。也可以装一个更直观的工具:

sudo apt install cpu-checker -y sudo kvm-ok

输出KVM acceleration can be used,才是真正的“能用了”。这一步没确认好,后面云主机创建时大概率会报LibvirtError: internal error: process exited while connecting to monitor,到时候你连问题出在哪都不知道,所以我建议你在安装系统之后第一时间就检查这个。

2.3 操作系统安装与基础配置

宿主机系统装好后,第一件事是换软件源。国内网络环境下载OpenStack组件包时,默认源会很慢,建议换成阿里云或清华镜像源。这里以Ubuntu 22.04为例,使用清华源:

sudo sed -i 's@//.*archive.ubuntu.com@//mirrors.tuna.tsinghua.edu.cn@g' /etc/apt/sources.list sudo apt update

然后安装基础工具:

sudo apt install git net-tools openssh-server vim -y

配置hostname和网络。DevStack的安装过程会绑定IP,这个IP建议设置成静态IP,不要在虚拟机里用DHCP自动获取。假设你的宿主机IP是192.168.1.100,那后面local.conf里的HOST_IP就填这个地址。

还有一点容易忽略:关掉系统自带的防火墙。DevStack在安装过程中要动态修改iptables规则,如果ufw处于开启状态,很多网络操作会被拦掉,表现为创建了浮动IP但外部就是ping不通:

sudo ufw disable

最后创建一个专门的stack用户,因为DevStack不允许用root用户直接安装:

sudo useradd -s /bin/bash -d /opt/stack -m stack sudo chmod +x /opt/stack echo "stack ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/stack sudo su - stack

到这一步,环境的准备工作就齐了。

3. 用DevStack跑通云平台:核心安装步骤

3.1 下载DevStack并创建stack用户

切换到stack用户后,先拉取DevStack代码。OpenStack的代码托管在opendev.org上,直接git clone即可:

sudo su - stack git clone https://opendev.org/openstack/devstack

如果git clone速度很慢,可以尝试把opendev.org替换成镜像地址github.com/openstack/devstack(GitHub上有官方镜像仓库)。下载完成后进入目录:

cd devstack

DevStack目录里有个samples文件夹,里面放着官方推荐的local.conf示例。我们需要创建一个自己的配置文件,这是整个搭建过程中最关键的一步,单独拿出来说。

3.2 编写local.conf:最关键的文件

DevStack的行为几乎完全由local.conf控制。这个文件定义了管理员密码、服务密码、宿主机IP、默认网络类型等。直接创建并编辑:

vim local.conf

一个最简但可用的配置如下:

[[local|localrc]] # 管理员密码,登录Dashboard时用 ADMIN_PASSWORD=admin # 数据库密码,各服务共享 DATABASE_PASSWORD=admin # 消息队列密码 RABBIT_PASSWORD=admin # 服务组件间调用的密码 SERVICE_PASSWORD=admin # 宿主机IP,必须改成你自己的静态IP HOST_IP=192.168.1.100 # 默认平面网络所在物理网卡,通常填宿主机上网卡名 FLAT_INTERFACE=eth0 # 日志级别,方便排错 LOGFILE=/opt/stack/logs/stack.sh.log

这几个密码在测试环境里全设成一样没有关系,生产环境当然不能这么干,但你要清楚它们分别对应什么服务:ADMIN_PASSWORD是登录Horizon和OpenStack CLI的管理员密码;DATABASE_PASSWORD对应MySQL;RABBIT_PASSWORD对应RabbitMQ;SERVICE_PASSWORD是各组件之间互相认证时用的。

FLAT_INTERFACE的意思是:DevStack会创建一个外部网络(public),这个网络的流量要桥接到你的物理网卡上。如果你的网卡名不是eth0,可以通过ip a命令先确认一下。

这个文件还有一个隐藏价值:你可以通过往里面追加服务配置来控制安装哪些组件。比如默认不装Heat编排服务,但你以后想学模板化创建虚拟机,可以加上enable_service h-eng h-api h-api-cfn h-api-cw。不过第一次搭建建议保持最简,别加东西。

3.3 执行安装脚本与日志观察

配置文件准备好后,直接运行:

./stack.sh

然后就是漫长的等待。根据网络和机器性能,整个过程大约持续40到60分钟。脚本输出会实时显示当前安装到哪个服务,期间如果出现红色ERROR,不要慌,先看日志:

tail -n 100 /opt/stack/logs/stack.sh.log

DevStack的安装日志几乎会记录所有关键步骤,大多数问题都能从这里找到根因。常见的失败原因包括:内存不够导致进程起不来、某个apt包下载超时、HOST_IP和实际网卡不匹配等。

安装成功的标志是脚本最后输出类似这样的内容:

This is your host IP address: 192.168.1.100 This is your cloud credentials: Horizon: http://192.168.1.100/dashboard Keystone: http://192.168.1.100/identity/

同时提示你环境变量文件已经生成。接下来我们激活管理员身份并验证服务状态。

3.4 安装完成后的服务状态核对

安装完成后,当前目录下会有一个openrcopenrc.admin文件,里面记录了访问OpenStack API的环境变量。执行:

source openrc admin admin

然后列出所有计算服务节点状态:

openstack compute service list

正常情况下,你应该看到nova-compute、nova-scheduler、nova-conductor等服务的State都是up,Status都是enabled。如果某个服务显示down,说明对应进程死了,后面排查再看。

接着看网络服务:

openstack network agent list

重点看dhcp agentl3 agent是不是alive状态。这两个agent负责给虚拟机分配IP和做路由转发,后面创建云主机能不能拿到地址、能不能外网通信,全靠它们。

最后打开浏览器,访问http://192.168.1.100/dashboard,用admin/admin登录。看到Horizon面板的瞬间,你的云平台就已经跑起来了。

4. 在云平台上安装第一台虚拟机:从镜像到SSH登录

4.1 准备系统镜像

云平台本身不带操作系统,需要先上传一个镜像到Glance服务。测试阶段我强烈推荐用Cirros(一个专门为云平台测试设计的微型Linux系统),它只有几十MB,启动速度极快,而且内置了cloud-init支持,非常适合验证链路。

下载并上传镜像:

cd ~ wget http://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img source ~/devstack/openrc admin admin openstack image create "cirros" \ --file cirros-0.6.2-x86_64-disk.img \ --disk-format qcow2 \ --container-format bare \ --public

上传后确认一下镜像状态:

openstack image list

看到状态是active就说明Glance正常工作了。如果你想在云主机里跑Ubuntu,也可以后面去下载ubuntu cloud image,但第一次实验先别用,大镜像上传和启动都慢,出了问题还不好定位是镜像的问题还是平台的问题。

4.2 创建规格、网络与安全组

镜像类似安装光盘,规格类似虚拟机硬件配置。用命令行创建一个最小规格:

openstack flavor create m1.tiny \ --id 1 \ --ram 512 \ --disk 1 \ --vcpus 1

这里512MB内存、1G磁盘、1核CPU,足够让Cirros跑起来。

然后是网络。DevStack默认会创建好一个外部网络public,但内部网络通常需要自己建。所谓内部网络,就是你的云主机所在的私有网段,虚拟机之间通信、以及通过浮动IP对外通信,都依赖这个网络。

依次执行:

# 创建内部网络 openstack network create demo-net # 创建子网 openstack subnet create demo-subnet \ --network demo-net \ --subnet-range 192.168.100.0/24 \ --dns-nameserver 8.8.8.8 # 创建路由器 openstack router create demo-router # 设置路由器网关为外部网络 openstack router set demo-router --external-gateway public # 把内部子网接入路由器 openstack router add subnet demo-router demo-subnet

这段操作的逻辑是:云主机加入demo-net这个私有网络,路由器demo-router把私有网络和外部网络连通,这样才能在外面访问到云主机。

安全组是很多人忽略但影响很大的环节。安全组相当于云主机的防火墙,默认规则会拒绝所有入站流量。先查看默认安全组:

openstack security group list

找到default安全组的ID,然后添加允许ICMP和SSH的规则:

openstack security group rule create --proto icmp --ingress default openstack security group rule create --proto tcp --dst-port 22 default

不放开这两条规则,云主机创建后既ping不通,也SSH不进去。

4.3 创建实例并绑定浮动IP

网络和安全组准备好后,创建密钥对:

ssh-keygen -q -N "" -f ~/.ssh/id_rsa openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey

最后创建云主机:

openstack server create \ --flavor m1.tiny \ --image cirros \ --network demo-net \ --key-name mykey \ test-vm

几秒钟后查看状态:

openstack server list

看到状态从BUILD变成ACTIVE,说明云主机已经创建成功。但这还不够,你还需要给它一个可以从外部访问的IP,也就是浮动IP:

openstack floating ip create public openstack server add floating ip test-vm 192.168.200.X

上面192.168.200.X替换成实际分配的IP地址。

4.4 命令行验证虚拟机可登录

到这一步,理论上你可以从宿主机SSH登录到云主机了:

ssh cirros@192.168.200.X

Cirros默认密码是gocubsgo,密钥方式也可以登录。第一次登录看到系统提示符,说明你从镜像上传到网络配置再到安全组放行,整条IaaS链路已经完全打通。

如果不想敲命令行,Horizon面板里也可以完成全部操作:Compute -> Instances -> Launch Instance,表单里选择镜像、规格、网络、密钥对,创建后在实例右侧下拉菜单里选择“绑定浮动IP”。对于追求效率的人,命令行确实比网页操作直观得多。

5. 搭建过程中最常踩的坑和排查思路

5.1 内存不足导致的服务崩溃

如果你用8G内存的机器搭建,最容易遇到的现象是:安装过程看着一切正常,但创建云主机一直卡在BUILD状态,或者nova-compute服务莫名其妙挂掉。

排查顺序通常是:

# 看nova服务状态 openstack compute service list # 看nova-compute进程状态 systemctl status devstack@nova-compute

如果nova-compute反复重启,多半是内存不够。确认方法很简单:

free -h

当可用内存只剩几百兆时,所有服务都在争抢内存,云主机的QEMU进程根本起不来。这时候最省心的方案是给宿主机加内存,但临时测试的话,可以先把不必要的服务停掉,比如Horizon对内存的消耗就不小:

sudo systemctl stop apache2

这算应急,长期还是建议16G内存起跑。

5.2 虚拟机起不来:嵌套虚拟化没开全

在VMware虚拟机里搭OpenStack,最经典的问题就是云主机创建后状态直接变成ERROR。打开/var/log/nova/nova-compute.log,通常能看到KVM not available或者LibvirtError: internal error

这种情况极大概率是嵌套虚拟化没开。回到宿主机上重新检查:

kvm-ok

如果显示不支持KVM,你需要在VMware的虚拟机设置里勾选“虚拟化Intel VT-x/EPT或AMD-V/RVI”。注意,如果宿主机的CPU本身较老,或者VMware版本过低,这个选项可能根本不显示。另外,Nested Virtualization在VMware里默认可能是关闭的,需要开机进BIOS确认Intel VT-x已开启,一环接一环,少一个都起不来。

5.3 虚拟机拿不到IP与外部网络不通

云主机能起来、但拿不到IP,这是Neutron网络最经典的问题。先看DHCP agent状态:

openstack network agent list

如果dhcp agent不是alive,重启一下:

sudo systemctl restart devstack@q-dhcp

如果agent正常,但云主机还是拿不到IP,检查路由器是否正确连接内外网:

openstack router show demo-router

重点看external_gateway_info字段有没有值,interfaces_info里有没有包含内部子网。还有安全组规则,有些朋友只放了ICMP和SSH,但如果云主机用DHCP获取IP,还需要放行UDP 67和68端口的入站流量。

另一个常见坑是:浮动IP分配出去了,但SSH连接超时。这通常是因为FLAT_INTERFACE配置了错误的物理网卡,导致外部流量无法正确路由。验证方法是查看网络命名空间:

sudo ip netns list sudo ip netns exec qrouter-XXXX ping 192.168.100.1

如果路由器命名空间能ping通云主机的私网IP,说明内部网络没问题,问题出在外网桥接上。

5.4 安装中途失败后如何清理重来

DevStack最大的好处是可重入性高,但它也有闹脾气的时候。如果stack.sh执行到一半失败,且修改过配置文件,正确的清理姿势是:

cd ~/devstack ./unstack.sh ./clean.sh

unstack.sh停掉所有服务,clean.sh清理安装过程中生成的数据目录。清理完再改local.conf重新执行./stack.sh。如果连clean.sh都跑不完,那就粗暴一点,直接删除/opt/stack目录重新开始,但前提是你要接受之前的配置全部丢失。

我自己遇到过一次非常诡异的问题:重装后数据库密码始终不匹配,后来发现是之前的MySQL数据目录没清理干净。遇到这种“配置明明一样但就是起不来”的情况,果断重装系统反而是最快的。

6. 一天之后:这套环境还能怎么用

6.1 用Heat模板批量创建虚拟机

如果你已经能手动创建云主机,下一个值得玩的是Heat编排服务。DevStack默认不装Heat,但在local.conf里加一行再重装:

enable_service h-eng h-api h-api-cfn h-api-cw

重启stack.sh后,你可以用一份YAML模板批量创建多台云主机:

heat_template_version: 2016-10-14 resources: test_instance: type: OS::Nova::Server properties: image: cirros flavor: m1.tiny key_name: mykey networks: - network: demo-net

执行openstack stack create -t template.yaml my-stack,平台会自动帮你完成网络、磁盘、实例的创建流程。这个能力在写测试环境、做自动化实验时非常实用。

6.2 保存快照与扩展资源

你创建好的云主机,可以做成快照:

openstack server image create --name cirros-with-tools test-vm

以后想再开一台一模一样的系统,直接从快照镜像创建即可。这一点对测试非常有用,相当于给你提供了一个可以随时回滚的“存档点”。

资源扩展方面,local.conf里可以直接控制neutron的子网网段和浮动IP池范围。修改后重新跑一次stack.sh,就能获得更丰富的地段。还可以创建不同flavor规格,给不同项目配置不同配额,体会一下多租户环境下的资源隔离是怎么运作的。

6.3 升级成高可用集群的路径

单机DevStack跑熟了之后,你会发现它的很多设计都是牺牲高可用换便捷性:数据库没有主从,消息队列没有集群,控制节点挂了就全挂。真要往生产方向走,可以沿着这几条路径升级:

一是改用Kolla-Ansible,把OpenStack全部容器化,通过Docker容器实现多节点部署,升级和维护体验比DevStack好很多;二是引入Ceph作为后端存储,把云主机的磁盘落到分布式存储上,才能实现热迁移;三是部署负载均衡和集群代理,把API、数据库、消息队列都做成多副本。

但这些都是“之后”的事。第一天的目标,就是沿着DevStack这条路把IaaS的每个环节亲手摸一遍。我自己的体会是,单机DevStack的价值不在于它能扛多少并发,而在于它把“云平台”这个抽象概念变成了一个你能随手操作的真实系统。你把镜像、规格、网络、安全组、浮动IP逐一手动配一遍后,再去读任何云计算文档或面试题,都会觉得轻省得多。那个拿着网页面板点来点去的下午,对建立整体认知的帮助,确实比看一个月架构图管用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 4:16:26

Windows仿Mac零成本美化方案:工具实测与内存占用分析

玩Windows系统美化的人,大概率都动过“要是它能长得像MacBook就好了”的念头。我自己在无数次重装系统、折腾美化主题之后,最终沉淀下来一套比较稳定的“仿Mac”方案,这套方案最大的特点就三个字:“零成本”。今天这篇就详细拆一下…

作者头像 李华
网站建设 2026/9/16 4:16:22

前端导出Excel不卡顿:从SheetJS到Web Worker的进度条实战方案

做后台系统的前端,基本都逃不掉"导出Excel"这个需求。一开始大家都觉得轻松,丢个接口,拿个blob,下载完事。直到真实业务里遇到5万条、甚至20万条数据的导出,你会发现事情没那么简单:后端提前下班…

作者头像 李华
网站建设 2026/9/16 4:14:10

Spring Boot+Vue养老院管理系统源码解析与实战

简介:基于springbootvue的养老院管理系统源码包,面向正在准备毕业设计或课程设计的计算机专业学生,也是一套适合Java学习者实战练习的完整项目。项目已通过导师指导,包含前端Vue页面、后端Spring Boot接口、数据库脚本及项目说明文…

作者头像 李华
网站建设 2026/9/16 4:13:48

Ubuntu Server + KVM 虚拟化实战:AMD Ryzen迷你主机运行Windows 10虚拟机

手头这台机器我折腾了一个多星期——AMD Ryzen AI Max 395 的迷你主机,装了 Ubuntu Server 24.04,跑 Windows 10 虚拟机。整个过程踩了不少坑,但最后稳定运行下来,说实话,这套组合比我想象中靠谱得多。如果你正打算用一…

作者头像 李华
网站建设 2026/9/16 4:12:35

端侧Agent实战:MiniCPM5-2B部署与Function Calling避坑指南

如果你手头只有一台普通配置的笔记本,或者一块 8GB 内存的树莓派,也想跑一个能自己查天气、调用计算器、甚至控制家里智能设备的 Agent,那 MiniCPM5-2B 应该是最值得先试的模型之一。这个 2B 参数规模的端侧模型,在工具调用上做了…

作者头像 李华
网站建设 2026/9/16 4:11:28

AI智能体实操路线图:4阶段8课时避开90%新手陷阱

1. 这不是又一门“AI速成课”,而是一张避开90%新手陷阱的实操路线图“AI智能体怎么学才不踩坑?”——这句话最近在技术社群、知识付费圈和职场学习群被反复刷屏。不是因为大家突然对“智能体”这个词产生了学术兴趣,而是真实需求压过来&#…

作者头像 李华