前置知识
OpenStack 架构简介
OpenStack 是一个开源的云计算管理平台,由多个核心服务组件构成,每个组件负责特定功能:
| 组件 |
功能说明 |
| Keystone |
身份认证与授权服务,所有组件的访问入口 |
| Glance |
镜像服务,管理虚拟机镜像 |
| Placement |
资源分配追踪,管理资源池 |
| Nova |
计算服务,调度和管理虚拟机实例 |
| Neutron |
网络服务,提供虚拟网络功能 |
| Horizon |
Web 管理界面,提供图形化操作 |
各组件之间通过消息队列(RabbitMQ)、数据库(MariaDB)和缓存(Memcached)进行通信协作。
参考资料
第一章:环境准备
1.1 基础环境配置
设置 root 密码并禁用防火墙:
1
2
|
sudo passwd root
sudo ufw disable
|
1.2 软件源配置
将系统软件源更换为腾讯云镜像,加速后续安装:
1
|
sudo vi /etc/apt/sources.list
|
1
2
3
4
5
6
7
|
# 替换为以下内容
deb http://mirrors.tencentyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.tencentyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.tencentyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.tencentyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.tencentyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.tencentyun.com/ubuntu/ focal-updates main restricted universe multiverse
|
更新软件包列表并升级:
1
2
|
sudo apt update
sudo apt upgrade
|
1.3 网络配置
开启 IP 转发
编辑 sysctl 配置文件:
1
|
sudo vi /etc/sysctl.conf
|
取消注释或添加以下内容(开启路由转发功能):
1
|
net.ipv4.ip_forward = 1
|
使配置生效:
配置静态 IP
1
|
sudo vi /etc/network/interfaces
|
1
2
3
4
5
6
7
8
9
10
11
|
auto lo
iface lo inet loopback
# 主网络接口
auto eth0
iface eth0 inet static
address 10.0.24.13
network 10.0.24.0
netmask 255.255.255.0
broadcast 10.0.24.255
gateway 10.0.24.1
|
配置完成后,验证网络连通性:
1.4 主机名与 hosts 文件配置
注意:使用内网 IP 进行主机名映射
修改主机名
将主机名设置为 controller,表明该节点作为控制节点:
内容修改为:
配置 hosts 文件
- 注释掉
127.0.1.1 那一行
- 在
127.0.0.1 localhost 后添加 controller
- 新增一行:
10.0.24.13 controller
配置完成后重启系统:
1.5 时间同步服务
OpenStack 集群内各节点的时间必须保持一致,否则会导致认证失败等问题。
安装并配置 Chrony
1
2
|
sudo apt install chrony
sudo vi /etc/chrony/chrony.conf
|
修改配置文件,注释掉原有的 pool 配置,添加以下内容:
1
2
3
4
5
6
|
# 时间服务器配置
server controller iburst
allow 0.0.0.0/0
# 允许本机作为时间源供其他节点使用
local stratum 10
|
重启服务使配置生效:
1
|
sudo service chrony restart
|
验证配置
1
2
3
4
5
6
7
|
# 方式一:查看时间源状态
chronyc sources
# 若显示 ^*,表示已同步成功;显示 ? 表示连接异常
# 方式二:查看时间同步状态
timedatectl
# System clock synchronized 应显示 yes
|
设置系统时区
1
2
3
|
sudo dpkg-reconfigure tzdata # 选择亚洲 / 上海
sudo apt-get install ntpdate
sudo ntpdate cn.pool.ntp.org
|
1.6 OpenStack 依赖服务安装
添加 OpenStack 仓库
1
2
|
sudo add-apt-repository cloud-archive:yoga
sudo apt install python3-openstackclient python3-pip
|
1.6.1 数据库服务(MariaDB)
OpenStack 各服务使用数据库存储配置和运行时数据。
1
2
|
sudo apt install python3-pymysql
sudo apt install mariadb-server
|
创建数据库配置文件:
1
|
sudo vi /etc/mysql/mariadb.conf.d/99-openstack.cnf
|
1
2
3
4
5
6
7
|
[mysqld]
bind-address = 10.0.24.13
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
|
启动并安全配置数据库:
1
2
|
sudo service mysql restart
sudo mysql_secure_installation
|
1.6.2 消息队列服务(RabbitMQ)
OpenStack 组件之间通过消息队列进行异步通信。
1
|
sudo apt install rabbitmq-server
|
创建 OpenStack 用户并授权:
1
2
3
4
5
|
# 创建用户:用户名为 openstack,密码为 admin
sudo rabbitmqctl add_user openstack admin
# 授予全部权限
sudo rabbitmqctl set_permissions openstack ".*" ".*" ".*"
|
RabbitMQ 配置文件目录:/usr/lib/rabbitmq/lib/rabbitmq_server-3.8.2/sbin
1.6.3 缓存服务(Memcached)
用于缓存令牌和会话数据,提升认证性能。
1
|
sudo apt install memcached python3-memcache -y
|
修改配置文件,将监听地址改为 controller 的 IP:
1
2
3
4
|
sudo vi /etc/memcached.conf
# 将 127.0.0.1 替换为 controller 对应的 IP 地址
sudo service memcached restart
|
1.6.4 分布式存储服务(etcd)
用于存储 OpenStack 服务的配置信息和发现服务。
1
2
|
sudo apt install etcd -y
sudo vi /etc/default/etcd
|
1
2
3
4
5
6
7
8
9
|
ETCD_NAME="controller"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"
ETCD_INITIAL_CLUSTER="controller=http://10.0.24.13:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.24.13:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.24.13:2379"
ETCD_LISTEN_PEER_URLS="http://0.0.0.0:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.24.13:2379"
|
启用并启动服务:
1
2
|
systemctl enable etcd
systemctl restart etcd
|
第二章:OpenStack 核心组件安装
2.1 Keystone(身份认证服务)
Keystone 是 OpenStack 的核心组件,负责用户认证、授权和服务发现。
创建数据库和用户
1
2
3
|
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'admin';
|
注意:IDENTIFIED BY 'admin' 用于设置 MySQL 中 keystone 用户的密码为 admin
安装并配置 Keystone
1
|
sudo apt install keystone
|
安装 crudini 工具,便于修改配置文件:
1
2
3
|
sudo apt install git
sudo git clone https://github.com/pixelb/crudini
cd crudini && sudo python3 setup.py install
|
配置 Keystone:
1
2
3
4
5
|
# 使用 crudini 设置数据库连接
crudini --set /etc/keystone/keystone.conf database connection "mysql+pymysql://keystone:admin@controller/keystone"
# 设置令牌提供者为 fernet(轻量级令牌加密)
crudini --set /etc/keystone/keystone.conf token provider fernet
|
初始化数据库
1
|
su -s /bin/sh -c "keystone-manage db_sync" keystone
|
初始化密钥仓库
1
2
|
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
|
创建管理员用户
1
2
3
4
5
|
keystone-manage bootstrap --bootstrap-password admin \
--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
|
配置 Apache HTTP Server
Keystone 通过 Apache 提供 Web 服务:
1
2
3
4
5
|
sudo vi /etc/apache2/apache2.conf
# 添加以下内容
ServerName controller
sudo service apache2 restart
|
创建环境变量文件
为方便后续操作,创建包含认证信息的环境变量文件:
1
2
3
4
5
6
7
|
export OS_USERNAME=admin
export OS_PASSWORD=admin
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_DOMAIN_NAME=Default
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
|
加载环境变量:
1
|
source adminrc_keystone
|
创建项目和服务
1
2
3
4
5
6
7
8
9
10
11
12
|
# 创建服务项目(用于运行系统级服务)
openstack project create --domain default --description "Service Project" service
# 创建演示项目(用于普通用户测试)
openstack project create --domain default --description "Demo Project" demo
# 创建演示用户
openstack user create --domain default --password demo demo
# 创建角色并分配
openstack role create role_demo
openstack role add --project demo --user demo role_demo
|
验证 Keystone
1
2
|
openstack token issue
# 若返回令牌信息,表示配置成功
|
2.2 Glance(镜像服务)
Glance 负责管理虚拟机镜像,支持多种镜像格式(qcow2、raw、vhd 等)。
创建数据库和用户
1
2
3
|
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'admin';
|
创建 OpenStack 用户和服务
1
2
3
4
5
6
7
8
|
openstack user create --domain default --password admin glance
openstack role add --project service --user glance admin
openstack service create --name glance --description "OpenStack Image" image
# 创建 API 端点(三个端点对应不同网络区域)
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
|
安装并配置 Glance
1
2
|
apt install glance -y
sudo vi /etc/glance/glance-api.conf
|
主要配置项说明:
| 配置区块 |
参数 |
说明 |
| database |
connection |
数据库连接字符串 |
| glance_store |
stores |
支持的存储后端(file/http) |
| glance_store |
default_store |
默认存储后端 |
| glance_store |
filesystem_store_datadir |
镜像存储路径 |
| keystone_authtoken |
- |
Keystone 认证配置 |
| paste_deploy |
flavor |
使用 keystone 认证 |
完整配置示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 数据库配置(第 1746 行附近)
crudini --set /etc/glance/glance-api.conf database connection "mysql+pymysql://glance:admin@controller/glance"
# 存储配置(第 3141 行附近)
crudini --set /etc/glance/glance-api.conf glance_store stores "file,http"
crudini --set /etc/glance/glance-api.conf glance_store default_store "file"
crudini --set /etc/glance/glance-api.conf glance_store filesystem_store_datadir "/var/lib/glance/images/"
# 认证配置(第 4970 行附近)
crudini --set /etc/glance/glance-api.conf keystone_authtoken www_authenticate_uri "http://controller:5000"
crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_url "http://controller:5000"
crudini --set /etc/glance/glance-api.conf keystone_authtoken memcached_servers "controller:11211"
crudini --set /etc/glance/glance-api.conf keystone_authtoken auth_type "password"
crudini --set /etc/glance/glance-api.conf keystone_authtoken project_domain_name "Default"
crudini --set /etc/glance/glance-api.conf keystone_authtoken user_domain_name "Default"
crudini --set /etc/glance/glance-api.conf keystone_authtoken project_name "service"
crudini --set /etc/glance/glance-api.conf keystone_authtoken username "glance"
crudini --set /etc/glance/glance-api.conf keystone_authtoken password "admin"
# 部署配置(第 5685 行附近)
crudini --set /etc/glance/glance-api.conf paste_deploy flavor "keystone"
|
初始化数据库并授权
1
2
3
4
5
6
7
8
|
# 授予 glance 用户系统读取权限
openstack role add --user glance --user-domain Default --system all reader
# 同步数据库
su -s /bin/sh -c "glance-manage db_sync" glance
# 重启服务
service glance-api restart
|
上传测试镜像
1
2
3
4
5
6
7
8
9
|
# 下载 CirrOS 测试镜像(轻量级 Linux 发行版,适合测试)
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
# 上传镜像到 Glance
glance image-create --name "cirros" \
--file cirros-0.4.0-x86_64-disk.img \
--disk-format qcow2 \
--container-format bare \
--visibility=public
|
验证 Glance
1
2
3
|
openstack image list
# 或
glance image-list
|
2.3 Placement(资源追踪服务)
Placement 负责跟踪资源提供者的库存和使用情况,是 Nova 与其他组件交互的桥梁。
创建数据库和用户
1
2
3
|
CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'admin';
|
创建 OpenStack 用户和服务
1
2
3
4
5
6
7
|
openstack user create --domain default --password admin placement
openstack role add --project service --user placement admin
openstack service create --name placement --description "Placement API" placement
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
|
安装并配置 Placement
1
|
apt install placement-api
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 数据库配置
crudini --set /etc/placement/placement.conf placement_database connection "mysql+pymysql://placement:admin@controller/placement"
# API 认证策略
crudini --set /etc/placement/placement.conf api auth_strategy "keystone"
# Keystone 认证配置
crudini --set /etc/placement/placement.conf keystone_authtoken auth_url "http://controller:5000/v3"
crudini --set /etc/placement/placement.conf keystone_authtoken memcached_servers "controller:11211"
crudini --set /etc/placement/placement.conf keystone_authtoken auth_type "password"
crudini --set /etc/placement/placement.conf keystone_authtoken project_domain_name "Default"
crudini --set /etc/placement/placement.conf keystone_authtoken user_domain_name "Default"
crudini --set /etc/placement/placement.conf keystone_authtoken project_name "service"
crudini --set /etc/placement/placement.conf keystone_authtoken username "placement"
crudini --set /etc/placement/placement.conf keystone_authtoken password "admin"
|
初始化数据库
1
2
|
su -s /bin/sh -c "placement-manage db sync" placement
service apache2 restart
|
验证配置
1
2
|
placement-status upgrade check
pip3 install osc-placement
|
2.4 Nova(计算服务)
Nova 是 OpenStack 的核心组件,负责创建、管理和销毁虚拟机实例。
由于采用 all-in-one 模式,控制节点和计算节点的配置会分别说明。
创建数据库和用户
1
2
3
4
5
6
7
8
9
10
11
12
|
CREATE DATABASE nova_api;
CREATE DATABASE nova;
CREATE DATABASE nova_cell0;
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'admin';
|
创建 OpenStack 用户和服务
1
2
3
4
5
6
7
|
openstack user create --domain default --password admin nova
openstack role add --project service --user nova admin
openstack service create --name nova --description "OpenStack Compute" compute
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
|
控制节点配置
安装 Nova 控制组件
1
|
apt install nova-api nova-conductor nova-novncproxy nova-scheduler
|
配置 nova.conf
主要配置区块说明:
| 配置区块 |
参数 |
说明 |
| api_database |
connection |
Nova API 数据库连接 |
| database |
connection |
Nova 主数据库连接 |
| DEFAULT |
transport_url |
消息队列连接 |
| DEFAULT |
my_ip |
本机管理 IP |
| vnc |
enabled |
启用 VNC 远程访问 |
| vnc |
server_listen |
VNC 监听地址 |
| vnc |
server_proxyclient_address |
代理客户端地址 |
| glance |
api_servers |
Glance 服务地址 |
| oslo_concurrency |
lock_path |
锁文件路径 |
| placement |
- |
Placement 服务配置 |
配置示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# 数据库配置
crudini --set /etc/nova/nova.conf api_database connection "mysql+pymysql://nova:admin@controller/nova_api"
crudini --set /etc/nova/nova.conf database connection "mysql+pymysql://nova:admin@controller/nova"
# 消息队列配置
crudini --set /etc/nova/nova.conf DEFAULT transport_url "rabbit://openstack:admin@controller:5672/"
# API 认证配置
crudini --set /etc/nova/nova.conf api auth_strategy "keystone"
# Keystone 认证配置
crudini --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri "http://controller:5000/"
crudini --set /etc/nova/nova.conf keystone_authtoken auth_url "http://controller:5000/"
crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers "controller:11211"
crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password
crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken project_name service
crudini --set /etc/nova/nova.conf keystone_authtoken username nova
crudini --set /etc/nova/nova.conf keystone_authtoken password admin
# 本机 IP 配置
crudini --set /etc/nova/nova.conf DEFAULT my_ip 10.0.24.13
# VNC 配置
crudini --set /etc/nova/nova.conf vnc enabled true
crudini --set /etc/nova/nova.conf vnc my_ip 10.0.24.13
# Glance 配置
crudini --set /etc/nova/nova.conf glance api_servers "http://controller:9292"
# 锁路径配置
crudini --set /etc/nova/nova.conf oslo_concurrency lock_path "/var/lib/nova/tmp"
# Placement 配置
crudini --set /etc/nova/nova.conf placement region_name RegionOne
crudini --set /etc/nova/nova.conf placement project_domain_name Default
crudini --set /etc/nova/nova.conf placement project_name service
crudini --set /etc/nova/nova.conf placement auth_type password
crudini --set /etc/nova/nova.conf placement user_domain_name Default
crudini --set /etc/nova/nova.conf placement auth_url "http://controller:5000/v3"
crudini --set /etc/nova/nova.conf placement username placement
crudini --set /etc/nova/nova.conf placement password admin
|
初始化数据库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# 同步 API 数据库
su -s /bin/sh -c "nova-manage api_db sync" nova
# 注册 cell0 数据库(记录 cell1 之外的计算节点)
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
# 创建 cell1(本地 cell)
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
# 同步主数据库
su -s /bin/sh -c "nova-manage db sync" nova
# 验证 cell 注册
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
|
启动控制节点服务
1
2
3
4
|
service nova-api restart
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart
|
计算节点配置
安装 Nova 计算组件
1
|
apt install nova-compute
|
配置 nova.conf
计算节点与控制节点配置的主要区别在于 VNC 设置(需要监听所有地址)和 novncproxy 地址:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# 消息队列和认证配置
crudini --set /etc/nova/nova.conf DEFAULT transport_url "rabbit://openstack:admin@controller"
crudini --set /etc/nova/nova.conf api auth_strategy keystone
# Keystone 认证配置
crudini --set /etc/nova/nova.conf keystone_authtoken www_authenticate_uri "http://controller:5000/"
crudini --set /etc/nova/nova.conf keystone_authtoken auth_url "http://controller:5000/"
crudini --set /etc/nova/nova.conf keystone_authtoken memcached_servers "controller:11211"
crudini --set /etc/nova/nova.conf keystone_authtoken auth_type password
crudini --set /etc/nova/nova.conf keystone_authtoken project_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken user_domain_name Default
crudini --set /etc/nova/nova.conf keystone_authtoken project_name service
crudini --set /etc/nova/nova.conf keystone_authtoken username nova
crudini --set /etc/nova/nova.conf keystone_authtoken password admin
# 本机 IP 和 VNC 配置
crudini --set /etc/nova/nova.conf DEFAULT my_ip 10.0.24.13
crudini --set /etc/nova/nova.conf vnc enabled true
crudini --set /etc/nova/nova.conf vnc server_listen "0.0.0.0"
crudini --set /etc/nova/nova.conf vnc server_proxyclient_address 10.0.24.13
crudini --set /etc/nova/nova.conf vnc novncproxy_base_url "http://controller:6080/vnc_auto.html"
# Glance 和锁路径配置
crudini --set /etc/nova/nova.conf glance api_servers "http://controller:9292"
crudini --set /etc/nova/nova.conf oslo_concurrency lock_path "/var/lib/nova/tmp"
# Placement 配置
crudini --set /etc/nova/nova.conf placement region_name RegionOne
crudini --set /etc/nova/nova.conf placement project_domain_name Default
crudini --set /etc/nova/nova.conf placement project_name service
crudini --set /etc/nova/nova.conf placement auth_type password
crudini --set /etc/nova/nova.conf placement user_domain_name Default
crudini --set /etc/nova/nova.conf placement auth_url "http://controller:5000/v3"
crudini --set /etc/nova/nova.conf placement username placement
crudini --set /etc/nova/nova.conf placement password admin
# 虚拟化类型配置(all-in-one 模式使用 qemu)
crudini --set /etc/nova/nova-compute.conf libirt virt_type qemu
# 启动服务
service nova-compute restart
|
2.5 Neutron(网络服务)
Neutron 为 OpenStack 提供虚拟网络功能,支持多种网络类型和插件。
创建数据库和用户
1
2
3
|
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY 'admin';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'admin';
|
创建 OpenStack 用户和服务
1
2
3
4
5
6
7
|
openstack user create --domain default --password admin neutron
openstack role add --project service --user neutron admin
openstack service create --name neutron --description "OpenStack Networking" network
openstack endpoint create --region RegionOne network public http://controller:9696
openstack endpoint create --region RegionOne network internal http://controller:9696
openstack endpoint create --region RegionOne network admin http://controller:9696
|
控制节点配置
安装 Neutron 组件
本配置采用自服务网络模式(Provider Network),使用 Linux Bridge 作为 ML2 驱动:
1
|
apt install neutron-server neutron-plugin-ml2 neutron-linuxbridge-agent neutron-l3-agent neutron-dhcp-agent neutron-metadata-agent
|
配置 neutron.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# 数据库配置
crudini --set /etc/neutron/neutron.conf database connection "mysql+pymysql://neutron:admin@controller/neutron"
# 核心插件和服务插件配置
crudini --set /etc/neutron/neutron.conf DEFAULT core_plugin ml2
crudini --set /etc/neutron/neutron.conf DEFAULT service_plugins router
crudini --set /etc/neutron/neutron.conf DEFAULT allow_overlapping_ips true
# 消息队列配置
crudini --set /etc/neutron/neutron.conf DEFAULT transport_url "rabbit://openstack:admin@controller"
# 认证策略
crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
# Nova 通知配置(端口状态变化通知)
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_status_changes true
crudini --set /etc/neutron/neutron.conf DEFAULT notify_nova_on_port_data_changes true
# Keystone 认证配置
crudini --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri "http://controller:5000"
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url "http://controller:5000"
crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers "controller:11211"
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name Default
crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name Default
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name service
crudini --set /etc/neutron/neutron.conf keystone_authtoken username neutron
crudini --set /etc/neutron/neutron.conf keystone_authtoken password admin
# Nova 配置
crudini --set /etc/neutron/neutron.conf nova auth_url "http://controller:5000"
crudini --set /etc/neutron/neutron.conf nova auth_type password
crudini --set /etc/neutron/neutron.conf nova project_domain_name Default
crudini --set /etc/neutron/neutron.conf nova user_domain_name Default
crudini --set /etc/neutron/neutron.conf nova region_name RegionOne
crudini --set /etc/neutron/neutron.conf nova project_name service
crudini --set /etc/neutron/neutron.conf nova username nova
crudini --set /etc/neutron/neutron.conf nova password admin
# 锁路径配置
crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path "/var/lib/neutron/tmp"
|
配置 ML2 插件(ml2_conf.ini)
ML2(Modular Layer 2)是 Neutron 的核心插件,支持多种网络类型:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
# ML2 核心配置
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 type_drivers "flat,vlan,vxlan"
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 tenant_network_types vxlan
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 mechanism_drivers "linuxbridge,l2population"
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2 extension_drivers port_security
# 扁平网络配置
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_flat flat_networks provider
# VXLAN 配置(定义 VNI 范围 1-1000)
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini ml2_type_vxlan vni_ranges "1:1000"
# 安全组配置
crudini --set /etc/neutron/plugins/ml2/ml2_conf.ini securitygroup enable_ipset true
|
配置 Linux Bridge Agent(linuxbridge_agent.ini)
1
2
3
4
5
6
7
8
9
10
11
|
# 物理网络接口映射(provider 网络使用 eth0)
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings "provider:eth0"
# VXLAN 配置
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan true
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan local_ip 10.0.24.13
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan l2_population true
# 安全组配置
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group true
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver "neutron.agent.linux.iptables_firewall.IptablesFirewallDriver"
|
注意:physical_interface_mappings 中的接口名(eth0)需要根据实际情况修改,可使用 ifconfig 命令查看。
配置 L3 Agent(l3_agent.ini)
1
|
crudini --set /etc/neutron/l3_agent.ini DEFAULT interface_driver linuxbridge
|
配置 DHCP Agent(dhcp_agent.ini)
1
2
3
|
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT interface_driver linuxbridge
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT dhcp_driver "neutron.agent.linux.dhcp.Dnsmasq"
crudini --set /etc/neutron/dhcp_agent.ini DEFAULT enable_isolated_metadata true
|
1
2
|
crudini --set /etc/neutron/metadata_agent.ini DEFAULT nova_metadata_host controller
crudini --set /etc/neutron/metadata_agent.ini DEFAULT metadata_proxy_shared_secret 123456
|
配置 Nova 使用 Neutron
1
2
3
4
5
6
7
8
9
10
|
crudini --set /etc/nova/nova.conf neutron auth_url "http://controller:5000"
crudini --set /etc/nova/nova.conf neutron auth_type password
crudini --set /etc/nova/nova.conf neutron project_domain_name Default
crudini --set /etc/nova/nova.conf neutron user_domain_name Default
crudini --set /etc/nova/nova.conf neutron region_name RegionOne
crudini --set /etc/nova/nova.conf neutron project_name service
crudini --set /etc/nova/nova.conf neutron username neutron
crudini --set /etc/nova/nova.conf neutron password admin
crudini --set /etc/nova/nova.conf neutron service_metadata_proxy true
crudini --set /etc/nova/nova.conf neutron metadata_proxy_shared_secret 123456
|
初始化数据库并启动服务
1
2
3
4
5
6
7
8
9
10
11
12
|
# 同步数据库(需要指定插件配置文件)
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
# 重启 Nova API 服务
service nova-api restart
# 启动 Neutron 相关服务
service neutron-server restart
service neutron-linuxbridge-agent restart
service neutron-dhcp-agent restart
service neutron-metadata-agent restart
service neutron-l3-agent restart
|
计算节点配置
安装 Neutron 计算组件
1
|
apt install neutron-linuxbridge-agent
|
配置 neutron.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 消息队列和认证配置
crudini --set /etc/neutron/neutron.conf DEFAULT transport_url "rabbit://openstack:admin@controller"
crudini --set /etc/neutron/neutron.conf DEFAULT auth_strategy keystone
# Keystone 认证配置
crudini --set /etc/neutron/neutron.conf keystone_authtoken www_authenticate_uri "http://controller:5000"
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_url "http://controller:5000"
crudini --set /etc/neutron/neutron.conf keystone_authtoken memcached_servers "controller:11211"
crudini --set /etc/neutron/neutron.conf keystone_authtoken auth_type password
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_domain_name Default
crudini --set /etc/neutron/neutron.conf keystone_authtoken user_domain_name Default
crudini --set /etc/neutron/neutron.conf keystone_authtoken project_name service
crudini --set /etc/neutron/neutron.conf keystone_authtoken username neutron
crudini --set /etc/neutron/neutron.conf keystone_authtoken password admin
# 锁路径配置
crudini --set /etc/neutron/neutron.conf oslo_concurrency lock_path "/var/lib/neutron/tmp"
|
配置 Linux Bridge Agent
1
2
3
4
5
6
7
8
9
10
11
|
# 物理网络接口映射(根据实际情况修改接口名)
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini linux_bridge physical_interface_mappings "provider:eth0"
# VXLAN 配置
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan enable_vxlan true
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan local_ip 10.0.24.13
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini vxlan l2_population true
# 安全组配置
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup enable_security_group true
crudini --set /etc/neutron/plugins/ml2/linuxbridge_agent.ini securitygroup firewall_driver "neutron.agent.linux.iptables_firewall.IptablesFirewallDriver"
|
配置 Nova 使用 Neutron
1
2
3
4
5
6
7
8
|
crudini --set /etc/nova/nova.conf neutron auth_url "http://controller:5000"
crudini --set /etc/nova/nova.conf neutron auth_type password
crudini --set /etc/nova/nova.conf neutron project_domain_name Default
crudini --set /etc/nova/nova.conf neutron user_domain_name Default
crudini --set /etc/nova/nova.conf neutron region_name RegionOne
crudini --set /etc/nova/nova.conf neutron project_name service
crudini --set /etc/nova/nova.conf neutron username neutron
crudini --set /etc/nova/nova.conf neutron password admin
|
启动服务
1
2
|
service nova-compute restart
service neutron-linuxbridge-agent restart
|
验证 Neutron
1
2
|
openstack extension list --network
openstack network agent list
|
2.6 Horizon(Web 管理界面)
Horizon 提供基于 Django 的图形化 Web 界面,用于管理 OpenStack 资源。
安装 Horizon
1
2
|
apt install openstack-dashboard
sudo vi /etc/openstack-dashboard/local_settings.py
|
关键配置说明
| 配置项 |
值 |
说明 |
| OPENSTACK_HOST |
controller |
Keystone 服务地址 |
| ALLOWED_HOSTS |
[’*'] |
允许访问的主机(生产环境应限制) |
| SESSION_ENGINE |
django.contrib.sessions.backends.cache |
会话存储后端 |
| CACHES |
memcached |
缓存配置 |
| TIME_ZONE |
Asia/Shanghai |
时区设置 |
配置示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# OpenStack 服务地址(第 126 行)
OPENSTACK_HOST = "controller"
# 允许访问的主机(第 399 行)
ALLOWED_HOSTS = ['*']
# 会话引擎配置(第 112 行)
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
# 缓存配置
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'controller:11211',
}
}
# Keystone URL
OPENSTACK_KEYSTONE_URL = "http://%s:5000" % OPENSTACK_HOST
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
# API 版本配置
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 3,
}
# 域和角色默认配置
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "member"
# Neutron 网络配置(简化配置)
OPENSTACK_NEUTRON_NETWORK = {
...
'enable_router': False,
'enable_quotas': False,
'enable_ipv6': False,
'enable_distributed_router': False,
'enable_ha_router': False,
'enable_fip_topology_check': False,
}
# 时区配置
TIME_ZONE = "Asia/Shanghai"
|
验证安装
1
2
3
4
5
6
7
|
# 检查 Nova 升级状态
nova-status upgrade check
# 访问 Horizon
# 浏览器打开 http://<IP地址>/horizon
# 登录账号:admin
# 登录密码:admin(来自 adminrc_keystone 文件中的 OS_PASSWORD)
|
第三章:常见问题与解决方案
3.1 网络接口未激活
问题:执行 ifconfig 命令后看不到网络接口(如 ens33)。
原因:接口存在但处于 DOWN 状态。
解决:
1
2
|
# 启用 DHCP 客户端获取 IP
sudo /sbin/dhclient
|
参考链接:CSDN - ifconfig 无网络接口
3.2 Placement 资源提供者创建失败
问题:日志中报错 Failed to create resource provider controller。
排查步骤:
1
2
3
|
SHOW databases;
USE nova-api;
SELECT * FROM resource_provider;
|
原因:数据库中 resource_provider 表为空,说明 Placement 服务未成功写入数据。
解决:检查 Placement 配置文件中的认证信息是否正确。
参考链接:CSDN - resource provider 问题
3.3 RabbitMQ 连接失败
问题:消息队列无法正常连接。
解决:
-
检查 /etc/hosts 配置:
127.0.0.1 行后需添加主机名
- 注释掉
127.0.1.1 行
-
重启 RabbitMQ 服务:
1
2
|
sudo systemctl restart rabbitmq.server
sudo systemctl status rabbitmq.server
|
参考链接:
3.4 Dashboard 登录失败
问题:Horizon 显示 invalid credentials 认证失败。
解决:检查 /etc/openstack-dashboard/local_settings.py 中的端口号配置是否正确。
参考链接:CSDN - Dashboard 登录问题
3.5 创建 Flavor(实例规格)
Flavor 定义了虚拟机的资源规格(CPU、内存、磁盘等):
1
2
3
4
5
6
7
8
9
|
# 查看已有 flavor
nova flavor-list
# 创建 flavor
nova flavor-create --is-public true boshen_ram_1024_disk_1_vcpus_1 boshen_ram_1024_disk_1_vcpus_1 1024 1 1
# 参数说明:名称 ID 内存(MB) 磁盘(GB) vCPU数
# 删除 flavor
nova flavor-delete {name}
|
3.6 用户和服务管理
1
2
3
4
5
6
7
|
# 用户管理
openstack user list
openstack user delete <username>
# 服务管理
openstack service list
openstack service delete <service_id>
|
3.7 VNC 控制台灰屏
问题:通过 VNC 连接虚拟机时显示灰色屏幕。
解决:安装 GNOME 桌面环境并配置 VNC 服务器:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 切换到 root
sudo -i
# 安装桌面环境
sudo apt update
sudo apt install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal ubuntu-desktop
sudo apt-get install tightvncserver
# 启动 VNC 服务器
sudo vncserver
# 配置 xstartup
sudo vi ~/.vnc/xstartup
|
编辑 ~/.vnc/xstartup 文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
#!/bin/bash
export $(dbus-launch)
export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER
gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-session &
xsetroot -solid grey
vncconfig -iconic &
x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
gnome-session &
VNCSERVERS="2:root"
VNCSERVERARGS[1]="-GEOMETRY 800x600"
|
重启 VNC 会话:
1
2
3
4
5
|
# 关闭现有会话
sudo vncserver -kill :1
# 启动新会话
sudo vncserver -geometry 1920x1080 :1
|
客户端下载:RealVNC Viewer
参考链接:CSDN - VNC 灰屏问题
第四章:后续学习与进阶
拓展与后续学习建议
恭喜完成 OpenStack all-in-one 模式的基本安装。以下是进一步学习的方向:
1. 生产环境部署
- 使用 Kolla-Ansible 进行容器化部署
- 使用 OpenStack Charms(基于 Juju)进行大规模集群部署
- 了解高可用(HA)架构设计
2. 高级网络功能
- 深入学习 Neutron 的 VLAN、VXLAN、GRE 隧道技术
- 理解 SDN(软件定义网络)与 OpenStack 的结合
- 配置负载均衡即服务(Octavia)
3. 存储服务
- 学习 Cinder(块存储服务)的配置
- 了解 Swift(对象存储服务)的原理和部署
- 探索 Ceph 与 OpenStack 的集成
4. 运维监控
- 部署 OpenStack 的监控组件(如 Ceilometer、Monasca)
- 集成 Prometheus 和 Grafana 进行可视化监控
- 学习日志管理(如 ELK Stack)
5. 安全加固
- 了解 OpenStack 安全最佳实践
- 配置 TLS/SSL 加密通信
- 学习基于角色的访问控制(RBAC)精细化配置
6. 官方文档