拓冰建站拓冰建站
首页 / 资讯中心 / 正文

OpenStack基础配置文件详解:从零搭建私有云环境

在云计算平台部署过程中OpenStack以其开源、灵活和模块化的特性成为构建私有云和混合云的主流选择。然而其复杂的组件依赖和繁琐的初始配置常常让初学者和运维人员在“从零搭建”这一步就望而却步尤其是在基础环境与核心配置文件准备阶段。本文将系统性地拆解OpenStack基础文件配置的全过程从环境规划、网络设计到每一个核心配置文件的编写与解释提供一套可复现的实操方案。无论你是希望搭建实验环境学习OpenStack架构还是为生产环境做技术预研都能从本文中找到清晰的步骤和避坑指南。1. 环境规划与核心概念在动手修改任何配置文件之前清晰的环境规划是成功搭建OpenStack的基石。本节将明确搭建所需的基础设施和OpenStack的核心服务架构。1.1 实验环境规划一个最小化的OpenStack环境通常称为All-in-One或单节点部署也需要对硬件和软件资源有基本要求。对于学习目的我们规划如下控制节点 同时也是计算和网络节点。建议使用一台物理服务器或配置较高的虚拟机。CPU: 至少4核支持虚拟化技术如Intel VT-x或AMD-V。内存: 至少8GB推荐16GB。硬盘: 至少100GB可用空间系统盘建议使用SSD。网络: 至少两个网络接口NIC。一个用于管理/API网络如eth0另一个用于提供者网络外部/数据网络如eth1。如果只有一张网卡可以通过VLAN进行逻辑隔离。操作系统: Ubuntu 20.04 LTS 或 CentOS 8/Rocky Linux 8。本文以Ubuntu 20.04为例。部署工具: 我们将使用OpenStack社区官方维护的自动化部署工具OpenStack-Ansible (OSA)的简化手动步骤进行讲解这有助于理解底层配置。生产环境则强烈推荐使用OSA、Kolla-Ansible或Charmed OpenStack等自动化工具。1.2 OpenStack 核心服务与配置文件概览OpenStack由多个独立协作的服务项目组成。每个服务通常有自己的配置文件.conf文件主要存放在/etc/service_name/目录下。基础搭建主要涉及以下几个核心服务及其关键配置文件Keystone (身份认证) 服务的入口管理用户、角色和权限。主配置:/etc/keystone/keystone.confGlance (镜像服务) 存储和管理虚拟机镜像。主配置:/etc/glance/glance-api.conf,/etc/glance/glance-registry.confNova (计算服务) 管理虚拟机实例的生命周期。主配置:/etc/nova/nova.confNeutron (网络服务) 提供网络连接即服务。主配置:/etc/neutron/neutron.conf以及插件配置如/etc/neutron/plugins/ml2/ml2_conf.iniCinder (块存储服务) 为虚拟机提供持久化块存储。主配置:/etc/cinder/cinder.confHorizon (仪表板) 基于Web的管理界面。主配置:/etc/openstack-dashboard/local_settings.py此外所有服务都需要连接到一个共享的消息队列如RabbitMQ和数据库如MariaDB。它们的配置也至关重要。2. 基础系统环境准备在配置OpenStack服务之前必须准备好一个纯净、网络通畅且软件源可用的操作系统环境。2.1 系统更新与主机名配置首先登录到规划好的控制节点进行系统更新并设置永久主机名。# 更新系统软件包列表并升级现有软件 sudo apt update sudo apt upgrade -y # 设置主机名例如设置为 ‘controller’ sudo hostnamectl set-hostname controller # 为了使主机名在Shell中立即生效可以编辑 /etc/hosts 文件 # 将127.0.1.1对应的旧主机名改为新的 ‘controller’ sudo vi /etc/hosts在/etc/hosts文件中确保有一行类似如下假设管理IP为192.168.100.10192.168.100.10 controller2.2 网络接口配置这是最关键也是最容易出错的步骤。我们需要配置两个网络接口。eth0(管理网络): 用于OpenStack各服务内部通信、API端点和管理流量。通常配置一个静态IP。eth1(提供者网络): 用于连接虚拟机实例到外部网络如互联网。在All-in-One部署中可以配置为桥接模式或使用物理接口。编辑Ubuntu的网络配置文件Netplan配置sudo vi /etc/netplan/01-netcfg.yaml以下是一个配置示例请根据你的实际网卡名称和IP地址进行修改network: version: 2 renderer: networkd ethernets: eth0: # 管理网络接口 addresses: - 192.168.100.10/24 gateway4: 192.168.100.1 # 你的网关地址 nameservers: addresses: [8.8.8.8, 114.114.114.114] eth1: # 提供者网络接口此处不配置IP后续由Neutron接管 dhcp4: no optional: true bridges: br-ex: # 创建一个名为br-ex的外部网桥用于Neutron interfaces: [eth1] # 将eth1加入此网桥 addresses: [] dhcp4: no optional: true应用网络配置sudo netplan apply2.3 安装基础依赖与NTP服务分布式系统要求各节点时间高度同步NTP服务必不可少。# 安装NTP服务 sudo apt install chrony -y # 编辑NTP配置可以添加可靠的NTP服务器 sudo vi /etc/chrony/chrony.conf # 在server字段后添加例如 # server ntp.aliyun.com iburst # server ntp1.tencent.com iburst # 重启并启用服务 sudo systemctl restart chrony sudo systemctl enable chrony # 验证时间同步状态 chronyc sources3. 数据库与消息队列安装配置OpenStack所有服务都需要数据库来存储状态信息并通过消息队列进行异步通信。3.1 安装与配置MariaDB# 安装MariaDB服务器 sudo apt install mariadb-server python3-pymysql -y创建并编辑MariaDB的OpenStack专用配置文件sudo vi /etc/mysql/mariadb.conf.d/99-openstack.cnf添加以下内容主要目的是调整一些默认配置以适应OpenStack的需求[mysqld] bind-address 192.168.100.10 # 绑定到管理网络IP允许其他服务连接 default-storage-engine innodb innodb_file_per_table on max_connections 4096 collation-server utf8_general_ci character-set-server utf8重启数据库服务并运行安全安装脚本sudo systemctl restart mariadb sudo systemctl enable mariadb sudo mysql_secure_installation # 根据提示设置root密码并移除测试数据库和匿名用户等。3.2 安装与配置RabbitMQ# 安装RabbitMQ服务器 sudo apt install rabbitmq-server -y # 启动并启用服务 sudo systemctl start rabbitmq-server sudo systemctl enable rabbitmq-server # 添加一个OpenStack专用的消息队列用户例如用户名为‘openstack’密码为‘RABBIT_PASS’ sudo rabbitmqctl add_user openstack RABBIT_PASS # 为该用户配置读写所有虚拟主机的权限 sudo rabbitmqctl set_permissions openstack .* .* .*注意请将RABBIT_PASS替换为一个强密码并在后续所有服务的配置文件中使用此密码。4. 身份认证服务 (Keystone) 配置Keystone是第一个需要配置的服务因为它为其他所有服务提供认证令牌。4.1 创建Keystone数据库首先使用MariaDB root用户为Keystone创建数据库和用户。sudo mysql -u root -p在MariaDB Shell中执行以下SQL命令CREATE DATABASE keystone; GRANT ALL PRIVILEGES ON keystone.* TO keystonelocalhost IDENTIFIED BY KEYSTONE_DBPASS; GRANT ALL PRIVILEGES ON keystone.* TO keystone% IDENTIFIED BY KEYSTONE_DBPASS; FLUSH PRIVILEGES; EXIT;注意请将KEYSTONE_DBPASS替换为实际的强密码。4.2 安装与配置Keystone服务# 安装Keystone组件 sudo apt install keystone apache2 libapache2-mod-wsgi-py3 -y编辑Keystone主配置文件sudo vi /etc/keystone/keystone.conf在[DEFAULT]部分找到并修改以下行使用CtrlF搜索。注意以#或;开头的行是注释需要取消注释并修改值[DEFAULT] ... [database] # 配置数据库连接 connection mysqlpymysql://keystone:KEYSTONE_DBPASScontroller/keystone # 请将 KEYSTONE_DBPASS 替换为上面设置的密码 [token] # 指定令牌提供者使用Fernet UUID令牌 provider fernet初始化Keystone数据库sudo su -s /bin/sh -c keystone-manage db_sync keystone初始化Fernet密钥库sudo keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone sudo keystone-manage credential_setup --keystone-user keystone --keystone-group keystone引导身份服务此步骤创建默认域、服务项目、管理员用户/角色等sudo keystone-manage bootstrap --bootstrap-password ADMIN_PASS \ --bootstrap-admin-url http://controller:5000/v3/ \ --bootstrap-internal-url http://controller:5000/v3/ \ --bootstrap-public-url http://controller:5000/v3/ \ --bootstrap-region-id RegionOne注意请将ADMIN_PASS替换为一个强密码这是后续管理操作的admin用户密码。4.3 配置Apache HTTP ServerKeystone服务通过Apache的WSGI模块来提供API服务。# 编辑Apache的Keystone虚拟主机配置文件 sudo vi /etc/apache2/sites-available/keystone.conf将以下内容写入文件如果文件非空请先备份原文件Listen 5000 Listen 35357 VirtualHost *:5000 WSGIDaemonProcess keystone-public processes5 threads1 userkeystone groupkeystone display-name%{GROUP} WSGIProcessGroup keystone-public WSGIScriptAlias / /usr/bin/keystone-wsgi-public WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On IfVersion 2.4 ErrorLogFormat %{cu}t %M /IfVersion ErrorLog /var/log/apache2/keystone.log CustomLog /var/log/apache2/keystone_access.log combined /VirtualHost VirtualHost *:35357 WSGIDaemonProcess keystone-admin processes5 threads1 userkeystone groupkeystone display-name%{GROUP} WSGIProcessGroup keystone-admin WSGIScriptAlias / /usr/bin/keystone-wsgi-admin WSGIApplicationGroup %{GLOBAL} WSGIPassAuthorization On IfVersion 2.4 ErrorLogFormat %{cu}t %M /IfVersion ErrorLog /var/log/apache2/keystone.log CustomLog /var/log/apache2/keystone_access.log combined /VirtualHost启用配置并重启Apachesudo a2ensite keystone sudo systemctl restart apache24.4 创建环境变量脚本为了避免每次操作都输入冗长的参数我们创建一个管理员权限的环境变量脚本。vi ~/admin-openrc添加以下内容替换其中的密码为你之前设置的ADMIN_PASSexport OS_USERNAMEadmin export OS_PASSWORDADMIN_PASS export OS_PROJECT_NAMEadmin export OS_USER_DOMAIN_NAMEDefault export OS_PROJECT_DOMAIN_NAMEDefault export OS_AUTH_URLhttp://controller:5000/v3 export OS_IDENTITY_API_VERSION3使用该脚本加载环境变量source ~/admin-openrc现在你可以使用OpenStack客户端命令了。首先安装客户端sudo apt install python3-openstackclient -y验证Keystone是否正常工作openstack token issue如果配置正确该命令会返回一个有效的管理员令牌信息而不是报错。5. 镜像服务 (Glance) 配置在Keystone之后我们配置Glance来管理镜像。5.1 创建Glance数据库与服务凭证首先在Keystone中创建Glance的用户、服务和API端点。# 加载管理员环境变量 source ~/admin-openrc # 创建glance用户 openstack user create --domain default --password GLANCE_PASS glance # 创建glance服务实体 openstack service create --name glance --description OpenStack Image image # 创建镜像服务的API端点public, internal, admin openstack endpoint create --region RegionOne image public http://controller:9292 openstack endpoint create --region RegionOne image internal http://controller:9292 openstack endpoint create --region RegionOne image admin http://controller:9292 # 将admin角色赋予glance用户和service项目 openstack role add --project service --user glance admin然后创建数据库sudo mysql -u root -pCREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance.* TO glancelocalhost IDENTIFIED BY GLANCE_DBPASS; GRANT ALL PRIVILEGES ON glance.* TO glance% IDENTIFIED BY GLANCE_DBPASS; FLUSH PRIVILEGES; EXIT;5.2 安装与配置Glance服务sudo apt install glance -y编辑Glance API配置文件sudo vi /etc/glance/glance-api.conf在[database]部分配置数据库连接在[keystone_authtoken]和[paste_deploy]部分配置认证信息在[glance_store]部分配置镜像存储后端这里使用本地文件系统生产环境建议使用Swift或Ceph。[database] connection mysqlpymysql://glance:GLANCE_DBPASScontroller/glance [keystone_authtoken] www_authenticate_uri http://controller:5000 auth_url http://controller:5000 memcached_servers controller:11211 auth_type password project_domain_name Default user_domain_name Default project_name service username glance password GLANCE_PASS [paste_deploy] flavor keystone [glance_store] stores file,http default_store file filesystem_store_datadir /var/lib/glance/images/初始化数据库sudo su -s /bin/sh -c glance-manage db_sync glance重启服务sudo systemctl restart glance-api sudo systemctl enable glance-api5.3 验证Glance服务下载一个测试镜像例如CirrOS一个小型Linux镜像并上传到Glance。source ~/admin-openrc 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 image list你应该能看到名为“cirros”的镜像状态为“active”。6. 计算服务 (Nova) 配置Nova是OpenStack最核心的服务之一负责虚拟机的调度和管理。6.1 创建Nova数据库与服务凭证source ~/admin-openrc # 创建nova用户 openstack user create --domain default --password NOVA_PASS nova openstack user create --domain default --password PLACEMENT_PASS placement # 创建nova和placement服务实体 openstack service create --name nova --description OpenStack Compute compute openstack service create --name placement --description Placement API placement # 创建API端点 openstack endpoint create --region RegionOne compute public http://controller:8774/v2.1 openstack endpoint create --region RegionOne compute internal http://controller:8774/v2.1 openstack endpoint create --region RegionOne compute admin http://controller:8774/v2.1 openstack endpoint create --region RegionOne placement public http://controller:8778 openstack endpoint create --region RegionOne placement internal http://controller:8778 openstack endpoint create --region RegionOne placement admin http://controller:8778 # 赋予角色 openstack role add --project service --user nova admin openstack role add --project service --user placement admin创建数据库sudo mysql -u root -pCREATE DATABASE nova_api; CREATE DATABASE nova; CREATE DATABASE nova_cell0; CREATE DATABASE placement; GRANT ALL PRIVILEGES ON nova_api.* TO novalocalhost IDENTIFIED BY NOVA_DBPASS; GRANT ALL PRIVILEGES ON nova_api.* TO nova% IDENTIFIED BY NOVA_DBPASS; GRANT ALL PRIVILEGES ON nova.* TO novalocalhost IDENTIFIED BY NOVA_DBPASS; GRANT ALL PRIVILEGES ON nova.* TO nova% IDENTIFIED BY NOVA_DBPASS; GRANT ALL PRURIVILEGES ON nova_cell0.* TO novalocalhost IDENTIFIED BY NOVA_DBPASS; GRANT ALL PRIVILEGES ON nova_cell0.* TO nova% IDENTIFIED BY NOVA_DBPASS; GRANT ALL PRIVILEGES ON placement.* TO placementlocalhost IDENTIFIED BY PLACEMENT_DBPASS; GRANT ALL PRIVILEGES ON placement.* TO placement% IDENTIFIED BY PLACEMENT_DBPASS; FLUSH PRIVILEGES; EXIT;6.2 安装与配置Nova服务安装Nova相关组件sudo apt install nova-api nova-conductor nova-novncproxy nova-scheduler nova-placement-api -y编辑Nova主配置文件/etc/nova/nova.conf。这是一个很长的文件建议使用crudini工具来修改或者仔细编辑。以下是关键部分[DEFAULT] enabled_apis osapi_compute,metadata transport_url rabbit://openstack:RABBIT_PASScontroller:5672/ my_ip 192.168.100.10 # 管理网络IP use_neutron True firewall_driver nova.virt.firewall.NoopFirewallDriver [api] auth_strategy keystone [api_database] connection mysqlpymysql://nova:NOVA_DBPASScontroller/nova_api [database] connection mysqlpymysql://nova:NOVA_DBPASScontroller/nova [keystone_authtoken] www_authenticate_uri http://controller:5000/ auth_url http://controller:5000/ memcached_servers controller:11211 auth_type password project_domain_name Default user_domain_name Default project_name service username nova password NOVA_PASS [placement] region_name RegionOne project_domain_name Default project_name service auth_type password user_domain_name Default auth_url http://controller:5000/v3 username placement password PLACEMENT_PASS [vnc] enabled true server_listen $my_ip server_proxyclient_address $my_ip [glance] api_servers http://controller:9292 [oslo_concurrency] lock_path /var/lib/nova/tmp初始化数据库sudo su -s /bin/sh -c nova-manage api_db sync nova sudo su -s /bin/sh -c nova-manage cell_v2 map_cell0 nova sudo su -s /bin/sh -c nova-manage cell_v2 create_cell --namecell1 --verbose nova sudo su -s /bin/sh -c nova-manage db sync nova重启Nova服务sudo systemctl restart nova-api nova-conductor nova-novncproxy nova-scheduler sudo systemctl enable nova-api nova-conductor nova-novncproxy nova-scheduler7. 常见问题与排查思路在配置过程中遇到问题非常普遍。以下是一些典型问题及其排查思路。问题现象可能原因排查思路与解决方案服务启动失败1. 配置文件语法错误。2. 数据库连接失败。3. 依赖服务如RabbitMQ、Keystone未启动或不可达。4. 权限问题如日志目录不可写。1. 使用sudo journalctl -u service_name查看服务日志错误信息通常很明确。2. 检查配置文件路径和权限确保使用的是/etc/service/下的正确文件。3. 使用mysql -uuser -p -h host手动测试数据库连接。4. 使用systemctl status rabbitmq-server等命令检查依赖服务状态。OpenStack客户端命令报错Unable to establish connection1. Keystone服务未运行或Apache配置错误。2. 环境变量OS_AUTH_URL设置错误。3. 防火墙阻止了5000或35357端口。1. 检查sudo systemctl status apache2和sudo tail -f /var/log/apache2/keystone.log。2. 确认source ~/admin-openrc已执行并用echo $OS_AUTH_URL检查变量。3. 使用curl -v http://controller:5000/v3测试Keystone API是否可访问。镜像上传失败或状态为queued1. Glance存储目录权限不正确。2. Glance API服务未正确连接到Keystone或数据库。1. 检查/var/lib/glance/images/目录的所有者是否为glance。2. 查看Glance API日志sudo journalctl -u glance-api。创建虚拟机时找不到可用主机1. 计算节点本例即控制节点的Nova-Compute服务未安装或未启动。2. 计算节点未向控制节点注册。3. 资源不足CPU、内存、磁盘。1. 在控制节点上安装并启动nova-computesudo apt install nova-compute; sudo systemctl start nova-compute。2. 在控制节点执行openstack compute service list查看nova-compute服务状态是否为up。3. 检查计算节点的虚拟化支持egrep -c ‘(vmx8. 最佳实践与工程建议完成基础配置只是第一步要构建一个稳定、可维护的OpenStack环境还需要遵循以下最佳实践密码与敏感信息管理切勿在文档或脚本中硬编码明文密码。上述示例中的*_PASS均应替换为复杂密码并妥善保管。在生产环境中考虑使用安全的秘密信息管理工具如HashiCorp Vault、Ansible Vault或云平台的密钥管理服务来动态注入密码。配置文件版本控制将所有服务的配置文件/etc/keystone/,/etc/nova/等纳入版本控制系统如Git。在修改前进行备份任何变更都应通过代码评审和自动化测试流程。日志集中与分析OpenStack各组件日志默认分散在/var/log/service/或journalctl中。生产环境应配置集中式日志系统如ELK StackElasticsearch, Logstash, Kibana便于全局监控、搜索和告警。高可用部署单节点部署存在单点故障。生产环境必须为关键服务数据库、消息队列、API端点和核心组件Nova, Neutron等部署多节点集群并结合负载均衡器如HAProxy实现高可用。网络设计分离管理网络、租户网络、外部网络、存储网络应进行物理或VLAN隔离以提高安全性和性能。本文的All-in-One部署将所有流量混在少数网卡上仅适用于测试。使用自动化部署工具手动配置极易出错且难以复制。对于任何正式环境强烈建议使用OpenStack-Ansible (OSA)、Kolla-Ansible或Charmed OpenStack。这些工具提供了经过验证的、可重复的、支持升级的部署方案。备份策略定期备份1)数据库MariaDB2)配置文件3)镜像文件如果存储在本地4)虚拟机实例数据如果使用本地存储。制定并测试恢复流程。监控与告警部署监控系统如Prometheus Grafana监控主机资源CPU、内存、磁盘、网络、OpenStack服务状态、API响应时间、消息队列深度等关键指标并设置合理的告警阈值。通过以上步骤你已经完成了OpenStack最核心服务的基础文件配置并拥有了一个可以启动虚拟机的单节点环境。后续你还需要配置Neutron网络服务来实现虚拟机的网络连接配置Cinder块存储来提供卷服务以及安装Horizon仪表板来获得图形化管理界面。每一步的配置逻辑都与本文类似规划 - 创建数据库/服务凭证 - 安装软件 - 编辑配置文件 - 初始化数据库 - 启动服务 - 验证。掌握这个模式就能系统地理解和搭建起整个OpenStack云平台。建议在实验环境中反复练习此流程并尝试阅读官方安装指南以获取更深入的版本特定信息。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门