简介:这份 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,主机名 controller,RedHat 6.3,6GB 内存,1TB 硬盘。它解决的不是"OpenStack 是什么"这种问题,而是"我手上只有一台机器,怎么把 Keystone、Glance、Nova、Dashboard 一条线装通并跑起第一台虚拟机"。适合正在做私有云实验、需要一份 Havana 时代组件串联清单的运维和云计算方向从业者。手册把环境准备、认证、镜像、计算、网络、面板、镜像制作、flavor、建虚拟机串成一条完整链路,每一步都给了命令和配置文件路径,属于能直接复现的实操型资料。下面我按它的真实结构拆一遍,把参数含义、报错点和容易翻车的地方补上。
2. 环境准备与组件结构:单节点为什么必须补装 nova-compute
2.1 物理资源与组件拓扑的对应关系
手册开篇给的环境表很关键:1 台主机、1 块网卡、1 个 IP、1 个 CPU、6GB 内存、1TB 硬盘。这个配置决定了它只能是 all-in-one 结构。正常生产环境里 Controller 管认证、镜像、调度、API,Compute 单独跑 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 # 关键项 DEVICE=eth0 TYPE=Ethernet BOOTPROTO=static IPADDR=192.168.205.177 NETMASK=255.255.255.0 ONBOOT=yes # 停用 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 HOSTNAME=controller 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 # 设置 auth=no,实验环境简化认证 auth=no service qpidd start chkconfig qpidd onmemcached 是 Keystone 用来缓存 token 的,装完不用额外配置,Keystone 默认会连本机 11211 端口。qpid 的 auth=no 是实验环境的简化做法,生产环境必须开认证,但单机实验阶段先跑通为主。这里如果 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_DBPASS@controller/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_TOKEN=ADMIN_TOKEN export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0手册建议把这两行写进一个文件,以后 source 一下就行,比每次手敲省事。接着创建 admin 和 service 两个租户。
keystone tenant-create --name=admin --description="Admin Tenant" keystone tenant-create --name=service --description="Service Tenant"手册在这里标注了一个高频报错:租户创建失败,提示无法创建。它的解决办法是重启 keystone 服务。原因是 keystone 启动时数据库连接可能还没完全就绪,重启一次让它重新建立连接就好。这个玄学问题在 Havana 上确实常见。
创建 admin 用户并绑定角色。
keystone user-create --name=admin --pass=ADMIN_PASS --email=admin@example.com keystone user-role-add --user=admin --tenant=admin --role=admin4.3 服务注册与 endpoint 定义
Keystone 自己也要注册成一个 service,并定义 endpoint。
keystone service-create --name=keystone --type=identity \ --description="Keystone Identity Service" keystone endpoint-create \ --service-id=<上一步返回的id> \ --publicurl=http://controller:5000/v2.0 \ --internalurl=http://controller:5000/v2.0 \ --adminurl=http://controller:35357/v2.0三个 URL 的区别要清楚:publicurl 给外部访问,internalurl 给内部服务调用,adminurl 给管理操作。单节点环境下三者指向同一台机器,但端口不同,5000 是普通认证端口,35357 是管理端口。service-id 要填上一步 service-create 返回的真实 id,不能照抄示例。
最后写一个环境变量文件,包含 OS_USERNAME、OS_PASSWORD、OS_TENANT_NAME、OS_AUTH_URL,source 后用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:PASSWORD@controller/glance openstack-config --set /etc/glance/glance-registry.conf \ DEFAULT sql_connection mysql://glance:PASSWORD@controller/glance openstack-db --init --service glance --password PASSWORD然后在 Keystone 里创建 glance 用户并给 admin 角色。
keystone user-create --name=glance --pass=PASSWORD --email=glance@example.com keystone user-role-add --user=glance --tenant=service --role=admin接下来配置 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:PASSWORD@controller/nova openstack-db --init --service nova --password PASSWORD keystone user-create --name=nova --pass=PASSWORD --email=nova@example.com keystone user-role-add --user=nova --tenant=service --role=adminNova 的认证配置写在 nova.conf 里,包括 auth_strategy=keystone、keystone 相关参数。然后在 Keystone 注册 nova 服务和 endpoint,endpoint 的 publicurl 指向 8774 端口。
keystone service-create --name=nova --type=compute \ --description="Nova Compute Service" keystone endpoint-create \ --service-id=<nova service id> \ --publicurl=http://controller:8774/v2/%\(tenant_id\)s \ --internalurl=http://controller:8774/v2/%\(tenant_id\)s \ --adminurl=http://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 on,NetworkManager 保持 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 --name="centos6" --disk-format=qcow2 \ --container-format=bare --file=/var/lib/libvirt/images/centos.img \ --is-public=True--disk-format要和实际文件格式一致,qcow2 写成 raw 会导致实例启动失败。--is-public=True让镜像对所有租户可见,实验环境方便。装完系统后手册提到要改几个配置,常见的是关掉 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,省得注册完发现镜像有问题还得删了重来。希望这份拆解帮到你,照着敲的时候把每个报错都当成线索,别跳过。
本文还有配套的精品资源,点击获取