1. 环境准备
以下为本次部署的节点规划与资源配置。
| 主机名 |
IP |
磁盘 |
CPU |
memory |
| controller |
网卡1:10.0.0.10,网卡2:不配置 |
sda:100G |
2C |
6G |
| compute01 |
网卡1:10.0.0.11,网卡2:不配置 |
sda:100G ,sdb:20G |
2C |
4G |
基础环境:
- 操作系统:Ubuntu 24.04
- 虚拟化工具:VMware 17
2. 配置离线环境
在所有节点上配置离线APT源。
# 解压
tar zxvf openstack_c.tar.gz -C /opt/
# 备份文件
cp /etc/apt/sources.list{,.bak}
# 配置离线源
cat > /etc/apt/sources.list << EOF
deb [trusted=yes] file:// /opt/openstack_c/debs/
EOF
# 清空缓存
apt clean all
# 加载源
apt update
3. 系统环境初始化
3.1 配置网络
cat > /etc/netplan/00-installer-config.yaml << EOF
# This is the network config written by 'subiquity'
network:
ethernets:
eth0:
dhcp4: false
addresses: [10.0.0.10/24]
routes:
- to: default
via: 10.0.0.254
nameservers:
addresses: [114.114.114.114]
eth1:
dhcp4: false
version: 2
EOF
# 生效网络
netplan apply
cat > /etc/netplan/00-installer-config.yaml << EOF
# This is the network config written by 'subiquity'
network:
ethernets:
eth0:
dhcp4: false
addresses: [10.0.0.11/24]
routes:
- to: default
via: 10.0.0.254
nameservers:
addresses: [114.114.114.114]
eth1:
dhcp4: false
version: 2
EOF
# 生效网络
netplan apply
3.2 配置主机名并配置解析
-
controller节点更改主机名
hostnamectl set-hostname controller
# 切换窗口
bash
-
compute01节点更改主机名
hostnamectl set-hostname compute01
# 切换窗口
bash
-
所有节点配置hosts解析
cat >> /etc/hosts << EOF
10.0.0.10 controller
10.0.0.11 compute01
EOF
3.3 时间同步配置
-
所有节点执行基础时间配置,这是Linux系统的基础运维操作。
# 开启可配置服务
timedatectl set-ntp true
# 调整时区为上海
timedatectl set-timezone Asia/Shanghai
-
控制节点配置为NTP服务器。
# 安装服务
apt install -y chrony
# 配置文件
vim /etc/chrony/chrony.conf
20 server controller iburst maxsources 2
61 allow all
63 local stratum 10
# 重启服务
systemctl restart chronyd
-
计算节点配置为从控制节点同步。
# 安装服务
apt install -y chrony
# 配置文件
vim /etc/chrony/chrony.conf
20 pool controller iburst maxsources 4
# 重启服务
systemctl restart chronyd
3.4 安装OpenStack客户端
3.5 安装部署MariaDB
-
controller节点安装服务
apt install -y mariadb-server python3-pymysql
-
配置mariadb配置文件
cat > /etc/mysql/mariadb.conf.d/99-openstack.cnf << EOF
[mysqld]
bind-address = 0.0.0.0
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
EOF
-
重启数据库服务使配置生效
service mysql restart
-
初始化配置数据库(安全加固)
mysql_secure_installation
输入数据库密码:回车
可以在没有适当授权的情况下登录到MariaDB root用户,当前已收到保护:n
设置root用户密码:n
删除匿名用户:y
不允许远程root登录:n
删除测试数据库:y
重新加载数据库:y
3.6 安装部署RabbitMQ消息队列
-
控制节点安装服务。
apt install -y rabbitmq-server
-
创建openstack用户,用户名为:openstack,密码:000000。
rabbitmqctl add_user openstack 000000
-
授予openstack用户配置、写入和读取的全部权限。
rabbitmqctl set_permissions openstack ".*" ".*" ".*"
3.7 安装部署Memcache缓存服务
-
控制节点安装服务。
apt install -y memcached python3-memcache
-
配置监听地址为所有网络接口。
vim /etc/memcached.conf
35 -l 0.0.0.0
-
重启服务使配置生效。
service memcached restart
4. 部署配置Keystone(身份认证服务)
-
控制节点操作。
-
创建数据库与用户供keystone使用。
# 创建数据库
CREATE DATABASE keystone;
# 创建用户
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystoneang';
-
controller节点安装服务
apt install -y keystone
-
配置keystone配置文件
# 备份配置文件
cp /etc/keystone/keystone.conf{,.bak}
# 过滤覆盖文件
grep -Ev "^$|#" /etc/keystone/keystone.conf.bak > /etc/keystone/keystone.conf
编辑 /etc/keystone/keystone.conf,确保 [database] 部分连接信息正确,这是云原生/IaaS平台的核心配置之一。
[database]
connection = mysql+pymysql://keystone:keystoneang@controller/keystone
...
[token]
provider = fernet
-
初始化数据库结构
su -s /bin/sh -c "keystone-manage db_sync" keystone
-
初始化Fernet密钥(用于令牌加密)
# 用户
keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
# 组
keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
-
引导Keystone服务(创建初始管理员账户、服务端点等)
keystone-manage bootstrap --bootstrap-password 000000 \
--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服务器名称并重启服务
echo "ServerName controller" >> /etc/apache2/apache2.conf
service apache2 restart
-
配置管理员环境变量脚本
cat > /etc/keystone/admin-openrc.sh << EOF
export OS_PROJECT_DOMAIN_NAME=Default
export OS_USER_DOMAIN_NAME=Default
export OS_PROJECT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=000000
export OS_AUTH_URL=http://controller:5000/v3
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
EOF
-
加载环境变量
source /etc/keystone/admin-openrc.sh
-
创建一个名为“service”的项目,供其他OpenStack服务使用
openstack project create --domain default --description "Service Project" service
-
验证认证服务是否正常工作
openstack token issue
5. 部署配置Glance(镜像服务)
-
控制节点操作。
-
创建数据库与用户供glance使用。
# 创建数据库
CREATE DATABASE glance;
# 创建用户
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glanceang';
-
在Keystone中创建glance用户
openstack user create --domain default --password glance glance
-
将admin角色授予glance用户
openstack role add --project service --user glance admin
-
创建glance服务实体
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服务
apt install -y glance
-
配置glance-api配置文件
# 备份配置文件
cp /etc/glance/glance-api.conf{,.bak}
# 过滤覆盖配置文件
grep -Ev "^$|#" /etc/glance/glance-api.conf.bak > /etc/glance/glance-api.conf
编辑 /etc/glance/glance-api.conf,配置数据库连接和认证信息。
[database]
connection = mysql+pymysql://glance:glanceang@controller/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
...
[glance_store]
stores = file,http
default_store = file
filesystem_store_datadir = /var/lib/glance/images/
-
初始化数据库
su -s /bin/sh -c "glance-manage db_sync" glance
-
重启glance服务
service glance-api restart
-
上传测试镜像进行验证
# 下载Cirros测试镜像
wget http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img
# 上传镜像命令
glance image-create --name "cirros" \
--file cirros-0.4.0-x86_64-disk.img \
--disk-format qcow2 \
--container-format bare \
--visibility=public
# 查看镜像列表
openstack image list
6. 部署配置Placement(资源追踪服务)
-
创建数据库与用户供placement使用。
# 创建数据库
CREATE DATABASE placement;
# 创建用户
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'placementang';
-
创建placement用户
openstack user create --domain default --password placement placement
-
将placement用户添加到service项目的admin角色中
openstack role add --project service --user placement admin
-
创建Placement服务实体
openstack service create --name placement --description "Placement API" placement
-
创建Placement API服务端点
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服务
apt install -y placement-api
-
配置placement服务
# 备份配置文件
cp /etc/placement/placement.conf{,.bak}
# 过滤覆盖文件
grep -Ev "^$|#" /etc/placement/placement.conf.bak > /etc/placement/placement.conf
编辑 /etc/placement/placement.conf,配置数据库和认证。
[placement_database]
connection = mysql+pymysql://placement:placementang@controller/placement
...
[keystone_authtoken]
auth_url = http://controller:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = placement
password = placement
-
初始化数据库
su -s /bin/sh -c "placement-manage db sync" placement
-
重启Apache服务加载placement配置
service apache2 restart
-
验证placement服务状态
placement-status upgrade check
7. 部署配置Nova(计算服务)
7.1 控制节点配置
-
创建数据库与用户供nova使用。
# 存放nova交互等数据
CREATE DATABASE nova_api;
# 存放nova资源等数据
CREATE DATABASE nova;
# 存放nova等元数据
CREATE DATABASE nova_cell0;
# 创建管理nova_api库的用户
GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'novaang';
# 创建管理nova库的用户
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'novaang';
# 创建管理nova_cell0库的用户
GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'novaang';
-
创建nova用户
openstack user create --domain default --password nova nova
-
将admin角色添加到nova用户
openstack role add --project service --user nova admin
-
创建nova服务实体
openstack service create --name nova --description "OpenStack Compute" compute
-
创建计算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
-
安装控制节点所需的nova服务
apt install -y nova-api nova-conductor nova-novncproxy nova-scheduler
-
配置nova主配置文件
# 备份配置文件
cp /etc/nova/nova.conf{,.bak}
# 过滤提取文件
grep -Ev "^$|#" /etc/nova/nova.conf.bak > /etc/nova/nova.conf
编辑 /etc/nova/nova.conf,配置消息队列、数据库、认证、Glance、Placement等关键信息。
[DEFAULT]
transport_url = rabbit://openstack:000000@controller:5672/
my_ip = 10.0.0.10
...
[api]
auth_strategy = keystone
[api_database]
connection = mysql+pymysql://nova:novaang@controller/nova_api
[database]
connection = mysql+pymysql://nova:novaang@controller/nova
[glance]
api_servers = http://controller:9292
[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
[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
[vnc]
enabled = true
server_listen = $my_ip
server_proxyclient_address = $my_ip
-
初始化nova_api数据库
su -s /bin/sh -c "nova-manage api_db sync" nova
-
注册cell0数据库
su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
-
创建cell1单元格
su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
-
填充nova数据库
su -s /bin/sh -c "nova-manage db sync" nova
-
验证cell注册情况
su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
-
重启控制节点所有nova服务使配置生效
service nova-api restart
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart
7.2 计算节点配置
-
compute01节点安装nova-compute服务。
apt install -y nova-compute
-
配置nova配置文件,内容与控制节点类似,注意修改my_ip,并正确配置VNC地址指向控制节点。
# 备份配置文件
cp /etc/nova/nova.conf{,.bak}
# 过滤覆盖配置文件
grep -Ev "^$|#" /etc/nova/nova.conf.bak > /etc/nova/nova.conf
编辑 /etc/nova/nova.conf,关键配置如下:
[DEFAULT]
transport_url = rabbit://openstack:000000@controller
my_ip = 10.0.0.11
...
[vnc]
enabled = true
server_listen = 0.0.0.0
server_proxyclient_address = $my_ip
novncproxy_base_url = http://10.0.0.10:6080/vnc_auto.html
其他如 [keystone_authtoken], [glance], [placement] 等部分参照控制节点配置。
-
检测是否支持硬件虚拟化加速
# 确定计算节点是否支持虚拟机的硬件加速
egrep -c '(vmx|svm)' /proc/cpuinfo
如果返回 0,则需要配置为使用QEMU软件模拟,编辑 /etc/nova/nova-compute.conf:
[libvirt]
virt_type = qemu
-
重启计算节点nova服务
service nova-compute restart
7.3 配置主机发现
-
控制节点操作。
-
查看可用的计算节点
openstack compute service list --service nova-compute
-
手动发现计算主机
su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
-
配置自动发现间隔(可选,设置为每5分钟)
vim /etc/nova/nova.conf
在 [scheduler] 部分添加:
[scheduler]
discover_hosts_in_cells_interval = 300
-
重启nova-api服务使自动发现配置生效
service nova-api restart
-
校验所有nova服务状态
openstack compute service list
8. 配置基于OVN的Neutron网络服务
8.1 控制节点配置
-
创建数据库与用户供neutron使用。
# 创建数据库
CREATE DATABASE neutron;
# 创建用户
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutronang';
-
创建neutron用户
openstack user create --domain default --password neutron neutron
-
向neutron用户添加管理员角色
openstack role add --project service --user neutron admin
-
创建neutron服务实体
openstack service create --name neutron --description "OpenStack Networking" network
-
创建neutron的API端点
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
-
安装OVN及相关网络服务组件
apt -y install neutron-server neutron-plugin-ml2 python3-neutronclient ovn-central openvswitch-switch
-
配置neutron主配置文件 (/etc/neutron/neutron.conf)
# 备份配置文件
cp /etc/neutron/neutron.conf{,.bak}
# 过滤提取配置文件
grep -Ev "^$|#" /etc/neutron/neutron.conf.bak > /etc/neutron/neutron.conf
编辑配置文件,核心配置如下:
[DEFAULT]
core_plugin = ml2
service_plugins = ovn-router
auth_strategy = keystone
transport_url = rabbit://openstack:000000@controller
...
[database]
connection = mysql+pymysql://neutron:neutronang@controller/neutron
[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 = neutron
password = neutron
[nova]
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = nova
password = nova
-
配置ML2插件配置文件 (/etc/neutron/plugins/ml2/ml2_conf.ini)
# 备份配置文件
cp /etc/neutron/plugins/ml2/ml2_conf.ini{,.bak}
# 过滤覆盖文件
grep -Ev "^$|#" /etc/neutron/plugins/ml2/ml2_conf.ini.bak > /etc/neutron/plugins/ml2/ml2_conf.ini
编辑配置文件,启用OVN机制驱动和Geneve隧道。
[ml2]
type_drivers = flat,geneve
tenant_network_types = geneve
mechanism_drivers = ovn
extension_drivers = port_security
[ml2_type_geneve]
vni_ranges = 1:65536
[ovn]
ovn_nb_connection = tcp:10.0.0.10:6641
ovn_sb_connection = tcp:10.0.0.10:6642
ovn_metadata_enabled = True
[securitygroup]
enable_security_group = True
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
-
在Nova配置中添加Neutron信息(确保 /etc/nova/nova.conf 中已有以下部分,若没有则添加)
[neutron]
auth_url = http://controller:5000
auth_type = password
project_domain_name = Default
user_domain_name = Default
region_name = RegionOne
project_name = service
username = neutron
password = neutron
service_metadata_proxy = True
metadata_proxy_shared_secret = ws
insecure = false
-
配置Open vSwitch服务,允许远程管理
vim /etc/default/openvswitch-switch
添加或修改:
OVS_CTL_OPTS="--ovsdb-server-options='--remote=ptcp:6640:127.0.0.1'"
-
初始化Neutron数据库
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服务以识别新的Neutron配置
service nova-api restart
-
重启OVS服务并配置网络
systemctl restart openvswitch-switch
# 添加集成网桥
ovs-vsctl add-br br-int
-
启动并配置OVN中央服务
systemctl restart ovn-central ovn-northd
# 设置OVN北向和南向数据库的连接点
ovn-nbctl set-connection ptcp:6641:10.0.0.10 --set connection . inactivity_probe=60000
ovn-sbctl set-connection ptcp:6642:10.0.0.10 --set connection . inactivity_probe=60000
# 配置外部网络桥接映射 (physnet1 对应 br-eth1,连接 eth1 网卡)
ovs-vsctl add-br br-eth1
ovs-vsctl add-port br-eth1 eth1
ovs-vsctl set open . external-ids:ovn-bridge-mappings=physnet1:br-eth1
-
重启Neutron服务
service neutron-server restart
8.2 计算节点配置
-
compute01节点安装OVN和Neutron组件。
apt -y install neutron-common neutron-plugin-ml2 neutron-ovn-metadata-agent ovn-host openvswitch-switch
-
配置Neutron主配置文件 (/etc/neutron/neutron.conf),内容与控制节点类似,但 [DEFAULT] 部分通常无需 bind_host 等选项。
-
配置ML2插件配置文件 (/etc/neutron/plugins/ml2/ml2_conf.ini),内容与控制节点完全一致,确保 ovn_nb_connection 和 ovn_sb_connection 指向控制节点IP。
-
配置Metadata Agent (/etc/neutron/neutron_ovn_metadata_agent.ini)
# 备份文件
cp /etc/neutron/neutron_ovn_metadata_agent.ini{,.bak}
# 过滤提取文件
grep -Ev "^$|#" /etc/neutron/neutron_ovn_metadata_agent.ini.bak > /etc/neutron/neutron_ovn_metadata_agent.ini
编辑配置文件:
[DEFAULT]
nova_metadata_host = controller
metadata_proxy_shared_secret = ws
[ovn]
ovn_sb_connection = tcp:10.0.0.10:6642
-
在计算节点的Nova配置中也添加与8.1节相同的 [neutron] 部分。
-
配置计算节点的Open vSwitch服务(同控制节点步骤)。
-
重启相关服务以加载网络配置
systemctl restart openvswitch-switch ovn-controller ovn-host
systemctl restart neutron-ovn-metadata-agent
systemctl restart nova-compute
-
设置计算节点与OVN控制平面的连接
ovs-vsctl set open . external-ids:ovn-remote=tcp:10.0.0.10:6642
ovs-vsctl set open . external-ids:ovn-encap-type=geneve
ovs-vsctl set open . external-ids:ovn-encap-ip=10.0.0.11
-
在计算节点上也配置外部网络桥接(如果计算节点也需要提供外部网络访问)
ovs-vsctl add-br br-eth1
ovs-vsctl add-port br-eth1 eth1
ovs-vsctl set open . external-ids:ovn-bridge-mappings=physnet1:br-eth1
-
再次重启服务使桥接配置生效
systemctl restart openvswitch-switch ovn-controller ovn-host
systemctl restart neutron-ovn-metadata-agent
systemctl restart nova-compute
8.3 校验Neutron服务
8.4 Neutron网关调度问题处理
在某些OVN版本中,可能会遇到路由器外部网关端口状态异常的问题。
8.4.1 临时处理方法
在控制节点手动为路由器端口指定网关 chassis。
# 获取Logical_Router_Port的 _uuid
ovn-nbctl list Logical_Router_Port
# 获取Chassis的UUID
ovn-sbctl show
# 手动关联
ovn-nbctl lrp-set-gateway-chassis <router_port_uuid> <chassis_uuid>
8.4.2 永久处理方法
修改Neutron OVN驱动源码中的网关调度逻辑。编辑文件 /usr/lib/python3/dist-packages/neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/ovn_client.py,找到 get_candidates_for_scheduling 方法并进行相应修复(具体代码块因版本而异,需参考社区补丁)。
修改后重启Neutron服务:
service neutron-server restart
9. 配置Dashboard仪表盘服务
-
安装Horizon仪表盘
apt install -y openstack-dashboard
-
配置Dashboard (/etc/openstack-dashboard/local_settings.py)
# 配置仪表板以在控制器节点上使用OpenStack服务
OPENSTACK_HOST = "controller"
# 允许所有主机访问Dashboard(生产环境应指定IP)
ALLOWED_HOSTS = ["*"]
# 配置memcached会话存储服务
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
'LOCATION': 'controller:11211',
}
}
# 启用Identity API版本3
OPENSTACK_KEYSTONE_URL = "http://%s:5000/v3" % OPENSTACK_HOST
# 启用对域的支持
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT = True
# 配置API版本
OPENSTACK_API_VERSIONS = {
"identity": 3,
"image": 2,
"volume": 3,
}
# 将Default配置为通过仪表板创建的用户的默认域
OPENSTACK_KEYSTONE_DEFAULT_DOMAIN = "Default"
# 将user角色配置为通过仪表板创建的用户的默认角色
OPENSTACK_KEYSTONE_DEFAULT_ROLE = "user"
# 配置时区
TIME_ZONE = "Asia/Shanghai"
-
重新加载Web服务器配置
systemctl reload apache2
-
通过浏览器访问控制台:http://controller/horizon,使用之前创建的admin用户和密码(000000)登录。
10. 部署配置Cinder(块存储服务)
10.1 控制节点配置
-
创建数据库与用户供cinder组件使用。
# 创建cinder数据库
CREATE DATABASE cinder;
# 创建cinder用户
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY 'cinderang';
-
创建cinder用户
openstack user create --domain default --password cinder cinder
-
添加cinder用户到service项目的admin角色
openstack role add --project service --user cinder admin
-
创建cinder服务实体 (v3)
openstack service create --name cinderv3 --description "OpenStack Block Storage" volumev3
-
创建cinder服务API端点
openstack endpoint create --region RegionOne volumev3 public http://controller:8776/v3/\%\(project_id\)s
openstack endpoint create --region RegionOne volumev3 internal http://controller:8776/v3/\%\(project_id\)s
openstack endpoint create --region RegionOne volumev3 admin http://controller:8776/v3/\%\(project_id\)s
-
安装cinder API和调度服务
apt install -y cinder-api cinder-scheduler
-
配置cinder服务 (/etc/cinder/cinder.conf)
# 备份文件
cp /etc/cinder/cinder.conf{,.bak}
# 过滤覆盖文件
grep -Ev "^$|#" /etc/cinder/cinder.conf.bak > /etc/cinder/cinder.conf
编辑配置文件:
[DEFAULT]
transport_url = rabbit://openstack:000000@controller
my_ip = 10.0.0.10
[database]
connection = mysql+pymysql://cinder:cinderang@controller/cinder
[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 = cinder
password = cinder
-
初始化Cinder数据库
su -s /bin/sh -c "cinder-manage db sync" cinder
-
在Nova配置中指定Cinder区域
vim /etc/nova/nova.conf
添加:
[cinder]
os_region_name = RegionOne
重启Nova API服务:
service nova-api restart
-
重启Cinder调度器服务
service cinder-scheduler restart
-
重新加载Apache以启用Cinder API
service apache2 reload
10.2 计算/存储节点配置(本例中compute01兼做存储节点)
-
compute01节点安装LVM和存储服务依赖。
apt install -y lvm2 thin-provisioning-tools
-
在附加磁盘 /dev/sdb 上创建LVM物理卷和卷组
pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb
-
配置LVM过滤器,只允许Cinder使用指定的磁盘
vim /etc/lvm/lvm.conf
找到 devices { 部分,修改 filter 行(确保只有 sdb 被接受):
filter = [ "a/sdb/", "r/.*/"]
-
安装Cinder Volume服务及iSCSI target工具
apt install -y cinder-volume tgt
-
配置Cinder Volume服务 (/etc/cinder/cinder.conf)
# 备份配置文件
cp /etc/cinder/cinder.conf{,.bak}
# 过滤覆盖文件
grep -Ev "^$|#" /etc/cinder/cinder.conf.bak > /etc/cinder/cinder.conf
编辑配置文件,启用LVM后端并配置iSCSI:
[DEFAULT]
transport_url = rabbit://openstack:000000@controller
my_ip = 10.0.0.11
enabled_backends = lvm
glance_api_servers = http://controller:9292
[lvm]
volume_driver = cinder.volume.drivers.lvm.LVMVolumeDriver
volume_group = cinder-volumes
target_protocol = iscsi
target_helper = tgtadm
volume_backend_name = lvm
# [keystone_authtoken] 等部分配置与控制节点cinder配置一致
-
配置iSCSI target服务以包含Cinder管理的卷
vim /etc/tgt/conf.d/tgt.conf
添加:
include /var/lib/cinder/volumes/*
-
重启相关服务
service tgt restart
service cinder-volume restart
10.3 校验Cinder服务
10.4 解决Cinder卷挂载权限问题(如遇#2088类错误)
确保Nova和Cinder用户在service项目中都具有 service 角色。
-
创建service角色(如果不存在)
openstack role create service
-
检查并添加角色
# 检查用户是否已分配角色
openstack role assignment list --user cinder --project service --names
openstack role assignment list --user nova --project service --names
# 将服务nova、cinder角色默认修改为service(如果检查发现缺失)
openstack role add --user cinder --project service service
openstack role add --user nova --project service service
|