OpenStack Havana 单节点部署实战:从环境准备到虚拟机创建

📅 发布时间:2026/10/4 2:01:39
OpenStack Havana 单节点部署实战:从环境准备到虚拟机创建
简介这份 OpenStack 安装部署手册面向云计算运维人员、系统集成工程师及高校相关专业学习者聚焦 Havana 版本的开源 IaaS 平台落地帮助读者从零搭建可用的私有云环境。资源包内含 1 个 docx 文档压缩包约 519KB以图文步骤形式组织内容便于按章节对照实操。手册从环境准备切入涵盖网卡配置、主机名修改与 MySQL 数据库安装随后梳理 Keystone、Glance、Nova、Swift、Cinder、Neutron 等组件的整体结构与职责划分并逐步展开 OpenStack 核心包与 Messaging Server 的安装流程。其中 Keystone 认证服务部分尤为细致涉及数据库连接创建、授权令牌定义、密钥与证书配置、服务启动以及用户租客与 roles 的划分Glance 章节则延伸至数据连接、用户与角色定义、身份验证配置及凭证文件写入等环节。目前已有 369 人学习适合需要系统掌握 OpenStack 部署流程、对照目录逐项排查配置的读者参考。1. 单节点 Havana 部署一份能照着敲的 OpenStack 安装部署手册手里这份《Openstack 安装部署手册.docx》讲的是 Havana 版本的单节点部署一台物理机同时扛管理节点和计算节点IP 固定 192.168.205.177主机名 controllerRedHat 6.36GB 内存1TB 硬盘。它解决的不是OpenStack 是什么这种问题而是我手上只有一台机器怎么把 Keystone、Glance、Nova、Dashboard 一条线装通并跑起第一台虚拟机。适合正在做私有云实验、需要一份 Havana 时代组件串联清单的运维和云计算方向从业者。手册把环境准备、认证、镜像、计算、网络、面板、镜像制作、flavor、建虚拟机串成一条完整链路每一步都给了命令和配置文件路径属于能直接复现的实操型资料。下面我按它的真实结构拆一遍把参数含义、报错点和容易翻车的地方补上。2. 环境准备与组件结构单节点为什么必须补装 nova-compute2.1 物理资源与组件拓扑的对应关系手册开篇给的环境表很关键1 台主机、1 块网卡、1 个 IP、1 个 CPU、6GB 内存、1TB 硬盘。这个配置决定了它只能是 all-in-one 结构。正常生产环境里 Controller 管认证、镜像、调度、APICompute 单独跑 nova-compute 和 nova-network但这里只有一台物理机所以手册在组件结构那节明确写了除了 controller 上的组件还要额外装 nova-compute 和 nova-network。这一点如果漏掉后面建虚拟机时会卡在没有可用计算节点调度器找不到宿主实例一直 pending。组件职责按手册的划分Keystone 管身份认证和授权Glance 管镜像存储和检索Nova 管虚拟机生命周期和调度Dashboard 提供 Web 操作入口。手册这一版没有展开 Swift、Cinder、Neutron网络走的是 nova-network 而不是 Neutron这是 Havana 早期部署的典型特征。理解这个边界很重要——你照着这份手册装完得到的是一个能跑基础虚拟机的私有云实验环境不是完整的生产级云平台。2.2 网卡、主机名与 MySQL 的落地配置环境准备三件事网卡、主机名、MySQL。网卡配置直接改 ifcfg-eth0静态 IP 写死同时要停掉 NetworkManager否则它会和 network 服务抢网卡管理权导致重启后 IP 丢失。这是 RedHat 6 系的经典坑。# 编辑网卡配置 vi /etc/sysconfig/network-scripts/ifcfg-eth0 # 关键项 DEVICEeth0 TYPEEthernet BOOTPROTOstatic IPADDR192.168.205.177 NETMASK255.255.255.0 ONBOOTyes # 停用 NetworkManager启用 network service NetworkManager stop chkconfig NetworkManager off service network restart chkconfig network on主机名要同时改两处/etc/sysconfig/network里的 HOSTNAME 和/etc/hosts里的解析记录两处必须一致否则 Keystone 的 endpoint 用 controller 这个域名解析时会失败。vi /etc/sysconfig/network HOSTNAMEcontroller vi /etc/hosts 127.0.0.1 localhost 192.168.205.177 controllerMySQL 安装后要改 my.cnf 的 bind-address 绑定到本机 IP然后启动、设开机自启、跑安全初始化。手册特别提到初次创建时删除 anonymous user这一步不做后面 openstack-db 初始化数据库时可能因为匿名用户权限问题报错。yum install mysql mysql-server MySQL-python vi /etc/my.cnf # [mysqld] 段下加 bind-address 192.168.205.177 service mysqld start chkconfig mysqld on mysql_install_db mysql_secure_installation提示MySQL-python 这个包必须装OpenStack 各组件通过 Python 连 MySQL 全靠它漏装会在服务启动时报 No module named MySQLdb。3. 安装 OpenStack 包与 Messaging Server源和消息队列是地基3.1 配置 Havana 的 yum 源手册让先装两个 rpm 包rdo-release-havana-6 和 epel-release-6-8。前者配置 OpenStack Havana 的官方源后者提供 EPEL 扩展包。装完这两个包yum 才能找到 openstack-keystone、openstack-glance 这些组件包。# 下载并安装源配置包 rpm -ivh http://repos.fedorapeople.org/repos/openstack/openstack-havana/rdo-release-havana-6.noarch.rpm rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # 安装基础工具包 yum install openstack-utils yum install openstack-selinux yum upgrade rebootopenstack-utils 提供 openstack-config 命令后面所有配置文件的修改都靠它比手动 vi 更不容易改错段落。openstack-selinux 是 SELinux 策略包不装的话 SELinux 可能拦截服务进程访问文件。手册在这里有一句血泪经验外网环境不稳定安装经常失败失败后要清掉装了一半的包再重来否则残留的半成品包会在后续安装时引发莫名其妙的依赖冲突。这个坑我踩过yum 报的错和真实原因经常对不上清理干净重装反而最快。3.2 Messaging Server 的安装与配置Havana 这一版用的是 qpid 作为消息队列不是后来常见的 RabbitMQ。组件之间的异步通信全靠它Keystone、Nova、Glance 都通过 qpid 传递消息。yum install qpid-cpp-server memcached vi /etc/qpidd.conf # 设置 authno实验环境简化认证 authno service qpidd start chkconfig qpidd onmemcached 是 Keystone 用来缓存 token 的装完不用额外配置Keystone 默认会连本机 11211 端口。qpid 的 authno 是实验环境的简化做法生产环境必须开认证但单机实验阶段先跑通为主。这里如果 qpid 起不来先看/var/log/qpidd.log多数是端口 5672 被占或者配置文件语法问题。注意qpid 和 memcached 都要设开机自启否则机器重启后 OpenStack 各服务会因为连不上消息队列而集体启动失败排查起来很费时间。4. Keystone 认证服务token、租户与 endpoint 的完整链路4.1 数据库连接与授权令牌Keystone 是第一个要装的组件因为后面所有组件都要向它注册。先装包再用 openstack-config 写数据库连接串。yum install openstack-keystone python-keystoneclient openstack-config --set /etc/keystone/keystone.conf \ sql connection mysql://keystone:KEYSTONE_DBPASScontroller/keystone # 初始化数据库 openstack-db --init --service keystone --password KEYSTONE_DBPASS连接串格式是mysql://用户:密码主机/库名KEYSTONE_DBPASS 要换成你自己的密码后面 openstack-db 初始化时用的密码必须和这里一致不一致会连不上库。openstack-db 这个脚本会自动建库、建表、导入 schema省去手动执行 SQL 的麻烦。授权令牌用 openssl 随机生成写进配置文件。ADMIN_TOKEN$(openssl rand -hex 10) echo $ADMIN_TOKEN openstack-config --set /etc/keystone/keystone.conf DEFAULT \ admin_token $ADMIN_TOKEN这个 token 是引导用的在还没有创建任何用户之前靠它来执行 keystone 命令。生成后要记下来后面导出环境变量时要用。4.2 密钥证书、启动与用户租户创建keystone-manage pki_setup --keystone-user keystone --keystone-group keystone chown -R keystone:keystone /etc/keystone/* /var/log/keystone/keystone.log service openstack-keystone start chkconfig openstack-keystone onpki_setup 生成签名用的密钥和证书chown 把权限给 keystone 用户否则服务进程读不了这些文件。启动后导出环境变量把 token 和 endpoint 告诉客户端。export OS_SERVICE_TOKENADMIN_TOKEN export OS_SERVICE_ENDPOINThttp://controller:35357/v2.0手册建议把这两行写进一个文件以后 source 一下就行比每次手敲省事。接着创建 admin 和 service 两个租户。keystone tenant-create --nameadmin --descriptionAdmin Tenant keystone tenant-create --nameservice --descriptionService Tenant手册在这里标注了一个高频报错租户创建失败提示无法创建。它的解决办法是重启 keystone 服务。原因是 keystone 启动时数据库连接可能还没完全就绪重启一次让它重新建立连接就好。这个玄学问题在 Havana 上确实常见。创建 admin 用户并绑定角色。keystone user-create --nameadmin --passADMIN_PASS --emailadminexample.com keystone user-role-add --useradmin --tenantadmin --roleadmin4.3 服务注册与 endpoint 定义Keystone 自己也要注册成一个 service并定义 endpoint。keystone service-create --namekeystone --typeidentity \ --descriptionKeystone Identity Service keystone endpoint-create \ --service-id上一步返回的id \ --publicurlhttp://controller:5000/v2.0 \ --internalurlhttp://controller:5000/v2.0 \ --adminurlhttp://controller:35357/v2.0三个 URL 的区别要清楚publicurl 给外部访问internalurl 给内部服务调用adminurl 给管理操作。单节点环境下三者指向同一台机器但端口不同5000 是普通认证端口35357 是管理端口。service-id 要填上一步 service-create 返回的真实 id不能照抄示例。最后写一个环境变量文件包含 OS_USERNAME、OS_PASSWORD、OS_TENANT_NAME、OS_AUTH_URLsource 后用keystone user-list校验。能列出 admin 用户就说明认证链路通了。报错就去/var/log/keystone/看详细日志。5. Glance 与 Nova 配置镜像服务和计算服务的对接5.1 Glance 的数据库、用户与认证配置Glance 管镜像装完后同样先配数据库连接再初始化。yum install openstack-glance openstack-config --set /etc/glance/glance-api.conf \ DEFAULT sql_connection mysql://glance:PASSWORDcontroller/glance openstack-config --set /etc/glance/glance-registry.conf \ DEFAULT sql_connection mysql://glance:PASSWORDcontroller/glance openstack-db --init --service glance --password PASSWORD然后在 Keystone 里创建 glance 用户并给 admin 角色。keystone user-create --nameglance --passPASSWORD --emailglanceexample.com keystone user-role-add --userglance --tenantservice --roleadmin接下来配置 Glance 向 Keystone 认证的参数api 和 registry 两个配置文件都要配。openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \ auth_uri http://controller:5000 openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \ auth_host controller openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \ admin_tenant_name service openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \ admin_user glance openstack-config --set /etc/glance/glance-api.conf keystone_authtoken \ admin_password PASSWORD openstack-config --set /etc/glance/glance-api.conf paste_deploy \ flavor keystoneregistry 配置文件做同样处理。paste_deploy flavor 设为 keystone 是告诉 Glance 走 Keystone 认证中间件。还要把 paste.ini 文件从模板复制到 /etc/glance/ 下并在 [filter:authtoken] 段填入认证信息。cp /usr/share/glance/glance-api-dist-paste.ini /etc/glance/glance-api-paste.ini cp /usr/share/glance/glance-registry-dist-paste.ini /etc/glance/glance-registry-paste.inipaste.ini 里的 auth_host、admin_user、admin_tenant_name、admin_password 四项必须和上面配置一致任何一项对不上Glance 启动后调用时会返回 401。这是 Glance 配置最容易翻车的地方两个文件、两处配置四处认证信息要完全对齐。最后在 Keystone 注册 glance 服务和 endpoint启动 glance-api 和 glance-registry用glance image-list校验。5.2 Nova 的数据库、用户与服务启动Nova 是计算核心配置逻辑和 Glance 类似配数据库、建用户、给角色、配认证、注册服务、启动。openstack-config --set /etc/nova/nova.conf \ DEFAULT sql_connection mysql://nova:PASSWORDcontroller/nova openstack-db --init --service nova --password PASSWORD keystone user-create --namenova --passPASSWORD --emailnovaexample.com keystone user-role-add --usernova --tenantservice --roleadminNova 的认证配置写在 nova.conf 里包括 auth_strategykeystone、keystone 相关参数。然后在 Keystone 注册 nova 服务和 endpointendpoint 的 publicurl 指向 8774 端口。keystone service-create --namenova --typecompute \ --descriptionNova Compute Service keystone endpoint-create \ --service-idnova service id \ --publicurlhttp://controller:8774/v2/%\(tenant_id\)s \ --internalurlhttp://controller:8774/v2/%\(tenant_id\)s \ --adminurlhttp://controller:8774/v2/%\(tenant_id\)sURL 里的%\(tenant_id\)s是转义写法不能漏。启动 nova 的各项服务nova-api、nova-cert、nova-conductor、nova-scheduler、nova-novncproxy单节点还要启 nova-compute 和 nova-network。每个服务都要 chkconfig on。用nova service-list校验能看到各服务状态为 enabled 且 up 就正常。提示nova-compute 启动后如果状态是 down先确认 qpid 是否在跑再看/var/log/nova/nova-compute.log多数是消息队列连不上或数据库连接串写错。6. 避坑排查Havana 单节点部署的五个高频翻车点6.1 租户创建失败提示无法创建现象执行 keystone tenant-create 报错提示租户无法创建。原因keystone 启动时数据库连接尚未完全就绪或 token 缓存异常。解决重启 openstack-keystone 服务再重新执行创建命令手册里明确记录了这个处理方式。6.2 Glance 启动后调用返回 401现象glance image-list 报 401 Unauthorized。原因glance-api-paste.ini 和 glance-registry-paste.ini 里的认证信息与 keystone_authtoken 配置不一致或者 paste_deploy flavor 没设成 keystone。解决逐项核对两个 paste.ini 的 auth_host、admin_user、admin_tenant_name、admin_password确保和 openstack-config 写入的值完全一致。6.3 安装包中途失败导致依赖冲突现象yum install 某个组件时报依赖错误错误信息和实际缺失的包对不上。原因之前安装失败残留了半成品包yum 数据库状态不一致。解决手册的建议是清除安装失败的包再重装必要时 yum clean all 后重试不要带着残留包硬装。6.4 重启后服务集体起不来现象机器重启后 Keystone、Glance、Nova 全部无法访问。原因qpid、memcached、mysql 没有设开机自启或者 NetworkManager 抢了网卡导致 IP 丢失。解决确认 qpid、memcached、mysqld、各 openstack 服务都 chkconfig onNetworkManager 保持 off。6.5 建虚拟机时找不到可用计算节点现象创建实例后一直处于 scheduling 或 error 状态。原因单节点环境漏装 nova-compute 或 nova-network调度器没有可用宿主。解决确认 nova-compute 和 nova-network 已安装并启动nova service-list 里能看到 compute 节点状态 up。7. 镜像制作与 flavor 创建跑通第一台虚拟机的收尾技巧手册最后几节是镜像制作、flavor 创建和建虚拟机这是验证整套环境是否真正可用的关键。镜像制作走的是 virt-manager 路线先用 qemu-img 创建一块磁盘再用 virt-manager 启动虚拟机装系统装完修改配置最后用 glance image-create 把 qcow2 文件注册成镜像。# 创建镜像磁盘 qemu-img create -f qcow2 /var/lib/libvirt/images/centos.img 10G # 用 virt-manager 启动并安装系统后注册镜像 glance image-create --namecentos6 --disk-formatqcow2 \ --container-formatbare --file/var/lib/libvirt/images/centos.img \ --is-publicTrue--disk-format要和实际文件格式一致qcow2 写成 raw 会导致实例启动失败。--is-publicTrue让镜像对所有租户可见实验环境方便。装完系统后手册提到要改几个配置常见的是关掉 SELinux、清空网卡 MAC 绑定、确认 ssh 可用这些不做的话实例起来后网络和登录都会出问题。flavor 是资源模板定义 CPU、内存、磁盘规格。# 查看现有 flavor nova flavor-list # 创建自定义 flavor nova flavor-create m1.small 6 2048 20 2参数顺序是名称、ID、内存MB、磁盘GB、vCPU数。ID 不指定会自动分配指定的话别和现有冲突。创建实例时选对 flavor 和镜像网络选 nova-network 里的 vlan安全组开放 ssh 和 icmp实例就能起来。我自己的习惯是每次装完一套 OpenStack先不急着建实例而是按 Keystone→Glance→Nova→网络→Dashboard 的顺序逐个用命令行校验一遍每个组件确认能 list 出东西再往下走。这样出问题时能立刻定位到是哪个组件没通不用在一堆报错里猜。镜像制作那步尤其要留后悔药qcow2 文件注册前先本地用 qemu 起一遍确认能引导再 glance image-create省得注册完发现镜像有问题还得删了重来。希望这份拆解帮到你照着敲的时候把每个报错都当成线索别跳过。本文还有配套的精品资源点击获取