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. 软件依赖

安装基础工具和数据库:

  1. # Ubuntu示例
  2. sudo apt update
  3. sudo apt install -y python3-dev libffi-dev gcc libssl-dev \
  4. mariadb-server rabbitmq-server memcached \
  5. etcd-server

三、OpenStack组件选择与架构设计

单机部署需精简组件,推荐以下核心服务:

  • Keystone:身份认证服务。
  • Glance:镜像管理服务。
  • Nova:计算服务(含nova-computenova-conductor)。
  • Neutron:网络服务(使用linuxbridgeopenvswitch插件)。
  • Cinder:块存储服务(可选,需额外磁盘)。
  • Horizon:Web控制台(可选)。

架构图

  1. [单机节点]
  2. ├─ Keystone (认证)
  3. ├─ Glance (镜像)
  4. ├─ Nova (计算)
  5. ├─ Neutron (网络)
  6. └─ Horizon (可选UI)

四、分步安装与配置

1. 数据库与消息队列配置

MySQL配置

修改/etc/mysql/mariadb.conf.d/50-server.cnf

  1. [mysqld]
  2. bind-address = 0.0.0.0
  3. default-storage-engine = innodb
  4. innodb_file_per_table = on
  5. max_connections = 4096
  6. collation-server = utf8_general_ci
  7. character-set-server = utf8

重启服务并创建OpenStack数据库:

  1. sudo systemctl restart mariadb
  2. mysql -u root -p <<EOF
  3. CREATE DATABASE keystone;
  4. CREATE DATABASE glance;
  5. CREATE DATABASE nova;
  6. CREATE DATABASE neutron;
  7. GRANT ALL PRIVILEGES ON *.* TO 'openstack'@'localhost' IDENTIFIED BY 'OPENSTACK_DB_PASS';
  8. GRANT ALL PRIVILEGES ON *.* TO 'openstack'@'%' IDENTIFIED BY 'OPENSTACK_DB_PASS';
  9. FLUSH PRIVILEGES;
  10. EOF

RabbitMQ配置

修改/etc/rabbitmq/rabbitmq.conf

  1. listeners.tcp.default = 5672
  2. loopback_users.guest = false

创建OpenStack用户:

  1. sudo rabbitmqctl add_user openstack RABBITMQ_PASS
  2. sudo rabbitmqctl set_user_tags openstack administrator
  3. sudo rabbitmqctl set_permissions -p / openstack ".*" ".*" ".*"

2. Keystone安装与配置

安装包并生成配置文件:

  1. sudo apt install -y keystone
  2. sudo cp /etc/keystone/keystone.conf{,.bak}
  3. sudo sed -i '/\[database\]/a\connection = mysql+pymysql://openstack:OPENSTACK_DB_PASS@controller/keystone' /etc/keystone/keystone.conf
  4. sudo sed -i '/\[token\]/a\provider = fernet' /etc/keystone/keystone.conf

同步数据库并初始化Fernet密钥:

  1. sudo keystone-manage db_sync
  2. sudo keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
  3. sudo keystone-manage credential_setup --keystone-user keystone --keystone-group keystone

启动服务并创建域、项目和用户:

  1. sudo keystone-manage bootstrap --bootstrap-password ADMIN_PASS \
  2. --bootstrap-admin-url http://controller:5000/v3/ \
  3. --bootstrap-internal-url http://controller:5000/v3/ \
  4. --bootstrap-public-url http://controller:5000/v3/ \
  5. --bootstrap-region-id RegionOne

3. Glance与Nova安装

Glance配置

安装包并修改配置:

  1. sudo apt install -y glance
  2. sudo sed -i '/\[database\]/a\connection = mysql+pymysql://openstack:OPENSTACK_DB_PASS@controller/glance' /etc/glance/glance-api.conf
  3. sudo 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.conf
  4. sudo sed -i '/\[paste_deploy\]/a\flavor = keystone' /etc/glance/glance-api.conf

同步数据库并启动服务:

  1. sudo glance-manage db_sync
  2. sudo systemctl restart glance-api

Nova配置

安装计算服务:

  1. sudo apt install -y nova-api nova-conductor nova-novncproxy nova-scheduler nova-compute

修改/etc/nova/nova.conf关键配置:

  1. [api_database]
  2. connection = mysql+pymysql://openstack:OPENSTACK_DB_PASS@controller/nova_api
  3. [database]
  4. connection = mysql+pymysql://openstack:OPENSTACK_DB_PASS@controller/nova
  5. [keystone_authtoken]
  6. # 同Glance配置,替换username为nova
  7. [vnc]
  8. enabled = true
  9. vncserver_listen = 0.0.0.0
  10. vncserver_proxyclient_address = $my_ip

同步数据库并启动服务:

  1. sudo nova-manage api_db sync
  2. sudo nova-manage cell_v2 map_cell0
  3. sudo nova-manage cell_v2 create_cell --name=cell1 --verbose
  4. sudo nova-manage db sync
  5. sudo systemctl restart nova-api nova-scheduler nova-conductor nova-novncproxy nova-compute

4. Neutron网络配置

安装网络服务:

  1. sudo apt install -y neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent

修改/etc/neutron/neutron.conf

  1. [database]
  2. connection = mysql+pymysql://openstack:OPENSTACK_DB_PASS@controller/neutron
  3. [keystone_authtoken]
  4. # 同上,替换username为neutron
  5. [nova]
  6. auth_url = http://controller:5000
  7. auth_type = password
  8. project_domain_name = Default
  9. user_domain_name = Default
  10. region_name = RegionOne
  11. project_name = service
  12. username = nova
  13. password = NOVA_PASS

配置/etc/neutron/plugins/ml2/linuxbridge_agent.ini

  1. [linux_bridge]
  2. physical_interface_mappings = provider:eth0 # 替换为实际网卡
  3. [vxlan]
  4. enable_vxlan = true
  5. local_ip = 192.168.1.100 # 管理网络IP
  6. l2_population = true

同步数据库并启动服务:

  1. sudo neutron-db-manage --config-file /etc/neutron/neutron.conf \
  2. --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head
  3. sudo systemctl restart neutron-server neutron-linuxbridge-agent \
  4. neutron-dhcp-agent neutron-metadata-agent

五、验证部署结果

  1. 服务状态检查
    1. sudo openstack-service status | grep -E "nova|neutron|glance|keystone"
  2. 创建网络与实例
    ```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
```

  1. 访问控制台:通过Horizon(http://controller/dashboard)或VNC查看实例状态。

六、常见问题与优化建议

  1. 端口冲突:确保5000/TCP(Keystone)、9292/TCP(Glance)等端口未被占用。
  2. 时间同步:部署NTP服务(chronyntpd)避免时间漂移。
  3. 日志分析:通过journalctl -u nova-compute/var/log/neutron/server.log排查错误。
  4. 性能优化:单机环境下可调整nova.conf中的reserved_host_memory_mb参数,避免内存过载。

七、总结与扩展

单机部署OpenStack是学习与实践云计算的便捷途径,但需注意其局限性(如高可用缺失)。后续可扩展至多节点部署,或集成Ceph提供分布式存储。建议参考OpenStack官方文档获取最新指南。