OpenStack icehouse 安装指导(ubuntu LTS 14.04)

参考资料:http://docs.openstack.org/icehouse/install-guide/install/apt/content/
OpenStack ManualsOpenStack Installation Guide for Ubuntu 12.04/14.04 (LTS) – icehouse

硬件构成
测试机数量有限,控制结点与网络结点合二为一.
控制结点/网络结点: 4 核CPU, 4 GB 内存, and 300 GB 硬盘 2 网卡
计算结点: 4 核CPU, 4 GB 内存, and 500 GB 硬盘 2 网卡
交换机 一台

配置网络
控制结点/网络结点
auto eth0
iface eth0 inet static
IP address: 10.0.0.11
Network mask: 255.255.255.0 (or /24)
Default gateway: 10.0.0.1
auto eth1
iface eth1 inet static
address 192.168.2.101
netmask 255.255.255.0

计算结点
auto eth0
iface eth0 inet static
IP address: 10.0.0.31
Network mask: 255.255.255.0 (or /24)
Default gateway: 10.0.0.1
auto eth1
iface eth1 inet static
address 192.168.2.102
netmask 255.255.255.0

设置/etc/hosts文件包含以下内容
# controller
10.0.0.11 controller
# network
10.0.0.11 network
# compute1
10.0.0.31 compute1

关于密码 可随机生成 openssl rand -hex 10

密码变量 描述
Database password (no variable used) Root password for the database
RABBIT_PASS Password of user guest of RabbitMQ
KEYSTONE_DBPASS Database password of Identity service
DEMO_PASS Password of user demo
ADMIN_PASS Password of user admin
GLANCE_DBPASS Database password for Image Service
GLANCE_PASS Password of Image Service user glance
NOVA_DBPASS Database password for Compute service
NOVA_PASS Password of Compute service user nova
DASH_DBPASS Database password for the dashboard
CINDER_DBPASS Database password for the Block Storage service
CINDER_PASS Password of Block Storage service user cinder
NEUTRON_DBPASS Database password for the Networking service
NEUTRON_PASS Password of Networking service user neutron
HEAT_DBPASS Database password for the Orchestration service
HEAT_PASS Password of Orchestration service user heat
CEILOMETER_DBPASS Database password for the Telemetry service
CEILOMETER_PASS Password of Telemetry service user ceilometer
TROVE_DBPASS Database password of Database service
TROVE_PASS Password of Database Service user trove

一.共同部分

安装操作系统Ubuntu 14.04 (LTS)(略)
更新源
# apt-get update
1.添加openstack icehouse 软件源
# apt-get install python-software-properties -y
# add-apt-repository cloud-archive:icehouse -y
2.更新操作系统
# apt-get update
# apt-get upgrade -y
# apt-get dist-upgrade -y
3.重启操作系统
# reboot

二.控制结点的安装
1,按装数据库mysql
# apt-get install python-mysqldb mysql-server -y
修改mysql的监听为公共IP,并将key_buffer修改为key_buffer_size
# vim /etc/mysql/my.cnf
[mysqld]
key_buffer_size = 16M
bind-address = 0.0.0.0
InnoDB生效,设置UTF-8编码为默认值
[mysqld]
default-storage-engine = innodb
collation-server = utf8_general_ci
init-connect = ‘SET NAMES utf8’
character-set-server = utf8
重启数据服务
# service mysql restart
删除mysql的匿名账号anonymous
# mysql_install_db
# mysql_secure_installation

2.安装消息服务RabbitMQ
# apt-get install rabbitmq-server
设置guest用户的密码为RABBIT_PASS
# rabbitmqctl change_password guest RABBIT_PASS

3.安装keystone认证服务
# apt-get install keystone python-keystoneclient -y
编辑/etc/keystone/keystone.conf设置后台数据库为mysql

[database]
# The SQLAlchemy connection string used to connect to the database
connection = mysql://keystone:KEYSTONE_DBPASS@controller/keystone

编辑mysql数据库初始化sql语句文件openstackdb.sql
# vim openstackdb.sql
添加如下内空容
#认证服务keystone用户以及数据库
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’localhost’ IDENTIFIED BY ‘KEYSTONE_DBPASS’;
GRANT ALL PRIVILEGES ON keystone.* TO ‘keystone’@’%’ IDENTIFIED BY ‘KEYSTONE_DBPASS’;
#映像服务glance用户及数据库
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO ‘glance’@’localhost’ IDENTIFIED BY ‘GLANCE_DBPASS’;
GRANT ALL PRIVILEGES ON glance.* TO ‘glance’@’%’ IDENTIFIED BY ‘GLANCE_DBPASS’;
#计算服务nova用户及数据库
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO ‘nova’@’localhost’ IDENTIFIED BY ‘NOVA_DBPASS’;
GRANT ALL PRIVILEGES ON nova.* TO ‘nova’@’%’ IDENTIFIED BY ‘NOVA_DBPASS’;
#网络服务neutron用户及数据库
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON neutron.* TO ‘neutron’@’localhost’ IDENTIFIED BY ‘NEUTRON_DBPASS’;
mysql> GRANT ALL PRIVILEGES ON neutron.* TO ‘neutron’@’%’ IDENTIFIED BY ‘NEUTRON_DBPASS’;

执行sql语句
#mysql -uroot -pDBpassword -c < openstackdb.sql 初始化keystone数据库 # su -s /bin/sh -c "keystone-manage db_sync" keystone 生成keystone用ADMIN_TOKEN # openssl rand -hex 10 编辑/etc/keystone/keystone.conf设置admin_token = ADMIN_TOKEN [DEFAULT] # A "shared secret" between keystone and other openstack services admin_token = ADMIN_TOKEN ... 设置日志目录 [DEFAULT] log_dir = /var/log/keystone 重起服务 # service keystone restart **默认的情况下keystone数据库表token里的数据是不被删除的,时间一长数据量增多影响性能. 所以设置定时删除.(每小时删一次,删除日志/var/log/keystone/keystone-tokenflush.log) # (crontab -l 2>&1 | grep -q token_flush) || \
echo ‘@hourly /usr/bin/keystone-manage token_flush >/var/log/keystone/
keystone-tokenflush.log 2>&1’ >> /var/spool/cron/crontabs/root
**注意/var/spool/cron/crontabs/root文件权限,权限不对,不执行
-rw——- 1 root crontab 295 Apr 30 18:32 root

编辑创建keystone用记用的脚本openstackuser.keystone
# vim openstackuser.keystone
添加如下内空容
#认证环境变里
export OS_SERVICE_TOKEN=ADMIN_TOKEN
export OS_SERVICE_ENDPOINT=http://controller:35357/v2.0
export controller=controller
#管理员用户admin
keystone user-create –name=admin –pass=admin_pass –email=ADMIN_EMAIL
keystone role-create –name=admin
keystone tenant-create –name=admin –description=”Admin Tenant”
keystone user-role-add –user=admin –tenant=admin –role=admin
keystone user-role-add –user=admin –role=_member_ –tenant=admin
#普通用户demo
keystone user-create –name=demo –pass=demo_pass –email=DEMO_EMAIL
keystone tenant-create –name=demo –description=”Demo Tenant”
keystone user-role-add –user=demo –role=_member_ –tenant=demo
#service tenant
keystone tenant-create –name=service –description=”Service Tenant”
keystone service-create –name=keystone –type=identity –description=”OpenStack Identity”
keystone endpoint-create –service sahara –region RegionOne –publicurl “http://$(controller):8386/v1.1/\$(tenant_id)s” –adminurl “http://$(controller):8386/v1.1/\$(tenant_id)s” –internalurl “http://$(controller):8386/v1.1/\$(tenant_id)s”
#映像服务glance用户
keystone user-create –name=glance –pass=glan_pass –email=glance@example.com
keystone user-role-add –user=glance –tenant=service –role=admin
keystone service-create –name=glance –type=image –description=”OpenStack Image Service”
keystone endpoint-create –service-id=$(keystone service-list | awk ‘/ image / {print $2}’) –publicurl=http://$(controller):9292  –internalurl=http://$(controller):9292 –adminurl=http://$(controller):9292
#计算服务nova用户
keystone user-create –name=nova –pass=NOVA_PASS –email=nova@example.com
keystone user-role-add –user=nova –tenant=service –role=admin
keystone service-create –name=nova –type=compute –description=”OpenStack Compute”
keystone endpoint-create –service-id=$(keystone service-list | awk ‘/ compute / {print $2}’) –publicurl=http://$(controller):8774/v2/%\(tenant_id\)s –internalurl=http://$(controller):8774/v2/%\(tenant_id\)s –adminurl=http://$(controller):8774/v2/%\(tenant_id\)s
#网络neutorn用户
keystone user-create –name neutron –pass neutron_pass –email neutron@example.com
keystone user-role-add –user neutron –tenant service –role admin
keystone service-create –name neutron –type network –description “OpenStack Networking”
keystone endpoint-create –service-id $(keystone service-list | awk ‘/ network / {print $2}’) –publicurl http://$(controller):9696 –adminurl http://$(controller):9696 –internalurl http://$(controller):9696

执行脚本语句
#source openstackuser.keystone

设置认证环境变里文件admin-openrc.sh
# vim admin-openrc.sh
添加如下内空容
export OS_USERNAME=admin
export OS_PASSWORD=admin_pass
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://controller:35357/v2.0
使环境变里生效
# source admin-openrc.sh

验证keystone安装的正确性
# keystone token-get
# keystone user-list

4.安装Image映像服务
安装服务
# apt-get install glance python-glanceclient
设置mysql数据库连接
编辑 /etc/glance/glance-api.conf 和 /etc/glance/glanceregistry.conf 中的 [database]项
[database]
connection = mysql://glance:GLANCE_DBPASS@controller/glance

设置映像服服务的消息服务器
[DEFAULT]
rpc_backend = rabbit
rabbit_host = controller
rabbit_password = RABBIT_PASS

初始化映像服务glance数据库数据
su -s /bin/sh -c “glance-manage db_sync” glance
设置glance的keystone认证信息
编辑配置文件 /etc/glance/glance-api.conf 和 /etc/glance/glanceregistry.conf
[keystone_authtoken]
auth_uri = http://controller:5000
auth_host = controller
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = glance_pass
[paste_deploy]
flavor = keystone

重新启动glance 服务使配置生效
# service glance-registry restart
# service glance-api restart

验证安装的有效性(假设本地以有cirros-0.3.2-x86_64-disk.img或者可以联网下载)
source admin-openrc.sh
$ glance image-create –name “cirros-0.3.2-x86_64” –disk-format qcow2 \
–container-format bare –is-public True –progress < cirros-0.3.2-x86_64-disk.img 或者 glance image-create --name="cirros-0.3.2-x86_64" --disk-format=qcow2 \ --container-format=bare --is-public=true \ --copy-from http://cdn.download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64- disk.img #glance image-list 5.安装compute计算服务 安装服务 # apt-get install nova-api nova-cert nova-conductor nova-consoleauth \ nova-novncproxy nova-scheduler python-novaclient 设置mysql数据库连接 编辑配置文件/etc/nova/nova.conf [database] connection = mysql://nova:NOVA_DBPASS@controller/nova 设置计算服服务的消息服务器 [DEFAULT] rpc_backend = rabbit rabbit_host = controller rabbit_password = RABBIT_PASS 设置vnc代理 [DEFAULT] my_ip = 10.0.0.11 vncserver_listen = 10.0.0.11 vncserver_proxyclient_address = 10.0.0.11 初始化计算服务nova数据库数据 su -s /bin/sh -c "nova-manage db sync" nova 设置nova的keystone认证信息 编辑配置文件/etc/nova/nova.conf [DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_host = controller auth_port = 35357 auth_protocol = http admin_tenant_name = service admin_user = nova admin_password = nova_pass 重新启动nova服务使配置生效 # service nova-api restart # service nova-cert restart # service nova-consoleauth restart # service nova-scheduler restart # service nova-conductor restart # service nova-novncproxy restart 验证安装的有效性 #nova image-list 6.安装neutron网络服务 安装服务 #apt-get install neutron-server neutron-plugin-ml2 设置mysql数据库连接 编辑配置文件/etc/neutron/neutron.conf [database] connection = mysql://neutron:NEUTRON_DBPASS@controller/neutron 设置网络服务的消息服务器 [DEFAULT] rpc_backend = neutron.openstack.common.rpc.impl_kombu rabbit_host = controller rabbit_password = RABBIT_PASS 设置neutron的keystone认证信息 编辑配置文件/etc/neutron/neutron.conf [DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_host = controller auth_port = 35357 auth_protocol = http admin_tenant_name = service admin_user = neutron admin_password = neutron_pass 设置网络变更消息通知 编辑/etc/neutron/neutron.conf [DEFAULT] notify_nova_on_port_status_changes = True notify_nova_on_port_data_changes = True nova_url = http://controller:8774/v2 nova_admin_username = nova nova_admin_tenant_id = SERVICE_TENANT_ID nova_admin_password = nova_pass nova_admin_auth_url = http://controller:35357/v2.0 *SERVICE_TENANT_ID的取得, 如下所示SERVICE_TENANT_ID为f727b5ec2ceb4d71bad86dfc414449bf #source admin-openrc.sh #keystone tenant-get service +-------------+----------------------------------+ | Property | Value | +-------------+----------------------------------+ | description | Service Tenant | | enabled | True | | id | f727b5ec2ceb4d71bad86dfc414449bf | | name | service | +-------------+----------------------------------+ 设置网络路由模块插件为(ML2) 编辑/etc/neutron/neutron.conf [DEFAULT] core_plugin = ml2 service_plugins = router allow_overlapping_ips = True 注释掉/etc/neutron/neutron.conf中 [service_providers]所有有效的部分 设置网络路由模块插件(ML2) 编辑/etc/neutron/plugins/ml2/ml2_conf.ini [ml2] type_drivers = gre tenant_network_types = gre mechanism_drivers = openvswitch [ml2_type_gre] tunnel_id_ranges = 1:1000 [securitygroup] firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver enable_security_group = True 编辑 /etc/nova/nova.conf中的网络服务 [DEFAULT] #network serice network_api_class = nova.network.neutronv2.api.API neutron_url = http://controller:9696 neutron_auth_strategy = keystone neutron_admin_tenant_name = service neutron_admin_username = neutron neutron_admin_password = neutron_pass neutron_admin_auth_url = http://controller:35357/v2.0 linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver firewall_driver = nova.virt.firewall.NoopFirewallDriver security_group_api = neutron #metadata service_neutron_metadata_proxy = true neutron_metadata_proxy_shared_secret = METADATA_SECRET 重新启动相关服务使配置生效 # service nova-api restart # service nova-scheduler restart # service nova-conductor restart # service neutron-server restart ****以下的网络服务安装在网络结点之上,对于手顺中的环境,因控制网络结点合二为一, 所以也在按制结点执行.为了同时适应网络结点单独安装的情况,中间的配置文件有重复的地方. 开启网卡间的IP转发 编辑 /etc/sysctl.conf net.ipv4.ip_forward=1 net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.default.rp_filter=0 使配置效sysctl -p 安装网络服务 apt-get install neutron-plugin-ml2 neutron-plugin-openvswitch-agent openvswitch-datapath-dkms \ neutron-l3-agent neutron-dhcp-agent 设置mysql数据库连接 编辑配置文件/etc/neutron/neutron.conf [database] connection = mysql://neutron:NEUTRON_DBPASS@controller/neutron 设置网络服务的消息服务器 [DEFAULT] rpc_backend = neutron.openstack.common.rpc.impl_kombu rabbit_host = controller rabbit_password = RABBIT_PASS 设置neutron的keystone认证信息 编辑配置文件/etc/neutron/neutron.conf [DEFAULT] auth_strategy = keystone [database] connection = mysql://neutron:NEUTRON_DBPASS@controller/neutron [keystone_authtoken] auth_uri = http://controller:5000 auth_host = controller auth_port = 35357 auth_protocol = http admin_tenant_name = service admin_user = neutron admin_password = neutron_pass 设置网络路由模块插件为(ML2) 编辑/etc/neutron/neutron.conf [DEFAULT] core_plugin = ml2 service_plugins = router allow_overlapping_ips = True 注释掉/etc/neutron/neutron.conf中 [service_providers]所有有效的部分 设置网络服务插件Layer-3 (L3) agent 编辑/etc/neutron/l3_agent.ini [DEFAULT] interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver use_namespaces = True 设置网络服务插件DHCP agent 编辑/etc/neutron/dhcp_agent.ini [DEFAULT] interface_driver = neutron.agent.linux.interface.OVSInterfaceDriver dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq use_namespaces = True 设置网络服务插件metadata agent 编辑/etc/neutron/metadata_agent.ini [DEFAULT] auth_url = http://controller:5000/v2.0 auth_region = regionOne admin_tenant_name = service admin_user = neutron admin_password = neutron_pass nova_metadata_ip = controller metadata_proxy_shared_secret = METADATA_SECRET 设置网络路由模块插件(ML2) 编辑/etc/neutron/plugins/ml2/ml2_conf.ini [ml2] type_drivers = gre tenant_network_types = gre mechanism_drivers = openvswitch [ml2_type_gre] tunnel_id_ranges = 1:1000 [ovs] local_ip =192.168.2.101 #(INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS eth1的ip ) tunnel_type = gre enable_tunneling = True [securitygroup] firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver enable_security_group = True 重启openvswitch服务 # service openvswitch-switch restart 添加网桥bt-int,br-ex #ovs-vsctl add-br br-int #ovs-vsctl add-br br-ex 设br-ex的IP为虚拟外网的网关 #ifconfig br-ex 192.168.122.1 (如果有三块网卡可以把网卡三设置连接外网的接口 #ovs-vsctl add-port br-ex eth2 此时网卡eth2的promisc 要设为on auto eth2 iface eth2 inet manual up ifconfig $IFACE 0.0.0.0 up up ip link set $IFACE promisc on down ip link set $IFACE promisc off down ifconfig $IFACE down ) 重启网络服务使配置生效 # service neutron-plugin-openvswitch-agent restart # service neutron-l3-agent restart # service neutron-dhcp-agent restart # service neutron-metadata-agent restart 7.安装dashboard网页管理界面 安装服务dashboard服务 # apt-get install apache2 memcached libapache2-mod-wsgi openstackdashboard 移除ubuntu主题 # apt-get remove --purge openstack-dashboard-ubuntu-theme 设置缓存管理组件(memcached,设置端口要与实际memcached.conf配置一致) 编译 /etc/openstack-dashboard/local_settings.py CACHES = { 'default': { 'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION' : '127.0.0.1:11211' } } 设置OpenStack地址 编译 /etc/openstack-dashboard/local_settings.py OPENSTACK_HOST = "10.0.0.11" 重启服务 # service apache2 restart # service memcached restart 确认安装 http://controller/horizon (如想通过访问http://controller直接跳转,http://controller/horizon 可修改 /etc/apache2/conf-enabled/openstack-dashboard.conf 添加RedirectMatch permanent ^/$ /horizon/ ) 二.计算结点的安装 1.安装python的mysql客户端支持 # apt-get install python-mysqldb 2.安装compute计算服务 安装服务 # apt-get install nova-compute-kvm python-guestfs 使普通用户可以使用hypervisor服务(qemu 和libguestfs.) # dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-$(uname -r) 应对将来系统升级新建文件/etc/kernel/postinst.d/statoverride 内空如下: #!/bin/sh version="$1" # passing the kernel version is required [ -z "${version}" ] && exit 0 dpkg-statoverride --update --add root root 0644 /boot/vmlinuz-${version} 设置文件的执行权 # chmod +x /etc/kernel/postinst.d/statoverride 设置mysql数据库连接,消息服务 编辑配置文件/etc/nova/nova.conf [database] connection = mysql://nova:NOVA_DBPASS@controller/nova [DEFAULT] rpc_backend = rabbit rabbit_host = controller rabbit_password = RABBIT_PASS 设置vnc代理 [DEFAULT] my_ip = 10.0.0.31 vnc_enabled = True vncserver_listen = 0.0.0.0 vncserver_proxyclient_address = 10.0.0.11 novncproxy_base_url = http://10.0.0.11:6080/vnc_auto.html 设置nova的keystone认证信息 编辑配置文件/etc/nova/nova.conf [DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_host = controller auth_port = 35357 auth_protocol = http admin_tenant_name = service admin_user = nova admin_password = nova_pass 设置glance服务的位置 编辑配置文件/etc/nova/nova.conf [DEFAULT] glance_host = controller 确认cpu对KVM的支持 egrep -c '(vmx|svm)' /proc/cpuinfo 若结果为0 编辑/etc/nova/nova-compute.conf [libvirt] virt_type = qemu 若结果大于0 virt_type = kvm 重新启动nova服务使配置生效 # service nova-compute restart 验证安装的有效性 (在按制结点执行,如果安装成功可看到新加的计算结点的信息) #service nova-compute restart 2.安装网络代理组件 开启网卡间的信任机能(禁用欺骗保护) 编辑 /etc/sysctl.conf net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.default.rp_filter=0 使配置效sysctl -p 安装网络服务组件 apt-get install neutron-common neutron-plugin-ml2 neutron-pluginopenvswitch-agent \ openvswitch-datapath-dkms 设置网络服务的消息服务器 编辑配置文件/etc/neutron/neutron.conf [DEFAULT] rpc_backend = neutron.openstack.common.rpc.impl_kombu rabbit_host = controller rabbit_password = RABBIT_PASS [database] connection = mysql://neutron:NEUTRON_DBPASS@controller/neutron 设置neutron的keystone认证信息 编辑配置文件/etc/neutron/neutron.conf [DEFAULT] auth_strategy = keystone [keystone_authtoken] auth_uri = http://controller:5000 auth_host = controller auth_port = 35357 auth_protocol = http admin_tenant_name = service admin_user = neutron admin_password = neutron_pass 设置网络路由模块插件为(ML2) 编辑/etc/neutron/neutron.conf [DEFAULT] core_plugin = ml2 service_plugins = router allow_overlapping_ips = True 注释掉/etc/neutron/neutron.conf中 [service_providers]所有有效的部分 设置网络路由模块插件(ML2) 编辑/etc/neutron/plugins/ml2/ml2_conf.ini [ml2] type_drivers = gre tenant_network_types = gre mechanism_drivers = openvswitch [ml2_type_gre] tunnel_id_ranges = 1:1000 [ovs] local_ip =192.168.2.102 #(INSTANCE_TUNNELS_INTERFACE_IP_ADDRESS eth1的ip ) tunnel_type = gre enable_tunneling = True [securitygroup] firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver enable_security_group = True 重启openvswitch服务 # service openvswitch-switch restart 添加网桥bt-int #ovs-vsctl add-br br-int 编辑 /etc/nova/nova.conf中的网络服务 [DEFAULT] #network serice network_api_class = nova.network.neutronv2.api.API neutron_url = http://controller:9696 neutron_auth_strategy = keystone neutron_admin_tenant_name = service neutron_admin_username = neutron neutron_admin_password = neutron_pass neutron_admin_auth_url = http://controller:35357/v2.0 linuxnet_interface_driver = nova.network.linux_net.LinuxOVSInterfaceDriver firewall_driver = nova.virt.firewall.NoopFirewallDriver security_group_api = neutron 重启相关服务使配置生效 # service nova-compute restart # service neutron-plugin-openvswitch-agent restart

李海涛

关于李海涛

李海涛 lihaitao 山水 lihato 开源软件研究与服务
此条目发表在OpenStack开源云分类目录。将固定链接加入收藏夹。