尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

OpenStack安装部署实战:基于Kolla-Ansible从裸机到虚拟机

发布时间:2026/9/30 1:05:29

资讯中心
01
ARTICLE

OpenStack安装部署实战:基于Kolla-Ansible从裸机到虚拟机

OpenStack安装部署实战:基于Kolla-Ansible从裸机到虚拟机
简介这份 OpenStack 安装部署手册面向云计算运维人员、系统集成工程师及高校相关专业学习者针对开源 IaaS 平台从零搭建时环境配置繁琐、组件依赖复杂的问题提供一套可对照执行的部署参考。资源包共 1 个 docx 文件约 519KB内容以 Havana 版本为基准目录结构清晰便于按章节检索。手册覆盖环境准备中的网卡配置、主机名修改与 MySQL 数据库安装梳理 Keystone、Glance、Nova、Swift、Cinder、Neutron 等组件的整体结构与职责并逐步展开 OpenStack 核心包与 Messaging Server 的安装流程。其中 Keystone 认证服务部分尤为细致包含数据库连接创建、授权令牌定义、密钥与证书配置、服务启动、用户租客与 roles 定义以及 API endpoint 注册等关键环节Glance 等组件的配置步骤亦有对应说明。目前已有 369 人学习适合需要快速理解 OpenStack 部署脉络、对照搭建实验环境的读者参考。1. Openstack安装部署手册从裸机到能跑虚拟机的完整路径手里拿到一台刚装完 CentOS 的物理机或者一台配置还行的闲置服务器想把它变成一套能创建虚拟机、能分配浮动 IP、能通过 Web 界面管理的私有云这件事的门槛其实比很多人想象的低。Openstack 安装部署这件事十年前确实让人头疼组件多、依赖乱、文档散但今天用 Kolla-Ansible 这套方案一个稍微熟悉 Linux 的工程师花半天时间就能把一套 All-in-One 环境跑起来。这篇内容面向的是需要在内网环境里搭建一套可用 Openstack 云平台的运维人员或后端工程师不追求生产级高可用先把最小可用闭环跑通再谈扩展。Havana 那个年代的手工编译安装方式已经不适合作为入门路径了容器化部署才是当前的主流做法。2. 部署方案选型为什么 Kolla-Ansible 比手工装更靠谱2.1 三种常见部署路径的对比Openstack 安装部署走到今天大致有三条路可以走。第一条是早期的手工逐组件安装从 Keystone 到 Nova 到 Neutron每个组件单独配数据库、单独调配置文件Havana 版本时期基本都是这么干的。这条路的好处是能让你彻底理解每个组件在干什么坏处是组件之间的依赖关系太复杂一个配置项写错后面所有服务都起不来排查成本极高。第二条路是 DevStack适合开发人员快速拉一套环境做代码调试但它本质上是个脚本堆出来的临时环境重启就崩不适合拿来当长期使用的云平台。第三条路是 Kolla-Ansible用 Docker 容器把每个 Openstack 服务打包运行通过 Ansible 做编排部署配置集中管理服务隔离清晰出问题也容易定位到具体容器。我一般会推荐 Kolla-Ansible 作为入门和中小规模部署的首选。原因很直接它把 Openstack 那些繁琐的 Python 依赖、消息队列配置、数据库初始化全部封装在容器镜像和 Ansible 角色里了你只需要关心几份配置文件和一个 inventory 文件。对于需要快速验证 Openstack 功能、或者内网私有云场景来说这是投入产出比最高的方式。2.2 硬件与系统的最低要求All-in-One 部署意味着计算、控制、网络、存储全部跑在同一台机器上。这台机器的配置直接决定了你能不能跑通。资源项最低要求推荐配置CPU4 核8 核以上内存8 GB16 GB 以上磁盘40 GB 可用100 GB SSD网卡单网卡双网卡管理业务分离操作系统CentOS 7.9 / Ubuntu 20.04CentOS 7.9内存这里要特别说一句。8 GB 是理论底线但 Kolla 会把几十个容器全部拉起来光 MariaDB、RabbitMQ、Keystone、Nova、Neutron、Glance、Horizon 这些核心服务的内存占用加起来就接近 6 GB再算上系统本身的开销8 GB 会非常紧张。如果机器只有 8 GB建议在/etc/kolla/globals.yml里关掉不需要的服务比如 Cinder、Swift、Heat 这些暂时用不上的组件。2.3 部署前的系统准备在开始跑 Kolla-Ansible 之前有几件系统层面的事情必须先做掉否则后面会出各种玄学问题。# 关闭防火墙和 SELinux内网环境先关掉生产环境再按需配置规则 systemctl stop firewalld systemctl disable firewalld setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config # 设置主机名Kolla 对主机名有要求不能用默认的 localhost hostnamectl set-hostname openstack-node echo 127.0.0.1 openstack-node /etc/hosts # 安装基础依赖 yum install -y epel-release yum install -y python3-devel libffi-devel gcc openssl-devel python3-libs这几条命令做的事情分别是关闭 firewalld 和 SELinux 是为了避免容器网络和端口被拦截设置主机名是因为 Kolla 的 Ansible inventory 里需要用主机名来标识节点安装 python3-devel 和 gcc 这些是因为后面 pip 安装 Kolla-Ansible 时需要编译一些 Python C 扩展。注意如果你的环境有安全合规要求不能关闭 SELinux那需要额外配置容器相关的 SELinux 策略复杂度会上升不少建议先在测试环境验证。3. Kolla-Ansible 安装与配置从 pip 到 globals.yml3.1 安装 Kolla-Ansible 并生成配置文件系统准备做完之后接下来就是安装 Kolla-Ansible 本身。它本质上是一个 Python 包通过 pip 安装即可。# 创建虚拟环境避免污染系统 Python python3 -m venv /opt/kolla-venv source /opt/kolla-venv/bin/activate # 升级 pip 并安装 Kolla-Ansible pip install --upgrade pip pip install kolla-ansible # 创建配置目录 mkdir -p /etc/kolla chown $USER:$USER /etc/kolla # 复制默认配置文件 cp -r /opt/kolla-venv/share/kolla-ansible/etc_examples/kolla/* /etc/kolla/ cp /opt/kolla-venv/share/kolla-ansible/ansible/inventory/all-in-one .这里有几个关键点。第一用虚拟环境是为了隔离依赖Kolla-Ansible 对 Ansible 版本有要求直接装在系统 Python 里容易和系统自带的 Ansible 冲突。第二all-in-one这个 inventory 文件是单节点部署的模板复制到当前目录后 Kolla 会默认读取它。第三/etc/kolla/目录下会有两个关键文件globals.yml和passwords.yml前者是全局配置后者是自动生成的各种服务密码。3.2 生成密码并修改 globals.yml密码文件不需要手动填Kolla 提供了一个命令自动生成随机密码。# 生成随机密码写入 passwords.yml kolla-genpwd # 查看生成的密码确认文件非空 head -5 /etc/kolla/passwords.yml接下来是重头戏globals.yml。这个文件决定了你的 Openstack 集群长什么样。以下是我一般会修改的关键配置项# 镜像类型和版本CentOS 7.9 用 centos 作为基础镜像 kolla_base_distro: centos kolla_install_type: binary # Openstack 版本选一个稳定版 openstack_release: yoga # 网络接口用 ip addr 查看你的实际网卡名 network_interface: ens33 api_interface: ens33 # VIP 地址单节点也要设就用本机 IP kolla_internal_vip_address: 192.168.1.100 # Neutron 网络类型先用 flat 或 vxlan neutron_external_interface: ens34 neutron_plugin_agent: openvswitch # 启用核心服务 enable_glance: yes enable_keystone: yes enable_nova: yes enable_neutron: yes enable_horizon: yes # 暂时不用的服务关掉省内存 enable_cinder: no enable_swift: no enable_heat: nonetwork_interface和api_interface填的是你机器上实际存在的网卡名称用ip addr命令能看到。kolla_internal_vip_address在单节点场景下直接填本机 IP 就行多节点才需要额外配置 Keepalived。neutron_external_interface是给虚拟机访问外网用的网卡如果你只有一张网卡可以先不配这个后面用 flat 网络也能跑通。3.3 执行部署前的环境检查在真正跑kolla-ansible deploy之前先做一次 bootstrap 和 prechecks这两个步骤能帮你提前发现大部分问题。# 安装 Ansible Galaxy 依赖 kolla-ansible install-deps # 初始化节点安装 Docker 等基础组件 kolla-ansible -i ./all-in-one bootstrap-servers # 部署前检查 kolla-ansible -i ./all-in-one prechecksbootstrap-servers这一步会在目标节点上安装 Docker、配置 Docker 镜像加速、调整内核参数。如果你的机器在国内Docker Hub 拉镜像会很慢甚至超时需要在/etc/docker/daemon.json里配置镜像加速地址这个文件 bootstrap 之后会生成可以手动改完再继续。prechecks是最重要的一步。它会检查端口占用、磁盘空间、内存、网络连通性、Python 版本等等。如果 prechecks 报错一定要逐条解决不要跳过。常见的报错包括端口 80 被 httpd 占用、内存不足、/etc/hosts里主机名解析不对。4. 部署执行与验证跑通第一台虚拟机4.1 执行部署并观察日志prechecks 全部通过之后就可以执行正式部署了。# 正式部署这一步耗时较长取决于网络和机器性能 kolla-ansible -i ./all-in-one deploy # 部署完成后生成 admin 用户的 openrc 文件 kolla-ansible -i ./all-in-one post-deploydeploy这一步会依次拉取所有容器镜像、创建容器、初始化数据库、启动服务。整个过程在网络正常的情况下大概 20 到 40 分钟。如果中途卡住大概率是在拉某个镜像可以用docker images看已经拉下来哪些。如果某个容器反复重启用docker logs 容器名看具体报错。post-deploy会生成/etc/kolla/admin-openrc.sh文件里面包含了 admin 用户的认证信息和 Keystone 的地址。后续所有 Openstack 命令行操作都需要先 source 这个文件。4.2 验证核心服务状态部署完成后第一件事是确认各个服务是否正常。# 加载 admin 认证 source /etc/kolla/admin-openrc.sh # 查看 Keystone 用户列表能返回说明认证正常 openstack user list # 查看 Nova 计算节点状态 openstack compute service list # 查看 Neutron 网络代理状态 openstack network agent list # 查看 Glance 镜像列表 openstack image list这几个命令能正常返回结果说明核心服务已经跑起来了。如果openstack user list报认证失败检查admin-openrc.sh里的OS_AUTH_URL是不是指向了正确的 VIP 地址和端口。如果openstack compute service list返回空说明 Nova 的 compute 服务没起来去docker ps -a | grep nova看容器状态。4.3 创建第一台虚拟机验证服务正常之后就可以走一遍完整的虚拟机创建流程了。这个过程能帮你确认网络、存储、镜像三个环节是否都通了。# 下载一个测试用的小镜像 wget http://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img # 上传镜像到 Glance openstack image create cirros \ --file cirros-0.6.2-x86_64-disk.img \ --disk-format qcow2 \ --container-format bare \ --public # 创建外部网络 openstack network create --external --provider-physical-network physnet1 \ --provider-network-type flat public-net # 创建外部子网 openstack subnet create --network public-net \ --subnet-range 192.168.1.0/24 \ --gateway 192.168.1.1 \ --no-dhcp public-subnet # 创建内部网络和子网 openstack network create private-net openstack subnet create --network private-net \ --subnet-range 10.0.0.0/24 \ --gateway 10.0.0.1 \ --dns-nameserver 114.114.114.114 private-subnet # 创建路由并连接内外网 openstack router create router1 openstack router set --external-gateway public-net router1 openstack router add subnet router1 private-subnet # 创建安全组规则允许 ping 和 ssh openstack security group rule create --proto icmp default openstack security group rule create --proto tcp --dst-port 22 default # 创建密钥对 ssh-keygen -t rsa -f ~/.ssh/id_rsa -N openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey # 创建虚拟机 openstack server create --flavor m1.tiny --image cirros \ --nic net-id$(openstack network show private-net -f value -c id) \ --security-group default --key-name mykey test-vm # 查看虚拟机状态 openstack server list这一串命令走下来如果openstack server list里能看到test-vm的状态变成ACTIVE说明你的 Openstack 环境已经完整跑通了。从镜像上传到网络创建到虚拟机启动整条链路都验证过了。提示m1.tiny这个 flavor 默认可能不存在需要用openstack flavor create手动创建指定 vcpu、内存和磁盘大小。5. 避坑指南部署 Openstack 最容易翻车的五个地方5.1 容器镜像拉取超时导致部署中断现象kolla-ansible deploy执行到一半卡住日志显示某个镜像pull操作超时或者直接报manifest unknown。原因Kolla 默认从 Docker Hub 拉取镜像国内网络访问不稳定。另外openstack_release如果填了一个不存在的版本号对应的镜像 tag 也会找不到。解决在/etc/kolla/globals.yml里配置docker_registry指向国内可访问的镜像源或者在 bootstrap 之后手动修改/etc/docker/daemon.json添加registry-mirrors。如果已经卡住先docker images看哪些镜像已经拉下来了然后重新执行kolla-ansible deployKolla 会跳过已存在的镜像。5.2 prechecks 报内存不足现象prechecks阶段报错提示可用内存低于最低要求或者nova_compute容器反复重启。原因All-in-One 部署把所有服务塞在一台机器上8 GB 内存跑全套服务确实吃力。特别是 Nova 的 compute 服务启动时会预分配一部分内存。解决在globals.yml里关掉非必要服务enable_cinder、enable_swift、enable_heat、enable_sahara全部设为no。如果还是不够把nova_compute的reserved_host_memory_mb调小或者直接加内存条。5.3 Horizon 登录后报 500 错误现象浏览器打开 Horizon 地址输入 admin 密码后页面报 500 Internal Server Error。原因Horizon 容器里的 session 存储或者 Keystone 认证配置有问题。常见的是memcached服务没起来或者openstack_release版本和 Horizon 的配置模板不匹配。解决先docker logs horizon看具体报错。如果是 memcached 连接失败docker restart memcached然后重启 horizon 容器。如果是版本问题确认globals.yml里的openstack_release和实际拉取的镜像 tag 一致。5.4 虚拟机创建后无法 ping 通外网现象虚拟机状态是 ACTIVE但ping 114.114.114.114不通浮动 IP 也分配了但 SSH 连不上。原因Neutron 的 external 网络和物理网卡之间的桥接没配好或者安全组规则没放行。另外neutron_external_interface如果填错了网卡名外部网络根本不通。解决检查neutron_external_interface对应的网卡是否处于 up 状态ovs-vsctl show看 OVS 网桥配置。安全组默认只放行 DHCP 和 SSHICMP 需要手动加规则。浮动 IP 分配后还需要openstack server add floating ip绑定到虚拟机。5.5 重启物理机后 Openstack 服务全部失效现象物理机重启后openstack命令全部报连接超时Horizon 也打不开。原因Kolla 部署的容器默认没有设置restart: always策略物理机重启后容器不会自动启动。另外 MariaDB 和 RabbitMQ 这些基础服务如果启动顺序不对依赖它们的上层服务也会起不来。解决Kolla 提供了一个kolla-ansible -i ./all-in-one start命令来启动所有容器。如果需要开机自启可以配置 systemd 服务或者用docker update --restartalways批量设置容器重启策略。更稳妥的做法是写一个开机脚本按顺序启动 mariadb、rabbitmq、keystone再启动其他服务。6. 进阶技巧用 Kolla 做多节点扩展和版本升级单节点跑通之后下一步自然是扩展到多节点。Kolla-Ansible 的多节点部署和单节点在流程上完全一样区别只在 inventory 文件。你需要把all-in-one换成multinode模板然后在[control]、[network]、[compute]、[storage]这些分组下面填入各个节点的 IP 或主机名。控制节点至少三个才能做高可用计算节点按需添加。所有节点需要提前做好免密登录和主机名解析bootstrap-servers要在所有节点上执行一遍。版本升级是另一个绕不开的话题。Kolla 的升级路径是逐版本递进的不能从 Yoga 直接跳到 Antelope。升级前必须备份数据库和配置文件然后修改openstack_release为目标版本执行kolla-ansible -i ./all-in-one upgrade。升级过程中最怕的是数据库 schema 变更失败所以升级前用mysqldump把所有 Openstack 相关的库导出一份出问题还能回滚。还有一个实用技巧是自定义容器配置。Kolla 允许你在/etc/kolla/config/目录下放针对特定服务的配置文件覆盖比如/etc/kolla/config/nova/nova.conf里的内容会合并到 Nova 容器的配置中。这个机制在调优和排查问题时特别有用不用去改容器里的文件改完重新kolla-ansible deploy就生效。我自己踩过最深的一个坑是有一次在客户现场部署prechecks 全部通过deploy 也显示成功但 Horizon 就是打不开。查了两个小时才发现是客户的内网 DNS 把 VIP 地址解析到了一个错误的 IP 上。从那以后我养成了一个习惯部署完成后第一件事不是开 Horizon而是先用curl -I http://VIP:5000确认 Keystone 的 API 能通再用curl -I http://VIP:80确认 Horizon 能通最后才开浏览器。这个顺序能帮你快速定位问题出在认证层还是 Web 层。希望帮到你。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。