简介:这份《Openstack安装部署手册》面向云计算运维人员、系统集成工程师及高校相关专业学生,针对Havana版本OpenStack平台从零搭建过程中环境配置繁琐、组件依赖复杂、认证链路易出错等痛点,提供一套可对照执行的部署参考。资源包内仅含1个docx文档,压缩包约519KB,篇幅紧凑但目录结构完整,便于按章节检索查阅。内容覆盖网卡配置、主机名修改、MySQL数据库安装等环境准备环节,并逐一梳理Keystone、Glance、Nova、Swift、Cinder、Neutron等核心组件的整体结构与职责划分;其中Keystone认证服务部分展开较细,涉及数据库连接创建、授权令牌定义、密钥与证书配置、服务启动、用户租客与roles定义以及API endpoint注册等关键操作,Glance章节亦给出数据连接、用户与角色添加、身份验证配置等步骤。目前已有369人学习,适合需要快速理解OpenStack组件关系、按手册完成基础部署与排错的中级读者参考。
1. 从一份 Openstack 安装部署手册说起:Havana 版到底还能不能跑起来
手里拿到一份《Openstack安装部署手册.docx》,第一反应往往不是兴奋,而是犯嘀咕:这玩意儿是哪个年代的?如果手册里写的是 Havana 版本,那基本可以确认它是一份有年头的资料了。Havana 是 OpenStack 早期的一个发行版,那时候 Kolla、TripleO 这些自动化部署工具还没成气候,装一套云平台靠的是手工敲命令、逐个服务配配置文件。今天再翻出这份手册,直接照抄大概率会翻车,但它的价值不在于「照着装一遍」,而在于帮你理解 OpenStack 各个组件之间到底是怎么串起来的。
现在主流的做法是用 Kolla-Ansible 或者 DevStack 来搭环境,前者面向生产、后者面向开发和验证。但如果你手上只有一份 Havana 手册,又确实需要把一套 OpenStack 跑起来,比较务实的路径是:先用手册理清组件关系,再用 Kolla-Ansible 在 CentOS 7.9 或 Ubuntu 上做容器化部署。这篇文章就是按这个思路走的——先讲清楚 OpenStack 安装部署这件事在 Havana 语境下意味着什么,再给出今天能复现的部署路径、参数配置和排错方法。适合手里有旧手册不知道怎么处理的人,也适合第一次接触 OpenStack、想搞明白「装一套云平台到底要动哪些东西」的工程师。
2. Havana 手册里的组件关系与今天的部署选型
2.1 Havana 时代的安装逻辑:为什么是手工逐服务配置
Havana 版本的 OpenStack 安装部署,核心逻辑是「每个服务独立安装、独立配置、独立启动」。那时候没有容器编排,也没有统一的部署框架,装一套环境的基本流程是:先在控制节点上装 MySQL、RabbitMQ、Keystone,再装 Glance、Nova、Neutron、Horizon,计算节点上单独装 Nova Compute 和 Neutron Agent。每个服务都有自己的配置文件,通常放在/etc/<服务名>/下面,改完配置手动重启服务。
这种方式的优点是透明——你能清楚看到每个组件依赖什么、监听哪个端口、连的哪个数据库。缺点是重复劳动多,而且一旦某个服务的配置写错,排查起来要在多个日志文件之间来回翻。Havana 手册里通常会给出每个服务的配置文件模板和启动命令,但不会告诉你这些配置项之间的依赖关系。比如 Keystone 的 endpoint 配错了,Nova 就注册不上,Horizon 也登不进去,但报错信息可能只显示「无法连接」或者「认证失败」。
今天再用手工方式装 Havana 已经不现实了,主要是依赖包源基本不可用,Python 2.7 的环境也不好找。但手册里对组件关系的描述仍然有价值:它告诉你 Keystone 是认证入口、Glance 管镜像、Nova 管计算、Neutron 管网络、Cinder 管块存储、Horizon 是 Web 控制台。这个骨架没变,变的是部署方式。
2.2 今天装 OpenStack 的三条路:Kolla、DevStack 和手动
如果你现在要搭一套 OpenStack,常见的选择有三条:
第一条是 Kolla-Ansible。它把每个 OpenStack 服务打包成 Docker 容器,用 Ansible 做编排。优点是部署快、环境隔离好、升级相对方便,适合生产环境或者需要长期维护的测试环境。缺点是对 Docker 和 Ansible 要有基本了解,出问题时要看容器日志而不是系统日志。
第二条是 DevStack。它本质上是一堆 Shell 脚本,从源码拉取各个组件然后在本机跑起来。优点是适合开发调试,改代码方便。缺点是它会把你的机器搞得很「脏」,不适合当稳定环境用,重启后经常需要重新跑一遍。
第三条是纯手动部署。除非你有特殊需求,否则不建议。手工部署一套完整的 OpenStack 至少需要两天,而且很容易在某个依赖上卡住。
我一般会推荐 Kolla-Ansible,因为它的部署过程可重复、可回滚,而且社区文档比较全。下面就以 Kolla-Ansible 为例,讲一下在 CentOS 7.9 上部署一套最小可用 OpenStack 的具体步骤。
2.3 用 Kolla-Ansible 在 CentOS 7.9 上跑通最小环境
先确认基础环境:两台机器,一台做控制节点+计算节点(all-in-one),一台可选做第二个计算节点。每台至少 8GB 内存、4 核 CPU、两块网卡(一块管理网、一块业务网)。操作系统用 CentOS 7.9,关闭 SELinux 和防火墙,或者放行必要端口。
第一步,安装 Docker 和 Ansible:
# 安装 Docker CE yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y docker-ce docker-ce-cli containerd.io systemctl enable docker && systemctl start docker # 安装 Ansible yum install -y epel-release yum install -y ansible ansible --versionDocker 用来跑 OpenStack 各个服务的容器,Ansible 用来做批量配置和编排。CentOS 7.9 默认的 Python 版本是 2.7,Kolla-Ansible 的某些版本对 Python 3 有要求,如果遇到语法错误,需要额外装 Python 3 并切换。
第二步,安装 Kolla-Ansible 并生成配置:
pip install kolla-ansible==9.0.0 # 对应 Train 版本,兼容 CentOS 7.9 mkdir -p /etc/kolla cp -r /usr/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/ cp /usr/share/kolla-ansible/ansible/inventory/all-in-one . kolla-genpwd # 生成各服务的随机密码,写入 /etc/kolla/passwords.ymlkolla-genpwd会为 Keystone、MySQL、RabbitMQ 等生成随机密码,保存在passwords.yml里。这个文件很重要,后面排查认证问题时要对照看。
第三步,修改全局配置:
# /etc/kolla/globals.yml 关键配置项 kolla_base_distro: "centos" kolla_install_type: "binary" openstack_release: "train" network_interface: "eth0" # 管理网网卡 neutron_external_interface: "eth1" # 业务网网卡 kolla_internal_vip_address: "10.0.0.100" # 控制节点 VIP enable_horizon: "yes" enable_neutron_provider_networks: "yes"network_interface是管理网,用来跑 API 和数据库通信;neutron_external_interface是给虚拟机出网用的,不能配 IP,由 Neutron 接管。kolla_internal_vip_address是 Keepalived 的 VIP,单节点部署时也建议设一个,方便后续扩展。
第四步,执行部署:
kolla-ansible -i ./all-in-one prechecks # 预检查,看环境是否满足 kolla-ansible -i ./all-in-one deploy # 正式部署,耗时约 20-40 分钟 kolla-ansible -i ./all-in-one post-deploy # 生成 admin-openrc.shprechecks会检查 Docker 版本、端口占用、磁盘空间等,有问题会提前报出来。deploy阶段会拉取镜像、启动容器,如果卡在某个容器上,用docker logs <容器名>看日志。post-deploy生成的环境变量文件在/etc/kolla/admin-openrc.sh,后面用 OpenStack 命令前先 source 一下。
部署完成后,浏览器访问http://<kolla_internal_vip_address>就能看到 Horizon 登录页,用户名admin,密码在passwords.yml里搜keystone_admin_password。
3. 部署完成后的验证与常见配置调整
3.1 用命令行验证各服务是否正常
部署完不等于能用,先做一轮验证。source 环境变量后,依次检查:
source /etc/kolla/admin-openrc.sh openstack token issue # 验证 Keystone 认证 openstack image list # 验证 Glance openstack compute service list # 验证 Nova openstack network agent list # 验证 Neutron openstack volume service list # 验证 Cinder如果token issue报 401,说明 Keystone 有问题,去看/var/log/kolla/keystone/keystone.log。如果compute service list里没有节点,说明 Nova Compute 没注册上,检查计算节点的nova-compute容器日志。network agent list里应该看到Open vSwitch agent和DHCP agent的状态是UP,如果是DOWN,通常是网络配置或防火墙问题。
3.2 网络配置:provider network 和 tenant network 的区别
Kolla 默认会创建两类网络:provider network 直接映射到物理网卡,虚拟机拿到的 IP 在物理网段里;tenant network 是 VXLAN overlay,虚拟机 IP 是内部网段,出网需要走路由和 NAT。如果你只是做测试,用 provider network 更简单:
openstack network create --share --external \ --provider-physical-network physnet1 \ --provider-network-type flat provider openstack subnet create --network provider \ --allocation-pool start=10.0.0.200,end=10.0.0.250 \ --dns-nameserver 8.8.8.8 --gateway 10.0.0.1 \ --subnet-range 10.0.0.0/24 provider-subnet--provider-physical-network physnet1要和/etc/kolla/neutron-openvswitch-agent/里的网桥配置对应。如果创建实例后拿不到 IP,先检查neutron agent list里 agent 是否 alive,再看openvswitch的流表。
3.3 镜像和实例:从上传到能 SSH 登录
上传一个 CirrOS 镜像做测试:
wget http://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img openstack image create "cirros" \ --file cirros-0.5.2-x86_64-disk.img \ --disk-format qcow2 --container-format bare --public创建实例:
openstack flavor create --vcpus 1 --ram 512 --disk 1 m1.tiny openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey openstack server create --flavor m1.tiny --image cirros \ --nic net-id=<provider-network-id> --key-name mykey test-vmnet-id用openstack network list查。实例起来后,openstack server list看状态是ACTIVE,然后用openstack console url show test-vm拿控制台地址,或者直接 SSH(provider network 下 IP 可直接访问)。如果实例一直卡在BUILD,去看/var/log/kolla/nova/nova-compute.log,常见原因是镜像格式不对或者资源不足。
4. 避坑与排查:Havana 手册照抄会遇到的五个问题
4.1 坑一:依赖包源失效,yum install 直接报 404
现象:按照 Havana 手册执行yum install openstack-keystone之类的命令,提示找不到包或者 404。
原因:Havana 对应的 EPEL 和 RDO 源早就下线了,CentOS 6/7 的官方源也不再维护这些旧版本。
解决:不要试图修复旧源。改用 Kolla-Ansible 的容器化方案,或者用 DevStack 从源码拉取。如果必须用 Havana 做实验,找离线的 RPM 包或者用 Docker 镜像跑,但投入产出比很低。
4.2 坑二:Keystone 认证失败,但日志里只写「Unauthorized」
现象:openstack token issue返回 401,Keystone 日志里只有一行Unauthorized,没有更多信息。
原因:通常是admin-openrc.sh里的密码和passwords.yml里的keystone_admin_password不一致,或者OS_AUTH_URL指向的端口不对(Kolla 默认是 5000,旧版可能是 35357)。
解决:先grep keystone_admin_password /etc/kolla/passwords.yml确认密码,再检查admin-openrc.sh里的OS_PASSWORD。如果密码对但还报错,用curl -i http://<vip>:5000/v3看 Keystone 是否响应,不响应就去看容器状态。
4.3 坑三:Neutron agent 显示 DOWN,虚拟机拿不到 IP
现象:openstack network agent list里Open vSwitch agent状态是DOWN,创建实例后一直BUILD或者没有 IP。
原因:通常是neutron_external_interface配错了网卡,或者网卡上有 IP 地址导致 OVS 无法接管。另外,如果管理网和业务网用了同一块网卡,也会出问题。
解决:确认globals.yml里neutron_external_interface对应的网卡没有 IP(ip addr show eth1应该只有UP没有inet)。如果有 IP,用ip addr del删掉。然后重启neutron_openvswitch_agent容器。
4.4 坑四:Horizon 能登录但页面报 500
现象:Horizon 登录页正常,输入用户名密码后跳转报 500 错误。
原因:通常是 Horizon 容器连不上 Keystone 或者数据库,也可能是memcached没起来。Kolla 的 Horizon 依赖memcached做 session 存储。
解决:docker ps | grep memcached看容器是否运行,没运行就docker start memcached。再看/var/log/kolla/horizon/horizon.log,如果是数据库连接错误,检查nova和keystone的数据库用户权限。
4.5 坑五:部署卡在prechecks的 Docker 版本检查
现象:kolla-ansible prechecks报错,提示 Docker 版本不满足要求。
原因:Kolla-Ansible 对 Docker 版本有最低要求,CentOS 7.9 默认源里的 Docker 版本可能太旧。
解决:用 Docker 官方源安装最新稳定版,或者按 Kolla 文档指定版本。安装后docker --version确认,然后重新跑prechecks。如果还报错,看具体是哪个检查项失败,通常是docker info里的Storage Driver或者Cgroup Driver不匹配。
5. 从 Havana 手册到 Kolla 部署:一份可复用的检查清单
如果你手里有一份旧手册,想把它变成今天能用的部署方案,我一般会按这个顺序过一遍:
| 检查项 | Havana 手册里的写法 | 今天的对应做法 |
|---|---|---|
| 认证服务 | 手动装 Keystone,配keystone.conf | Kolla 容器keystone,密码在passwords.yml |
| 镜像服务 | 手动装 Glance,配glance-api.conf | Kolla 容器glance_api,后端默认本地文件 |
| 计算服务 | 手动装 Nova,配nova.conf | Kolla 容器nova_compute和nova_api |
| 网络服务 | 手动装 Neutron,配neutron.conf | Kolla 容器neutron_server和neutron_openvswitch_agent |
| 控制台 | 手动装 Horizon,配local_settings.py | Kolla 容器horizon,配置在globals.yml |
| 数据库 | 手动装 MySQL,建库建用户 | Kolla 容器mariadb,密码自动生成 |
| 消息队列 | 手动装 RabbitMQ | Kolla 容器rabbitmq |
这张表的作用是帮你做映射:手册里每提到一个服务,你就知道在 Kolla 里对应哪个容器、哪个配置文件、哪个日志路径。这样即使手册里的命令不能直接跑,你也能顺着组件关系找到今天的替代方案。
还有一个习惯:每次部署完,把passwords.yml和globals.yml备份到 Git 仓库里。OpenStack 的密码和 VIP 配置一旦丢了,恢复起来很麻烦。我吃过这个亏,后来所有 Kolla 环境都强制做配置版本管理。另外,kolla-ansible deploy之前先跑prechecks,不要跳过,很多问题在预检查阶段就能暴露出来,比部署到一半失败再回滚省事得多。
希望帮到你。
本文还有配套的精品资源,点击获取