OpenStack单机部署全攻略:从零开始搭建私有云
一、OpenStack单机部署的意义与场景
OpenStack作为开源的IaaS(基础设施即服务)平台,通常用于构建大规模的云计算环境。然而,对于开发者、测试团队或小型企业而言,单机部署OpenStack具有显著价值:验证功能可行性、快速搭建测试环境、学习OpenStack架构。单机部署通过单台物理机或虚拟机模拟多节点环境,实现核心组件(如计算、存储、网络)的集成运行。
二、部署前的环境准备
1. 硬件要求
- 物理机:建议8核CPU、16GB内存、200GB以上磁盘空间(SSD更佳)。
- 虚拟机:若使用VMware/KVM,需分配至少4核CPU、8GB内存、100GB磁盘。
- 操作系统:推荐Ubuntu 20.04 LTS或CentOS 8,需确保系统为最新版本。
2. 网络配置
- 静态IP:为部署节点分配固定IP(如
192.168.1.100),避免DHCP导致IP变动。 - 防火墙规则:开放必要端口(如22/TCP、5672/TCP、9696/TCP等),或直接禁用防火墙(测试环境)。
- 主机名解析:在
/etc/hosts中添加主机名映射(如192.168.1.100 controller)。
3. 软件依赖
安装基础工具和数据库:
# Ubuntu示例sudo apt updatesudo apt install -y python3-dev libffi-dev gcc libssl-dev \mariadb-server rabbitmq-server memcached \etcd-server
三、OpenStack组件选择与架构设计
单机部署需精简组件,推荐以下核心服务:
- Keystone:身份认证服务。
- Glance:镜像管理服务。
- Nova:计算服务(含
nova-compute和nova-conductor)。 - Neutron:网络服务(使用
linuxbridge或openvswitch插件)。 - Cinder:块存储服务(可选,需额外磁盘)。
- Horizon:Web控制台(可选)。
架构图:
[单机节点]├─ Keystone (认证)├─ Glance (镜像)├─ Nova (计算)├─ Neutron (网络)└─ Horizon (可选UI)
四、分步安装与配置
1. 数据库与消息队列配置
MySQL配置
修改/etc/mysql/mariadb.conf.d/50-server.cnf:
[mysqld]bind-address = 0.0.0.0default-storage-engine = innodbinnodb_file_per_table = onmax_connections = 4096collation-server = utf8_general_cicharacter-set-server = utf8
重启服务并创建OpenStack数据库:
sudo systemctl restart mariadbmysql -u root -p <<EOFCREATE DATABASE keystone;CREATE DATABASE glance;CREATE DATABASE nova;CREATE DATABASE neutron;GRANT ALL PRIVILEGES ON *.* TO 'openstack'@'localhost' IDENTIFIED BY 'OPENSTACK_DB_PASS';GRANT ALL PRIVILEGES ON *.* TO 'openstack'@'%' IDENTIFIED BY 'OPENSTACK_DB_PASS';FLUSH PRIVILEGES;EOF
RabbitMQ配置
修改/etc/rabbitmq/rabbitmq.conf:
listeners.tcp.default = 5672loopback_users.guest = false
创建OpenStack用户:
sudo rabbitmqctl add_user openstack RABBITMQ_PASSsudo rabbitmqctl set_user_tags openstack administratorsudo rabbitmqctl set_permissions -p / openstack ".*" ".*" ".*"
2. Keystone安装与配置
安装包并生成配置文件:
sudo apt install -y keystonesudo cp /etc/keystone/keystone.conf{,.bak}sudo sed -i '/\[database\]/a\connection = mysql+pymysql://openstack:OPENSTACK_DB_PASS@controller/keystone' /etc/keystone/keystone.confsudo sed -i '/\[token\]/a\provider = fernet' /etc/keystone/keystone.conf
同步数据库并初始化Fernet密钥:
sudo keystone-manage db_syncsudo keystone-manage fernet_setup --keystone-user keystone --keystone-group keystonesudo 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
3. Glance与Nova安装
Glance配置
安装包并修改配置:
sudo apt install -y glancesudo sed -i '/\[database\]/a\connection = mysql+pymysql://openstack:OPENSTACK_DB_PASS@controller/glance' /etc/glance/glance-api.confsudo sed -i '/\[keystone_authtoken\]/a\www_authenticate_uri = http://controller:5000\nauth_url = http://controller:5000\nmemcached_servers = controller:11211\nauth_type = password\nproject_domain_name = Default\nuser_domain_name = Default\nproject_name = service\nusername = glance\npassword = GLANCE_PASS' /etc/glance/glance-api.confsudo sed -i '/\[paste_deploy\]/a\flavor = keystone' /etc/glance/glance-api.conf
同步数据库并启动服务:
sudo glance-manage db_syncsudo systemctl restart glance-api
Nova配置
安装计算服务:
sudo apt install -y nova-api nova-conductor nova-novncproxy nova-scheduler nova-compute
修改/etc/nova/nova.conf关键配置:
[api_database]connection = mysql+pymysql://openstack:OPENSTACK_DB_PASS@controller/nova_api[database]connection = mysql+pymysql://openstack:OPENSTACK_DB_PASS@controller/nova[keystone_authtoken]# 同Glance配置,替换username为nova[vnc]enabled = truevncserver_listen = 0.0.0.0vncserver_proxyclient_address = $my_ip
同步数据库并启动服务:
sudo nova-manage api_db syncsudo nova-manage cell_v2 map_cell0sudo nova-manage cell_v2 create_cell --name=cell1 --verbosesudo nova-manage db syncsudo systemctl restart nova-api nova-scheduler nova-conductor nova-novncproxy nova-compute
4. Neutron网络配置
安装网络服务:
sudo apt install -y neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent
修改/etc/neutron/neutron.conf:
[database]connection = mysql+pymysql://openstack:OPENSTACK_DB_PASS@controller/neutron[keystone_authtoken]# 同上,替换username为neutron[nova]auth_url = http://controller:5000auth_type = passwordproject_domain_name = Defaultuser_domain_name = Defaultregion_name = RegionOneproject_name = serviceusername = novapassword = NOVA_PASS
配置/etc/neutron/plugins/ml2/linuxbridge_agent.ini:
[linux_bridge]physical_interface_mappings = provider:eth0 # 替换为实际网卡[vxlan]enable_vxlan = truelocal_ip = 192.168.1.100 # 管理网络IPl2_population = true
同步数据库并启动服务:
sudo neutron-db-manage --config-file /etc/neutron/neutron.conf \--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade headsudo systemctl restart neutron-server neutron-linuxbridge-agent \neutron-dhcp-agent neutron-metadata-agent
五、验证部署结果
- 服务状态检查:
sudo openstack-service status | grep -E "nova|neutron|glance|keystone"
- 创建网络与实例:
```bash创建网络
openstack network create —share —external provider
openstack subnet create —network provider —subnet-range 192.168.1.0/24 provider-subnet
上传镜像
openstack image create —file cirros-0.4.0-x86_64-disk.img —disk-format qcow2 cirros
启动实例
openstack server create —flavor m1.tiny —image cirros —network provider test-vm
```
- 访问控制台:通过Horizon(
http://controller/dashboard)或VNC查看实例状态。
六、常见问题与优化建议
- 端口冲突:确保
5000/TCP(Keystone)、9292/TCP(Glance)等端口未被占用。 - 时间同步:部署NTP服务(
chrony或ntpd)避免时间漂移。 - 日志分析:通过
journalctl -u nova-compute或/var/log/neutron/server.log排查错误。 - 性能优化:单机环境下可调整
nova.conf中的reserved_host_memory_mb参数,避免内存过载。
七、总结与扩展
单机部署OpenStack是学习与实践云计算的便捷途径,但需注意其局限性(如高可用缺失)。后续可扩展至多节点部署,或集成Ceph提供分布式存储。建议参考OpenStack官方文档获取最新指南。