尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Kolla-ansible单节点OpenStack部署指南:从容器化原理到实战配置

Kolla-ansible单节点OpenStack部署指南:从容器化原理到实战配置 1. 项目概述为什么选择 Kolla-ansible 来部署单节点 OpenStack如果你正在寻找一种能让你快速搭建一个功能完整的 OpenStack 私有云环境用于开发、测试或者学习那么 Kolla-ansible 的单节点all-in-one部署方案几乎是你当前最省心、最“稳”的选择。我经历过从手动编译、配置各个组件到使用 DevStack再到最终拥抱 Kolla-ansible 的完整过程可以说后者极大地降低了 OpenStack 的准入门槛和运维复杂度。简单来说Kolla-ansible 是 OpenStack 官方孵化的一个项目它的核心思想是“容器化”和“自动化”。它将 OpenStack 每一个服务比如 Nova 计算、Neutron 网络、Cinder 存储等都打包成独立的 Docker 容器然后通过 Ansible 这个自动化运维工具来统一管理和部署这些容器。这样做的好处是显而易见的环境隔离干净升级回滚方便最重要的是部署过程被标准化和脚本化了你不再需要去手动处理几十个服务之间复杂的依赖关系和配置文件。而“all-in-one”单节点模式顾名思义就是把 OpenStack 的所有控制服务如 API、调度器、数据库和计算服务虚拟机管理器全部部署在同一台物理机或虚拟机上。这显然不适合生产环境但对于我们个人学习、功能验证、CI/CD 测试或者开发一套基于 OpenStack 的上层应用来说它是最经济、最快速的方案。你只需要一台配置还不错的机器比如 16GB 内存100GB 磁盘就能跑起一个麻雀虽小五脏俱全的云平台。网络上常有人问“OpenStack 可以裸机部署不”答案是肯定的而且 Kolla-ansible 正是裸机部署的利器。它不依赖特定的发行版或云平台只要你有一台安装了 Linux 的“裸机”它就能帮你把 OpenStack 装上去。而像“基于 OpenStack SIG 开发工具 OOS 快速部署”这类新工具其底层思想也与 Kolla-ansible 一脉相承旨在进一步简化部署体验。但就目前社区的成熟度、文档的丰富度和可预见问题的解决方案数量而言Kolla-ansible 依然是新手和大多数场景下的首选。2. 部署前准备硬件、软件与关键决策在真正敲下部署命令之前充分的准备工作能避免你掉进 80% 的坑。这一部分我会结合我踩过的雷告诉你哪些配置是必须的哪些选择会影响后续的体验。2.1 硬件与操作系统要求对于 all-in-one 部署你的机器就是整个云平台。以下是经过实测的最低和建议配置CPU: 最低 2 核建议 4 核或以上。因为 OpenStack 服务众多尤其是启动虚拟机时Nova 和 Neutron 会消耗不少 CPU 资源进行调度和网络准备。内存: 绝对的关键项。最低 8GB 可以勉强启动基础服务但几乎无法创建虚拟机。强烈建议 16GB 或以上。内存主要被以下几个方面瓜分系统与服务容器所有 OpenStack 服务容器运行起来大约需要 4-6GB。虚拟机你要创建的实例。一个最小的 CirrOS 测试镜像可能只要 512MB但一个 Ubuntu 或 CentOS 实例通常需要 1-2GB。系统缓存与预留Linux 系统本身需要内存。磁盘: 至少 50GB 可用空间。这包括了操作系统本身。Docker 镜像存储Kolla-ansible 会拉取大量的 Docker 镜像一个完整的 OpenStack 版本如 Yoga的镜像总量可能在 10GB 以上。虚拟机镜像存储Glance 镜像仓库的默认位置。实例卷存储Cinder 或 Nova 为虚拟机提供的卷。建议直接给 100GB 或更大并使用 SSD 以提升磁盘 IO 性能这对虚拟机启动和运行速度影响显著。网络: 至少两个网络接口NIC是最佳实践但单网卡通过 VLAN 模式也能工作。一个接口用于管理/API 网络比如你的 SSH 连接另一个用于提供者网络虚拟机对外通信。如果只有一张网卡我们需要在部署配置中做一些调整。操作系统: 官方支持 CentOS 7/8, Rocky Linux 8/9, Ubuntu 20.04/22.04 等。我个人更推荐Ubuntu 22.04 LTS因为其软件包较新对 Docker 和 Python 的支持更好社区遇到同类问题的解决方案也更多。注意请确保你的机器关闭了 SELinux针对 RHEL/CentOS 系和防火墙或正确配置了规则。在学习和测试环境直接禁用它们能排除大量疑难杂症。对于 Ubuntu默认的 UFW 防火墙也需要禁用或放行相关端口。2.2 基础环境配置步步为营假设我们在一台新安装的 Ubuntu 22.04 服务器上操作主机名设置为openstack-aio。更新系统与安装基础工具sudo apt update sudo apt upgrade -y sudo apt install -y python3-dev libffi-dev gcc libssl-dev git vim安装 DockerKolla-ansible 的基石。务必使用 Docker 官方仓库安装避免使用发行版自带的旧版本。# 安装依赖 sudo apt install -y ca-certificates curl gnupg lsb-release # 添加 Docker 官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg # 设置稳定版仓库 echo deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/null # 安装 Docker Engine sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io # 启动并设置开机自启 sudo systemctl enable --now docker # 将当前用户加入 docker 组避免每次都要 sudo sudo usermod -aG docker $USER # **重要**退出当前 SSH 会话重新登录以使组生效安装 Python 虚拟环境与 Ansible为了避免污染系统 Python 环境我们使用virtualenv。sudo apt install -y python3-venv python3-pip # 创建虚拟环境目录并激活 python3 -m venv /path/to/your/venv # 例如: ~/kolla-venv source /path/to/your/venv/bin/activate # 升级 pip pip install --upgrade pip # 安装 Ansible 和 Kolla-ansible 的依赖 pip install ansible6,9 jinja23.1实操心得Ansible 版本兼容性是个小坑。Kolla-ansible 的某个版本可能只兼容特定范围的 Ansible。例如Kolla-ansible Yoga 版本通常要求 Ansible 在 6.x 到 8.x 之间。使用虚拟环境可以让你为不同的 OpenStack 版本轻松创建独立的部署环境。安装 Kolla-ansible# 仍在虚拟环境中 pip install kolla-ansible安装完成后我们需要将 Kolla-ansible 提供的配置文件模板复制到标准位置。# 创建配置目录 sudo mkdir -p /etc/kolla # 复制全局配置文件和环境密码文件模板 sudo cp /path/to/your/venv/share/kolla-ansible/etc_examples/kolla/globals.yml /etc/kolla/ sudo cp /path/to/your/venv/share/kolla-ansible/etc_examples/kolla/passwords.yml /etc/kolla/ # 复制 Ansible 清单文件模板 sudo cp /path/to/your/venv/share/kolla-ansible/ansible/inventory/* /etc/kolla-ansible-docker/ # 实际上更常见的做法是创建一个工作目录 mkdir -p ~/kolla_deploy cd ~/kolla_deploy cp /path/to/your/venv/share/kolla-ansible/ansible/inventory/all-in-one .这里我们创建了~/kolla_deploy作为工作目录并把单节点清单文件all-in-one复制了过来。2.3 关键配置解析理解globals.yml/etc/kolla/globals.yml是整个部署的“总开关”理解几个关键配置项至关重要。# 1. 选择 OpenStack 版本和部署类型 kolla_base_distro: ubuntu kolla_install_type: source # 或者 “binary” source 会从源码构建镜像更灵活但慢binary 直接拉取预编译镜像推荐。 openstack_release: yoga # 选择一个稳定的版本如 “wallaby”, “xena”, “yoga”。新手建议选 Yoga 或更新。 # 2. 网络配置 - 这是最容易出错的地方 network_interface: eth0 # 你的第一个网卡用于管理、API、内部通信 neutron_external_interface: eth1 # 第二个网卡用于提供者网络。如果只有 eth0可以暂时注释掉或设为 “eth0”但需要配合下面的配置。 # 如果只有一个网卡我们需要启用 VLAN 模式并指定一个物理接口作为 provider network 的载体 # neutron_plugin_agent: openvswitch # 默认就是 openvswitch # neutron_external_interface: eth0 # 单网卡时也设为 eth0 # enable_neutron_provider_networks: yes # 启用提供者网络 # neutron_plugin_type: vlan # 使用 VLAN 类型 # neutron_type_drivers: vlan # 驱动类型 # 对于单网卡 all-in-one 学习环境一个更简单的方案是使用 Linux Bridge 和 Flat 网络配置更直观。 # 3. 启用或禁用服务 # 对于 all-in-one计算服务nova必须运行在控制节点上 nova_compute_virt_type: qemu # 如果是在虚拟机里部署 all-in-one必须用 qemu。如果是物理机且支持 KVM可以用 “kvm”。 enable_cinder: no # 单节点测试可以暂时禁用 Cinder 块存储简化部署。 enable_heat: no # 可以禁用编排服务 Heat除非你需要测试。 enable_swift: no # 可以禁用对象存储 Swift。 enable_octavia: no # 可以禁用负载均衡服务 Octavia。 # 4. Docker 相关配置 docker_registry: # 如果从官方 Docker Hub 拉取镜像留空。如果有内部镜像仓库在此指定。 docker_namespace: kolla # 镜像的命名空间官方镜像就是 “kolla”。对于单网卡场景我推荐在测试时使用Linux Bridge Flat 网络因为它配置简单不需要额外的物理交换机支持 VLAN。我们可以在部署完成后通过修改 Neutron 配置来实现。3. 部署流程详解从生成密码到启动服务配置完成后我们就可以开始正式的部署了。这个过程主要由几个 Ansible Playbook 驱动。3.1 生成密码与预检查首先我们需要为所有 OpenStack 服务生成随机的、安全的密码。这些密码会保存在/etc/kolla/passwords.yml中。cd ~/kolla_deploy # 确保在 kolla-ansible 虚拟环境中 source /path/to/your/venv/bin/activate # 生成密码 kolla-ansible -i all-in-one passwords这个命令会遍历passwords.yml模板文件将所有None或secret占位符替换为随机字符串。务必备份好这个文件以后升级或重建都需要它。接下来进行部署前的预检查这个步骤能发现大部分环境配置问题。kolla-ansible -i all-in-one prechecks这个 Playbook 会检查几十项内容比如 Docker 是否运行、磁盘空间是否足够、内核参数是否正确、网络接口是否存在等。如果看到FAILED一定要根据错误信息修复后再继续。常见的修复操作可能是vm.overcommit_memory 1编辑/etc/sysctl.conf添加vm.overcommit_memory 1然后执行sysctl -p。时间同步确保chronyd或ntpd服务运行。SELinux/防火墙确认已禁用。3.2 拉取镜像与部署预检查通过后就可以拉取 Docker 镜像了。这步会从 Docker Hub 下载所有需要的镜像耗时取决于网络。kolla-ansible -i all-in-one pull实操心得如果网络不稳定可以尝试配置 Docker 镜像加速器如阿里云、中科大的镜像加速器。拉取过程如果中断可以重复执行此命令Docker 会续传已有的层。镜像拉取完毕最激动人心的部署命令来了kolla-ansible -i all-in-one deploy这个命令会运行很长时间可能 30 分钟到 1 小时以上因为它要完成所有步骤创建 Docker 内部网络、启动数据库MariaDB、消息队列RabbitMQ、Keystone身份认证然后依次启动 Glance、Nova、Neutron 等所有你启用的服务。你可以在另一个终端用docker ps观察容器被逐个创建和启动的过程。3.3 安装 OpenStack 客户端与初始化环境部署完成后OpenStack 服务都在容器里跑起来了但我们还需要在宿主机上安装命令行客户端来管理它。# 安装 OpenStack 客户端 (仍在虚拟环境中) pip install python-openstackclient python-glanceclient python-novaclient python-neutronclient接着我们需要生成一个管理员权限的 OpenStack 命令行环境变量脚本openrc文件。kolla-ansible -i all-in-one post-deploy这个命令会在当前目录生成一个admin-openrc.sh文件。执行它你的命令行就具备了管理员权限。source admin-openrc.sh执行后会提示你输入密码这个密码就是/etc/kolla/passwords.yml里keystone_admin_password对应的值。最后Kolla-ansible 还提供了一个初始化脚本用于创建一些基本的网络、镜像、规格等资源。# 通常脚本在 /usr/local/share/kolla-ansible/init-runonce 或虚拟环境的 share 目录下 # 我们可以直接复制过来用 cp /path/to/your/venv/share/kolla-ansible/init-runonce . # 编辑这个文件根据你的网络配置调整比如公网IP段 vim init-runonce # 执行初始化 ./init-runonce这个脚本会创建一个外部网络public、一个内部网络private、路由器、安全组规则并上传一个 CirrOS 测试镜像。4. 单节点网络配置实战解决单网卡通信问题对于单网卡的 all-in-one 环境默认的部署可能无法让虚拟机访问外网。我们需要手动调整 Neutron 的网络配置。这里演示最易用的Flat 网络方案。4.1 创建 Provider Flat 网络首先确保你的globals.yml中关于 Neutron 的配置倾向于使用 Linux Bridge 和 Flat。一个简化的配置思路是在部署时先使用默认配置可能创建了physnet1之类的提供商网络部署完成后我们再修改。部署完成后我们通过命令行来创建 Flat 网络。创建物理网络source admin-openrc.sh openstack network create --share --external --provider-physical-network physnet1 --provider-network-type flat public-flat--share: 所有项目都可使用。--external: 这是一个外部网络。--provider-physical-network physnet1: 映射到名为physnet1的物理网络。这个名字需要与 Neutron Linux Bridge Agent 的配置对应。--provider-network-type flat: 网络类型是 Flat。创建子网openstack subnet create --network public-flat --allocation-pool start192.168.1.100,end192.168.1.200 --dns-nameserver 8.8.8.8 --gateway 192.168.1.1 --subnet-range 192.168.1.0/24 public-flat-subnet将192.168.1.0/24替换为你宿主机所在的实际局域网网段。--gateway是你的局域网路由器 IP。--allocation-pool是分配给虚拟机的 IP 池。4.2 配置 Neutron Linux Bridge Agent关键的一步是告诉 Neutronphysnet1这个物理网络对应到宿主机的哪个网卡比如eth0。找到 Neutron Linux Bridge Agent 的配置文件。它在对应的 Docker 容器内。# 先找到容器名 docker ps | grep neutron_linuxbridge_agent # 假设容器名为 kolla_neutron_linuxbridge_agent docker exec -it kolla_neutron_linuxbridge_agent /bin/bash在容器内编辑/etc/neutron/plugins/ml2/linuxbridge_agent.ini找到[linux_bridge]和[vxlan]部分。[linux_bridge] physical_interface_mappings physnet1:eth0 # 将 physnet1 映射到宿主机的 eth0 [vxlan] enable_vxlan False # 单节点 Flat 网络可以关闭 VXLAN同时确保[securitygroup]部分启用了防火墙驱动[securitygroup] firewall_driver neutron.agent.linux.iptables_firewall.IptablesFirewallDriver enable_security_group true退出容器并重启 Neutron 相关服务。# 在宿主机上执行 docker restart kolla_neutron_linuxbridge_agent docker restart kolla_neutron_server4.3 创建虚拟机并测试网络现在你可以使用这个public-flat网络来创建虚拟机了。# 列出镜像和规格 openstack image list openstack flavor list # 创建虚拟机指定我们刚创建的 Flat 网络 openstack server create --image cirros --flavor m1.tiny --network public-flat test-vm-1 # 查看虚拟机状态和 IP openstack server list如果一切顺利虚拟机test-vm-1会获取到一个192.168.1.0/24网段的 IP如192.168.1.100。你应该能从宿主机 ping 通这个 IP并且如果宿主机本身能上网虚拟机也应该能访问外网。注意事项这种 Flat 网络将虚拟机直接桥接到了你的物理局域网。这意味着虚拟机和你的物理机器处于同一广播域就像一台真实的物理机一样。请确保你使用的 IP 段不会与局域网内其他设备冲突。5. 运维、排错与进阶技巧部署成功只是开始日常的运维和问题排查才是重头戏。5.1 常用运维命令查看所有容器状态docker ps或kolla-ansible -i all-in-one check后者更详细。查看某个服务的日志docker logs kolla_nova_api # 查看 Nova API 日志 docker logs -f kolla_neutron_server # 实时查看 Neutron Server 日志重启所有服务kolla-ansible -i all-in-one restart停止所有服务kolla-ansible -i all-in-one stop启动所有服务kolla-ansible -i all-in-one start升级 OpenStack 版本这是一个系统化的过程需要先拉取新版本镜像 (pull)然后重新部署 (deploy)。务必提前备份/etc/kolla目录和数据库。修改配置大多数配置在/etc/kolla/下的 YAML 文件中。修改后需要重新部署相关服务或全部服务。可以使用--tags参数指定例如kolla-ansible -i all-in-one deploy --tags nova只重新部署 Nova 服务。5.2 常见问题与排查实录部署失败Ansible 任务卡住或报错首先看错误信息Ansible 的错误输出通常很详细会明确指出是哪个主机的哪个任务失败了。从最后几行红色错误信息开始往上找原因。检查 Docker 日志如果错误指向某个容器启动失败立刻去查看该容器的日志docker logs container_name。典型错误 - 端口冲突某个服务端口被占用。用netstat -tlnp检查并确保没有其他 OpenStack 或无关进程在运行。典型错误 - 内存不足部署过程中容器启动需要内存。如果docker ps发现很多容器不断重启docker logs显示OOMOut of Memory就是内存不够了。要么增加物理内存要么在globals.yml中禁用一些非核心服务如enable_heat: “no”。虚拟机创建失败状态为 ERRORopenstack server show vm-id查看详细错误信息。docker logs kolla_nova_compute和docker logs kolla_nova_conductor是首要排查对象。常见原因镜像问题Glance 镜像损坏或格式不被 QEMU/KVM 支持。尝试上传一个新的、小的 CirrOS 镜像测试。网络问题Neutron 无法为虚拟机分配端口。检查docker logs kolla_neutron_server和kolla_neutron_dhcp_agent。资源不足没有足够的 CPU/RAM/Disk 资源。检查计算节点的资源使用情况openstack hypervisor stats show。虚拟机无法获取 IP 或无法上网检查 Neutron DHCP Agent 日志docker logs kolla_neutron_dhcp_agent。在计算节点对于 all-in-one 就是本机上检查 Linux Bridge 或 OVS 的网桥状态brctl show或ovs-vsctl show。查看虚拟机的虚拟网卡是否被正确添加到网桥上。检查安全组规则是否允许 ICMP 和 SSH 流量。Dashboard (Horizon) 无法访问默认部署后Horizon 可以通过http://管理网IP访问。如果无法访问检查 Horizon 容器是否运行docker ps | grep horizon。检查防火墙是否放行了 80 端口。查看 Horizon 日志docker logs kolla_horizon。5.3 进阶技巧自定义镜像与配置构建自定义 Docker 镜像如果你想给某个 OpenStack 服务打补丁或者使用特定版本的依赖库可以修改 Kolla 的源码并自行构建镜像。这需要克隆kolla和kolla-ansible仓库修改kolla/docker/service下的 Dockerfile然后使用kolla-build工具进行构建。这是一个相对高级的操作但提供了极大的灵活性。使用本地镜像仓库在生产环境中通常会搭建私有的 Docker Registry在globals.yml中配置docker_registry和docker_namespace然后使用kolla-ansible pull将镜像拉取到本地仓库再分发到各个节点进行部署。这提高了部署速度和安全性。监控与日志收集Kolla-ansible 也支持部署监控栈如 Prometheus, Grafana和日志收集系统如 Elasticsearch, Filebeat, Kibana。通过启用enable_prometheus,enable_grafana,enable_elasticsearch等选项你可以构建一个完整的可观测性平台。部署一个单节点的 OpenStack 环境就像是拥有了一个完整的云平台实验室。你可以在这里安全地尝试任何操作创建复杂的网络拓扑、测试不同的存储后端、演练高可用方案甚至开发自己的云管平台。Kolla-ansible 将部署的复杂性封装了起来让你能更专注于 OpenStack 本身的功能和原理。虽然初次部署可能会遇到一些挑战但每一个问题的解决都会让你对 OpenStack 的理解更深一层。当你看到第一个 CirrOS 虚拟机成功启动并 ping 通外网时那种成就感就是最好的回报。
返回列表