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

资讯详情

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

Kolla-ansible 部署单节点 OpenStack:从容器化到自动化运维实践

Kolla-ansible 部署单节点 OpenStack:从容器化到自动化运维实践 1. 项目概述为什么选择 Kolla-ansible 部署单节点 OpenStack最近几年无论是想学习云平台技术的学生、需要搭建内部开发测试环境的工程师还是想验证某个 OpenStack 新功能的研究者都绕不开一个核心问题如何快速、可靠地搭建一个 OpenStack 环境。传统的源码编译安装步骤繁琐、依赖复杂一个配置失误就可能让你在无尽的排错中消耗数天时间。而 Kolla-ansible 的出现彻底改变了这个局面。它用容器化的方式封装了所有 OpenStack 服务再通过 Ansible 这个自动化运维利器来编排部署流程将部署过程从“手工艺术”变成了“标准化工程”。我这次要分享的就是用 Kolla-ansible 部署一个all-in-one 单节点版 OpenStack。所谓 all-in-one就是把控制节点、计算节点、网络节点等所有 OpenStack 核心服务全部塞进一台物理机或虚拟机里。这显然不是生产环境的架构但它完美契合了学习、开发、功能验证和 PoC概念验证的需求。你不需要准备三台甚至更多的服务器一台配置还不错的机器就能跑起来极大地降低了入门和实验的门槛。基于容器化部署环境干净、隔离性好想推倒重来也就是几条命令的事非常适合反复折腾。2. 环境准备与规划打好地基是关键部署前的准备工作其重要性不亚于部署过程本身。一个规划清晰、资源充足的基础环境能避免后续至少 80% 的诡异问题。2.1 硬件与操作系统要求首先看硬件。对于 all-in-one 部署你的机器至少需要满足以下条件我以一台虚拟机为例来说明CPU: 建议 4 核或以上。OpenStack 服务众多尤其是计算服务Nova和网络服务Neutron在启动虚拟机时需要一定的计算资源。我的测试环境是一台 8 核 vCPU 的虚拟机。内存: 最低 8GB强烈建议 16GB 或以上。内存是最大的瓶颈因为除了宿主机的系统你还要运行几十个 Docker 容器每个容器都会占用内存。如果内存不足部署后期会因 OOM内存溢出而失败或者运行虚拟机时异常缓慢。磁盘: 系统盘建议 50GB 以上。此外必须为 Docker 准备独立的存储空间。因为 Kolla 会将 OpenStack 的镜像、数据库等数据存储在 Docker 的 volumes 和 images 中。我通常单独挂载一块至少 100GB 的磁盘专门给 Docker 和 OpenStack 数据使用。网络: 至少两个网络接口。一个用于管理/外部网络比如你的公司内网或互联网另一个用于 OpenStack 的“供应商网络”Provider Network这个网络将用于虚拟机获取浮动 IP 并与外界通信。如果只有一张网卡也可以通过 VLAN 等方式进行逻辑隔离但单网卡部署会复杂一些本次我们以双网卡为例。操作系统方面Kolla-ansible 官方主要支持 CentOS 7、Rocky Linux 8/9、Ubuntu 20.04/22.04 等。我个人的偏好是Rocky Linux 8 或 9它是 CentOS 的完美替代品稳定且生命周期长。本次演示就以 Rocky Linux 8.8 为例。2.2 系统基础配置实操拿到一台新安装的 Rocky Linux 8 后不要急着装软件先做好以下几件事主机名与网络配置设置一个固定的主机名比如openstack-aio。编辑/etc/hosts文件确保本机 IP 和主机名能正确解析。为两张网卡配置静态 IP。假设eth0(192.168.1.100) 是管理网eth1(10.0.0.100) 将作为供应商网络的物理接口。hostnamectl set-hostname openstack-aio echo “192.168.1.100 openstack-aio” /etc/hosts关闭 SELinux 和防火墙在实验环境为了避免复杂的权限问题通常选择关闭 SELinux。生产环境则需要精细配置策略。setenforce 0 sed -i ‘s/^SELINUXenforcing/SELINUXpermissive/’ /etc/selinux/config systemctl stop firewalld systemctl disable firewalld注意关闭防火墙仅用于简化实验。在生产环境中应配置防火墙规则只开放必要的端口如 Horizon 的 80/443Keystone 的 5000 等。配置软件源与安装基础工具启用 EPEL 和 PowerTools 仓库安装后续需要的工具。dnf install -y epel-release dnf config-manager --set-enabled powertools dnf install -y python3-devel libffi-devel gcc openssl-devel git python3-pip2.3 容器与编排引擎部署Kolla 的核心是容器所以 Docker 必须安装。同时我们需要 Docker 的 Python SDK以及 Ansible。安装 Docker建议使用官方仓库安装指定版本避免系统自带版本过旧。dnf config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo dnf install -y docker-ce docker-ce-cli containerd.io systemctl enable --now docker安装后将当前用户加入docker组以便不用sudo执行 docker 命令。usergroupadd docker usermod -aG docker $USER newgrp docker # 重新加载组或退出重新登录配置 Docker 存储与镜像加速这是关键一步。编辑/etc/docker/daemon.json配置数据根目录指向我们准备的大容量磁盘和国内镜像加速器。{ “data-root”: “/data/docker”, // 假设 /data 是独立大容量挂载点 “registry-mirrors”: [“https://registry.docker-cn.com”, “https://docker.mirrors.ustc.edu.cn”], “log-driver”: “json-file”, “log-opts”: { “max-size”: “10m”, “max-file”: “3” } }配置完成后重启 Dockersystemctl restart docker。安装依赖与 Ansible使用 pip 安装指定版本的 Ansible 和 Docker SDK。注意版本兼容性Kolla-ansible 每个版本都有明确要求。pip3 install -U pip pip3 install ‘ansible5,9’ ‘docker4,7’ ‘jinja22.10,4’3. Kolla-ansible 部署流程全解析基础环境就绪后我们进入核心的部署环节。这个过程被 Ansible 自动化了但理解其每一步在做什么对于排错和后期运维至关重要。3.1 获取与配置 Kolla-ansible首先从官方仓库克隆代码。建议选择稳定的分支如stable/yoga对应 OpenStack Yoga 版本。git clone https://opendev.org/openstack/kolla-ansible cd kolla-ansible git checkout stable/yoga pip3 install .安装完成后需要复制两份关键的配置文件模板到/etc/kolla目录。mkdir -p /etc/kolla cp -r etc/kolla/* /etc/kolla/ cp ansible/inventory/all-in-one /etc/kolla/globals.yml这是主配置文件所有 OpenStack 服务的开关、版本、网络、密码等都在这里定义。passwords.yml存放所有服务的随机生成密码。all-in-oneAnsible 的库存文件定义了我们的单节点主机。3.2 关键配置文件深度定制现在来仔细修改globals.yml这是部署成功与否的核心。网络配置找到network_interface和neutron_external_interface参数。network_interface应设置为你的管理网卡如eth0用于容器之间的内部通信。neutron_external_interface设置为你的供应商网络物理网卡如eth1虚拟机将通过这个接口桥接到外部网络。network_interface: “eth0” neutron_external_interface: “eth1” kolla_internal_vip_address: “192.168.1.100” # 设置为管理网IP作为虚拟IP启用服务与存储在 all-in-one 部署中我们需要启用计算服务、网络服务使用 Linux Bridge 或 Open vSwitch、仪表板等。同时选择简单的存储后端例如用 LVM 或 Ceph但为了简化我们可以先使用本地文件存储nova的volume_driver为nova.virt.libvirt.volume.LibvirtVolumeDriver或者启用 Cinder 的 LVM 后端。这里我们先启用基础服务。enable_cinder: “yes” enable_cinder_backup: “no” enable_cinder_backend_lvm: “yes” # 使用LVM作为Cinder后端镜像与版本确认openstack_release与你克隆的分支一致如“yoga”。kolla_base_distro可以选择“centos”或“ubuntu”这决定了基础容器的操作系统需要与宿主机的 Docker 镜像拉取策略配合。接下来生成密码文件并简单检查库存。kolla-ansible passwords kolla-ansible -i /etc/kolla/inventory/all-in-one bootstrap-serversbootstrap-servers这个 playbook 会在目标主机上安装一些必要的依赖包。3.3 执行部署与拉取镜像最激动人心的时刻到了——执行部署。这个过程会持续较长时间因为它要拉取几十个 Docker 镜像并依次启动容器。拉取镜像首先拉取所有需要的 Docker 镜像。这步可以提前做避免部署时因网络问题中断。kolla-ansible -i /etc/kolla/inventory/all-in-one pull你会看到终端开始疯狂输出拉取镜像的信息。镜像总大小可能在 10GB 以上请确保网络通畅和磁盘空间充足。执行部署拉取完成后运行部署命令。kolla-ansible -i /etc/kolla/inventory/all-in-one deploy这是一个漫长的过程Ansible 会按顺序配置数据库、消息队列然后部署 Keystone身份认证、Glance镜像、Nova计算、Neutron网络、Cinder块存储、Horizon仪表板等所有服务。整个过程如果顺利最终会看到一大片绿色的ok和changed状态提示。生成管理员账户脚本部署完成后需要生成一个环境变量脚本用于后续通过命令行操作 OpenStack。kolla-ansible post-deploy . /etc/kolla/admin-openrc.sh执行source或.命令后你就具备了管理员权限。可以尝试openstack service list来查看所有已启动的服务验证部署是否成功。4. 部署后配置与初步验证部署完成只是第一步要让 OpenStack 真正能创建虚拟机还需要进行一些初始配置。4.1 初始化 OpenStack 基础资源即使服务都起来了云平台里还是“空空如也”。我们需要创建初始项目、用户、网络等。Kolla-ansible 的post-deploy步骤已经生成了一个初始化脚本的路径通常位于/usr/local/share/kolla-ansible/init-runonce。我们可以参考它来创建资源。创建外部网络这是虚拟机连接外网的关键。我们创建一个名为public1的共享外部网络子网范围是10.0.0.0/24与你的eth1接口在同一网段并启用 DHCP。openstack network create --share --external --provider-physical-network physnet1 --provider-network-type flat public1 openstack subnet create --network public1 --subnet-range 10.0.0.0/24 --gateway 10.0.0.1 --allocation-pool start10.0.0.100,end10.0.0.200 --dns-nameserver 8.8.8.8 public1-subnet这里的physnet1需要与globals.yml中neutron_plugin_agent的配置映射关系对应如果使用linuxbridge则对应physical_interface_mappings。创建测试用项目、用户和镜像openstack project create –description “Demo Project” demo openstack user create –project demo –password-prompt demo-user openstack role add –project demo –user demo-user user下载一个小的测试镜像如 CirrOS并上传到 Glance。wget http://download.cirros-cloud.net/0.5.2/cirros-0.5.2-x86_64-disk.img openstack image create –file cirros-0.5.2-x86_64-disk.img –disk-format qcow2 –container-format bare –public cirros创建安全组规则默认的安全组拒绝所有入站流量。我们需要添加规则允许 ICMPping和 SSH。openstack security group rule create –proto icmp –dst-port 0 default openstack security group rule create –proto tcp –dst-port 22 default4.2 访问 Dashboard 并创建第一台虚拟机现在可以通过 Web 界面来操作了。Horizon 仪表板的地址就是你设置的kolla_internal_vip_address端口是 80HTTP或 443HTTPS。用浏览器访问http://192.168.1.100使用用户名admin和passwords.yml中keystone_admin_password对应的密码登录。登录后切换到“管理员”视角在“系统”-“计算”-“主机聚合”中应该能看到你的计算节点即本机状态为up。然后切换到“项目”视角执行以下操作在“计算”-“密钥对”中创建或导入一个 SSH 密钥对。在“网络”-“网络拓扑”中应该能看到public1网络。转到“计算”-“实例”点击“启动实例”。填写实例名称选择刚才上传的cirros镜像选择m1.tiny规格如果可用选择public1网络选择你的密钥对安全组选择default。点击“启动实例”。稍等片刻实例状态会变为Active。在实例操作菜单中选择“绑定浮动 IP”从public1网络池中分配一个 IP如10.0.0.100。现在你应该可以ping 10.0.0.100并且使用密钥通过ssh cirros10.0.0.100登录这台虚拟机了CirrOS 默认用户是cirros密码是gocubsgo。5. 深度排错与运维经验谈部署过程很少一帆风顺尤其是第一次。下面是我在多次部署中积累的一些常见问题排查思路和运维技巧。5.1 部署阶段常见问题排查部署命令报错时不要慌张按以下顺序排查检查 Ansible 库存和连通性运行ansible -i /etc/kolla/inventory/all-in-one all -m ping确保 Ansible 能通过 SSH 连接到本机。如果失败检查 SSH 密钥认证或密码设置。查看具体的错误信息Ansible 的错误输出通常很长找到第一个FAILED或fatal的 task看它的msg。错误经常集中在Docker 相关Cannot connect to the Docker daemon。检查 Docker 服务状态、用户是否在docker组、执行命令时是否加了sudo如果没配置免 sudo。镜像拉取失败网络超时或镜像不存在。检查globals.yml中的openstack_release和docker_registry配置尝试手动docker pull一个镜像测试网络。服务启动超时某个容器如 MariaDB、RabbitMQ启动后健康检查一直不通过。这是最常见也最棘手的问题。首要排查方法是查看该容器的日志。查看容器日志这是定位问题的黄金法则。找到启动失败的容器名用docker logs container_name查看其输出。例如如果 MariaDB 启动失败docker logs mariadb日志可能会显示权限错误、配置文件错误、端口被占用或磁盘空间不足。根据日志提示去解决。检查配置文件再次仔细核对globals.yml特别是网络接口名、IP 地址、VIP 地址确保没有拼写错误且 IP 地址在正确的网段。清理与重试如果问题难以定位可以考虑清理环境重来。Kolla-ansible 提供了销毁命令kolla-ansible -i /etc/kolla/inventory/all-in-one destroy –yes-i-really-really-mean-it这个命令会删除所有相关的 Docker 容器、镜像、网络和卷但不会动你的配置文件。销毁后重新从pull或deploy开始。5.2 运维技巧与日常管理部署成功后日常运维就轻松多了。服务管理不需要记忆复杂的 systemctl 命令所有服务都通过 Docker 管理。查看所有 OpenStack 容器状态docker ps查看运行中的或docker ps -a查看所有。重启某个服务例如重启 Nova 计算服务docker restart nova_compute。查看服务日志docker logs -f nova_api-f参数可以实时跟踪日志。升级修改globals.yml中的openstack_release然后重新pull和deploy。Kolla 的滚动升级做得不错但 all-in-one 环境风险低可以直接全量更新。备份与恢复最重要的数据是/etc/kolla目录下的配置文件和密码文件以及 Docker 的数据卷。定期备份这个目录。数据库MariaDB的数据存储在 Docker volume 中如kolla_mariadb如果需要迁移可以备份整个 volume。资源监控使用docker stats命令可以实时查看所有容器的 CPU、内存使用情况。OpenStack 本身也提供了 CeilometerTelemetry服务来监控云内资源可以在globals.yml中启用enable_ceilometer: “yes”和enable_gnocchi: “yes”来获得更详细的监控数据。一个我踩过的坑在多次部署销毁后Docker 会积累很多无用的镜像和卷占用大量磁盘空间。定期清理很重要docker system prune -a –volumes警告这个命令会删除所有未被使用的镜像、容器、网络和卷。执行前请确保没有其他重要数据。在生产环境慎用或者只删除特定标签的镜像。通过 Kolla-ansible 部署 OpenStack all-in-one你将获得一个高度标准化、易于维护和复现的云平台实验环境。它把复杂的分布式系统部署简化成了几条命令让你能更专注于 OpenStack 本身的功能学习和开发测试。虽然单节点部署有其性能限制但它作为学习和验证的沙箱其价值和便利性是无可替代的。当你熟悉了这套流程未来扩展到多节点生产环境时你会发现核心的配置和管理逻辑是一脉相承的只是库存文件和网络规划变得更复杂而已。
返回列表