找回密码
 注册
查看: 5361|回复: 5

CentOS部署OpenStack-Stein全过程

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2019-10-8 08:02:12 | 显示全部楼层 |阅读模式
安装安装openstack-stein软件源 yum install centos-release-openstack-stein -y安装NTP服务 yum install chrony -y安装openstack客户端 yum install python-openstackclient openstack-selinux -y安装数据库1安装mariadb-server pyhont2-pymysqlyum install mariadb mariadb-server python2-pymysql -y 复制代码配置数据库vi /etc/my.cnf.d/mariadb-server.cnf# modify[mysqld]bind-address=192.168.122.11default-storage-engine=innodbinnodb_file_per_table=onmax_connections=4096collation-server=utf8_general_cicharacter-set-server=utf8复制代码启动服务并执行安全检查systemctl start mariadb systemctl enable mariadbmysql_secure_installation复制代码添加开放端口 firewall-cmd --zone=internal --add-port=3306/tcp --permanent安装消息服务rabbit2安装 yum install rabbitmq-server -y启动服务systemctl start rabbitmq-serversystemctl enable rabbitmq-server复制代码创建消息服务用户 rabbitmqctl add_user rbtmq user_passwd授权用户读写权限 rabbitmqctl set_permissions rbtmq ".*" ".*" ".*"添加开放端口 firewall-cmd --zone=internal --add-port=5672/tcp --permanent安装认证缓存memcached3安装 yum install memcached python-memcached -y配置vi /etc/sysconfig/memecached ## modifyOPTION="-l 127.0.0.1,::1,ops-ctr"复制代码启动服务systemctl start memecachedsystemctl enable memecached# add firewall rulefirewall-cmd --zone=internal --add-port=11211 --permanent复制代码安装etcd服务4安装 yum install etcd -y配置vi /etc/etcd/etcd.conf# modify#[Member]ETCD_DATA_DIR="/var/lib/etcd/default.etcd"ETCD_LISTEN_PEER_URLS="http://192.168.122.11:2380"ETCD_LISTEN_CLIENT_URLS="http://192.168.122.11:2379"ETCD_NAME="controller"#[Clustering]ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.122.11:2380"ETCD_ADVERTISE_CLIENT_URLS="http://192.168.122.11:2379"ETCD_INITIAL_CLUSTER="controller=http://192.168.122.11:2380"ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"ETCD_INITIAL_CLUSTER_STATE="new"复制代码启动服务systemctl start etcdsystemctl enabl etcd复制代码添加开放端口firewall-cmd --zone=internal --add-port=2379/tcp --permanentfirewall-cmd --zone=internal --add-port=2380/tcp --permanent复制代码安装placement服务10数据库create database placement;grant all on placement.* to 'plcm_db'@'localhost' identified by 'passwd';grant all on placement.* to 'plcm_db'@'%' identified by 'passwd';复制代码创建用户openstack user create --domain default \--password-prompt placementopenstackk role add --project service --user placement admin复制代码创建服务实体openstack service --name placement \--description "OpenStack Placement" placement复制代码创建endpointopenstack endpoint create --region RegionOne \placement public http://ops-ctr:8778# create internal admin endpoint like public复制代码安装组件 yum install openstack-placement-api -y配置vi /etc/placement/placement.conf[placement_database]connection=mysql+pymysql://plcm_db:passwd@ops-ctr/placement[api]auth_strategy=keystone[keystone_authtoken]auth_url=http://ops-ctr:5000/v3memcached_servers=ops-ctr:11211auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=placementpassword=passwdvi /etc/httpd/conf.d/00-placement-api.conf# add<Directory /usr/bin>    <IfVersion >= 2.4>        Require all granted    </IfVersion>    <IfVersion < 2.4>        Order allow,deny        Allow from all    </IfVersion></Directory>复制代码同步数据库 /bin/sh -c "placement-manage db sync" placement重启httpd服务 systemctl restart httpd安装openstack服务安装认证服务keystone5数据库服务# create databasecreate database keystone;# set permissiongrant all on keystone.* to 'kst_db'@'localhost' identified by '';grant all on keystone.* to 'kst_db'@'%' identified by '';复制代码安装keystone组件 yum install openstack-keystone httpd mod_wsgi -y配置vi /etc/keystone/keystone.conf[database]connection=mysql+pymysql://kst_db:passwd@ops-cont/keystone[token]provider=fernet[signing]enable=truecertfile=/etc/pki/tls/private/pub.pemkeyfile=/etc/pki/tls/private/key.pemca_certs=/etc/pki/tls/certs/cert.pemcert_required=true复制代码同步数据库 /bin/sh -c "keystone-manage db_sync" keystone初始化fernetkeystone-manage fernet_setup --keystone-user keystone --keystone-group keystonekeystone-manage credential_setup --keystone-user keystone --keystone-group=keystone复制代码创建bootstrap服务keystone-manage bootstrap --bootstrap-password passwd \--bootstrap-admin-url http://ops-ctr:5000/v3 \--bootstrap-internal-url http://ops-ctr:5000/v3 \--bootstrap-public-url http://ops-ctr:5000/v3 \--bootstrap-region-id RegionOne复制代码配置httpd服务vi /etc/httpd/conf/httpd.conf# addServerName ops-ctr# configure /etc/httpd/conf.d/wsgi-keystone.confListen 5000<VirtualHost *:5000>    # SSLEngine on    # SSLCertificateKeyFile /etc/pki/tls/private/key.pem    # SSLCertificateFile /etc/pki/tls/private/cert.pem    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}    WSGIProcessGroup keystone-public    WSGIScriptAlias / /usr/bin/keystone-wsgi-public    WSGIApplicationGroup %{GLOBAL}    WSGIPassAuthorization On    ErrorLogFormat "%{cu}t %M"    ErrorLog /var/log/apache2/keystone.log    CustomLog /var/log/apache2/keystone_access.log combined     <Directory /usr/bin>        Require all granted    </Directory></VirtualHost># create linkln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/复制代码启用ssl加密链接,参考Apache enable ssl on centos设置环境变量export OS_USERNAME=adminexport OS_PASSWORD=passwdexport OS_PROJECT_NAME=adminexport OS_USER_DOMAIN_NAME=defaultexport OS_PROJECT_DOMAIN_NAME=defaultexport OS_AUTH_URL=https://ops-ctr:5000/v3export OS_IDENTITY_API_VERSION=3复制代码创建服务用户、角色、项目和域# create domain if needopenstack domain create --description "mystack" mystack# create projectopenstack project create --domain default \--description "Service Project" serviceopenstack project create --domain default \--description "Demo Project" demo# create useropenstack user create --domain default \--password-prompt demo# create roleopenstack role create demo# set role for useropenstack role add --project service --user demo demo复制代码验证操作# unset unset OS_AUTH_URL OS_PASSWORD# request new auth tokenopenstack --os-auth-url https://ops-ctr:5000/v3 \--os-project-domain-name default \--os-user-domain-name default \--os-project-name admin \--os-username admin token issueopenstack --os-auth-url https://ops-ctr:5000/v3 \--os-project-domain-name default \--os-user-domain-name default \--os-project-name demo \--os-username demo token issue复制代码分别创建用户admin和demo的环境脚本admin-openrc---export OS_USERNAME=adminexport OS_PASSWORD=passwdexport OS_PROJECT_NAME=adminexport OS_USER_DOMAIN_NAME=defaultexport OS_PROJECT_DOMAIN_NAME=defaultexport OS_AUTH_URL=http://ops-ctr:5000/v3export OS_IDENTITY_API_VERSION=3export OS_IMAGE_API_VERSION=2 demo-openrc---export OS_USERNAME=demoexport OS_PASSWORD=passwdexport OS_PROJECT_NAME=demoexport OS_USER_DOMAIN_NAME=defaultexport OS_PROJECT_DOMAIN_NAME=defaultexport OS_AUTH_URL=http://ops-ctr:5000/v3export OS_IDENTITY_API_VERSION=3复制代码安装镜像服务glance6数据库create database glance;# set permission to glc_db on glance like keystone复制代码创建用户openstack user create --domain default \--password-prompt glanceopenstack role add --project service --user glance admin复制代码创建服务实体openstack service create \--name glance \--description "OpenStack Image" image复制代码创建服务endpointopenstack endpoint create --region RegionOne \image public http://ops-ctr:9292# create admin internal endpoint like public# add port 9292 by firewall-cmd复制代码安装glance组件 yum install openstack-glance -y配置vi /etc/glance/glance-api.conf[database]connection=mysql+pymysql://glc_db:passwd@ops-ctr/glance[keystone_authtoken]www_authenticate_uri=http://ops-ctr:5000auth_url=http://ops-ctr:5000memcached_servers=ops-ctr:11211auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=glancepassword=passwd[paste_deploy]flavor=keystone[glance_store]stores=file,httpdefault_store=filefilesystem_store_datadir=/var/lib/glance/images/vi /etc/glance/glance-registry.conf[database]connection=mysql+pymysql://glc_db:passwd@ops-ctr/glancewww_authenticate_uri=http://ops-ctr:5000auth_url=http://ops-ctr:5000memcached_servers=ops-ctr:11211auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=glancepassword=passwd[paste_deploy]flavor=keystone复制代码同步数据库 glance-manage db_sync glance启动服务systemctl start openstack-glance-api openstack-glance-registrysystemctl enable openstack-glance-api openstack-glance-registry复制代码如果glance-api服务启动失败,尝试修改/var/lib/glance/images和/var/log/glance/api.log的所属用户和组为glance:glance 10. 验证操作. admin-openrc# create image use cirros.imgopenstack image create "cirros" \--file /home/user/cirros-0.4.0-x86_64-disk.img \--disk-format qcow2 \--container-format bare \--public# show imageopenstack image list复制代码安装计算服务nova8控制节点中安装nova服务数据库# create databasecreate database nova;create database nova_api;create database nova_cell0;# set permission like othersgrant all on nova.* to 'nva_db'@'localhost' identified by 'passwd';复制代码创建用户openstack user create --domain default \--password-prompt novaopenstack role add --project service --user nova admin复制代码创建服务实体openstack service create --name nova \--description "OpenStack Compute" compute复制代码创建endpointopenstack endpoint create --region RegionOne \compute public http://ops-ctr:8774/v2.1# create internal admin endpoint like public# add port to firewall复制代码安装nova组件 yum install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-console -y配置组件vi /etc/nova/nova.conf[DEFAULT]enabled_apis=osapi_compute,metadatatransport_url=rabbit://rbtmq:paswd@ops-ctrmy_ip=192.168.122.11use_neutron=truefirewall_driver=nova.virt.firewall.NoopFirewallDriver[database]connection=mysql+pymysql://nva_db:passwd@ops-ctr/nova[api_database]connection=mysql+pymysql://nva_db:passwd@ops-ctr/nova_api[api]auth_strategy=keystone[keystone_authtoken]auth_url=http://ops-ctr:5000/v3memcached_servers=ops-ctr:11211auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=novapassword=passwd[vnc]enabled=trueserver_listen=$my_ipserver_proxyclient_address=$my_ip[glance]api_servers=http://ops-ctr:9292[oslo_concurrency]lock_path=/var/lib/nova/tmp[placement]region_name=RegionOneauth_url=http://ops-ctr:5000/v3auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=placementpassword=passwd[scheduler]discover_hosts_in_cells_interval=300复制代码同步数据库/bin/sh -c "nova-manage api_db sync" nova/bin/sh -c "nova-manage cell_v2 map_cell0" nova/bin/sh -c "nova-manage cell_v2 create_cell --name cell1 --verbose" nova/bin/sh -c "nova-manage db sync" nova# show cellsnova-manage cell_v2 list_cells nova复制代码启动服务systemctl start openstack-nova-api openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxysystemctl enable openstack-nova-api openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy复制代码将计算节点添加到cell数据库# show compute serviceopenstack compute service list # discover compute node/bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova复制代码确认操作# show endpointopenstack catalog list# show imageopenstack image listnova-status upgrade check复制代码计算节点中安装nova服务9安装组件 yum install openstack-nova-compute -y配置vi /etc/nova/nova.conf[DEFAULT]enabled_apis=osapi_compute,metadatatransport_url=rabbit://rbtmq:passwd@ops-ctrmy_ip=192.168.122.12use_neutron=truefirewall_driver=nova.virt.firewall.NoopFirewallDriver[api]auth_strategy-keystone[keystone_authtoken]auth_url=http://ops-ctr:5000/v3memcached_servers=ops-ctr:11211auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=novapassword=passwd[vnc]enabled=trueserver_listen=0.0.0.0server_proxyclient_address=$my_ipnovncproxy_base_url=http://ops-ctr:6080/vnc_auto.html[glance]api_servers=http://ops-ctr:9292[oslo_concurrency]lock_path=/var/lib/nova/tmp[placement]region_name=RegionOneauth_url=http://ops-ctr:5000/v3auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=placementpassword=passwd[libvirt]virt_type=qemu复制代码启用虚拟化egrep -c '(vmx|svm)' /proc/cpuinfo结果:0-qemu复制代码启动服务systemctl start lilbvirtd openstack-nova-computesystemctl enable lilbvirtd openstack-nova-compute复制代码安装网络服务neutron控制节点数据库create database neutron;grant all on neutron.* to 'ntr_db'@'localhost' identified by 'passwd';grant all on neutron.* to 'ntr_db'@'%' identified by 'passwd';复制代码创建用户openstack user create --domain default \--password-prompt neutronopenstack role add --project service --user neutron admin复制代码创建服务实体和endpoint创建网络私有网络安装组件 yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linux-bridge ebtables -y配置vi /etc/neutron/neutron.conf[DEFAULT]core_plugin=ml2service_plugins=routerallow_overlapping_ips=truetransport_url=rabbit://rbtmq:passwd@ops-ctrauth_strategy=keystonenotify_nova_on_port_status_changes=truenotify_nova_on_port_data_changes=true[database]connection=mysql+pymysql://ntr_db:passwd@ops-ctr/neutron[keystone_authtoken]www_authenticate_uri=http://ops-ctr:5000auth_url=http://ops-ctr:5000memcached_servers=ops-ctr:11211auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=neutronpassword=passwd[nova]auth_url=http://ops-ctr:5000auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=neutronpassword=passwd[oslo_concurrency]lock_path=/var/lib/neutron/tmpvi /etc/neutron/plugins/ml2/ml2_conf.ini[ml2]type_drivers=flat,vlan,vxlantenant_network_types=vxlanmechanism_drivers=linuxbridge,l2populationextension_drivers=pot_security[ml2_type_flat]flat_networks=provider[ml2_type_vxlan]vni_ranges=1:1000[securitygroup]enable_ipset=truevi /etc/neutron/plugins/ml2/linuxbridge_agent.ini[linux_bridge]physical_interface_mappings=provider:eth1[vxlan]enable_vxlan=truelocal_ip=192.168.122.11l2_population=true[securitygroup]enable_security_group=truefirewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDrivervi /etc/neutron/l3_agent.ini[DEFAULT]interface_driver=linuxbridgevi /etc/neutron/dhcp_agent.ini[DEFAULT]interface_driver=linuxbridgedhcp_driver=neutron.agent.linux.dhcp.Dnsmasqenable_isolated_metadata=true复制代码配置元数据vi /etc/neutron/metadata_agent.ini[DEFAULT]nova_metadata_host=ops-ctrmetadata_proxy_shared_secret=passwd复制代码配置nova服务vi /etc/nova/nova.conf[neutron]url=http://ops-ctr:9696auth_url=http://ops-ctr:5000auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=neutronpassword=passwdservice_metadata_proxy=truemetadata_proxy_shared_secret=passwd复制代码同步数据库ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini/bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron复制代码启动服务systemctl restart openstack-nova-apisystemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent neutron-l3-agentsystemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent neutron-l3-agent复制代码验证操作 openstack network agent list 计算节点有1个服务,控制节点有4个服务计算节点安装组件 yum install openstack-neutron-linuxbridge ebtables ipset -y配置vi /etc/neutron/neutron.conf[DEFAULT]transport_url=rabbit://rbtmq:passwd@ops-ctrauth_strategy=keystone[keystone_authtoken]www_authenticate_uri=http://ops-ctr:5000auth_url=http://ops-ctr:5000memcached_servers=ops-ctr:11211auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=neutronpassword=passwd[oslo_concurrency]lock_path=/var/lib/neutron/tmpvi /etc/nova/nova.conf[neutron]url=http://ops-ctr:9696auth_url=http://ops-ctr:5000auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=neutronpassword=passwdvi /etc/neutron/plugins/ml2/linuxbridge_agent.ini[linux_bridge]physical_interface_mappings=provider:eth1[vxlan]enable_vxlan=truelocal_ip=192.168.122.12l2_population=true[securitygroup]enable_security_group=truefirewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver 复制代码启动服务systemctl restart openstack-nova-computesystemctl start neutron-linuxbridge-agentsystemctl enable neutron-linuxbridge-agent复制代码安装UI服务horizon12安装组件 yum install openstack-dashboard -y配置vi /etc/openstack-dashboard/local_settingsOPENSTACK_HOST="ops-ctr'ALLOW_HOSTS=['*', ]SESSION_ENGINE='django.contrib.sessions.backends.cache'CACHE={    'default':{        'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',        'LOCALTION':'ops-ctr:11211',    }}OPENSTACK_KEYSTONE_URL="http://%s:5000/v3 % OPENSTACK_HOST"OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT=True# True要使用大写,用小写会报错OPENSTACK_VERSIONS={    "identity":3,    "image":2,    "volume":3,}OPENSTACK_KEYSTONE_DEFAULT_DOMAIN="default"OPENSTACK_KEYSTONE_DEFAULT_ROLE="demo"TIME_ZONE="Asia/Shanghai"vi /etc/httpd/conf.d/openstack-dashboard.conf# addWSGIApplicationGroup %{GLOBAL}复制代码重启服务systemctl restart httpd memcached复制代码添加一个存储节点控制节点13数据库create database cinder;grant all on cinder.* to 'cid_db'@'localhost' identified by 'passwd';复制代码创建用户、角色、endpoint和2个服务:cinderv2,cinderv3,类型分别是volumev2,volumev3v2 endpoint地址http://ops-ctr:8776/v2/%(project_id)sv3 endpoint地址http://ops-ctr:8776/v3/%(project_id)s安装组件 yum install openstack-cinder -y配置vi /etc/cinder/cinder.conf[DEFAULT]transport_url=rabbit://rbtmq:passwd@ops-ctrauth_strategy=keystonemy_ip=192.168.122.11[database]connection=mysql+pymysql://cid_db:passwd@ops-ctr/cinder[keystone_authtoken]www_authenticate_uri=http://ops-ctr:5000auth_url=http://ops-ctr:5000memcached_servers=ops-ctr:11211auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=cinderpassword=passwd[oslo_concurrency]lock_path=/var/lib/cinder/tmp复制代码同步数据库 /bin/sh -c "cinder-manage db sync" cinder配置计算服务使用块存储vi /etc/nova/nova.conf# add[cinder]os_region_name=RegionOne复制代码启动服务systemctl restart openstack-nova-apisystemctl start openstack-cinder-api openstack-cinder-schedulersystemctl enable openstack-cinder-api openstack-cinder-scheduler复制代码检查操作 openstack volume service list存储节点安装组件 yum install lvm2 device-mapper-persistent-data -y创建逻辑分区 pvcreate /dev/vdb创建逻辑卷组 vgcreate cinder /dev/vdb添加过滤器vi /etc/lvm/lvm.conffilter=["a/dev/vda/","a/dev/vdb/","r/.*/"]复制代码安装cinder组件 yum install openstack-cinder targetcli python-keystone -y配置vi /etc/cinder/cinder.conf[DEFAULT]transport_url=rabbit://rbtmq:passwd@ops-ctrauth_strategy=keytonemy_ip=192.168.122.13enabled_backends=lvmglance_api_servers=http://ops-ctr:9292[database]connection=mysql+pymysql://cid_db:passwd@ops-ctr/cinder[keystone_authtoken]www_authenticate_uri=http://ops-ctr:5000auth_url=http://ops-ctr:5000memcached_servers=ops-ctr:11211auth_type=passwordproject_domain_name=defaultuser_domain_name=defaultproject_name=serviceusername=cinderpassword=passwd[lvm]volume_driver=cinder.volume.drivers.lvm.LVMVolumeDrivervolume_group=cindertarget_protocol=iscsitarget_helper=lioadm[oslo_concurrency]lock_path=/var/lib/cinder/tmp复制代码启动服务systemctl start openstack-cinder-volume targetsystemctl enable openstack-cinder-volume target复制代码创建实例创建公有网络15创建网络. admin-openrc# 使用provider创建1个flat类型的网络,名称为provideropenstack network create \--share --external \--provider-physical-network provider \--provider-network-type flat provider复制代码创建子网使用创建的provider网络,创建1个192.168.0.200-240范围的子网openstack subnet create \--network provider \--allocation-pool start=192.168.0.200,end=192.168.0.240 \--dns-nameserver 192.168.0.1 \--gateway 192.168.0.1 \--subnet-range 192.168.0.0/24 provider复制代码创建私有网络16创建网络. demo-openrc openstack network create selfservice复制代码创建子网openstack subnet create \--network selfservice \--dns-nameserver 192.168.0.1 \--gateway 192.168.100.1 \--subnet-range 192.168.100.0/24 selfservice复制代码创建路由 openstack router create self-router将selfservice网络添加到路由中 openstack router add subnet self-router selservice在路由中设置公网网关 openstack router set self-router --external-gateway provider检查操作. admin-openrcip netnsopenstack port list --router self-router复制代码创建实例创建最小规格的主机,内存64M,硬盘1G,名称m1.nano openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano添加密钥对 openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey添加安全规则到default安全组中# allow pingopenstack security group rule create --proto icmp default# allow ssh openstack security group rule create --proto tcp --dst-port 22 default复制代码创建主机私网主机17. demo-openrcopenstack server create --flavor m1.nano \--image cirros \--nic net-id=c34add94-6f4d-4312-92f9-ac4ad426bce7 \--security-group default \--key-name mykey self-host复制代码查看创建的主机 openstack server list虚拟终端访问主机 openstack console url show self-host 远程访问主机# create float ipopenstack floating ip create provider# associate floating ip with self-hostopenstack server add floating ip self-host 192.168.0.234# show server listopenstack server list
- P* e$ Z) \' a, k4 m

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-10-8 08:02:25 | 显示全部楼层
安装2 b& O& }; E: L- W
安装openstack-stein软件源 yum install centos-release-openstack-stein -y3 O% S1 [: o* h
安装NTP服务 yum install chrony -y. k/ [: r2 @' X4 U7 {: P3 L& p
安装openstack客户端 yum install python-openstackclient openstack-selinux -y
( W% m+ v. M" c$ t9 j安装数据库10 u8 G5 C% ]" Y
安装mariadb-server pyhont2-pymysql0 @3 t/ ?2 ]  g; E$ `0 j6 |
yum install mariadb mariadb-server python2-pymysql -y5 L  m& T6 P+ y( ^; b
6 x: ]' _9 f0 W3 S" r
复制代码
* z3 G6 I; ?7 f) k- Q7 ^配置数据库3 s% `+ R; @; K; g0 D
vi /etc/my.cnf.d/mariadb-server.cnf
, @) \" v3 s; p+ ?5 _" ?0 s1 r# modify
+ Q2 v, _2 ^: i7 T" @[mysqld]
" W2 k/ I0 _% a2 r% u" [3 }bind-address=192.168.122.11, O  _" V) N) I. f$ S
default-storage-engine=innodb
" {  \7 S8 i5 z- x+ l2 }) x) f+ ^innodb_file_per_table=on
) H. Y4 v# Y8 ^1 _: {max_connections=4096) K' g7 }$ {% f$ P5 r% k/ Z5 t& d
collation-server=utf8_general_ci
6 t: B; m% b  wcharacter-set-server=utf8
! N% H) f$ I5 X( F) P# o复制代码4 g+ F- \- T0 R
启动服务并执行安全检查- \0 [( P. q  ~2 k, W
systemctl start mariadb 2 u7 n! t4 e! [2 K
systemctl enable mariadb* {6 C& z7 q  w1 C) p0 h
mysql_secure_installation: Q3 W5 \8 z# @2 G9 a/ }8 Y3 B
复制代码3 r  s5 I1 f( e3 p% {$ w0 q
添加开放端口 firewall-cmd --zone=internal --add-port=3306/tcp --permanent
9 {# M3 M: E" W# V- ^! |安装消息服务rabbit2
8 q% ~9 G, i) f" L; P安装 yum install rabbitmq-server -y$ ]) p  m* D% Z
启动服务$ L+ ]- |; y; _/ t! p
systemctl start rabbitmq-server( M! j! H& }  C$ |, L' ?8 j
systemctl enable rabbitmq-server
% R5 i7 d" B  Y& T复制代码, u, k- ?$ P; _
创建消息服务用户 rabbitmqctl add_user rbtmq user_passwd" t/ |8 A3 j3 ]( H$ @9 }
授权用户读写权限 rabbitmqctl set_permissions rbtmq ".*" ".*" ".*"
9 j  r  P7 _: q' @) J: Q9 D添加开放端口 firewall-cmd --zone=internal --add-port=5672/tcp --permanent
+ \3 }6 \# c3 B9 P, W; c安装认证缓存memcached38 }6 @# d- H; r9 W) _8 A' y
安装 yum install memcached python-memcached -y
8 k0 F, P& x$ j9 X3 O8 s配置
* U; r$ P8 E% A3 s% mvi /etc/sysconfig/memecached 3 H0 e' }; f! V
## modify) e* I: j. M" P8 d" e  b
OPTION="-l 127.0.0.1,::1,ops-ctr"* v4 Z- j' l/ B# G" G# g
复制代码
/ l* D9 ~2 N6 ^8 t: [, V% ~启动服务1 l" W* O. x2 p8 d
systemctl start memecached3 p9 }9 }3 }( J0 b4 b, p( e
systemctl enable memecached! \7 o* f+ w( P
# add firewall rule% B- H: l6 O# F) H# j3 K
firewall-cmd --zone=internal --add-port=11211 --permanent( g+ _$ i& V- B- i
复制代码
7 Q3 Y$ y& e8 G5 v; X安装etcd服务4; B# D& y+ m( T, g8 x7 a' d9 S% ^
安装 yum install etcd -y
) h( f/ F% R8 p配置' E& I! E2 `3 L3 l2 S/ O' u, l
vi /etc/etcd/etcd.conf
# k' k3 O5 d5 f$ i2 E1 X# modify
6 g0 k: \; j! Z#[Member]& r/ a8 ]; d; h$ ]/ P
ETCD_DATA_DIR="/var/lib/etcd/default.etcd"
) q* K& E" g/ d" c( j. G  w, CETCD_LISTEN_PEER_URLS="http://192.168.122.11:2380"' K: P! Y/ j& b5 ]
ETCD_LISTEN_CLIENT_URLS="http://192.168.122.11:2379"
) t& \/ P1 }, C2 G& t! p, P/ K7 w- l& s# vETCD_NAME="controller"
6 [' u1 C: R( \#[Clustering]
0 Q1 ]$ ]4 u% h4 AETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.122.11:2380"
" T" F' x' e2 Z& R. _ETCD_ADVERTISE_CLIENT_URLS="http://192.168.122.11:2379"" ]7 u3 _* J' T4 [, U
ETCD_INITIAL_CLUSTER="controller=http://192.168.122.11:2380"
$ r/ J& n- ?4 y# vETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"  t5 t9 {8 o! q' f4 b' e! N
ETCD_INITIAL_CLUSTER_STATE="new"5 j4 B/ f/ z8 x4 g: _1 @# m# n
复制代码
, V1 @( F6 T6 R0 o7 o启动服务
6 v" l7 U8 s  h% V: f6 b0 O1 W  i( Q! Isystemctl start etcd+ ^. v4 h# _7 H: Z3 a* k! B
systemctl enabl etcd1 l) j8 F  Q! A9 N! |5 K
复制代码# ~; J; i/ t2 T6 E0 |
添加开放端口
% ?5 U- o3 ^' ]- ?$ S: x0 e" K. kfirewall-cmd --zone=internal --add-port=2379/tcp --permanent+ b: n- }5 t7 o* [
firewall-cmd --zone=internal --add-port=2380/tcp --permanent
; _3 U, k& V. M. P8 ?3 B4 @复制代码
) f( @6 @% m; t) d3 _安装placement服务10  n' K0 c+ z4 c) P4 E* F
数据库) H+ D8 n" H; p7 k4 h
create database placement;
! K+ S- y% \* r8 o; Igrant all on placement.* to 'plcm_db'@'localhost' identified by 'passwd';7 w/ o6 g" W8 v4 a3 K
grant all on placement.* to 'plcm_db'@'%' identified by 'passwd';/ G5 g" T6 n2 B; ?/ I' @
复制代码1 y  G0 B$ H8 o  b3 n
创建用户9 u6 w8 Z/ ~7 ?! x
openstack user create --domain default \& a: M3 p2 ]  l1 E4 v# x) Q: d! v# _
--password-prompt placement7 e: b9 X# `6 [' o; k" p* R4 y
openstackk role add --project service --user placement admin8 M* @4 y1 @- B) H# Z
复制代码
% |  O% ]: q6 ?! V& n' c7 n创建服务实体* Z, ~0 w; [' [- A  N
openstack service --name placement \
5 U: ~/ ?) C/ G! a8 k! t4 L1 \--description "OpenStack Placement" placement% |* N6 B! H" Z3 J# V7 T
复制代码
* ?! @1 {& a8 q9 H创建endpoint; B6 a$ h2 }) h
openstack endpoint create --region RegionOne \
" g) \; V+ g# O* h3 T) T/ ~placement public http://ops-ctr:8778
  N5 X$ ^3 R5 i2 G' Z- K+ E1 e# create internal admin endpoint like public
4 x9 U1 A9 M# j6 Q# I+ m+ |- N复制代码
* `( T. c6 U& e! a安装组件 yum install openstack-placement-api -y
! P8 f" j/ v, F) @7 s9 L2 G配置5 r0 N" r" [+ n& q
vi /etc/placement/placement.conf- J/ L1 w, H  D. C& {6 Y8 K
[placement_database]
/ A$ X& P2 h7 a) fconnection=mysql+pymysql://plcm_db:passwd@ops-ctr/placement5 ~' Z; g4 K/ ^" v
[api]
  H4 ~3 Q; C) h8 j4 hauth_strategy=keystone; s* f6 v/ {! D0 C$ U0 Y
[keystone_authtoken]7 ?2 I. W3 f% w$ b9 C: h. A
auth_url=http://ops-ctr:5000/v3  n; V) o9 l4 u% M6 p" ~3 `
memcached_servers=ops-ctr:112116 S6 P" n% Y$ L  e1 ^$ V
auth_type=password( O# M8 J! v4 e; s/ M/ S' O( {
project_domain_name=default8 r& `( J1 K, }8 G4 n
user_domain_name=default
+ }8 q' W+ {$ Jproject_name=service9 i8 }8 s  u" R$ g: e1 U
username=placement
9 [7 y- \$ p4 T% W* }, p+ xpassword=passwd4 P1 {7 b6 _- c4 [1 h' E
vi /etc/httpd/conf.d/00-placement-api.conf
1 @2 n- C: P5 `% n! d# add4 U- N' c/ ^. x0 Y# H7 e1 ^' e2 r
<Directory /usr/bin>
+ [; A, {+ b- @    <IfVersion >= 2.4>' K' }$ {9 V8 K; m" O" G8 j! O7 z
        Require all granted0 v$ F, U, K+ c' [9 K. ~
    </IfVersion>, a8 ?9 [4 c. n0 d
    <IfVersion < 2.4>0 C6 n% Y) ?7 u% A8 B0 }
        Order allow,deny
4 B1 E) C6 F% P6 q        Allow from all4 _4 A1 O( B# _: ~
    </IfVersion>
: `8 ?' p+ \+ m</Directory>! f4 z! `$ j5 `$ j
复制代码" D, _9 W- f0 N
同步数据库 /bin/sh -c "placement-manage db sync" placement! |, R- D: R6 w8 d; @
重启httpd服务 systemctl restart httpd' d3 O6 s1 y9 p' u" p* w, [! D! N
安装openstack服务
7 y2 V! k* \6 i) }) V- n) A安装认证服务keystone57 }% B1 x" M3 M( S& _
数据库服务
2 b1 _0 w/ _$ c9 e  N/ J' R# create database( z! e* U9 u$ I/ d# }) x( [
create database keystone;
) G! l' o( L# O7 G# set permission
: [7 w. j% h6 s; Rgrant all on keystone.* to 'kst_db'@'localhost' identified by '';
1 ^$ s3 F: D  ^- F- Y2 ngrant all on keystone.* to 'kst_db'@'%' identified by '';
( T3 J! ?3 J9 U. [1 L: t( K复制代码- H1 H* J% ], ]4 |) s* ]1 i+ O5 P
安装keystone组件 yum install openstack-keystone httpd mod_wsgi -y- I. C1 L/ P! @- p
配置% e1 h9 m' Z9 G3 @1 N
vi /etc/keystone/keystone.conf- R5 W& n" W$ D
[database]) q! L/ w" B; W
connection=mysql+pymysql://kst_db:passwd@ops-cont/keystone) q; W0 J# k3 k$ ^! T
[token]
* p- \) [9 g3 c# Yprovider=fernet
0 k9 s- S; C* _1 @% z) {[signing]
6 |! `( N! C+ {# x0 xenable=true
! D$ W: b' P4 l3 D( }. X  vcertfile=/etc/pki/tls/private/pub.pem4 ]# u5 c( z% d' e% f8 ~7 v
keyfile=/etc/pki/tls/private/key.pem& [: _/ x1 a5 G$ w
ca_certs=/etc/pki/tls/certs/cert.pem( w) q! E, ~( p6 _
cert_required=true: p  y* D& x! _  @0 k3 k5 T
复制代码
+ y' `4 g/ W4 E0 T; |4 O7 O. j$ v同步数据库 /bin/sh -c "keystone-manage db_sync" keystone
: y' ^5 l. o7 O4 u. q. \! O初始化fernet
% o" K  ^, K4 J0 O! f% j: Lkeystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
! A' |, z* ]8 n+ wkeystone-manage credential_setup --keystone-user keystone --keystone-group=keystone
7 c3 P3 R! I8 D# X+ f, n! L( c0 Y复制代码0 S; t' c6 y8 i( z6 Y. f
创建bootstrap服务. Y4 F! ]  W5 H$ l, q3 J7 ^
keystone-manage bootstrap --bootstrap-password passwd \
3 a! i" O% @/ R8 q) U0 B--bootstrap-admin-url http://ops-ctr:5000/v3 \
; ]% c* L, w2 ]  \, E3 \) D6 l--bootstrap-internal-url http://ops-ctr:5000/v3 \$ a" a- N, k- A! n6 b/ F- @: r
--bootstrap-public-url http://ops-ctr:5000/v3 \' @1 w2 ^: P% S
--bootstrap-region-id RegionOne
* q. s" P# A2 ], i' g复制代码
, g, G& o2 E$ {$ w配置httpd服务
8 P9 p. P; t' |8 z* U- Kvi /etc/httpd/conf/httpd.conf" F3 a; V# x/ M' q/ [9 T
# add# \/ P0 Q0 r- R0 `! }! k, y* y
ServerName ops-ctr
% Q" a6 y; j8 i- y3 x. Q6 S# configure /etc/httpd/conf.d/wsgi-keystone.conf0 f& ]- G; }5 N: q6 w" g
Listen 50007 U2 P, r( Y3 k& k7 ?2 o; x, P2 [
<VirtualHost *:5000>
* r. `* w  j0 X2 ^9 {7 S% a% U, B    # SSLEngine on
- I$ m0 f+ F% ^3 n# g6 v+ ]    # SSLCertificateKeyFile /etc/pki/tls/private/key.pem5 e0 E( L) g" k" d% W/ O, S) M7 B
    # SSLCertificateFile /etc/pki/tls/private/cert.pem7 R/ ]2 B) q1 e/ h" Z6 w1 F3 R
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}8 h2 }8 U' L& p) a0 e
    WSGIProcessGroup keystone-public
( u8 X& G+ X$ t3 K  p  E2 D    WSGIScriptAlias / /usr/bin/keystone-wsgi-public+ X1 s# D2 j7 {
    WSGIApplicationGroup %{GLOBAL}
, i& F0 z( `7 D$ |0 ^+ q    WSGIPassAuthorization On' M2 a0 L) f4 x( \  X
    ErrorLogFormat "%{cu}t %M": s; t/ s( J+ r9 S! l; C
    ErrorLog /var/log/apache2/keystone.log
+ d2 h- s% T3 g% G1 z# x7 E8 w( ]: o    CustomLog /var/log/apache2/keystone_access.log combined
9 H1 g6 o, |# I: ^+ b. C; {3 i
  Q# b1 Q, N* [/ [9 @- p! i4 q" T    <Directory /usr/bin>
& R2 Q" B, Y2 c. Q        Require all granted; Q3 `! o9 V/ g- p( m  j
    </Directory>
5 ?; E6 D5 O3 V4 Q! @</VirtualHost>
2 ]- e) }) L% X# create link
( r6 b$ f$ e% ?: [6 bln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/. m5 e* P! S  n' g0 J. h, E- y  l  A
复制代码
$ q; x! k3 z. z4 D- R启用ssl加密链接,参考Apache enable ssl on centos" f9 Y( N- q3 A) Q3 l9 I9 }4 y% K

( f+ _' n" K2 ^+ d7 ]设置环境变量
$ {+ A& E8 @- ^2 E) X7 n: x4 e$ m/ S' N' |
export OS_USERNAME=admin
$ @0 M4 s7 s' ~: vexport OS_PASSWORD=passwd6 j3 P" E& k+ Q3 H
export OS_PROJECT_NAME=admin
: R" J( N2 ^6 c7 _4 _) Aexport OS_USER_DOMAIN_NAME=default
: }! A4 g3 K5 U! K$ Mexport OS_PROJECT_DOMAIN_NAME=default
, f! l& R6 N8 Z3 M# o. [- r- z9 sexport OS_AUTH_URL=https://ops-ctr:5000/v3- |% U+ @2 q  R4 I
export OS_IDENTITY_API_VERSION=3
/ L+ i% Z, Y9 [0 b复制代码- O; ?( O3 D& Z& a
创建服务用户、角色、项目和域
: R$ w7 i6 W' h. H4 R' i5 T# u0 U# create domain if need& r* B' b" e( w  U/ V
openstack domain create --description "mystack" mystack+ `, p4 f# i) V
# create project! O3 g: p/ l% c6 o" K" n8 h, T
openstack project create --domain default \9 b+ }" T5 b0 d
--description "Service Project" service
  _' p5 ?* z4 v" f, ^openstack project create --domain default \9 O* F9 h& u  Y3 Z7 U
--description "Demo Project" demo
" e( l9 C7 G: _6 u" W' ?5 q( I# create user7 s: H( H) H: L
openstack user create --domain default \
: {. o  w4 U$ H+ i& J8 z--password-prompt demo
+ E$ v: \! \$ a# create role- }. {2 J6 |2 L7 ~9 H
openstack role create demo
# `9 e4 e/ s( G& z2 x& B# set role for user, d- c& ^/ r8 a8 r
openstack role add --project service --user demo demo3 \' V/ a. f7 R1 C1 X! k
复制代码3 k; `2 b- A8 G2 `* h
验证操作
' n5 g/ T1 w8 S5 b6 j; W# unset
8 m0 f# u, b# N& B& m& U7 G; k( a) Hunset OS_AUTH_URL OS_PASSWORD
* o* Y8 D4 b, I9 |# request new auth token
0 |3 R& O* V5 N& |9 j' y- Xopenstack --os-auth-url https://ops-ctr:5000/v3 \' F& J( e9 k9 E4 y0 a0 W  p
--os-project-domain-name default \
5 N. m/ P! c$ q* \' p6 n/ j--os-user-domain-name default \: g8 M/ p7 }$ y6 J! J5 E
--os-project-name admin \
+ n. U6 x! k7 T$ `--os-username admin token issue
8 L" \9 n5 A3 Y$ {! B; L1 copenstack --os-auth-url https://ops-ctr:5000/v3 \& h% L1 _# V( ]
--os-project-domain-name default \: ^% t8 e( j4 D, u& T- r0 n
--os-user-domain-name default \3 x+ z' {9 j* D1 T& |
--os-project-name demo \
5 X3 x& {+ c* p--os-username demo token issue6 Z; @" G; V2 F  C1 h' t
复制代码
- v& p, [5 x" ~. N$ P分别创建用户admin和demo的环境脚本
2 m' ~% g$ `1 e% U& G. j+ _admin-openrc1 |7 W; d8 Y! \8 q! l7 W% A1 K
---4 a! Y; Y- q5 f! h
export OS_USERNAME=admin
9 s8 o2 _! ~0 P3 t5 I) |export OS_PASSWORD=passwd
8 W/ A) @' n/ |) C3 pexport OS_PROJECT_NAME=admin. W* y( C8 c) P/ P
export OS_USER_DOMAIN_NAME=default
! }1 Y+ O3 g: Fexport OS_PROJECT_DOMAIN_NAME=default( t. ^. x8 {" P# H
export OS_AUTH_URL=http://ops-ctr:5000/v38 F% S% r, O! K, B* s! v
export OS_IDENTITY_API_VERSION=3+ _4 V! G5 U% c9 d( j( w; B- }
export OS_IMAGE_API_VERSION=2; _& J0 A% C. X7 }9 j6 ^

( A) m" y& O  [# zdemo-openrc
  U0 F7 N* _' p4 K---
% d# ~8 T0 S, X5 M# Kexport OS_USERNAME=demo% U+ e1 K/ g& M: a" N) {
export OS_PASSWORD=passwd
$ |1 E0 H  C# [3 g3 zexport OS_PROJECT_NAME=demo
4 m2 A) i+ Y4 L8 ~7 w& Oexport OS_USER_DOMAIN_NAME=default
% V; w- A2 n$ P- e2 u1 L% C& d1 C- p% R! }export OS_PROJECT_DOMAIN_NAME=default
1 h( ?  e4 F/ x5 J# r, dexport OS_AUTH_URL=http://ops-ctr:5000/v3
4 |" E( q; Z) nexport OS_IDENTITY_API_VERSION=3
% z% `- n# K/ w$ v/ f  l复制代码
+ X% E4 `( Z0 |, b7 [/ x安装镜像服务glance6
( F4 M* z( L! O* A9 }- Q5 ]数据库
8 H3 `1 ~- d9 u9 Ocreate database glance;
* V) w( Z4 w4 i; [* f9 x1 m* j, R# set permission to glc_db on glance like keystone; H0 {0 [; `1 D% a
复制代码
4 v- b8 V0 R' [; z. o  l$ V4 y创建用户
2 J% f- P: o2 V+ Y/ ~. Qopenstack user create --domain default \
6 ]' @0 K3 e, g--password-prompt glance
/ Q3 V( O# f. m4 X1 l! e/ D$ lopenstack role add --project service --user glance admin; a7 ?7 I0 n0 ~6 i) C" V8 U4 r9 r
复制代码
3 ~9 n" o3 U" w7 f  O创建服务实体
9 f5 Q3 a$ v! w) ~. g+ ^openstack service create \0 V7 _8 w7 e$ ^1 I: l7 Y7 V
--name glance \
/ J! a: C3 ?0 p+ m) ]; V& j$ @. I--description "OpenStack Image" image. h2 N5 i8 h/ ?4 ?7 L$ Q+ I1 @
复制代码
4 f3 A( z7 w6 O  H& O创建服务endpoint0 }+ ^- q& C8 A' T
openstack endpoint create --region RegionOne \
' E# Y2 a; ~7 h0 k$ L# p$ Uimage public http://ops-ctr:9292
* q5 V1 `7 S. q" G0 ]3 D; {# create admin internal endpoint like public3 H/ x# z+ \2 K7 X
# add port 9292 by firewall-cmd
7 S& d0 v8 R) S% q. `7 K复制代码& L; [0 H+ G9 t  O: G( F
安装glance组件 yum install openstack-glance -y0 K! ^+ r' `; p  [$ Z& C/ t" ^$ }7 Q
配置5 f& x8 c4 b6 \8 j
vi /etc/glance/glance-api.conf
% c& I2 I6 [' v' D[database]
3 w3 |( _! C1 E* Nconnection=mysql+pymysql://glc_db:passwd@ops-ctr/glance; A1 x1 a% r. ]6 I9 T
[keystone_authtoken]" g. M, k( b" u- F6 l2 N
www_authenticate_uri=http://ops-ctr:5000. W& ~' @- L: k" k; a/ P0 p
auth_url=http://ops-ctr:50000 _  Z: C# O3 j0 c
memcached_servers=ops-ctr:11211
' [% E8 Z7 H/ w& k; Bauth_type=password2 P0 A- E/ P  p2 D" P
project_domain_name=default& E& Y; [. t" G2 I% d: h
user_domain_name=default# ^* _; K! z* R
project_name=service7 q- S3 R; k5 W+ I6 h# e
username=glance- p2 r. A& w( Q3 e
password=passwd0 C6 d0 O  u  h6 f
[paste_deploy]6 D! k# [) T$ p4 `0 D+ r
flavor=keystone2 h# W4 b" p# O+ w
[glance_store]
9 j; Y, B. H7 U$ h* x! H2 c5 \stores=file,http0 Q5 p% a( O2 [" {+ _
default_store=file, q5 ]4 Z! Q1 ~$ ?! P
filesystem_store_datadir=/var/lib/glance/images/
+ W1 d; w* l5 F( z; F2 ~vi /etc/glance/glance-registry.conf- S# z1 }" q# U5 s" N3 Y& V
[database]! q# @$ v% W4 U0 R! h' M) h
connection=mysql+pymysql://glc_db:passwd@ops-ctr/glance) h$ Q+ b( i3 |# j
www_authenticate_uri=http://ops-ctr:5000
1 F: L' v/ o2 X* \auth_url=http://ops-ctr:5000
) H4 v' }1 b" l9 P6 Nmemcached_servers=ops-ctr:11211
( H8 r5 @2 G5 Y, H. w' W  Yauth_type=password" V: D" o0 m/ X& x8 H
project_domain_name=default
+ d5 h$ H" V9 j9 c" O+ Yuser_domain_name=default
" |' n9 B; q3 u1 Wproject_name=service
! }5 t' w/ z+ tusername=glance# O& D' `1 z4 p# q8 ]0 I) s- Z
password=passwd
2 c7 k+ `" C5 _' n. T6 }/ V[paste_deploy]1 D1 c0 U8 N. }: G! \
flavor=keystone0 s6 B. O6 }9 A1 a3 I" K! N
复制代码
% H. N8 X/ q: N& w+ v同步数据库 glance-manage db_sync glance1 N) L, _0 H  ]' q4 N1 ?( `0 S
启动服务
8 L6 C% P! ^  N- j2 ysystemctl start openstack-glance-api openstack-glance-registry
2 Y, `" B2 L! ?6 q* q& [systemctl enable openstack-glance-api openstack-glance-registry
8 Z( N2 V) H  l0 l2 S0 ?复制代码- r. I9 G0 h5 P5 p' t! L
如果glance-api服务启动失败,尝试修改/var/lib/glance/images和/var/log/glance/api.log的所属用户和组为glance:glance 10. 验证操作" h, z# `  i) u* `* w

& a9 E3 i+ h7 M- u. admin-openrc
* m3 F6 \$ X$ X6 T# create image use cirros.img9 I  g+ A; J* h3 G- h2 V1 Q5 h
openstack image create "cirros" \) j! r. T9 F$ H# `% @
--file /home/user/cirros-0.4.0-x86_64-disk.img \
( r0 T5 O# u# P) f--disk-format qcow2 \9 \. B/ c* Q9 x3 p8 d1 p  ]2 l
--container-format bare \
0 K. c6 C0 J5 `6 ?, i--public
* a6 B: x, N4 h3 Q. R# show image
, [* }4 P+ ?* \& ]' Dopenstack image list
' N2 P7 {; k9 t9 v: p+ ^# M复制代码( H: k# h6 \8 g7 m1 Y9 B
安装计算服务nova8% L: M5 E  Q& e* ]' G9 _6 j
控制节点中安装nova服务7 U9 u8 n( U" L9 A* i
数据库1 ~1 a! A" G$ x; b. y
# create database' _1 J6 ~! p* y, C9 T/ s/ B+ [1 G
create database nova;  J1 M, f2 k8 \" }
create database nova_api;
# V& N) o/ j3 N# [$ ]3 Ecreate database nova_cell0;! s0 H( v! r% I1 k% S! M" ^
# set permission like others
% k- Q) i2 o# d8 L9 `" Ygrant all on nova.* to 'nva_db'@'localhost' identified by 'passwd';
$ }/ A$ e" k2 C- k3 P复制代码2 j$ P: K. ~& ~. d+ v
创建用户7 E+ ^  V+ y) {# `6 T1 z
openstack user create --domain default \
  ]% h( c) }7 t! j* Z! X- ~--password-prompt nova7 I6 i6 ^0 R1 q' v! d
openstack role add --project service --user nova admin2 K1 F. t. q; e+ R
复制代码5 e7 Z; F3 z0 G; \
创建服务实体% ?) J2 }7 h3 d* W& d5 [
openstack service create --name nova \: {9 w3 \0 N# m' t- j# w
--description "OpenStack Compute" compute, j: Q8 J0 [+ [- R: L- D! e
复制代码
+ {6 W$ a  B5 o  D创建endpoint& Q7 B* B4 p, Q* I+ v, ?- n4 W
openstack endpoint create --region RegionOne \
. _) A$ e  Q7 O6 N- }compute public http://ops-ctr:8774/v2.1
! w& ~* @/ |9 T$ z# o# create internal admin endpoint like public
! |! {" g$ }% D0 s, q9 }# add port to firewall! W0 z8 e. A! z9 `  P; Q; U2 W
复制代码
0 ?. i: [$ h7 c2 {6 B1 x# V: Y安装nova组件 yum install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-console -y* H7 l2 ~: v- r. I  g
配置组件
( K+ r' Z) U! ^' dvi /etc/nova/nova.conf* k( X, u4 R2 A9 Y2 Z- i. n1 h  h
[DEFAULT]8 C. |/ M  o6 ~
enabled_apis=osapi_compute,metadata+ B- o7 O5 K0 j, o& l1 d
transport_url=rabbit://rbtmq:paswd@ops-ctr
" k6 e# D3 L! H# p2 hmy_ip=192.168.122.11. R; J  q) o! f5 a# M8 ~' K
use_neutron=true
& d2 k6 w6 A$ I; S8 Q( Gfirewall_driver=nova.virt.firewall.NoopFirewallDriver
) r- ~/ n' G! S8 F1 h/ v, Z) h) y[database]
; \) D" }6 p) s9 Q4 [1 ?0 Hconnection=mysql+pymysql://nva_db:passwd@ops-ctr/nova# q6 n, c# s$ z9 B& ?# h# s
[api_database]
1 t- P' @% Y& l9 [7 Tconnection=mysql+pymysql://nva_db:passwd@ops-ctr/nova_api% N3 S. r  P; }, ]% j; y
[api]
+ A7 Z0 U1 ~3 k7 X- Z( E& J9 E) N2 uauth_strategy=keystone
4 s8 B* n7 |$ v# x[keystone_authtoken]
6 f1 a' k: \5 R& o+ }4 Qauth_url=http://ops-ctr:5000/v3
, E# M6 J$ w& X# |memcached_servers=ops-ctr:11211" \$ I& I2 ]" u4 A8 K
auth_type=password5 a; _8 Q& F! b3 k! \. x1 e8 q
project_domain_name=default
. ~  [3 D3 M' E& D# v' I$ fuser_domain_name=default2 S2 I5 S% O, f; J
project_name=service* W7 h' |3 E2 I5 i) |; D+ X( i
username=nova
1 l1 G. Q5 v2 Y3 ?password=passwd2 y9 j6 a: \- K0 |: [. N' s6 ^
[vnc]$ L3 |- u; ~( e) H. G) j. r5 a
enabled=true8 N/ o$ E, o  W  L$ c% o( ~) x
server_listen=$my_ip# A9 O! ]! ^$ u6 G2 l5 @0 a3 ^
server_proxyclient_address=$my_ip
) ~6 {1 L! S: n9 G" X* r) C/ f[glance]
4 z5 j; N( t) w0 t( x' ?api_servers=http://ops-ctr:92923 k' n) b; d& F) E0 }
[oslo_concurrency]/ r! _/ d$ V. \! v. t8 M( V
lock_path=/var/lib/nova/tmp
; x; e6 @, V$ v6 e: R[placement]
* m- V+ M1 d3 h/ _5 \$ K8 G8 Y3 Dregion_name=RegionOne
5 R% c+ C5 G0 y4 }2 xauth_url=http://ops-ctr:5000/v36 _+ w& G$ r( C
auth_type=password7 T+ }2 Z$ o, j
project_domain_name=default
: ^6 j/ [) H$ Wuser_domain_name=default* P( ?8 D' d6 O% z" |" D! r
project_name=service" i) D; N) h0 M, w5 F; t3 ]3 i
username=placement. N; M' U* G/ S5 f$ j2 U
password=passwd+ R2 |4 {. A6 }4 \( S3 e
[scheduler]
; g* _- i0 `% H* [discover_hosts_in_cells_interval=300! A4 L3 D+ Z- B0 p" S, T+ o
复制代码
7 q7 M( o% t& Z: K  @) `9 x同步数据库& P& D- n/ d* l4 @) ^% C7 D/ b
/bin/sh -c "nova-manage api_db sync" nova% F% O- }0 i  C) S# G, p/ P
/bin/sh -c "nova-manage cell_v2 map_cell0" nova
& U9 X+ z  x* A7 l/bin/sh -c "nova-manage cell_v2 create_cell --name cell1 --verbose" nova
. W6 i4 B1 e$ O& Q2 `$ A. R/bin/sh -c "nova-manage db sync" nova" a8 x. g+ B+ p1 I: x
# show cells
3 w8 Y% ^! E+ ?& [5 M  tnova-manage cell_v2 list_cells nova3 z6 Z9 ^7 W! k$ e
复制代码+ L! }: o' M% x: U
启动服务  L) ~; p/ z6 c' U1 N
systemctl start openstack-nova-api openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
- |& ]+ u* @' C) q8 Gsystemctl enable openstack-nova-api openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy% p2 o. k( B+ l1 N1 F3 r
复制代码  I$ S+ T+ [% ]& G/ B! H
将计算节点添加到cell数据库
6 F1 l' z5 k; E! [! s5 u6 W# show compute service
+ c) p, w$ p1 G3 p. d. B- ^openstack compute service list & X1 E# a9 Z, J0 h5 H; d1 L! e& M4 c0 G' {
# discover compute node
9 I4 A* D& D9 E' Z/bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova& t- j$ p& A" r" n! {% X4 D
复制代码( ?! ]. z+ p; f. d2 E# a. K# T
确认操作
6 b1 M* E* `8 {8 L# show endpoint
7 p4 V: C  R4 aopenstack catalog list
& D; u0 i, d9 g* j$ Z4 u( K7 u# show image
  M8 h! n) Z  v& Y: d% m* ~7 l9 topenstack image list
  ]% k4 L) C- P2 z/ d) Enova-status upgrade check9 l8 {& n# S- ?1 T# G9 r4 w% t
复制代码
! m4 D. O5 w! B; h3 N计算节点中安装nova服务9
8 G$ a9 {9 u1 @( ^# R+ A6 g# p安装组件 yum install openstack-nova-compute -y6 }$ w: r# M; i" D& u# v, \& B' c
配置/ c, l0 z9 M& }- X
vi /etc/nova/nova.conf
9 w  q! Q/ E. L0 k[DEFAULT]# N! Y* P8 i$ j
enabled_apis=osapi_compute,metadata
- c  W& S) ]0 ~# O9 Q  \. utransport_url=rabbit://rbtmq:passwd@ops-ctr5 m8 y5 R4 f% R' o7 w/ o% \
my_ip=192.168.122.12- N8 Y& \* B2 p! _
use_neutron=true
* y7 v* [/ x0 d" E8 H! `0 Mfirewall_driver=nova.virt.firewall.NoopFirewallDriver; l/ S7 W9 f1 A9 l- h$ Q4 W7 x
[api]/ n* h' m9 ]5 Q! d5 i( ~" I
auth_strategy-keystone' l5 `" I; m' s" o/ p" _/ c/ s; E* o
[keystone_authtoken]: i& K6 n: M, l$ z0 |
auth_url=http://ops-ctr:5000/v3, N# r5 W4 e( |# y2 E3 M. y' d
memcached_servers=ops-ctr:11211( ]' _% p8 ?( c& S9 \
auth_type=password
4 `. |, q$ q' U0 V1 Hproject_domain_name=default- Z. i' s: ~  [! V0 p) b3 ^
user_domain_name=default
0 c4 Z" |6 t: N/ fproject_name=service
* v2 ]; E( Y. S. @. susername=nova" Z& [. G5 k9 ^9 H8 h
password=passwd
$ U: D) M4 c% n% b: W, v) p( R[vnc]
+ R0 c$ p8 E% D) z" s  Y4 tenabled=true' |0 Y8 k! y8 M
server_listen=0.0.0.0
( `) y; k1 g( {; m: s. }4 O0 ?0 C1 ^server_proxyclient_address=$my_ip' T" S/ p* w7 C) W5 _  }  z
novncproxy_base_url=http://ops-ctr:6080/vnc_auto.html9 G7 B$ b# D& S7 m
[glance]# n! e3 ]7 m- Z# L
api_servers=http://ops-ctr:9292
& a# m8 N# Y9 p( `7 i5 A! y& F/ L[oslo_concurrency]9 d4 f# Y7 A2 O: s
lock_path=/var/lib/nova/tmp, `' d! C: b) S0 s4 ^/ d) f/ v
[placement]% A( I- \- p! m* q
region_name=RegionOne) V6 O( k) O' f* {  U  _
auth_url=http://ops-ctr:5000/v3
) ?9 A, H" \) M, _4 nauth_type=password- V0 @1 U& z2 T8 u3 k6 j/ z
project_domain_name=default
1 W+ Z) B9 H3 X' L4 e6 j1 [user_domain_name=default( }+ W8 y, Z  r
project_name=service
; y. [& ^4 o0 K$ ~8 Q! ]username=placement/ U% t9 |! C1 j4 Q& P4 }
password=passwd
+ d- `; [/ B: k$ E[libvirt]
# q% g/ ^$ W6 t( R' q/ A% Vvirt_type=qemu) I$ p- u& ?1 O9 s/ ?
复制代码0 \. x8 n: M( m8 h/ M8 a' s9 i8 R2 z* _
启用虚拟化
, e' N. ^2 q# a+ u  b/ z5 Regrep -c '(vmx|svm)' /proc/cpuinfo  S% [) ?  N' Y3 e# o6 P& q
结果:0-qemu
4 G8 W' r7 E2 E复制代码
, |' ?0 w9 P7 ~0 @- r$ L启动服务
6 u; n+ v" \( y& T/ j4 N0 H4 usystemctl start lilbvirtd openstack-nova-compute
3 X' Z+ ]/ k, `systemctl enable lilbvirtd openstack-nova-compute
" W; ^7 D. e: U8 o) f9 m4 Z复制代码
) r9 O" r) ?4 x- E安装网络服务neutron
* g0 E6 O, M2 w4 b/ A4 \9 `2 g控制节点
! [9 u+ ?4 ?/ E* j9 Q! U7 o数据库: J2 Q% K* o- V7 V1 R" p
create database neutron;# t9 p4 M4 q, i0 ]0 F( @
grant all on neutron.* to 'ntr_db'@'localhost' identified by 'passwd';+ G" K) F- i5 H. C1 }, \* v
grant all on neutron.* to 'ntr_db'@'%' identified by 'passwd';
) h- c9 g0 g. Z4 n复制代码' ]8 y; L: Z5 ?1 p  r
创建用户
8 G1 `4 c8 m( k+ |4 B% Fopenstack user create --domain default \
! h# x7 ]3 g4 @$ i% }1 \--password-prompt neutron
& K' W* I9 y+ z- |9 yopenstack role add --project service --user neutron admin
2 q2 l' p; L: x7 q, }% K$ ~复制代码
5 m8 [# v6 d9 ]; |, I3 V创建服务实体和endpoint
) \0 t5 j% \% h创建网络
4 v2 T- t7 W* l' O" ]  U私有网络
2 `- `4 g" {9 P4 C! J' G( U- L安装组件 yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linux-bridge ebtables -y* i. \8 m8 x7 G3 c
配置
' f7 g  U5 L: Z) @2 _. I, |; Ovi /etc/neutron/neutron.conf
0 P1 Y: T5 P2 @[DEFAULT]. |* j- B1 B6 L( p% z
core_plugin=ml2
8 o4 o. s. E, j" Iservice_plugins=router
: q+ d. v  |+ o2 F; }/ Z: rallow_overlapping_ips=true
; U8 C: O/ d0 B- p1 m, a# Etransport_url=rabbit://rbtmq:passwd@ops-ctr) i  w5 {# U# ]
auth_strategy=keystone
6 I% r; \8 r' v2 k0 l. Y4 ynotify_nova_on_port_status_changes=true3 b& Y8 K* m& k0 U: x. |
notify_nova_on_port_data_changes=true
# Z: [) _2 p- ~" D[database]
0 O  H; L: n! i; U! Aconnection=mysql+pymysql://ntr_db:passwd@ops-ctr/neutron
" l( p9 z7 m; P8 O[keystone_authtoken]' Y+ V# ~" n7 K: U3 Z
www_authenticate_uri=http://ops-ctr:50008 P3 {3 m* t0 B  M& D3 v
auth_url=http://ops-ctr:50005 z( z& Q, J4 d
memcached_servers=ops-ctr:11211
# r0 x$ P) D. D5 y4 O8 Hauth_type=password8 v: T2 D  x8 X0 g
project_domain_name=default
4 O1 K& ]5 c, F, C: @7 C$ Yuser_domain_name=default) C  b+ m$ @7 _; u& N. C) X6 I
project_name=service
8 S0 i" F; E% H# ]! Fusername=neutron
6 E  W3 ^2 D" X# [+ W7 xpassword=passwd4 [1 \6 E1 w( c+ o
[nova], c! d! I: n+ _5 w
auth_url=http://ops-ctr:5000# i0 V3 d% G! Z. C' e
auth_type=password7 I* Y! C7 n: W/ e# T  p/ z
project_domain_name=default
9 O, ?. U5 P9 T  ~" }7 tuser_domain_name=default! V/ p) a- W2 L: }% l$ k5 l
project_name=service( `5 J' B8 o; q/ I$ g2 o& y, [
username=neutron
) \0 T" J( a8 J/ j3 kpassword=passwd
' m2 B2 W7 Z- d, H[oslo_concurrency]. ~' \( `" U6 i( q1 {# c1 \9 c/ N
lock_path=/var/lib/neutron/tmp' |  d6 X" `  c$ d
vi /etc/neutron/plugins/ml2/ml2_conf.ini
% i* x$ V) D1 ^+ K# V[ml2]
; e5 A' Z/ d% b* ]) \- Htype_drivers=flat,vlan,vxlan: P4 F3 D: x4 A7 f- ?
tenant_network_types=vxlan
+ g1 U, N3 N6 R/ q2 e" g& ?mechanism_drivers=linuxbridge,l2population
' L3 I# i) T3 k2 j$ D1 q5 _extension_drivers=pot_security
5 ?/ l% Q  W7 I/ C! n9 a" G[ml2_type_flat]
: r: |' G) m7 I3 T( wflat_networks=provider7 l: k- u8 {6 d' `
[ml2_type_vxlan]) E8 I- Z$ @$ t+ ^0 C4 D4 N1 H
vni_ranges=1:1000
* n8 u8 y$ @- c* f1 d[securitygroup]
; x% e! D4 E; c2 yenable_ipset=true9 \; d- p+ q5 z! R3 }. ~( C% w" z
vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini$ \/ L/ M8 {2 F9 ]4 n6 r- p
[linux_bridge]; m6 j5 S+ r& _7 u. X
physical_interface_mappings=provider:eth16 d; |/ K& C5 g/ k. W% m$ P
[vxlan]
7 J! G/ ^0 _; E0 H+ aenable_vxlan=true
0 _, V( E; c, c6 `0 Clocal_ip=192.168.122.11
+ C8 K" A, ^* t  e/ ]l2_population=true
' C" O7 d: b1 P8 O[securitygroup]9 ^+ q/ p( y) c- S
enable_security_group=true9 C& F! l+ u# J# W4 R, l9 L
firewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver& I" J) M( U$ K- g6 J
vi /etc/neutron/l3_agent.ini3 \% Y) ?/ O; P: Y
[DEFAULT]0 m/ J4 h. j6 r0 s+ d
interface_driver=linuxbridge
) E* y1 Z, h( d, k- o: Y# Lvi /etc/neutron/dhcp_agent.ini
$ o* Y0 J" R: m$ h' X, m[DEFAULT]
. h: q# x) }: y0 sinterface_driver=linuxbridge- U/ r) S7 c* z1 d
dhcp_driver=neutron.agent.linux.dhcp.Dnsmasq7 |/ @$ i3 F/ l5 v6 P" N* C/ Y
enable_isolated_metadata=true
$ B- ?2 \: a) ]; d) [复制代码" R& t9 J4 s1 U; O% [$ [5 D$ {
配置元数据4 n2 K) s. u, c% b. W& I% @
vi /etc/neutron/metadata_agent.ini9 E5 Z6 }* g" q% n* V
[DEFAULT]2 |/ r# x. u+ x* a
nova_metadata_host=ops-ctr2 r$ M8 B9 L5 E
metadata_proxy_shared_secret=passwd
1 i3 J, ^$ m0 f, p: o7 n复制代码) A1 w; i# C4 w5 q
配置nova服务9 L* T  k1 g" N9 K5 r
vi /etc/nova/nova.conf- c% Y& {7 K% D3 ~) |
[neutron]
/ o% d! }5 E  l5 ?* A+ R4 ~  qurl=http://ops-ctr:9696# ?! K" T; w0 l5 [$ r- }
auth_url=http://ops-ctr:5000
7 k7 d5 Q! [7 {% o" Rauth_type=password) t# D! `( P7 v) k9 ^
project_domain_name=default
$ c. S  ]! d5 c" c- tuser_domain_name=default; B4 Q( `: _3 |& C- Z$ N
project_name=service
9 E0 X6 b: \3 n& [username=neutron
9 x7 I7 l, s4 w/ B7 b0 S5 Rpassword=passwd2 s8 t) K' e& p- {9 U1 m
service_metadata_proxy=true0 w# Q' E2 {/ [! \% \$ h
metadata_proxy_shared_secret=passwd9 R& i: E: I) K9 V, h
复制代码) C4 B1 x$ L' u2 k( A
同步数据库
6 a2 t6 V" c4 q, V1 V" @* yln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
# j) f8 B+ U( o( e9 M7 U/bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
2 \7 w( [9 z+ b# W: k% u--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
2 D- L$ G/ A% N1 r; I3 U7 ?复制代码
4 [  R1 h- N- U! z9 h- l启动服务9 G, P- [6 U. d$ Z: N
systemctl restart openstack-nova-api
& _" W+ _" H6 r+ {systemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent neutron-l3-agent
0 C$ V* ~/ m' Z7 C+ r0 Wsystemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent neutron-l3-agent
4 Y7 ?7 i7 x0 c6 n. a复制代码
" w1 ?) d7 {6 x1 z验证操作 openstack network agent list 计算节点有1个服务,控制节点有4个服务
3 G; E* Z, H9 K+ U计算节点
1 h. c: x4 a" i' x6 L$ B安装组件 yum install openstack-neutron-linuxbridge ebtables ipset -y" |) U( i8 q8 K! c' [1 L
配置3 \/ g5 t- Z7 p( J
vi /etc/neutron/neutron.conf1 R& `. l% |: @6 v) L' f, s1 o
[DEFAULT]* D% ?, ~, R6 y  P) M1 k' I# d: p
transport_url=rabbit://rbtmq:passwd@ops-ctr
7 I! z8 j, Z" ]6 Y& ~) C0 Yauth_strategy=keystone
. K' ]/ b! ^9 \0 G( P3 n[keystone_authtoken]
+ i' r+ M! A8 y" I( Y4 T% j' Fwww_authenticate_uri=http://ops-ctr:5000
2 A' I$ ~  W2 T2 c: c$ v1 Bauth_url=http://ops-ctr:5000
9 M  U: P* F, m4 Amemcached_servers=ops-ctr:11211
+ S, R( Z* f/ l2 l5 Y4 ]auth_type=password
0 W6 a# O4 W; ]- W  gproject_domain_name=default
& L' S% O) P7 p* c" l3 Cuser_domain_name=default
8 T5 f; e: Y) G! ^project_name=service% K6 R# F- k0 ]
username=neutron) H" q$ j% p1 x7 F
password=passwd& q+ i8 ~. G8 i4 j3 p( `5 P
[oslo_concurrency]
" x% F% N7 Q! b% X3 @lock_path=/var/lib/neutron/tmp
: x$ K: k& c$ l! A9 M5 ^$ h" o2 S3 `vi /etc/nova/nova.conf
8 @9 Y) V8 i5 i1 d9 Y[neutron]4 Z3 g% ~+ k( G
url=http://ops-ctr:9696
: I5 I9 ~6 p: Y, T& Kauth_url=http://ops-ctr:5000" a3 e3 v) N2 h' q/ c9 E; }
auth_type=password
  o2 y& N/ I/ Q4 J2 F% W3 Aproject_domain_name=default
) C7 S/ C+ G4 Buser_domain_name=default
1 d& a& s0 a; m  F/ }, Aproject_name=service& F# g2 t0 T1 d% U4 N# ]
username=neutron
) x5 H" U% I4 p5 F: [password=passwd4 x6 r: @& p  s8 L; w& g
vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
2 b" o- O/ x6 _7 @# E9 L; V2 b' a4 _[linux_bridge]7 P8 q$ u1 K5 x: D, [6 g! Q4 A
physical_interface_mappings=provider:eth1
$ U% H5 j& l0 {2 J# D2 C[vxlan]
/ G& S9 {2 ]( b1 i) m  }1 penable_vxlan=true: R" L! q, e0 }% H4 [! A" [4 F
local_ip=192.168.122.12- X" i+ h1 i) ?
l2_population=true
% l/ R3 {: i9 w[securitygroup]9 {9 z8 I* q% X* }# J# d
enable_security_group=true
+ `& ~1 h* t) ^" `; U5 d7 |+ y, _# ]firewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver4 V( B3 C( l+ F" E

. N2 m6 T) V. s" L+ R% I复制代码
# G6 {) ~. ]; u" c; z' D3 }启动服务
9 @1 ^+ u9 j& V" }* ?2 b7 j3 Psystemctl restart openstack-nova-compute8 S7 N- o  k4 G1 N7 B4 z
systemctl start neutron-linuxbridge-agent3 z. @! ^% ?# Y# _% O
systemctl enable neutron-linuxbridge-agent  b# V/ k/ B+ Y. q3 x
复制代码
( ?2 M+ p. _  J5 L1 b$ i6 ^+ e, F安装UI服务horizon12
3 T7 M# I8 K# h# b安装组件 yum install openstack-dashboard -y
) N  `* x9 Q, i) |配置
2 C% I3 J' @# h/ b8 U% Hvi /etc/openstack-dashboard/local_settings
6 ]8 ~; Y3 g( ^3 G! G" VOPENSTACK_HOST="ops-ctr'
  q9 j6 d& J3 Y  s9 T& MALLOW_HOSTS=['*', ]
3 l$ O0 C' |/ t8 ~. T% V1 \9 ISESSION_ENGINE='django.contrib.sessions.backends.cache'2 m6 B; w) l) R$ b- m& G
CACHE={
4 z1 D# T! f$ ~8 ^( |    'default':{
% H3 u  G2 B1 O1 j4 `3 p" v+ L        'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',
" X4 J# R  }9 r* [        'LOCALTION':'ops-ctr:11211',. z# l2 s5 f* k: r# N0 y
    }* C1 c9 X) K# C/ R8 ~# r  t" ^
}! n8 `4 A9 B9 R6 ]8 _
OPENSTACK_KEYSTONE_URL="http://%s:5000/v3 % OPENSTACK_HOST": d+ c2 f3 n% X2 c; F; I
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT=True1 ]! j) F# y; g& R' c# w7 f
# True要使用大写,用小写会报错
- `4 {% s/ N; ?6 F2 H- ]OPENSTACK_VERSIONS={
+ ~/ i+ P+ m& D. n$ Y8 m1 Y    "identity":3,
6 l; ]6 P8 _- t    "image":2,
: g6 z4 _: j  D1 l' p1 F- ~' O    "volume":3,
- t2 Y% C: [, t( b1 s- j7 ~4 l: D}
) R% l, W# J' i) p, b6 LOPENSTACK_KEYSTONE_DEFAULT_DOMAIN="default"
. K' J, j5 M5 C8 q/ j! w" h9 e0 K2 {OPENSTACK_KEYSTONE_DEFAULT_ROLE="demo"- K- _* K, E5 v- s; T
TIME_ZONE="Asia/Shanghai"
( C# ?' v, V+ m0 hvi /etc/httpd/conf.d/openstack-dashboard.conf$ U  p  p6 S3 H& X  y, [
# add
7 I* A2 K8 z/ f& D6 [$ VWSGIApplicationGroup %{GLOBAL}1 f" O3 X' y# \/ ]! x
复制代码
6 ]2 m; z, D1 d0 s4 u0 y重启服务- S8 J- O% d; N
systemctl restart httpd memcached; \" J- T2 U, r3 N6 W; k
复制代码; o0 u, p) a5 w6 c1 u
添加一个存储节点
0 w; U, V. V$ b0 B9 M控制节点132 w1 u: @) M/ L8 l% I
数据库
0 W- z# M/ J' V2 `0 s2 Fcreate database cinder;
! J2 O0 r8 y4 egrant all on cinder.* to 'cid_db'@'localhost' identified by 'passwd';
* ^6 ~/ W7 T: T复制代码4 g1 \( u% j4 U% y8 S/ p' E
创建用户、角色、endpoint和2个服务:
0 r* Y, W3 E) f! V  N! M  m/ xcinderv2,cinderv3,类型分别是volumev2,volumev3
1 V: [7 q6 ^/ ]# cv2 endpoint地址http://ops-ctr:8776/v2/%(project_id)s& R2 i# {" i% u! A3 p
v3 endpoint地址http://ops-ctr:8776/v3/%(project_id)s2 k( B& S0 \. z1 r# w
安装组件 yum install openstack-cinder -y
( H; l( X8 T! N" O+ C配置
! e) L% D7 u( h( i  S2 d+ ovi /etc/cinder/cinder.conf; r! ]$ P( F$ w1 X1 v
[DEFAULT]
, A; P8 V! f$ t- X) ?transport_url=rabbit://rbtmq:passwd@ops-ctr
4 L0 l5 W, q0 L7 U4 u0 wauth_strategy=keystone, q* v4 b! J4 r
my_ip=192.168.122.11% V( _, c. R8 _
[database]
) n; @9 |% m  J) lconnection=mysql+pymysql://cid_db:passwd@ops-ctr/cinder/ E8 ^( y5 h/ T$ M6 e! f2 }: D
[keystone_authtoken]
5 V/ u/ f0 _0 e  D& W8 hwww_authenticate_uri=http://ops-ctr:5000
8 s& i; J! l, v- D0 r+ O& hauth_url=http://ops-ctr:5000
: A, V9 R1 X) |+ |% i# Smemcached_servers=ops-ctr:11211$ d# P7 `$ V3 C' G, B2 l* p% A2 ]
auth_type=password$ @! m; l- H  {; q
project_domain_name=default
) M. Y3 s, V0 F; ^7 Fuser_domain_name=default
* b; V. f/ R0 z4 [0 |project_name=service
; Q& ?8 C" u- E5 a8 ?  k* ausername=cinder  U( S, j2 l9 K. m
password=passwd
6 D; u- |; u. b* r) n9 z; m/ u[oslo_concurrency]  ]/ Z3 A) S) T  {$ h8 C! f  o
lock_path=/var/lib/cinder/tmp* F! r/ x- S2 p2 o  h& X: z
复制代码
# B, L! o" y% ~4 x同步数据库 /bin/sh -c "cinder-manage db sync" cinder
; _3 e# O& L0 ~- [# T2 X# {$ O配置计算服务使用块存储4 j7 T# p! [$ a) i/ [5 i
vi /etc/nova/nova.conf* \* B: ?* I3 {9 T) y- H  m
# add  a9 y+ {5 e/ h9 t8 D
[cinder]% }' |& Y& x0 e, R8 _& u" Z+ S
os_region_name=RegionOne
' z6 X9 `5 R2 V& a复制代码7 {: a' b: X4 Z: l6 l. o+ T: a$ p
启动服务# @4 A( K' E5 |+ v
systemctl restart openstack-nova-api5 N9 L" r* e( S, i# h: h- t; _
systemctl start openstack-cinder-api openstack-cinder-scheduler
. S* I2 n- J5 Z+ `7 [systemctl enable openstack-cinder-api openstack-cinder-scheduler6 S/ S& @/ V, e( |, X2 \
复制代码9 ~+ T$ M' V6 P( o
检查操作 openstack volume service list4 D7 P& g5 j1 `, v1 q4 W/ X; a
存储节点. H$ b8 k, X5 \  V4 v3 `! }4 s
安装组件 yum install lvm2 device-mapper-persistent-data -y
2 l% ?/ z$ u2 ?; ^! o- A" @创建逻辑分区 pvcreate /dev/vdb
/ J. x1 X. b+ a' c创建逻辑卷组 vgcreate cinder /dev/vdb" X' C$ k# e! w4 I& Y/ H
添加过滤器7 ?) E7 j* s& P" G
vi /etc/lvm/lvm.conf  ~4 `! X- O; C1 |& F. l$ U% u* @
filter=["a/dev/vda/","a/dev/vdb/","r/.*/"]/ o* o, P1 s3 u. }' v
复制代码
! E1 j9 c' V" S! r0 n; h安装cinder组件 yum install openstack-cinder targetcli python-keystone -y
6 {3 S9 I3 e# i1 t6 i$ V# c% X配置
8 Z& O' E% F- A6 }( rvi /etc/cinder/cinder.conf8 N7 R, w, ~; a6 ~# u: T# V
[DEFAULT]
7 P+ D, N! \. b$ l. H  Ctransport_url=rabbit://rbtmq:passwd@ops-ctr! z2 P- _: Q) U4 \
auth_strategy=keytone' y' P5 u3 b' T' n8 d
my_ip=192.168.122.13! d, n( ]& D4 A6 a
enabled_backends=lvm# J) R' k1 \* I  D' K6 A
glance_api_servers=http://ops-ctr:9292# G+ y5 A( w+ ^) g7 |6 H
[database]1 E, O1 G, I% t+ A
connection=mysql+pymysql://cid_db:passwd@ops-ctr/cinder
8 c9 g2 R" H  z: J' ^$ C8 S[keystone_authtoken]
9 G3 g- r$ ~9 m6 V3 Z# Kwww_authenticate_uri=http://ops-ctr:5000
$ x- Z  I; ~- m# u1 Nauth_url=http://ops-ctr:5000) {! _/ \1 g  z, ]9 N
memcached_servers=ops-ctr:11211: m9 e: A% s( R, |" o5 y" v
auth_type=password8 g# o& {) m2 q( R- ?) v! d: b
project_domain_name=default3 Y! S# v; b, c8 p1 @
user_domain_name=default
+ w& K. t" l  E: Bproject_name=service
# D. k0 y* ~0 u) ^username=cinder
" [! X) O3 M- P8 g) ^/ ypassword=passwd9 Z$ P- O7 o" B( R* A' o
[lvm]
9 X  Z) w5 u2 S1 J: P" Z, Wvolume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver, U1 O! t4 J5 G, R7 D- C
volume_group=cinder
9 Z) Y7 P" W, P9 \  ltarget_protocol=iscsi
, `% @  y2 i* C) P0 X5 Gtarget_helper=lioadm+ L( u0 W7 _, `0 H: J
[oslo_concurrency]& |. Y/ ]0 L; @  W- N$ y6 r& N
lock_path=/var/lib/cinder/tmp
2 S! I" s# Y2 G# M) f复制代码4 l1 _0 ^8 e* \
启动服务! o& E+ l6 U! C/ ~" b" ?) @- J
systemctl start openstack-cinder-volume target
8 t1 e- h  y& O5 @systemctl enable openstack-cinder-volume target
0 k  n: {0 H( }+ C复制代码) {7 J+ b/ A4 H9 t( s
创建实例! K7 Q. A: l  q! m1 U9 O. h: ~
创建公有网络154 r- k# [5 {$ l. Q
创建网络
/ N" H# K# h( G, H; h. admin-openrc7 l6 t  ^; q) F, t7 d0 I
# 使用provider创建1个flat类型的网络,名称为provider/ O5 J* L4 {; i+ v% O% l
openstack network create \
1 A$ P+ ]4 A& W0 w! F--share --external \6 S7 G0 Q4 Z& P& t+ Y3 o+ q* ~& k
--provider-physical-network provider \
0 I9 D, m2 p8 }6 X% l) H--provider-network-type flat provider
3 D( x( t  a( K0 y" W- e复制代码7 h9 U* n/ ]$ k( S0 q: f6 J) \
创建子网
5 E& m7 o( t" N5 C! N7 S8 z使用创建的provider网络,创建1个192.168.0.200-240范围的子网
  ^/ C5 @. `- A" ?( o$ Dopenstack subnet create \
/ b) O) B$ f5 s--network provider \
- o( D9 S/ n/ O& B$ L  w--allocation-pool start=192.168.0.200,end=192.168.0.240 \
3 g6 D3 p! f3 j--dns-nameserver 192.168.0.1 \
: X" p* r; \4 ~: m--gateway 192.168.0.1 \) i: P% G/ w' T' F* D
--subnet-range 192.168.0.0/24 provider
8 ?7 {! }: k0 @' K, J; _, N复制代码5 h7 R5 f0 W1 G- i) d% R
创建私有网络16
6 N! b4 \7 a  _* t& Q; u创建网络9 R3 ~0 G! s9 K+ W; |, z
. demo-openrc9 S( A( X; p) c* n4 p7 g9 y/ @
& l0 t+ S$ w- w
openstack network create selfservice0 M. O4 v$ P7 y) D
复制代码
& w# J9 t8 |9 f: z* K9 x  B创建子网
, k. u. E* ^: b5 j! x/ h( Wopenstack subnet create \6 `- u! D9 H4 Q
--network selfservice \
# ~0 o7 H2 J( G# U+ \- l--dns-nameserver 192.168.0.1 \* p. y8 j- }$ b: A
--gateway 192.168.100.1 \$ d" G' l: Q  u" i% O
--subnet-range 192.168.100.0/24 selfservice0 O0 z( Y& P4 [7 X8 C! s5 n
复制代码
2 q3 ^/ a! K4 z( }创建路由 openstack router create self-router+ Y4 j0 l) `" o. ?5 D' v
将selfservice网络添加到路由中 openstack router add subnet self-router selservice
/ |0 _0 J6 s5 T& y: B在路由中设置公网网关 openstack router set self-router --external-gateway provider
& m9 a! m) q( P( w1 S1 x检查操作
  g; J9 N: f! n2 u. admin-openrc  u+ q8 Q' x: @) r5 [8 D
ip netns. l2 e6 A8 b, W- @& w
openstack port list --router self-router
1 w! Q4 }* F4 B复制代码1 n6 Q. R: ~5 @
创建实例: y6 j9 u* S$ s+ x
创建最小规格的主机,内存64M,硬盘1G,名称m1.nano openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
% e" k+ l4 B0 C+ Q9 k3 s& Z! J! l添加密钥对 openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
9 Z# O1 v' M4 a: P# j; Z8 K添加安全规则到default安全组中( u3 O. E' V( |7 v, V, }
# allow ping
, q" D* s2 V; Popenstack security group rule create --proto icmp default
7 G1 @: z' n. T8 t# allow ssh + v( q7 ]) u/ Y
openstack security group rule create --proto tcp --dst-port 22 default
- {! N4 g1 N% G9 d复制代码
* V3 {# A2 h. J& ?$ @. L6 e! u1 n% [创建主机9 W! Z/ c7 \% w- s9 N) _
私网主机17
; q4 B* V4 W7 L, Z2 [; d. demo-openrc
; }. }6 {% {. ?! n7 e& o. @openstack server create --flavor m1.nano \
( b0 l% G' X5 q% ~9 W--image cirros \9 q/ j" e/ O; G7 ]7 {
--nic net-id=c34add94-6f4d-4312-92f9-ac4ad426bce7 \
8 q# a+ W" W( m0 X--security-group default \
( Y% x6 _9 g$ ^- E1 F, y--key-name mykey self-host+ u( `8 J# f0 `$ o
复制代码
" b: R8 E% L+ t9 u/ \8 D$ A% n6 q7 X; U查看创建的主机 openstack server list2 a) p' S0 v. r+ R
虚拟终端访问主机 openstack console url show self-host
0 r8 E/ `9 ]; p1 l& g& o远程访问主机, s* S" D6 H& P# V
# create float ip
7 d$ \1 S# |4 ?2 o( ~openstack floating ip create provider9 p, n7 ?9 y* g# e& M
# associate floating ip with self-host
; ?7 L" O. z6 N+ q" t# x! Hopenstack server add floating ip self-host 192.168.0.234
7 d4 `& I1 N! L; r# show server list
* W% N' [, F# V* F' Z. [2 lopenstack server list
% V7 _* `8 ?' I

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-10-8 08:05:22 | 显示全部楼层
目地:# p4 e! h8 M* R2 z  T( \
• 最小化安装openstack stein最新版本
3 e  s" A2 k4 a0 o. G+ @• 安装完成后各组件正常运行$ V) G! S; Y* z2 j  I; ^' w
• 测试成功建立实列并运行
8 b) H% \: p; g1 ?" {8 g( A9 ~• 通过运行实列测试基本的网络功能( n; |, C+ O" K$ w$ ^
步骤:* r( D" F+ o1 U% {0 }: j: @0 Z
1. 安装前的环境准备( C7 N* t9 L6 p* X4 g
2. 安装keystone
# n3 Q8 x" i  H, m# {- q3. 安装glance镜像服务0 e/ _* z1 g4 N4 }
4. 安装placement
& |0 @5 m% r7 q- z5. 安装Nova on controller
% [( z  `9 x/ g% V1 \- \6. 安装Nova on compute node3 D0 Q7 T4 j* T& T9 g
7. 安装Neutron on controller node5 V- N) u5 ^0 g' ]' \8 X
8. 安装Neutron on compute node" z+ c. |) S2 P/ i1 H, B: ]
9. 安装dashboard4 |( e7 V0 F/ `
10. 验证测试
( b7 ~/ q) e3 e. l$ y) ~& h安装前的环境准备1 Q3 x" A" w. [; o- _
安装的准备工作很重要,因为openstack服务非常多,服务之间的依赖关系紧密,合理的规划不会导至安装出现问题,否则会出现各种的问题。( {9 X8 X1 C% V5 F( `* ^9 N

2 C6 a" q% [, L准备环境
. {; y9 D+ Q: T所有的服务器时间必须一致,我们设置时间服务同步,这里可以是外部的源,也可以是自已的时间源服务器,我用一台chrony服务器做为时间服务器, 同进也兼做dns解析和yum源
4 o' z. S; w) Q2 ?9 h! ~8 {#yum install chrony
; G' j5 Y4 T* m. J9 i" u#systemctl start chronyd
' h' z: Z& l; H5 J2 u8 R1 ^- X#cat /etc/chrony.conf
3 j; P% j; P* Z8 s8 Q. K/ hserver 192.168.205.7 iburst% c/ i5 `, h1 r9 ~7 X
#systemctl status chronyd
% j+ R- B5 H/ b#chronyc sources -v  #检查chrony时间是否同步,看到^*为同步,否则没有同步
: u3 c" W% E9 ?& W( s! F修改hosts文件,并将hosts文件复制到三台服务器,如果用了dns,这步不是必须,但不要配主机名。
" b. s! v- l) T4 C1 g, G#cat /etc/hosts
' `( g! M9 D$ a5 I8 Q! _: p; Q6 J192.168.205.167 controller1
# q5 U& m/ L4 s' {" {3 ?; A, w192.168.205.147 master0 I) T5 q9 N* S* X% ?: B) W
192.168.205.187 node1* |; H, w( D+ H" d
使用DNS域名解析的规划
1 @. n7 X8 l3 J5 V/ ^域名:flex.net" ~# Q/ g1 S$ V; S! `& b$ N" @; d! q
name server 192.168.205.75 Q4 f! E3 ~3 y# W. q/ m
A stack.flex.net 192.168.205.167   controller1$ N: y. g) l) |5 f# y& D% b
A dbs.flex.net  192.168.205.147     database, memcached, rabbitMQ8 k' K/ `" v' M6 k& P% {
同进DNS也做为转发服务器为yum提像安装软件# F+ l" E2 a6 }- R( r5 {/ ]# E" k
编辑网卡每台有三个网卡, 分为管理网络,租户网络和外网,管理网络的dns指向192.168.205.78 Z- \! V; S( C8 L. v& l1 z
eth0为管理和API的网络
# x+ \+ `: X) b- I5 e2 ^$ H#cat ifcfg-eth00 ~* T4 G  ~: c" H9 x. k8 Z: E
NAME="eth0"
* N, _7 O3 R$ TDEVICE="eth0"/ C, @: E: g4 F) }! e* D
ONBOOT=yes- Z% ]; {  J& C6 S- x3 f  e' t+ `
BOOTPROTO=static1 }1 g" v- N1 J# M) ]
IPADDR=192.168.205.x- d7 D! ~0 z" T/ r
NETMASK=255.255.255.0, u; w* G) u, M, y9 a4 X
TYPE=Ethernet
% [2 M; t. Z# h2 w3 M3 reth1为租户tenant网络使用,不配IP,设置成none
! k4 W4 T) [! r2 i# s2 i* M+ l#cat ifcfg-eth1
2 o* [  R7 P& l9 {NAME="eth1"
! T5 Z# V9 I9 m2 e; IDEVICE="eth1"
$ @% E( L; |3 U1 J7 ^0 iONBOOT=yes# u% _5 w, T  Z$ y1 z6 A( b  e
BOOTPROTO=none
4 L$ C+ b5 E/ T$ Y/ q  zeth2为外网安装yum源使用,使用nat方式,同时将dns设置为内网的dns: 192.168.205.77 {2 D* G# x) h' ]; ^
#cat ifcfg-eth2
; A4 a1 ~: j, Y1 c4 oNAME="eth2"
7 g0 T; V3 f; }$ s% wDEVICE="eth2"
2 M9 Z2 U/ `# u  IONBOOT=yes, ~' u% D* }3 H7 V  L) L
BOOTPROTO=static
/ i5 [# V4 p7 D* YIPADDR=172.18.18.x+ c9 t& `* s# B- S0 r5 v8 G6 N5 u
NETMASK=255.255.255.0
# F$ V) ~( h7 F- R; }0 YGATEWAY=172.18.18.2/ F+ j% V1 c. W
DNS1=192.168.205.7
$ ?0 P1 X' ]" D2 r8 f4 e注:不要修改HWADDR和UUID! k  P6 n3 R2 i. L' l' @
安装源,首先启用extras packges,我使用原cenos安装时自带的源, 也可以启用aliyun或tinghua的extras源
: m& o. {  G# N" k0 }* N
! |; k; ~1 J4 d; S4 F9 |#ls
" F: i+ q  S- S$ q* i2 rbackup   CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
2 j1 g$ a! q: @! W" G! xbackup1  CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo) K: v  V: c" [; W
#yum list Centos-release-OpenStack*9 w9 e! b: I2 _* j7 P# u$ Q
. a) u: N  R* x2 b
Available Packages
. F, }+ K- T# [3 d' o4 @4 @centos-release-openstack-stein.noarch                     1-1.el7.centos                     extras
/ w' W! H4 E* f; w4 G+ e/ ycentos-release-openstack-ocata.noarch                     1-2.el7                            extras 5 Q+ v  [$ V" W& K1 V
centos-release-openstack-pike.x86_64                      1-1.el7                            extras
" }0 J" t1 q- i2 ?) o# xcentos-release-openstack-queens.noarch                    1-2.el7.centos                     extras
0 {$ Z1 t6 J1 S8 }8 Z
* H3 q4 o+ f" B- E注:安装时我们要禁用epel源) Y9 F3 |3 P2 b" H9 t
我们通过yum 方式去直接下载安装最新的stein源4 k) ^: f" x4 d
#yum install centos-release-openstack-stein5 B! g: a" t' ~. u
安装完成后我们看到目录中多了一些源5 m  ?! T% d5 O* ^2 o+ e  s
; Y8 |# k+ `. [* ]
#ls
+ r1 a; M+ r  o- V# O& pbackup                     CentOS-Debuginfo.repo        CentOS-QEMU-EV.repo# e4 T$ Z/ A2 F& S8 i2 f4 F3 w
backup1                    CentOS-fasttrack.repo        CentOS-Sources.repo
4 w+ d5 q/ A2 b0 I! ZCentOS-Base.repo           CentOS-Media.repo            CentOS-Storage-common.repo; y+ T; n$ i% d4 x
CentOS-Ceph-Nautilus.repo  CentOS-NFS-Ganesha-28.repo   CentOS-Vault.repo2 U  B0 w) Y3 C8 j' Y9 u0 ?' B

0 d/ v1 c% j( a; r#cat CentOS-OpenStack-stein.repo 2 q0 H9 N, H" ?1 n) `, |! A
CentOS-OpenStack-stein.repo' [9 V  O4 n$ Y" U+ y+ ?. _
& a0 c# G. r) }
更新包在所有的节点
# m" K& Y& H( m2 z' F7 ]8 g2 |# yum upgrade
- \0 \2 n5 v! X所有的节点上安装openstack客户端
: {1 m- x, t# w, `# yum install python-openstackclient
/ E( C6 Y7 V1 p4 j" j安装数据库
: ?3 C: ^# X' I安装数据库及python组件# K2 f4 H3 N. R8 G# \7 u
# yum install mariadb mariadb-server python2-PyMySQL: g; S9 k8 a: J% P7 d) k9 D
建立数据库的配置文件并写入下列配置
' k* P+ @1 A5 }#  vi /etc/my.cnf.d/openstack.cnf
- @2 d$ ?+ i) |$ T5 N0 q[mysqld]& V+ p, A( O3 n9 d0 d
bind-address = 192.168.205.147
# U' Y4 a% a4 L% T. u" y# w3 K1 @& Mdefault-storage-engine = innodb! ]2 E( f/ I7 W- w  e
innodb_file_per_table = on/ x0 L  R# m. m. {4 P, ?% U) e8 t. w
max_connections = 4096
: D) H" D1 R+ T" Ycollation-server = utf8_general_ci, J) ^* O  g* @; @) I' t/ x
character-set-server = utf8$ R# t, U1 ]" k! `1 Q5 `
允许系统引导时自动启动服务并启动服务
9 M0 @+ Z% ?' M& C4 p* x' y2 U# systemctl enable mariadb.service
' @7 V& h5 J8 I9 R# systemctl start mariadb.service
! p! z5 {' @; r0 m$ g0 h( G: U8 j运行mysql_secure_installation脚本,特别是root的口令,为root配一个合适的口令,为了演示,我们设为root, 密码root123
" z( Y+ \4 h) }6 V$ C& x3 ?  p# mysql_secure_installation8 j. b" R4 w' ]; S! W
安装消息队列在mysql上" b. J! X' W- L1 R
Openstack的服务之间使用消息队列协调操作和状态信息,消息队列通常地运行在controller上, openstack支持几种消息队列如:rabbitMQ, Qpid, ZeroMQ. 大多的发行版都支持这些特定的消息队列,本实验我们用RabbitMQ因为大多发行版都支持它,本列中,我们的消息队列运行在dababase中
% e' M  S$ Q, C3 K* I' z# s# \! G0 F! E- q2 ]+ y9 y& D
安装包
) ^( u, ~+ p5 g6 k# yum install rabbitmq-server/ K( }7 k; Q. [
允许系统引导时自动启动服务并启动服务# [3 K8 ?8 \5 v
# systemctl enable rabbitmq-server.service
# g) A1 n( Z' L% D' J( U. O! z0 C# systemctl start rabbitmq-server.service
7 O7 L' U- I* `; U, b" u添加一个openstack用户+ X( ?7 X1 }, D3 \% L, |
# rabbitmqctl add_user openstack openstack123. a9 O' K" X: S  o3 u, d
充许openstack用户具有write, and read访问权限
. j& n+ j( o$ d9 p: |# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
0 G9 X1 h: ?1 R- A; e注:在vhost "/" ...中给用户 "openstack" 授权1 U: r: p" O- M# }
安装和配置Memcached
/ d4 ~& _8 m) M身份识别服务验证机制使用Memcached缓存令牌,Memcached通常运行在controller上,对于生产部署,我们建议启用防火墙、身份验证和加密的组合来保护它。
/ ?! e5 E) l2 C9 i% Z- G) p/ b9 Z3 j" s3 Y6 g
安装包
  W( ^/ A4 O4 O+ t; v# yum install memcached python-memcached
' Y- x, R' I3 |编辑文件/etc/sysconfig/memcached并修改配置文件服务使用管理IP,充许其它节点通过管理IP访问到Memcached
9 W4 o0 M& `8 M#vi /etc/sysconfi/memcached' h+ b5 s, \- p' [, Y4 B
OPTIONS="-l 127.0.0.1,::1,master" #如果你装在数据库服务器上,那么就改数据库服务器的名字, 因为hosts中已经做解析
5 }6 C! T9 a" {% m; \, X, z" |允许系统引导时自动启动服务并启动服务7 X3 v& g. B5 m3 _8 Y6 a2 f
# systemctl enable memcached.service
3 \  W5 L* Z4 I# systemctl start memcached.service
% p5 U: s9 f3 @, {# {$ H
. W; M4 |: s* _% _, i  E- L% o; k& z( p. s
 Openstack身份验证服务提供一个单点集成的管理认证,授权和服务目录,当用户交互时身份验证服务通常的是第一个服务, 一旦通过认证,同样,其它openstack服务利用身份验证服务确保用户是谁并发现部署中其它服务的位置,身份识别服务同样也可以使用外部的用户管理系统(如LDAP).
0 k6 ]5 Q- I; m9 n  使用服务目录,身份认证服务管理的用户和服务可以定位其它的服务,顾名思义,服务目录是OpenStack部署中可用服务的集合。每个服务可以有一个或多个端点,每个端点可以是三种类型之一: admin、internal或public。在生产环境中,由于安全原因,不同的端点类型可能位于暴露给不同类型用户的不同网络上。例如,public API网络可以从Internet上看到,这样客户就可以管理他们的云。Admin API网络可能仅限于管理云基础设施的组织中的操作人员。Internal API网络可能仅限于包含OpenStack服务的主机。
) `0 q6 i9 k+ |- N/ l+ I  同时为了实现可扩展性openstack同样支持多区域,为简单起见,本列中对所有端点类型和默认的RegionOne区域使用管理网络。在标识服务中创建的区域、服务和端点组成了部署的服务目录。部署中的每个OpenStack服务都需要一个服务入口和一个相应的的端点存储在标识服务中。这都可以在安装和配置身份认证服务之后完成。
4 Z9 P" l2 U* ~7 R' y  身份认证服务包含下列组件:1 d& J7 p( p! ~* X+ t

* Y8 _/ X5 v7 k. i& }( P. n5 K- g9 vServer ( m/ l& C  i7 J3 }
一个集中的使用RESTful 接口提供认证和授权服务.5 ?+ h) E- P% P( Z
Drivers + d% Q) e: \+ Y3 T, J
驱动程序或服务后端集成到集中的服务器。它们用于访问OpenStack外部存储库中的标识信息,并且可能已经存在于部署OpenStack的基础设施中(例如,SQL数据库或LDAP服务器).3 R1 N6 y, S# X; }
Modules
3 g) {! o  v' P  ~; `中间件模块运行在使用标识服务的OpenStack组件的地址空间中。这些模块拦截服务请求,提取用户凭证,并将其发送到中央服务器进行授权。中间件模块和OpenStack组件之间的集成使用Python Web服务器网关接口。
$ u; B# ]% ^$ s- s! ]准备工作
. @! A% _% y3 s% [9 d$ l' T连接到数据库,可以在本机也可以使用mysql客户端连接
6 Z) |6 O9 Z/ A2 }$ mysql -u root -proot123
- L3 @0 N( Q; a1 ~建立keystone数据库& @  X% q( `  d" P+ T
MariaDB [(none)]> CREATE DATABASE keystone;, G% ?5 H  ]  _- F
授予相应的权限给keystone数据库,密码统一为用户名后加123
! D9 w& K' N6 D9 ?MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone123';2 h$ R8 f% ~* l! G3 c
安装和配置组件, w5 z7 m& t5 f, J9 z" Q9 B' w6 p
安装包8 }; X& V  j; e% x' m+ A
# yum install openstack-keystone httpd mod_wsgi
1 m, L3 {" @) ]& ^) j! w* @编辑文件/etc/keystone/keystone.conf并加入如下配置( p$ H- a( D0 E1 J2 s+ O
# vi /etc/keystone/keystone.conf: n0 ^4 r3 A; D! E6 p8 p! S
[database]
" {6 K7 e4 ^" @3 P2 O& {9 b# |# ...
. B( Y; j( T% Q  fconnection = mysql+pymysql://keystone:keystone123@dbs.flex.net/keystone2 l/ z( @. }5 }9 _8 I$ e! C
In the [token] section, configure the Fernet token provider:% t( u( M7 C% `8 a+ \- \5 u4 n
[token]
# R3 C# m, y# o8 o) Y# ...
# t7 k2 U( ?  d3 k, l" {provider = fernet
" g* y( [* a; v" s构建数据库: C  X/ N9 _+ F/ H# A0 I
# su -s /bin/sh -c "keystone-manage db_sync" keystone
# B  R% q4 u6 K  u7 U# G2 M# S. {& C& _初始化Fernet键库0 g& N, \) V4 V: A9 t
# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone! y' U& X+ y# ~) q9 z( h: R8 ]% |; P
# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone
" v/ o9 ~' u" V4 S3 ?) l引导标识服务/ |# f3 s/ s; v8 L- ?
# keystone-manage bootstrap --bootstrap-password admin123 \  H, p  @$ A2 _5 T; e
  --bootstrap-admin-url http://stack.flex.net:5000/v3/ \
9 t3 m! F2 h2 N9 t  --bootstrap-internal-url http://stack.flex.net:5000/v3/ \& C5 c" p3 t' `1 Q
  --bootstrap-public-url http://stack.flex.net:5000/v3/ \
5 [* S+ v( s$ g# E7 _6 T  --bootstrap-region-id RegionOne
  f' o. a0 @0 w5 v# e$ V如果这步出错,如你写错了域名或端口等,会无法创建下面的domain, projects, users and roles, 重新配置是不能解决的,它不会覆盖前面的配置,解决办法是如下:# m  v6 i% q/ n, q6 W: Q7 m4 r' k
    ○ 在mysql中删除endpoint配置,重新配置:
, ?+ J% `, V6 C7 n. S. l    MariaDB [keystone]> select * from endpoint;4 u8 o! j; W2 l' z
    +-------------+--------------------+-----------+----------+--------------------------------+-------+---------+-----------+
: w, }- S/ I1 v% s$ H    | id          | legacy_endpoint_id | interface |service_id| url                            | extra | enabled | region_id |7 F$ s- v% [  ]
    +-------------+--------------------+-----------+----------+--------------------------------+-------+---------+-----------+- ^$ |; U$ f) r
    | 0b6dd3a784… | NULL               | internal  | ad298…   | http://192.168.137.5:35357/v3/ | {}    |       1 | RegionOne |: i5 T; Y7 a1 r
    | 4f7fdb8fc6… | NULL               | public    | ad298…   | http://192.168.137.5:5000/v3/  | {}    |       1 | RegionOne |
$ o% z$ r7 a8 `! C    | 8451f154c7… | NULL               | admin     | ad298…   | http://192.168.137.5:35357/v3/ | {}    |       1 | RegionOne |/ B# e* r( I& V/ x& l
    +-------------+--------------------+-----------+----------+--------------------------------+-------+---------+-----------+7 a! E) s' N( ^2 Q
    3 rows in set (0.15 sec)8 x! f' w1 O& Z3 _5 R
    MariaDB [keystone]> delete from endpoint where url like '%137.5%';    #配错的url或主机; A: C) G/ Z/ j* V* k
    Query OK, 3 rows affected (0.02 sec)+ j0 u; K7 L/ F% `
    MariaDB [keystone]> commit;
5 R  A8 k1 o+ D    ○ 处理完成后,重新配置上面的步骤
# W& F( C' Y2 ?; v* Q配置Apache Server
$ i' G% T1 b  Q+ D: ?2 t修改文件/etc/httpd/conf/httpd.conf配置server name为控制节点服务器的名称  w8 Z' m  d0 l0 m
ServerName controller1
  J8 k; H+ Y! _4 ~; C7 Z! J在/etc/httpd/conf.d下建立一个软链接文件指向/usr/share/keystone/wsgi-keystone.conf
/ g# ]. S2 g# ^- l6 {- a" H; u# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
' D5 O' c5 j# f; ~5 s完成安装& D4 {+ H' f5 @  r, D5 A1 p' P
允许系统引导时自动启动服务并启动apache服务# o2 _3 l" ~( ]% Z4 x
# systemctl enable httpd.service
6 C- R8 m/ i' h4 R* s7 i& w+ F# systemctl start httpd.service
4 ^5 i" C4 N* D/ D' I9 W) |0 U配置管理帐号admin,可以将这个文件写成一个脚本的方式,并source脚本
& y) h- n  Y& E2 R& @. l
3 n7 M! t5 ]1 o4 R* E  n% h# cat admin-openrc8 C& Z7 P/ G) r* W+ a7 _8 e# _
export OS_USERNAME=admin% s6 X: S  W; v
export OS_PASSWORD=admin123
, H1 f3 H% I4 b# Uexport OS_PROJECT_NAME=admin3 K6 Z9 v4 K& m! I
export OS_USER_DOMAIN_NAME=Default
2 ?* \- z) j: n+ k. a  x& F. g, zexport OS_PROJECT_DOMAIN_NAME=Default' v) h9 X8 u. w/ d( W
export OS_AUTH_URL=http://stack.flex.net:5000/v3
' m: z3 n0 U, h# |; C# Pexport OS_IDENTITY_API_VERSION=3
2 M# Y6 ^3 Y6 m  r! a
, i# U- M' N7 U5 P- a, Z1 a! D9 R2 m# source admin-openrc6 T/ A1 P* y+ ]& L/ |- u* \; h
建立域,项目,用户和角色
: X6 g, R& u% }5 u! N; j: B- Q* x身份验证服务为每个OpenStack服务提供用户的授权服务, 身份验证服务使用域、项目、用户和角色的组合,
) ^/ a/ h( v5 u7 D) t' p' B: [
5 u! N; ^  k4 E0 A同时这个“default” 域已经存在,在keystone-manage bootstrap步骤中已经创建, 我们建立一个新的域名子为example0 v* |; x+ P& |# e7 [
#openstack domain create --description "An Example Domain" example# N& u- Z2 Q1 z; q
+-------------+----------------------------------+
0 i. p! u+ y$ U1 m- W| Field       | Value                            |
! T7 J% c* r7 v1 }  p1 b+-------------+----------------------------------+
3 H" e' A* v7 O| description | An Example Domain                |4 q$ R6 L& F/ [8 o6 _4 ~
| enabled     | True                             |+ P7 u0 x/ y, b' c  V3 t
| id          | f2a3ddcdc32c411ba5d9e480c25ce8b9 |* `$ o$ S; z: ?
| name        | example                          |7 S" Z" t3 v" e0 q) U8 k# B
| tags        | []                               |+ \$ q3 m3 I/ y$ x. R; G
+-------------+----------------------------------+# r* v* e$ O8 u  a
如果配置错误或名字写错了,怎么改呢方法如下:. r& ^$ T+ _6 m' i* {' C" Y
    ○ 先要禁用写错的域名
" ?9 ~7 P, A6 R5 J8 X    #openstack domain set --disable exampl" R7 o* \! A6 B
    ○ 然后删除错误的域名: s/ p8 O# V# ^+ Z! w
    #openstack domain delete exampl
- Q! a& Q6 r0 K+ h% s建立一个项目,该项目为每个服务都创建包含一个唯一的用户
9 _- T! x) L( w/ {% x# openstack project create --domain default --description "Service Project" service
9 X  p8 E( s0 v+-------------+----------------------------------+9 ^( M8 g3 D& |, ?5 Q, {, a5 d
| Field       | Value                            |
: ^. \( l$ v* l& I+-------------+----------------------------------+* j9 [+ X6 M# P( o; m+ \2 O5 H
| description | Service Project                  |
# g& f2 P6 o4 Q- G% A  R5 O| domain_id   | default                          |  D* B% a( l/ }4 C+ e6 c) `
| enabled     | True                             |
/ G1 h& o8 Y( d# p| id          | 3e33e6c8e1d14b7b9bbf64edcafb1023 |4 h/ Q$ x4 a& e9 E7 s' l+ ~9 m7 E
| is_domain   | False                            |8 r* X4 Q  [1 W# h: l$ C6 |+ n
| name        | service                          |0 q$ D0 h4 ~$ }, P7 e
| parent_id   | default                          |
/ y* U7 r" f, ]/ g8 F| tags        | []                               |
' F) n2 _6 }2 B  ?+-------------+----------------------------------+
2 A/ i' V. \; k2 a3 f常规(非管理员)的任务应该使用非特权的项目和用户,这个列子中,我们建立一个myproject项目和myuser用户
7 N& {2 Z( z' R) V) @0 |9 M; h* T* r, z: {, j2 l
    ○ 建立项目名为myproject
* G, ~8 T$ ~& B. ~    #openstack project create --domain default --description "Demo Project" myproject
" j% m" x; I! ]+ F5 o# g    +-------------+----------------------------------+; l2 R2 c/ W, u9 b6 ^9 b( ~5 u
    | Field       | Value                            |/ H& B6 v+ H9 t
    +-------------+----------------------------------+
7 e& g6 i( G) i& Y* M( S    | description | Demo Project                     |. M% W( \7 K/ N4 A! l9 q
    | domain_id   | default                          |5 {( Q: k$ E8 R9 M$ T0 F! Q
    | enabled     | True                             |0 D, g( d/ B3 b
    | id          | c9fc9f23c899402aa10eaabf0c71fff5 |; C1 k+ e1 C" I' {& O+ a# ^; b
    | is_domain   | False                            |
8 b+ r9 m$ }& X1 l' D/ T+ K    | name        | myproject                        |
  Y7 _0 l  [& i% z    | parent_id   | default                          |
2 w% f0 E2 ^( {% b    | tags        | []                               |: x9 p% R- S/ ]# l+ G) g9 z+ L! r8 y0 Z
    +-------------+----------------------------------+
4 e4 Y# M! w3 c+ H. W. j/ n' H    注意:不要重复此步骤在建立这项目的用户时
) [; H3 R/ f+ F  T    ○ 建立myuser用户
8 D7 K, }% G8 j. O  n/ V    #openstack user create --domain default --password-prompt myuser! g- H# C4 g8 }' s8 z5 a
    User Password:myuser123
& ?/ y) \% r+ |. m    Repeat User Password:myuser123/ F' p& y7 S* U( X2 C3 M) d8 m
    +---------------------+----------------------------------++ \' a% ~% b) d9 C7 o1 s
    | Field               | Value                            |
+ r, p+ e4 P: S    +---------------------+----------------------------------+4 e4 r, Y- E- [& Z) Y8 o) f- g
    | domain_id           | default                          |; c; \3 r) i$ t( \* w  f
    | enabled             | True                             |6 o$ m/ q# a% n9 C, H3 h
    | id                  | 81949d6833a04e61b79fe3a8a49cd5a5 |8 v8 f5 @! W! k) E% U& U3 x
    | name                | myuser                           |  x  s( m, h( e$ N% L8 n' [9 u( \: }
    | options             | {}                               |
( {7 G9 p/ J2 C- f8 _6 U3 m    | password_expires_at | None                             |
6 B( w$ Z) n3 V8 E6 w* w7 P! S    +---------------------+----------------------------------+
7 L" d; n/ S+ t& r    ○ 建立一个myrole角色0 X* q% W7 j+ N1 K1 W" a5 Z
    #openstack role create myrole: k: J: ^. t, C1 h0 `
    +-------------+----------------------------------+: K% C" ]8 j1 K7 m2 F4 n
    | Field       | Value                            |
) ]3 Q) m& h* P: z4 |3 o2 T$ r0 H    +-------------+----------------------------------+/ C; F, c0 B5 ^; [) ?5 I
    | description | None                             |
) }" [8 u  P% A    | domain_id   | None                             |- \+ s( G" ]1 i
    | id          | b49d96c43eaa43cfa9519614f0b84942 |  _  s: u9 X3 D7 n! G" N
    | name        | myrole                           |4 }9 [4 ?" n: s6 |
    +-------------+----------------------------------+
  @4 k4 ^8 g! N6 c- k" Y; Z+ ?1 N    ○ 添加myrole角色到myproject项目和myuser用户& h9 a+ }& U2 }
    # openstack role add --project myproject --user myuser myrole
7 Q, Z! H+ v# y8 w7 d% J# U; H2 U1 Y) X
注意:你可以重复上面的步骤建立更多的项目和用户。
  r7 Q0 Q/ @" k" U# \, s, @校验操作, a+ \5 ?6 {& q5 ]% c0 O! X8 F
在安装其它服务之前校验身份验证服务是否正常安装,执行下列命令在controller节点上。8 u  J- h% j; v
; p0 B5 G/ M3 {7 O( H
临时取消OS_AUTH_URL和OS_PASSWORD环境变量:
7 w/ y7 S4 ~6 |/ x- {3 W$ unset OS_AUTH_URL OS_PASSWORD
9 Q+ c2 d$ Z  C- k6 h, l使用admin用户请求验证的token:
9 l1 Y2 G7 F' i2 u% G# openstack --os-auth-url http://stack.flex.net:5000/v3 \
; i* w6 L, q  ?# \+ c4 A--os-project-domain-name Default --os-user-domain-name Default \+ j2 f$ a- y0 @! U6 Q
--os-project-name admin --os-username admin token issue
+ H3 T% \3 n& u: k) d( nPassword: admin1230 V1 N7 ]  @0 T! Z- o
+------------+--------------------------------------------------------------+8 M5 Y: e4 Q2 h: r1 z) `
| Field      | Value                                                        |       +------------+--------------------------------------------------------------+
( U( @7 |6 n3 D2 I2 K| expires    | 2019-08-22T05:32:10+0000                                     |   ! V& R+ D3 {' Q) g; @+ [, q
| id         | gAAAAABdXhrKNMqos25-DjAmaD5yu1dy_-PPtmch7YOgObHg25d2V0pEO… …|+ C6 Q" ]# \8 B( U% H# L
| project_id | 67139b2bd6c64e1c88136955dbef56a0                             |                         | user_id    | 681e9f941cb249e4a5058414057c7866                             |    +------------+--------------------------------------------------------------+
, j6 h6 J' f% a使用myuser用户请求验证的token:3 u- U3 s: u/ Q- D# _) ^9 @
# openstack --os-auth-url http://stack.flex.net:5000/v3 \
* p2 O& d1 w" q+ {--os-project-domain-name Default --os-user-domain-name Default \
- ?  N% g9 G: o& E3 E--os-project-name myproject --os-username myuser token issue' j0 w; y2 P) t- V$ P1 U$ b
Password: myuser123$ v3 A$ R0 ^" v7 S- U
+------------+-------------------------------------------------------------+0 S1 c: @, z2 m8 ?# k
| Field      | Value                                                       |+ P1 f' @" T* p, u! S
+------------+-------------------------------------------------------------+
2 D) ~' {' ~' z9 |0 @! ~7 _| expires    | 2019-08-22T05:34:30+0000                                    |
* j, Y. j+ k  n" \' U| id         | gAAAAABdXhtWYuSN8TlpDjFkNFtr_eElchimIc2YUHBWmImjX5ZpZm3……. |
. y7 U- \7 z# O! A| project_id | c9fc9f23c899402aa10eaabf0c71fff5                            | 4 Z! Q5 o& ~/ ~" y0 g
| user_id    | 81949d6833a04e61b79fe3a8a49cd5a5                            |
* N, y# n9 \3 g. |: S+ m/ a) ?+------------+-------------------------------------------------------------+
, ^+ F2 Q. K/ x. Z+ [& o$ D& o" r7 A建立openstack客户端环境脚本
9 m/ I! y* Y8 W* m3 I建立脚本
3 t) e) J3 W3 e+ C, P1 o( n: K: ^) S/ R# ~
为管理和演示项目以及用户创建客户机环境脚本。本指南的后续部分将引用这些脚本,以便为客户机操作加载适当的凭据。
5 S$ G! P7 Q' r/ R( i8 f% A    1. 建立和编辑文件admin-openrc添加如下内容:
9 X4 C; F- y) S0 z( m    # cat admin-openrc/ Q% p- u" i+ L/ h' E/ m  _, C( @
    export OS_USERNAME=admin2 K; o0 R7 X' s3 _. p& ^
    export OS_PASSWORD=admin123/ O* Y- z3 @$ b( i- p7 r8 F
    export OS_PROJECT_NAME=admin
9 w  J6 s5 _" Y0 }2 b' {    export OS_USER_DOMAIN_NAME=Default+ ]& X4 V$ G0 d# ?
    export OS_PROJECT_DOMAIN_NAME=Default8 V6 U2 T% y2 W4 H% t3 L+ K
    export OS_AUTH_URL=http://stack.flex.net:5000/v3
7 V: s4 n) H; m1 ^% v2 e2 b    export OS_IDENTITY_API_VERSION=3
- U. t3 w# g) M) E    export OS_IMAGE_API_VERSION=22 C( z0 K% r7 x8 [5 i; J& U

6 J3 B6 l8 m, `* J6 _    2. 建立和编辑文件demo-openrc添加如下内容:
- R* C8 C6 x% `# r; n1 K* R    # cat demo-openrc2 {$ M) V; {7 P0 m! P5 ^
    export OS_PROJECT_DOMAIN_NAME=Default) ]$ w/ a8 J8 |) x
    export OS_USER_DOMAIN_NAME=Default
0 c0 V! P' s6 B    export OS_PROJECT_NAME=myproject  S- z6 J! P( {2 _4 ^: q( {/ Z
    export OS_USERNAME=myuser  {5 ~4 {- O( _0 [
    export OS_PASSWORD=myuser123$ a3 M- q9 `0 K+ n: A5 z
    export OS_AUTH_URL=http://stack.flex.net:5000/v3                                                  $ |5 V8 T# T8 `* b. c: J; D
    export OS_IDENTITY_API_VERSION=3+ `, N; T( R0 c) O/ z" y- I% X1 u
    export OS_IMAGE_API_VERSION=2
; G9 ~/ m, R  E: P# ^( a使用脚本& ?5 t6 d& A8 F
要将客户机作为特定的项目和用户运行, 只需在运行它们之前加载相关的客户机环境脚本。例如:* B, D5 [# o+ e8 x, s9 d
    1. 加域admin-openrc文件构建身份验证服务,admin项目和用户凭据的环境变量:3 s6 w6 i+ k* b1 A
    $ . admin-openrc% l9 }9 o2 _, J
    2. 请求授权的token:
& X* `8 h4 ?7 L! T5 U  H4 L    $ openstack token issue
0 M: g& t( S% `1 P$ H8 a1 v9 d    +------------+--------------------------------------------------------------------------------+" ?# u* o' Q5 q" l8 v: W- ^# A
    | Field      | Value                                                                          |
  V) d0 Y, n6 w0 P( Z! t0 O' M    +------------+--------------------------------------------------------------------------------+! G; I! z4 _  [* B; d* K5 E7 q
    | expires    | 2019-08-22T05:41:10+0000                                                       |
& J6 M$ Q1 T1 a) V7 j% ^) J2 x7 A# u/ _    | id         | gAAAAABdXhzmr94abDAnVgAtAlHIOqK_1OTs2nckP98hTfWLCSdliXvE13OGERiAlPy2SbATpj-39… |
- e( _' K; w, Z% t$ G" ]+ C, z    | project_id | 67139b2bd6c64e1c88136955dbef56a0                                               |
# d( H: n- {" Z. c; R1 _& ?    | user_id    | 681e9f941cb249e4a5058414057c7866                                               |4 W1 P4 k) s6 v8 z
    +------------+--------------------------------------------------------------------------------+
2 U/ M: V/ w( J% i0 b
' b  Q  G1 R7 @6 I
; B; g1 m( `6 {镜像服务使用户能够发现、注册和检索虚拟机镜像。它提供了一个REST API,使您能够查询虚拟机镱像元数据并检索实际镱像。您可以将镜像服务提供的虚拟机镜像存储在各种位置,从简单的文件系统到对象存储系统(如OpenStack对象存储)。
& w" @; u+ q! H2 O% b2 c, ^$ |1 m  OpenStack镜像服务是基础设施即服务(IaaS)的核心。它接受对磁盘或服务器镜像的API请求,以及来自最终用户或OpenStack计算组件的元数据定义。它还支持在各种存储库类型上存储磁盘或服务器镜像,包括OpenStack对象存储。+ ~. d) Q1 x% T2 t) V6 W
  为了支持缓存,OpenStack镜像服务上运行了许多周期性进程。复制服务通过集群确保一致性和可用性。其他周期性过程包括审核员、更新人员和收割者。
' @7 {8 V" N9 O6 t- }  OpenStack镜像服务包括以下组件:; m5 s( e$ S7 }3 v3 u8 c( [5 Q
8 L$ r8 S" M$ d! x* S- O
glance-api 0 e' ?- N5 P; z& Q& a* M( h8 p
接受用于镜像发现、检索和存储的API调用。
: O- d) Y( ?; r$ A; M- Gglance-registry   j5 Z" o$ p% X" s) f" K
存储、处理和检索关于镜像的元数据。元数据包括大小和类型等项。
) X1 c! s  \6 c( N5 s! tDatabase
( D6 m5 x$ F9 x+ x存储镜像元数据,您可以根据自己的喜好选择数据库。大多数部署使用MySQL或SQLite。
. f2 e4 [% f& Q( ]2 gStorage repository for image files
: }3 A$ S& w! w支持各种存储库类型,包括普通文件系统(或安装在gles -api控制器节点上的任何文件系统)、对象存储、RADOS块设备、VMware数据存储和HTTP。注意,有些存储库只支持只读使用。& f" x& g; O# P
Metadata definition service
# C: n5 b/ F+ H4 j: ^( m3 E一个通用API,提供商、管理员、服务和用户定义自己的元数据。此元数据可用于不同类型的资源,如images、artifacts、volumes、flavor和aggregates。定义包括新属性的键、描述、约束以及可以与之关联的资源类型。5 C$ m0 o+ ~2 f' ?+ o
安装前准备工作& R  z/ H' m" E) i/ v
安装镜像服务之前, 我们必须建立数据库,服务凭据,API端点.
* i/ e5 ~: t0 l8 r2 Z' c! e* h7 h% @$ I# ^5 W% S6 P! P# ~( H
建立数据库完成如下步骤:
9 d. S8 B6 l( o4 Y$ ?/ X2 E○ 连接到数据库,可以在本机也可以使用mysql客户端连接:
. K! x% w9 I. Y5 Y    $ mysql -u root -proot123
$ k1 k' ~# {$ X3 ]9 I○ 建立glance数据库:  n& w0 \7 g: E) k7 Z" K) `2 _! P
    MariaDB [(none)]> CREATE DATABASE glance;
& L/ ~9 j5 H& B$ I/ A○ 授予相应的权限给glance数据库,密码统一为用户名后加123:
: n, j- R& z4 [  P+ [    MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance123';. p$ ?- `6 \& s5 p  Z, x0 c: S
加载admin的访问凭据,执行管理命令:  C( f* n5 p) l! e7 C
$ . admin-openrc
+ |& Z- {8 I* f: Z! c7 s4 ]建立服务的凭据,完成下列步骤:
+ v' Y6 I3 t! v' [$ X/ x9 _: ?2 q0 `* B" `8 |
○ 建立glance用户:8 A) p, g1 t$ \3 V" [5 |. w3 |) r$ A
    # openstack user create --domain default --password-prompt glance9 j" `7 L" P1 h% ]' n8 X; l1 p
    User Password: glance123
( [# N7 n# P2 W    Repeat User Password:glance123
8 {; I2 |) ^2 ?& h" `* ], u: V3 M& @2 f    +---------------------+----------------------------------+
( \" {, `6 }5 C( v    | Field               | Value                            |# j% o' x) N8 O7 ]/ E8 v
    +---------------------+----------------------------------+
# Z- \$ z$ A! m: R1 v$ `1 K    | domain_id           | default                          |
; {; y/ v; k/ }6 }( U    | enabled             | True                             |
. g1 j7 e5 ^4 U  U! P, d    | id                  | 288f544d71f04eefb7389bd8af685b3b |" A8 O, _/ ]5 `  V" c
    | name                | glance                           |% R/ I- L5 u7 n' R
    | options             | {}                               |
3 P4 G# H2 L& I; i- o' K    | password_expires_at | None                             |% J( r6 ^* g/ t; j7 v! H. o
    +---------------------+----------------------------------+& o9 B: n2 z' G5 x( N

" r5 K  w) W8 d! f- H2 |5 d/ E& k○ 添加管理员角色给glance用户和service project:
8 e5 i( j# n3 o3 I. |/ h1 H    # openstack role add --project service --user glance admin
! V( d6 c% r) ]- m! x    注意:此输出无信息
7 R. b7 ?; w9 q& H# y' V, ^$ j4 z) {6 ]( v, H- ~, M; F
○ 建立glance服务实体5 b# ?0 s2 Y: d$ |1 _$ ]
    # openstack service create --name glance --description "OpenStack Image" image, z: H% k4 \% T* t) a6 W
    +-------------+----------------------------------+
0 H  F4 u4 Z( p( @0 G    | Field       | Value                            |
# A* M# [2 B( e5 t  g    +-------------+----------------------------------+9 o, z3 Q+ V; y- X! L( `0 Y( b
    | description | OpenStack Image                  |
- ^. Y: G. w( u' E7 k8 {    | enabled     | True                             |+ t4 h  @+ [% z! A
    | id          | 4dba7578eae342d88c131e1c90768518 |; e' C# ~  u9 H6 o# [) H/ e
    | name        | glance                           |
; s7 _% v- a7 n/ p! v0 Y$ z    | type        | image                            |
8 j+ L+ m+ \: M' T# j- h( ?    +-------------+----------------------------------+
; w/ W! c  R  L) P1 a
3 H/ {5 k- q9 |9 ?○ 建立镜像服务API端点:  s! b% F! \! l7 a5 E2 k
    # openstack endpoint create --region RegionOne image public http://stack.flex.net:9292+ I9 ]% O/ V; N
    +--------------+----------------------------------+, s  ^$ w0 c5 A( [5 G
    | Field        | Value                            |0 c* h$ y! ]" ^
    +--------------+----------------------------------+9 W" |( ]$ l5 t5 E  n
    | enabled      | True                             |. q, b0 q1 @: W% z8 [  D# i( H
    | id           | 340be3625e9b4239a6415d034e98aace |+ R% h( H  ~/ c" M. {& x
    | interface    | public                           |
" U& i1 M9 S5 p6 U& P    | region       | RegionOne                        |
( t. o1 Q6 _' o) n" T1 `' \    | region_id    | RegionOne                        |
0 q& e) P: ~) |, S" n7 n/ s    | service_id   | 8c2c7f1b9b49ea9e63757b5533e6d2 |% T% `! N( y' Z3 [
    | service_name | glance                           |
0 V8 Z0 F* T4 D* P# J    | service_type | image                            |: w5 e, e: m* t6 G( |% I
    | url          | http://controller:9292           |
6 m! q/ \0 E$ r/ \2 i    +--------------+----------------------------------+
2 o+ ~; K! r9 V4 J' R     # openstack endpoint create --region RegionOne image internal http://stack.flex.net:9292  n; e. Q! c: E& v5 h* U
( T! H6 K4 K+ e
    +--------------+----------------------------------+
9 g1 A9 U  v: w$ s* S    | Field        | Value                            |
3 U" S, P0 _9 R* Z    +--------------+----------------------------------+
+ z+ i& Z5 f# R5 _) b4 }" i    | enabled      | True                             |- Q% S: {9 M9 [/ t, O/ c  T3 I
    | id           | a6e4b153c2ae4c919eccfdbb7dceb5d2 |2 l# M3 G8 V: m, {3 a6 H1 x2 {! u
    | interface    | internal                         |
) n7 n# m; H' o8 r% n4 d, W% d    | region       | RegionOne                        |
: m& l/ m3 C6 e4 l7 j; ~' f    | region_id    | RegionOne                        |
5 t- X9 _) N# |6 s: j3 _& i    | service_id   | 8c2c7f1b9b49ea9e63757b5533e6d2 |: \: T. ]( B1 T, _: c
    | service_name | glance                           |
7 `% ^+ t0 W  a* [/ `    | service_type | image                            |$ Z0 e* ^$ m8 v) _! }4 y) Z9 d- e8 Q
    | url          | http://controller:9292           |0 p# c, Y* ^9 _6 n9 K3 c3 J0 F1 `
    +--------------+----------------------------------+
# j7 W% H+ t0 k6 u0 ]
4 L1 e& Q. f* n. G     # openstack endpoint create --region RegionOne image admin http://stack.flex.net:9292
8 U/ g# Y5 g) [# j, N+ y; }    +--------------+----------------------------------+
, A4 u  y8 J4 S1 b; i# A! j    | Field        | Value                            |9 w! L) Q5 M( h
    +--------------+----------------------------------+
! M" j& ]( i' Y* Q! E: v    | enabled      | True                             |- L0 v4 b  @8 Y+ i1 ~( m
    | id           | 0c37ed58103f4300a84ff125a539032d |2 q0 v9 O7 M- Y
    | interface    | admin                            |
# c- S: r* D' d- `. E2 b; X# y    | region       | RegionOne                        |
! Y/ c( h' |! o/ _8 Q    | region_id    | RegionOne                        |7 ^0 B/ @6 ?, o
    | service_id   | 8c2c7f1b949ea9e63757b5533e6d2 |  B! R: V# }5 m. o' ]5 ~! D
    | service_name | glance                           |
3 u7 ^3 Y6 f( k" e# C* J+ ^    | service_type | image                            |3 d3 E( }7 G. N
    | url          | http://controller:9292           |
' P0 i6 M# T4 c% ~% A5 Z6 B+ l    +--------------+----------------------------------+
( F4 ]5 `9 `  Q' s4 `安装配置组件2 @! A- M' M" P6 n  W
安装包:
6 ~/ Q9 n* X0 b1 ~  i( O2 W4 ~- z# yum install openstack-glance% o( o. l+ N. }3 z
vi编辑/etc/glance/glance-api.conf并且完成下列修改:. Y/ C: C- m/ G3 J

. N, J" ^) P) f1 p4 U    ○ 在[database]区域, 配置数据库访问:
; ?' z4 o) g& g4 s# v        [database], P. m. g3 N" u; [7 f
        # ...
& X! @; H- s- l! F# a        connection = mysql+pymysql://glance:glance123@dbs.flex.net/glance* Q' p$ M. a* f
    ○ 在[keystone_authtoken]和[paste_deploy]区域, 配置身份认证服务访问:6 U' B0 K% ~& G0 w& r( j# |7 E# _
        [keystone_authtoken]+ @4 g0 e5 k. U. V3 y! O6 {& R+ I
        # ...  p0 `  h$ A. Z0 O/ Y
        www_authenticate_uri = http://stack.flex.net:5000
8 X. ~  [7 z4 v6 y' \( l        auth_url = http://stack.flex.net:5000
) I; f" m0 Z' \; x        memcached_servers = dbs.flex.net:112113 X/ g6 K* ^9 n6 V3 a6 _8 i
        auth_type = password: @/ b. X. k" o# `5 V/ h% R
        project_domain_name = Default2 ^/ _( D- G+ G1 b' G' R, ?3 o
        user_domain_name = Default
' H3 n2 V5 d- |        project_name = service7 l. v+ x3 j8 D
        username = glance
0 }( {+ r( R& Q/ ?! v        password = glance123$ j7 I$ i- z. E

+ S, i: @* R5 c- }9 R        [paste_deploy]
! h* ?" W# l- _" P) e) s& [/ n  I        # ...
" u' [. a$ O$ E8 }& C3 x        flavor = keystone
1 U7 `5 W% I1 h, r        注意: 注释或移除在掉在[keystone_authtoken]区域中的其它的选项.
. H% ~% U0 H- }6 k2 p) w' I. P4 v6 ]/ M1 A
        ○ 在[glance_store]区域, 配置本地文件存储和镜像文件的位置:
( Q. X* I) O1 b        [glance_store]
0 d# g% b6 o: K/ S        # ...
) V5 [9 B) l% [3 O+ Y        stores = file,http( S. a% j/ d( H4 Z- o
        default_store = file
8 w5 A; \6 }! L, z& O% C2 u& K, L        filesystem_store_datadir = /var/lib/glance/images/" s5 r: h/ a% x0 [: `, v
编辑/etc/glance/glance-registry.conf并且完成下列修改:/ Y$ A# }5 T9 ?* _( M
' m/ g) q$ F* v' G
○ In the [database] section, configure database access:
0 n) Z0 m' r8 u1 l; X9 S    [database]
" R2 Q8 `: G/ I% @) g, Y    # ...0 }! J! j' J6 Y9 g+ Q
    connection = mysql+pymysql://glance:glance123@dbs.flex.net/glance
) k+ s! |/ H4 C0 p  `
* L7 @0 O3 X; l9 o, @# ?3 k2 |○ In the [keystone_authtoken] and [paste_deploy] sections, configure Identity service access:
) d8 S$ e$ t( Z! R' D, G1 r- m    [keystone_authtoken]
$ A. k! r( U# Y9 V1 F/ }    # ..., J: A) o1 a; P  X9 z: e% x
    www_authenticate_uri = http://stack.flex.net:5000
+ k7 ?5 O$ F9 X; I    auth_url = http://stack.flex.net:50002 ~' E) F) J* u
    memcached_servers = dbs.flex.net:11211
  ~# X# L4 R8 m5 a2 H+ v- H& b    auth_type = password
9 B4 Z' B! Q* k/ P- {% [" C2 p    project_domain_name = Default
! G0 ^3 p% t! F6 r    user_domain_name = Default: R0 z6 @) `* r. m5 i( [* j
    project_name = service' C" P0 t4 [# U; x7 |
    username = glance
. P# n3 w. }5 o4 i/ ~( k( e) ]    password = glance123
2 Q1 Q& m; I2 X1 Q
4 `. G7 w/ Y! W3 F    [paste_deploy]. w8 W5 V" Q$ {8 H9 Q
    # ...3 g" v( p: |/ ~4 E% m" F' E* N
    flavor = keystone, x' w3 W  E  K8 L8 p, b- O

: m1 G  b! d/ w1 D! U. t    注意: 注释或移除在掉在[keystone_authtoken]区域中的其它的选项.
; e$ k! K/ F' z% ?  U1 V构建境像服务数据库:
1 H3 t' D1 |9 c# su -s /bin/sh -c "glance-manage db_sync" glance' \; i, n, r4 j5 @8 ~6 k4 C# i  N
完成安装
1 K* P% F2 p: K( v允许系统引导时自动启动服务并启动服务:! \& k& k8 B- _. F7 M/ T! U- b. ~

6 V" G5 X: L5 H+ S# systemctl enable openstack-glance-api.service \2 b+ z6 C6 N3 t) u, \
  openstack-glance-registry.service
% d" c  R: i# r$ O: X7 k# systemctl start openstack-glance-api.service \
7 @# A0 _9 l3 i( H8 M- A  openstack-glance-registry.service4 q& W- L: @* s9 E; ?
校验操作) y) p6 w1 R5 `0 H" V
使用cirros做为镜像服务校验操作,这是一个很小的linux镜像,帮助我们测试openstack环境,执行下列的命令在controller节点上.. |( i; D2 i. W2 \
* ~( g+ s8 E5 |0 ~5 z
加载admin的访问凭据,执行管理员命令:
  B  _9 f2 I  i" N2 o9 e. n$ . admin-openrc
0 \! E3 H. x0 j: F, `$ x' l0 D下载cirros镜像:0 r9 ^( u+ k' a0 d  C5 s
$ wget http://download.cirros-cloud.net ... 4.0-x86_64-disk.img
. w. N2 q0 T# r* U7 @- \! L3 S: d- s上传镜像使用qcow2磁盘格式,bare 格式和公开权限访问:! P& k/ w. V# _: v9 A
+ y' V8 a0 b4 ?# u  ^
$ openstack image create "cirros" \4 _2 `6 g" b9 ^
  --file cirros-0.4.0-x86_64-disk.img \4 \1 ?! c( M" h7 z2 C8 l- m
  --disk-format qcow2 --container-format bare \
8 J* p' G( Y! S8 k1 m3 w5 }; ^- @  --public4 ^) y& e/ t8 D; |; T2 t  T; H9 I+ U

) m6 n% r5 Z; D/ |& C' Q+------------------+------------------------------------------------------+9 Q9 Y/ N! A+ V2 w0 b+ U8 K
| Field            | Value                                                |
/ l" V- A5 @6 ]- ?- {* e9 P. k6 ^+------------------+------------------------------------------------------+, R3 N% @4 l" N7 Z3 l8 }
| checksum         | 133eae9fb1c98f45894a4e60d8736619                     |
- E2 X0 ~0 O0 }3 \* ^| container_format | bare                                                 |
8 i# e( F9 j6 g/ j| created_at       | 2015-03-26T16:52:10Z                                 |
/ I/ n1 y' L! c4 I& ]( B! R| disk_format      | qcow2                                                |
* B$ ~3 W1 t) V. E% q& J' N, C| file             | /v2/images/cc5c6982-4910-471e-b864-1098015901b5/file |$ E( P) j: ]2 Z- I
| id               | cc5c6982-4910-471e-b864-1098015901b5                 |
4 o4 w  f- {( _: T| min_disk         | 0                                                    |
/ ^& P6 D6 ]$ ^7 b0 h. j| min_ram          | 0                                                    |7 e6 X7 ~# [& _
| name             | cirros                                               |2 I) G8 n/ Q. i6 B  n7 s
| owner            | ae7a98326b9c455588edd2656d723b9d                     |
5 T, S9 F- S6 D% |8 @| protected        | False                                                |5 v* o% z5 \  w4 A( ^0 ^
| schema           | /v2/schemas/image                                    |2 S0 C' ^* D( Y! y
| size             | 13200896                                             |
5 T8 e. X8 R9 F4 b: B| status           | active                                               |
/ p5 U2 b% M+ A8 S3 n1 L| tags             |                                                      |
3 W) Y  Y. o$ x4 B4 s| updated_at       | 2015-03-26T16:52:10Z                                 |3 U' |  l2 s# [2 M* n& Y0 [7 ^
| virtual_size     | None                                                 |/ ], {( n; w3 V8 S" u( z  O
| visibility       | public                                               |
( @- y1 K* C4 [: Y- y1 O% h3 B+------------------+------------------------------------------------------+
( E* L9 G8 o. N确认上传的镜像和ID:9 \0 f. n& w  u9 N; d. T( Y

. O7 e& [# P& {& a7 y+ T( p" v$ openstack image list
* j* q( ^* _) @% H
( n$ p7 O* I7 x5 o+--------------------------------------+--------+--------+
3 Q% W) N& T( Q4 {8 a- R| ID                                   | Name   | Status |
6 M$ _* }0 l/ x, R* t+--------------------------------------+--------+--------+$ K7 `" R7 f( \5 }3 h+ ^; f
| 38047887-61a7-41ea-9b49-27987d5e8bb9 | cirros | active |! t5 L7 q' |7 T  u! E6 U5 u2 z
+--------------------------------------+--------+--------+

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-10-8 08:05:49 | 显示全部楼层
placement服务提供一个HTTP API,用于跟踪资源提供者清单和使用情况。placement作为数据模型上的web服务进行操作。安装包括创建必要的数据库以及安装和配置web服务。这是一个简单的过程,但是要将placement与OpenStack云的其余部分集成起来,有相当多的步骤。 - f) H: C' T# V2 K- \
  其他一些OpenStack服务(尤其是nova)需要安装placement,因此应该在其他服务之前安装placement,而在Identity (keystone)之后安装placement。
7 R# s# a1 Y3 M7 m
7 r' ?& e  }/ y4 A/ V5 k安装准备
: q' F0 k! X* O; T1 V安装配置placement服务之前,建库等。2 i$ R; k, Y; H3 M

$ L. J3 A! ]' w7 l建立数据库8 x# F" v9 D) u8 |

' Y. w' Y+ x( P9 x6 w1. 完成下列建库操作:" q3 b7 q* F0 v' ~9 U  R# P3 Q
    ○ 使用root用户登录:
9 W% w& U! b& b  B8 |0 w        $ mysql -u root -p root123
* _" A4 U+ j* P. K4 ]    ○ 建立placement database:
# n& J0 j: v9 w( k0 o0 f* x$ b* i        MariaDB [(none)]> CREATE DATABASE placement;
; m+ _6 r/ K8 ]4 R    ○ Grant proper access to the database:9 e1 d4 @2 {3 ~, ^. P
        MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%'  IDENTIFIED BY 'placement123';
, z! O* O% s; C" w% v5 A0 V5 y, C" K$ N: N2 p
2. Configure User and Endpoints
% I4 j5 O( W- t0 C1 ~4 o    1. Source the admin credentials to gain access to admin-only CLI commands:, L9 W+ o' E% c& E
        $ . admin-openrc
# H5 w( W4 Y9 k7 B% V* V2 @    2. Create a Placement service user using your chosen PLACEMENT_PASS:
  g: l* u, y% k% r5 H        $ openstack user create --domain default --password-prompt placement
$ J3 g, F0 Q/ M6 ^# x
3 [: z( X/ ^& X1 L) i) E1 U        User Password:placement123
- V7 A' V: g/ U        Repeat User Password:placement123! B. ^6 Y* r- o- i) g
        +---------------------+----------------------------------+
  ~0 K' B+ o: C/ g3 d: M( y        | Field               | Value                            |
+ O! F/ r( y3 t; ^' y4 y        +---------------------+----------------------------------++ Y6 Y/ [( j/ S  L6 c
        | domain_id           | default                          |" N# |5 Q8 y$ P/ A9 m5 w1 z9 K
        | enabled             | True                             |
+ k& A* {& S5 H$ D        | id                  | fa742015a6494a949f67629884fc7ec8 |
3 ^8 U- g  q5 d3 U$ {! _* v        | name                | placement                        |$ P: g+ h4 m: N& D  S# z
        | options             | {}                               |
* t6 {6 {8 v! {, v$ t        | password_expires_at | None                             |: B" a5 ?# [& t) h; o
        +---------------------+----------------------------------+; }- D4 {. Q! Q, b( M
    3. Add the Placement user to the service project with the admin role:+ R1 `5 g$ N% G
        $ openstack role add --project service --user placement admin
2 y: \% w% z2 B1 b) H8 s - e3 X7 r" z2 N! @+ A
    4. Create the Placement API entry in the service catalog:
# N  J" _! }9 i2 `" d. i* Z        $ openstack service create --name placement \2 Q9 m: A9 J; L, X6 z
          --description "Placement API" placement) I- l: N" W5 [6 y+ L
# y; L' }) X& e3 M+ s, }# o+ }7 O
        +-------------+----------------------------------+. w3 S% |* Y0 F
        | Field       | Value                            |: ?" R! ^1 v% D0 Q6 @. g* {2 ~
        +-------------+----------------------------------+
5 ~" u* z/ _' {8 ]& ]        | description | Placement API                    |
! d; U+ R! @& \% E. M/ k" M        | enabled     | True                             |
4 p, m8 e7 K7 Y9 h) a- n        | id          | 2d1a27022e6e4185b86adac4444c495f |/ |( `% J: z; Z( X; x5 H
        | name        | placement                        |& R5 `- @  }0 ?! V3 c1 J) @
        | type        | placement                        |
7 [9 k% ~7 A/ Z8 d        +-------------+----------------------------------+
. ^. y2 S' b; c9 }! w2 b    5. Create the Placement API service endpoints:
# f( e1 S" F4 l& e* Y2 T1 ]        注意:域名为你规划好url, 必须能够解析.
' W4 Q# Q! ?5 m' p* Z        $ openstack endpoint create --region RegionOne placement public http://stack.flex.net:8778' |8 |% x  }  @$ H7 Y) H; U
        +--------------+----------------------------------+! r6 ~1 r) P' N; t" G6 p1 c7 P
        | Field        | Value                            |1 `. L+ {- a! i7 ?4 B
        +--------------+----------------------------------+0 b9 n) c: d/ |* c! c' G
        | enabled      | True                             |
% E$ d$ j9 L7 O" |4 q; y5 r        | id           | 2b1b2637908b4137a9c2e0470487cbc0 |
; n/ m: ^9 g# L; D" \0 C  a4 o5 o        | interface    | public                           |
( V' N$ t* Y- _9 _, P        | region       | RegionOne                        |- h3 \4 D; T# @) k. q2 S* o
        | region_id    | RegionOne                        |
2 a% @3 w& a* o' \4 {3 H, y        | service_id   | 2d1a27022e6e4185b86adac4444c495f |! P# B. s  I$ j$ a0 Q4 F$ ?
        | service_name | placement                        |. E2 ?3 F5 x0 @! C: w3 d7 S' C
        | service_type | placement                        |9 M8 E& P3 g! F: U
        | url          | http://controller:8778           |, F2 ~2 i8 o5 d- @$ j' w5 Q
        +--------------+----------------------------------+
3 J& e0 k) N, c& s; J8 u
' Y" L" B$ Q( }. p& X& ^        $ openstack endpoint create --region RegionOne placement internal http://stack.flex.net:8778; z& G8 q8 [  C% J
        +--------------+----------------------------------+* y: h2 s$ }- e4 \2 ]
        | Field        | Value                            |! \: v+ e  ?0 m2 w$ O# H
        +--------------+----------------------------------+
8 a3 U. _3 U) P  f. S" R        | enabled      | True                             |
5 t/ G4 b5 ~% B% z1 D" _8 [0 h' U        | id           | 02bcda9a150a4bd7993ff4879df971ab |2 m* @* I* ^( N2 Y
        | interface    | internal                         |
9 t9 x! A, t4 p5 L0 O        | region       | RegionOne                        |- f6 C  D( N1 U) L
        | region_id    | RegionOne                        |( O: Y. @0 N6 B; k! Q; U
        | service_id   | 2d1a27022e6e4185b86adac4444c495f |: F4 e$ W; P2 B
        | service_name | placement                        |
; F, t2 ]' a, L0 F        | service_type | placement                        |/ b% N5 E8 w3 t& a
        | url          | http://controller:8778           |
8 u; S3 o5 Z6 ^8 Q4 v* e" a* i        +--------------+----------------------------------+# c5 N. w1 s# }  |3 Z
6 Z5 b& R: d% X/ ]
        $ openstack endpoint create --region RegionOne placement admin http://stack.flex.net:8778
, x/ d$ m$ A4 I) S8 T+ K. c6 B        +--------------+----------------------------------+2 C( V* v# K; F1 l
        | Field        | Value                            |
" w: t/ f4 N0 r9 T$ R        +--------------+----------------------------------+& ?. J# G/ B4 Z' I9 m' j1 c$ N+ Q
        | enabled      | True                             |8 }3 N, u; i! U. Y+ @" x
        | id           | 3d71177b9e0f406f98cbff198d74b182 |+ f) d. r8 l+ J9 }
        | interface    | admin                            |
0 [# [; a; s+ E% i, v" w! Z; y        | region       | RegionOne                        |
, p: d# h; o+ N' Q1 T  w& z9 |        | region_id    | RegionOne                        |0 ]- W. y5 _/ R  Y
        | service_id   | 2d1a27022e6e4185b86adac4444c495f |
: H0 k* F! P) R4 o        | service_name | placement                        |, y# g- D) I0 n
        | service_type | placement                        |7 G$ u" M5 l% y% R+ c$ d( }8 V, Y- B
        | url          | http://controller:8778           |
( e: N& h0 p! y; X+ w        +--------------+----------------------------------+
  H+ ?3 M1 \" w' n" \4 V! L0 T/ E安装配置组件' W1 }: C5 d" E/ Q9 z
Install the packages:
3 Q: P! d: L( W) m; c# yum install openstack-placement-api
8 r) S9 f! j1 U4 I* a0 u( R7 u, VEdit the /etc/placement/placement.conf file and complete the following actions:
4 r' J$ |; H! U5 u+ L0 V/ f; a" V, H  `6 \( o/ Q
○ In the [placement_database] section, configure database access:  \* q0 y2 I' r! X* ^: P3 d0 m
    [placement_database]
1 g, \" d4 ?9 _3 ~7 K3 |8 r6 D    # ..., M5 I' C5 }  w/ k6 ]% {
    connection = mysql+pymysql://placement:placement123@dbs.flex.net/placement
5 `; s3 f$ q  C3 J○ In the [api] and [keystone_authtoken] sections, configure Identity service access:
/ x9 i0 p$ L2 L: I, {0 E, l  v    [api]
. r; ?- Y6 _. k: q# f  v3 s$ V+ P    # ...9 |: _! y" t& k4 w) c
    auth_strategy = keystone: H, H  y! W+ c  ?
: u% |+ q  F2 v& n( a* T! y( @
    [keystone_authtoken]' v, [' h9 i, r# H1 ^  v
    # ...
1 a; T0 y& Q. f* o    auth_url = http://stack.flex.net:5000/v3+ v. ?1 h+ P2 ^* J
    memcached_servers = dbs.flex.net:11211
5 K. G  D% m& k    auth_type = password
. Y& Y8 n! O2 ~    project_domain_name = default; _' f( V0 f6 y$ K
    user_domain_name = default
5 a4 I! X6 m1 B' G3 V* C    project_name = service
4 [7 _( r5 x7 g, \3 F0 J4 U! @3 p    username = placement
: |: L, q6 O) K) ?$ q    password = placement123
7 h5 `# u! Y7 L" b4 B+ `1 W1 X# @8 \+ F
    注意: 注释或移除在掉在[keystone_authtoken]区域中的其它的选项. d. L7 c$ U6 l' e
Populate the placement database:2 y* D. S' q8 Y; S# N
# su -s /bin/sh -c "placement-manage db sync" placement
4 G! o, ]/ `* N( R* B完成完装( i' ]7 P: ~. m( k6 C6 W
○ Restart the httpd service:
, X8 I' J. O* }" L0 a    # systemctl restart httpd) `1 g  z3 d  ]- u) x9 h0 N' C3 h( z
校验安装9 X( {+ a- j! I( d5 T7 M3 c, Y
你需要admin的权限验证7 |% z6 V+ J2 D) M$ `% ]' d

8 {) d" A% H/ ~0 T# G; i加载admin的访问凭据,执行管理员命令:! q4 e4 B3 \7 g( v: \- ?. e
$ . admin-openrc! O! L, O9 S& K/ V
执行状态检查命令:" I( ^( B* E5 y
$ placement-status upgrade check
) C- D. s) J, i; v. w5 ?0 ?' c$ B+----------------------------------+
/ U  ]) o. I% a5 y  {: P) w| Upgrade Check Results            |
, G7 q9 h9 V; ]+----------------------------------+! l4 [* m$ C$ q0 _& J
| Check: Missing Root Provider IDs |
2 v4 m! q- I1 p9 L' d  ^| Result: Success                  |
. \' _  t0 I! f" l| Details: None                    |8 }0 R, p3 X, O( Q3 W
+----------------------------------+; K3 Q$ M1 V4 q% i* E3 V" r! z. o9 A
| Check: Incomplete Consumers      |! I; N5 Z' ?( g; a# y
| Result: Success                  |) C+ Q8 F6 D3 L$ j6 b
| Details: None                    |
% k4 v. s. }8 k- ~- y( A+----------------------------------+
  q. c. i1 n7 _( r1 d9 K2 M运行对placement API的命令(这个步骤我没有成功,但不影响):
  c9 w* c# A% i4 z2 I" c2 U) Z" T6 W( e) W
○ Install the osc-placement plugin:3 v* q: [4 @' W: a2 z4 \  \
    $ pip install osc-placement
5 O/ y, r  J0 u2 t$ d& D( X" l○ List available resource classes and traits:
: k5 u0 e5 U! k* T; ^    $ openstack --os-placement-api-version 1.2 resource class list --sort-column name; X+ k+ K/ N* k/ U! m8 f
    +----------------------------+
9 Q* a0 i& Q" P- ]    | name                       |
" U! k) S5 K7 I2 y) P6 c    +----------------------------+
$ z5 X/ k3 ]/ C6 p4 i    | DISK_GB                    |, I5 K% R) }$ E8 b
    | IPV4_ADDRESS               |( J3 {& j" V8 B) w- C! s6 W: n5 l
    | ...                        |
6 p& }0 Y' p3 v1 h: I8 o
$ h+ n& Z( ]3 L$ @    $ openstack --os-placement-api-version 1.6 trait list --sort-column name
- ]* r  @8 `3 j. z: p. z    +---------------------------------------+
- f& v( O8 s6 e  S    | name                                  |
& y$ I3 }: l+ S: H/ j    +---------------------------------------+
8 O! v- n- K  w7 J- X# K0 ?    | COMPUTE_DEVICE_TAGGING                |' C+ o+ ~. Y* }) H9 c
    | COMPUTE_NET_ATTACH_INTERFACE          |
8 @8 n: ?9 F2 ~# @4 ~- I    | ...                                   |

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-10-8 08:08:13 | 显示全部楼层
用OpenStack计算来托管和管理云计算系统。OpenStack计算是基础设施即服务(IaaS)系统的重要组成部分。主要模块是用Python实现的。 / m& u: Z* u# v( Q; @$ `: _
  OpenStack计算与OpenStack标识进行交互,用于身份验证,用于资源目录跟踪和选择的OpenStack放置,用于磁盘和服务器映像的OpenStack映像服务,以及用于用户和管理界面的OpenStack仪表板。图像访问受到项目和用户的限制;每个项目的配额是有限的(例如,实例的数量)。OpenStack计算可以在标准硬件上水平伸缩,并下载映像来启动实例。 ; V  b' N! m1 X9 j6 }
  OpenStack计算包括以下组件:
/ J" ]. h; x4 e+ R; r
% }1 o- i- M/ F' Y' snova-api service
: v1 K3 n0 ?, r; }, t% f% H接受并响应最终用户compute API调用。该服务支持OpenStack计算API。它执行一些策略并启动大多数编排活动,例如运行一个实例。, R( A. H, Z/ F3 w
nova-api-metadata service
5 D$ S& o6 w$ o: U0 \% n接受来自实例的元数据请求。在使用nova-network安装以多主机模式运行时,通常使用nova-api-metadata服务。3 T; i7 S$ c% N+ G! q
nova-compute service * R! _/ D8 ^- g' ?8 G
一个工作守护进程,它通过管理程序api创建和终止虚拟机实例。例如:0 Z8 P. K  {* r. V3 ^' F. F/ C
XenAPI for XenServer/XCP
! y3 A) f" D. S& v$ G/ Nlibvirt for KVM or QEMU  W' N9 E2 q& l" z6 Z
VMwareAPI for VMware 8 s% v8 Q8 n% M+ p) E6 O
处理相当复杂。基本上,守护进程接受队列中的操作并执行一系列系统命令,比如启动一个KVM实例并更新它在数据库中的状态.
5 j5 _  Q! U, f- znova-scheduler service 3 t$ W# D4 Z  v& B3 V" U" E
从队列中获取一个虚拟机实例请求,并确定它运行在哪个计算服务器主机上。1 \3 M3 T% u* g7 x2 Y4 J
nova-conductor module . V* }8 T3 @1 B3 k6 W
协调nova-compute服务和数据库之间的交互。它消除了nova-compute服务对云数据库的直接访问。nova-conductor模块水平伸缩。但是,不要在运行nova-compute服务的节点上部署它。1 O8 e8 g( d" c' i" w3 f/ \
nova-consoleauth daemon
! {2 z: {  J( I% I% u为控制台代理提供的用户授权令牌。参见nova-novncproxy和nova-xvpvncproxy。要使控制台代理工作,必须运行此服务。您可以对集群配置中的单个nova-consoleauth服务运行这两种类型的代理。: v7 Y2 V% h7 [+ h) D. c7 m$ ]  [* S
nova-novncproxy daemon 4 C" E" f9 x; ~1 {- K  u! p: y
提供一个代理,用于通过VNC连接访问正在运行的实例。支持基于浏览器的novnc客户端。% I: v. {$ s% v
nova-spicehtml5proxy daemon 2 a- W5 E! b9 b2 G3 R
提供一个代理,用于通过SPICE连接访问正在运行的实例。支持基于浏览器的HTML5客户端。
$ b5 m7 W) o$ Pnova-xvpvncproxy daemon
1 ^3 i& e' w5 Q2 f( O4 p提供一个代理,用于通过VNC连接访问正在运行的实例。支持特定于openstack的Java客户机。
. Y" ^& [! r4 U6 Y8 N3 O! U- k7 BThe queue 4 ?6 }- l$ x9 T6 j
用于在守护进程之间传递消息的中心集线器。通常用RabbitMQ实现,也可以用另一个AMQP消息队列实现) E1 t5 w; }: C2 @+ d" M) h
SQL database
3 Q0 l  d( _6 {; p- D+ K# _, S存储云基础设施的大多数构建时和运行时状态,包括:
( W7 f4 W5 f" X& S" kAvailable instance types
0 i7 S( E6 R% s( |7 c5 [Instances in use
; T$ i' Y% j% C- `* I9 x) AAvailable networks' P# Z4 S1 K* j$ _: b
Projects
4 P( Z) ?" }3 x; |& R$ M# w理论上,OpenStack计算可以支持SQLAlchemy支持的任何数据库。用于测试和开发工作的公共数据库是SQLite3、MySQL、MariaDB和PostgreSQL。  E; ?2 E4 m/ q; u0 T! n) G
$ `/ F& F; C1 h) L, i
准备工作& `* V& E( z) k" n' v9 X
安装之前我们需要先建库,帐号和api endpoint.% g. H  k  L9 L% j! c  ?

1 r/ e  J3 j! Z& ]. K' n* `在数据库服务器上执行如下步骤:
, D( s4 G& d* v; W7 s% M○ 使用root连接数据库服务器:
# a7 U8 f1 y7 Z    $ mysql -u root -p root123- H* G( H1 v& h! h& |; b
○ 建立nova_api、nova和nova_cell0数据库:+ a9 H5 L* ~5 z1 n$ T
    MariaDB [(none)]> CREATE DATABASE nova_api;, I& f0 `: [7 l) V
    MariaDB [(none)]> CREATE DATABASE nova;
* T6 y# C& V, Y6 ~) i# M: v4 L# H    MariaDB [(none)]> CREATE DATABASE nova_cell0;$ Z; a& S$ M# m! ?4 m" d
○ 赋予帐号nova对库的操作权限:
/ A* c) A" y0 L/ }6 [    MariaDB [(none)]>   GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova123';* u$ F2 ]5 U1 K* w; d/ G! _& d
    MariaDB [(none)]>   GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova123';
3 z- b5 j$ f" U& U+ j# j    MariaDB [(none)]>   GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'nova123'1 L5 ^# T! l5 O
加载admin的访问凭据,执行管理员命令:
3 n/ Y7 W$ v! g, u  E: T$ . admin-openrc* r: h# A  r! Q% X- ^8 |) F
建立计算服务的凭据:
! |3 r' @5 X6 E  D5 K: F% c# y# m8 n. a9 K3 g( h) C
○ 建立nova用户:4 @, Z" B: w( s8 a9 n: y7 A
    $ openstack user create --domain default --password-prompt nova
; T$ S/ ^4 Y, l' W; \) ?
* G, M" B1 E' ~" L2 A2 g    User Password:nova123" o6 r% A: G2 [$ ]3 [
    Repeat User Password:nova123
. @5 a9 y$ t, A5 a    +---------------------+----------------------------------+
' I  B  z+ F( O9 i    | Field               | Value                            |7 S8 ]% S2 _2 r9 {  ?$ k
    +---------------------+----------------------------------+4 m1 H9 `- r" ~3 S9 s
    | domain_id           | default                          |
. p% g' `9 U( T+ T    | enabled             | True                             |
" ^, Y. `- m3 P& L' [7 D, z    | id                  | 8a7dbf5279404537b1c7b86c033620fe |
5 H! i$ ~% k* b' T2 t' \& C    | name                | nova                             |
" W/ V5 I1 {; z) @4 p# M    | options             | {}                               |
3 n$ ]$ |. J4 W! v4 m" d& m    | password_expires_at | None                             |1 h4 ^+ n( t, n8 {- n
    +---------------------+----------------------------------+
% s% q; G) c( Q  \) Y! v2 b○ 给用户nova添加admin角色:
  M0 {9 }" j  V    $ openstack role add --project service --user nova admin
6 J" h; A$ U3 M$ v5 ]  v
) @9 C* v* M0 l0 F# U2 Z) v    注意:这个命令没有输出
; Q! U0 C  v" U3 C○ 建立nova服务实体:
- e" w3 m- e7 T6 b    $ openstack service create --name nova --description "OpenStack Compute" compute5 x9 N0 w) q1 i1 z2 L2 v

$ t. D' P# Z7 s6 S    +-------------+----------------------------------+
! g0 ~$ L+ M  x* A) _- }4 ]" Z    | Field       | Value                            |8 u; }7 I2 S2 ~3 Y9 q4 o
    +-------------+----------------------------------+) h# ~" t! p, M9 u8 m
    | description | OpenStack Compute                |2 m6 m: K# X9 n1 }! |, a' R  U
    | enabled     | True                             |
+ M% E9 D9 ?$ u% g" Z    | id          | 060d59eac51b4594815603d75a00aba2 |& d5 f# {( T" q% ?
    | name        | nova                             |
) ~  t3 S6 m1 s1 G4 I- s    | type        | compute                          |
% p4 Z5 {: d' j3 q    +-------------+----------------------------------+: T, }+ C% b: J
Create the Compute API service endpoints:
, P) t" m% X- O, x
6 M1 g7 j! q. p9 q- E' i& L& Z: K$ openstack endpoint create --region RegionOne compute public http://stack.flex.net:8774/v2.1. K4 X& X/ }# c( q' ?, ?/ ^! q
7 {! n- a- I% A& C! p
+--------------+-------------------------------------------+9 F4 Y/ l; J5 A: h9 ]
| Field        | Value                                     |* Y7 J$ p) f( m/ J# Q
+--------------+-------------------------------------------+5 y, ]3 D6 e* @; C
| enabled      | True                                      |
- S/ F7 B, G( O; J$ F| id           | 3c1caa473bfe4390a11e7177894bcc7b          |
& I. C& o+ a) s9 g| interface    | public                                    |
4 w0 i$ @' s' Z$ ^( W9 V9 e, d/ `| region       | RegionOne                                 |
8 o8 `0 ?' v# {3 h1 U7 D6 _| region_id    | RegionOne                                 |) O  k* [3 a& w# P. t
| service_id   | 060d59eac51b4594815603d75a00aba2          |* a$ ?  R+ t4 u4 ]6 [
| service_name | nova                                      |
2 H6 s2 s' z2 O9 o| service_type | compute                                   |# M* [0 [0 G( |
| url          | http://stack.flex.net:8774/v2.1               |
" ]& D) s# T; e0 Y0 C1 c+--------------+-------------------------------------------+
  b4 x% S% ]& E/ ?
/ O4 a  W1 {9 u! Y2 S$openstack endpoint create --region RegionOne compute internal http://stack.flex.net:8774/v2.1, \) D2 q% e5 ]

" Q& g6 S/ F% n4 o- u6 P+--------------+-------------------------------------------+
) f; W2 C' |1 a( l5 q4 d3 |! Q# g4 J| Field        | Value                                     |- h/ B% M8 w* z2 s. z" |' f; U
+--------------+-------------------------------------------+
8 l8 D' D# O' m1 }" V$ x! c3 `| enabled      | True                                      |
  G; ]2 I/ |1 K7 m| id           | e3c918de680746a586eac1f2d9bc10ab          |
; K2 M' e% o) |0 ^1 {3 c4 x| interface    | internal                                  |
1 T& \3 U+ [/ u; k9 B| region       | RegionOne                                 |+ A7 |( E. e2 L  H5 m* q
| region_id    | RegionOne                                 |- B7 r1 u, C+ C2 ~8 k7 u0 X
| service_id   | 060d59eac51b4594815603d75a00aba2          |' g; H4 L7 H9 R& v! Y4 I
| service_name | nova                                      |5 C- g  `* w4 o8 G, r$ C
| service_type | compute                                   |
; h( Q3 p: @0 P" e3 @" Z7 N| url          | http://stack.flex.net:8774/v2.1               |
; O  U( D( g0 |0 R- m5 z  L0 `; |- |+--------------+-------------------------------------------+6 `9 @/ K) M1 ~! v' X, T7 z4 F3 C

. C" }+ E/ R6 T5 d; L$ openstack endpoint create --region RegionOne compute admin http://stack.flex.net:8774/v2.14 ^; Y& U. e. a4 T) Z8 H- k

5 A7 @, B( ]2 s; X: Y5 b+--------------+-------------------------------------------+
9 e+ R5 ?8 I0 z* f& v2 A| Field        | Value                                     |
0 D5 X0 {2 q9 ?+--------------+-------------------------------------------+# B* _0 \; [' n2 E- N- G* P
| enabled      | True                                      |8 C% h6 T& M3 I  x
| id           | 38f7af91666a47cfb97b4dc790b94424          |
& @1 j7 Q5 q# ^8 J, o| interface    | admin                                     |( q& `) ^/ g, V+ B
| region       | RegionOne                                 |
! r7 r# H  j! ?8 b5 B| region_id    | RegionOne                                 |
, [3 D1 U* y  V- F- N! `! a| service_id   | 060d59eac51b4594815603d75a00aba2          |
0 G( `/ }8 V& R8 Y0 `| service_name | nova                                      |: n, c9 o: P. ~  D" x
| service_type | compute                                   |
5 n0 F  s* i+ D$ D. |4 @6 N| url          | http://stack.flex.net:8774/v2.1               |' g% q' p: P7 G1 t" g
+--------------+-------------------------------------------+
4 e& t4 r9 S) f安装配置组件( Q  G8 n& W, P) _$ o. u
安装包:) M8 U  r/ a+ J  H
# yum install openstack-nova-api openstack-nova-conductor \4 F2 i' D, d' U9 ~, z% r
  openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler# H# T1 k# d; G6 t
编辑/etc/nova/nova.conf文件完成下列需求:
; S0 L: A" S5 S' }6 p  m5 a6 w6 ]& s7 T3 S6 W) d+ Z
○ 在[DEFAULT]区域, 充计compute和元数据API:( t5 |$ o  V$ M' F/ p% @( G: A
    [DEFAULT]" c6 A& T( i4 F' K. O9 Y+ a
    # ...! J, F# g2 D) O" O' P/ ~3 I+ H
    enabled_apis = osapi_compute,metadata8 ^! Y* u7 L* J1 b/ {

2 l, ]" f7 _; ~" A○ 在[api_database] 和 [database] sections,配置数据库的访问:
+ X7 y$ d4 ?8 r# m0 L; D; U% d    [api_database]( |9 }, D9 t, B" V* H/ y! A/ {
    # ...0 Y6 L4 [% Z. r6 A7 d: J7 {; s
    connection = mysql+pymysql://nova:nova123@dbs.flex.net/nova_api
3 w' U9 q8 D. r; m4 r6 q" C
/ _0 r$ X( d6 v4 S; }( j" F9 t    [database]  x* C; G; ~& R* r
    # ...* n7 u4 H7 [# K% p" z
    connection = mysql+pymysql://nova:nova123@dbs.flex.net/nova
* k2 r# B6 S* e: i7 Z& d7 M6 H  k& }0 C: M4 J9 {: a( ~( e) D
○ 在[DEFAULT]区域, 配置RabbitMQ消息队列访问:! ]/ o2 H4 S2 J4 x
    [DEFAULT]9 P: `1 r  s7 v% I) e
    # ...; D7 n1 L& R- a! g4 T! z
    transport_url = rabbit://openstack:openstack123@dbs.flex.net5 O; G7 o) e, [# r. \. q
/ H' N; E( k$ p& u  |+ V* t
○ 在[api]和[keystone_authtoken]区域, 配置访问认证服务:( y8 u9 a2 }3 n) V" f6 c
    [api]+ G3 {4 L" z* B4 O4 Z, O
    # ...
! J% y- K9 s5 a- G1 w- T    auth_strategy = keystone5 F( z( ?4 r6 U% g/ e& _0 O) z
" J. T- f4 s0 N& H
    [keystone_authtoken]
- N% u" }, V2 W+ _# a$ T8 P! R    # ...1 ~. T. b  d( {% D2 q9 g* U+ K4 U) c
    auth_url = http://stack.flex.net:5000/v3) q  t4 O; q' _
    memcached_servers = dbs.flext.net:11211
$ Y) _+ A, }) b2 k# W    auth_type = password
1 ?" \0 r) x. Z6 L' ]5 M    project_domain_name = Default
! n" v& T5 S" M    user_domain_name = Default
8 x. v( ]) c7 \. q! r4 K" Z    project_name = service& J/ m) t: A+ H( L
    username = nova
" P' o: |  P* K) w. Q    password = nova1232 S) G6 `& r- p9 C% A
     
; V* U! w( L' }6 K    注意: 注释或移除在掉在[keystone_authtoken]区域中的其它的选项.
/ H( T9 ?2 z+ P, W) g3 x1 u& D) x$ k: E
○ 在[DEFAULT]区域, 配置管理接口的IP:
. }) X' [" v4 f2 b    [DEFAULT]' t' P- J, H7 u7 j6 ~. P
    # ...
5 T6 A2 l  l3 R1 \    my_ip = 192.168.207.2  #此处为控制节点的管理IP地址. v* V; M6 n( V0 z! q( ~
○ 在[DEFAULT]区域, 充许支持的网络:
+ d) [2 R/ q" p9 N  F/ |: x/ V% a2 S    [DEFAULT]/ y. M0 r3 `! v
    # ...
" ~9 i0 B* C4 X2 r    use_neutron = true: @9 g* C) J. c' m/ r8 s' `
    firewall_driver = nova.virt.firewall.NoopFirewallDriver3 n% J% _/ f! |& g6 s
3 o8 ]9 ?! v, Z" n) d6 D
    缺省的,计算节点使用一内部的防火墙驱动,因为网络服务包含了一个防火墙驱动,你必须禁用防火墙驱动并使用nova.virt.firewall.NoopFirewallDriver firewall driver
. d& X4 V2 ?$ g% p) J" c" B○ 在[vnc]区域, 使用管理接口的IP做为vnc代理使用:
: V1 L7 v: v* E4 q1 v' v    [vnc]5 e7 \( X+ \0 A7 R+ k0 K
    enabled = true
9 e* j$ x2 Q+ O. i    # ...
$ Q2 A; w" m; ~) M- @" r6 f) C    server_listen = $my_ip* N, q% c3 s* ?& [! ?7 s( j
    server_proxyclient_address = $my_ip5 u, Y3 V* T0 A! a
! R- w1 ]- p9 ~1 {7 K6 }0 @- S
○ 在[glance]区域, 配置镜像服务api的位置:
& d! j& D% P( H3 O* P, V    [glance]
3 V$ @/ R! P. c. P0 O) Z    # ...
$ K# U4 A! j1 K# y' Q& l" o: z7 F( G    api_servers=http://stack.flex.net:92921 t3 p' m/ |; w% g1 h( D
; k8 R# i5 W; B4 ~, H8 [
○ 在[oslo_concurrency]区域, 配置锁定的路径:
( k/ D4 `9 R* P( N    [oslo_concurrency]4 o2 Z4 }/ n6 d
    # ...
4 {& H: X) b/ z  m! d    lock_path = /var/lib/nova/tmp& g6 C# {: p! b8 X; N
+ k/ N* c8 y! T
○ 在[placement]区域, 配置访问placement服务:3 ?! U) g8 @1 K. B0 o, y
    [placement]1 u) t) x) \' e  n! H. i) C
    # ...
# i' }7 I! h/ }1 q8 I, [# u0 r    region_name = RegionOne
+ y& \9 K5 U1 z4 N4 R4 u. H" l    project_domain_name = Default
) u1 n! }- e6 ~' ^1 q    project_name = service
! h1 o  ?6 S) O: i0 e4 n    auth_type = password
8 G6 F) E$ C/ c0 R: k, B' q    user_domain_name = Default3 f" I) m. _$ L# L* ~( P
    auth_url = http://stack.flex.net:5000/v3
6 \4 E1 y% @6 P    username = placement. g3 p' {% d( i6 u( Q) v
    password = placement1230 a: K9 i' ^: Z$ T( c# k6 @  W3 z

$ j3 v* g/ s7 g9 g    注意: 注释或移除在掉在[placement]区域中的其它的选项
2 {; t& @% Q4 ^& g5 R5 ~; \8 n& U+ z, n# Q# w
○ 由于一个bug, 你必须充许访问placement API, 添加下列的配置到/etc/httpd/conf.d/00-nova-placement-api.conf:* }, N+ [8 H+ M1 ~( j0 N
    <Directory /usr/bin>
# C# B& m% I& D  k. J- T       <IfVersion >= 2.4>
. D9 J+ U$ k% q$ n. }          Require all granted  N6 M, {" R& K' J  E
       </IfVersion>; I" k2 [2 f: _4 H; J* l/ j* |: A
       <IfVersion < 2.4>; a' j7 X2 N" i  R5 L2 w
          Order allow,deny0 s  s3 x, h" p$ c8 m* }1 n
          Allow from all
0 d  i9 t. w* D/ \: d8 \       </IfVersion>
" P" ~- r/ q! Q2 q* f7 Q" q$ v+ Q    </Directory>( T! a5 B0 N" k8 k
4 R6 J2 [& y; i, Q$ s9 C* J) }
○ Restart the httpd service:. B" y- i7 n2 H
    # systemctl restart httpd
" S5 D. S" {0 @5 zPopulate the nova-api database:
$ A& y2 G1 D% B! N, r3 ?, Z, g# su -s /bin/sh -c "nova-manage api_db sync" nova
7 E/ B) \5 Q# U0 ^% U' }1 ERegister the cell0 database:
$ o. q; b# F5 d5 G# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova: e" a/ F  G, i6 {% g" M0 ^
Create the cell1 cell:: x9 S: C1 A# C! H
# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova
5 y/ D' H; C2 }$ F' p0 v109e1d4b-536a-40d0-83c6-5f121b82b650
0 z1 D5 O1 l6 PPopulate the nova database:
( b8 v, w* g6 o3 W# su -s /bin/sh -c "nova-manage db sync" nova
% r* Q  e# o! d7 N& BVerify nova cell0 and cell1 are registered correctly:
3 y. v: U$ Y3 ?. H+ m5 z3 d' p# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova
. \5 I$ _0 o, G% j+ q+-------+--------------------------------------+1 S6 y1 ~+ g3 r: T3 z
| Name  | UUID                                 |" z1 k+ l( G+ y, }
+-------+--------------------------------------+
  g4 z3 S# a. O8 c0 ]| cell1 | 109e1d4b-536a-40d0-83c6-5f121b82b650 |; \( ^. N5 `% W
| cell0 | 00000000-0000-0000-0000-000000000000 |0 h- M  \% P  n' M% T2 w
+-------+--------------------------------------+- c3 O" m0 j, b* V" q$ }
安成安装$ c0 K, K9 p: g- B
○ 允许系统引导时自动启动服务并启动服务:/ b8 ~0 Z7 d1 E2 r, u
  # systemctl enable openstack-nova-api.service  \
) F4 f! t0 R* X3 Z. b; l   openstack-nova-scheduler.service \
7 c0 p4 N8 x1 L! W, g( O  q   openstack-nova-conductor.service \
* |8 d7 w$ _4 L: Z8 h   openstack-nova-novncproxy.service
" Y9 A; R3 R- `1 v* @2 l  # systemctl start openstack-nova-api.service \
+ h& J: ?, k# [; K" |; b) ]   openstack-nova-scheduler.service \
- D0 U. k# C3 _# l  E! n+ g* R( X   openstack-nova-conductor.service \1 \  a8 Z2 @& I" K- _2 n$ N- E" f
   openstack-nova-novncproxy.service
; f+ R8 E* R9 X( O
5 P# h: b3 j- yInstall and configure components
1 x2 {, h4 k* RInstall the packages:2 T+ A& T5 U* r5 L4 {, l3 H$ T8 v, g
# yum install openstack-nova-compute
1 N1 a! j7 n  v/ `' {- i6 y1 l) B: {Edit the /etc/nova/nova.conf file and complete the following actions:
  j. W0 [2 w$ K& F3 `6 Y, U. Q: c3 t$ E1 \( c! {
○ In the [DEFAULT] section, enable only the compute and metadata APIs:
% B: x# T# q8 }    [DEFAULT]2 N8 g* f# \* q  D9 W
    # ...* Q/ E! }* V" C" p- ~
    enabled_apis = osapi_compute,metadata
* Q% T: `- r2 Y( Q
7 T% \7 S; ~5 b5 `2 U  ]! ~○ In the [DEFAULT] section, configure RabbitMQ message queue access:! M. h3 U7 I: L5 A% p, K9 L! m7 H
    [DEFAULT]' M# \# r% q1 v3 S
    # …8 E6 k$ j7 G( W' q0 G
    transport_url=rabbit://openstack:openstack123@dbs.flex.net
3 X% l6 [9 l' n! ?+ {: S! _2 s# J0 _& E
○ In the [api] and [keystone_authtoken] sections, configure Identity service access::
( U/ V8 W) L( g, r' ^    [api]: A% d2 G5 S$ l1 g0 Y* S( w
    # ..., S' e$ [+ n8 _" w6 S& ?2 H
    auth_strategy = keystone
/ q' @2 Q' y  u% F( y' X& o6 n3 H1 A2 L
    [keystone_authtoken]
6 x2 H7 o( a* E% W1 {9 c& B, [9 q    # ...
/ Q% x& P3 @6 v4 e& p    auth_url = http://stack.flex.net:5000/v3
! L, k0 h4 x& J. i3 f    memcached_servers = dbs.flex.net:11211
5 S0 t1 Y% Z4 s3 _% C. J0 ~    auth_type = password
) D" m4 u# e5 |8 C# F! {- R    project_domain_name = Default
& }. l' }1 R) n- x    user_domain_name = Default
% L- o' {0 ^: p% a    project_name = service7 @7 K: p) X1 A/ x% x* y. Y
    username = nova
% m! Y$ o4 {, K    password = nova123
4 u" l3 K4 U1 i' G4 z5 y6 s8 O    注意: 注释或移除在掉在[keystone_authtoken]区域中的其它的选项
. n  l! N+ L0 ]+ G! i3 k/ R6 |* P7 N
○ In the [DEFAULT] section, configure the my_ip option:
. Y! r  |& @6 |' B    [DEFAULT]
# s9 D$ T+ ]1 v( ~8 K) R' x    # ...0 `- d4 g$ I9 v( G. c* z6 S
    my_ip = 192.168.205.187
! o) Q" u: M% B" N. t$ m# O0 @注意:使用管理接口的IP在你的计算节点上.
2 U" W) E6 h% }. [! n
7 k' |1 S* A# k○ In the [DEFAULT] section, enable support for the Networking service:
  N; T' D1 ?$ p9 z' F    [DEFAULT]
2 ]. p& m* F9 `( e9 b    # ...
* s. a  }5 P$ N- P    use_neutron = true
) P. J- w( h; S/ K    firewall_driver = nova.virt.firewall.NoopFirewallDriver- m% x; r$ ~# J0 g- U9 I: u, V
注意:缺省的,计算节点使用一内部的防火墙驱动,因为网络服务包含了一个防火墙驱动,你必须禁用防火墙驱动并使用nova.virt.firewall.NoopFirewallDriver firewall driver
: `& M) C' W+ K  \9 t  _' b+ }5 `$ d6 n2 K8 p) F
○ In the [vnc] section, enable and configure remote console access:4 Q0 \7 S$ N0 Q% }4 J  Z9 P+ \
    [vnc]7 _) v2 F; [* s: |, C2 ^
    # ...8 |) T9 }6 B6 u8 |1 C4 |9 j. F) F
    enabled = true
3 N! D8 A! S7 v. R. n' j    server_listen = 0.0.0.0
  Q% l. Q6 R* S) x( |0 a    server_proxyclient_address = $my_ip
+ K; r0 V; |9 R" v) g# Z3 K    novncproxy_base_url = http://stack.flex.net:6080/vnc_auto.html( v; A% f! [+ u8 J" t* J5 L  Q9 V
9 P/ }- o2 O; u. e
    服务器组件监听所有IP地址,代理组件只监听计算节点的管理接口IP地址。基本URL指示可以使用web浏览器访问此计算节点上实例的远程控制台的位置。% _6 P7 l/ o4 G3 G; m( d
注意:如果要访问远程控制台的web浏览器驻留在无法解析控制器主机名的主机上,则必须使用控制器节点的管理接口IP地址替换控制器。* B# P+ l8 J+ e6 h) ?7 \0 J

. X8 g' W1 V& j; Y; ^○ In the [glance] section, configure the location of the Image service API:3 T$ ?% {. Q$ n% q4 Q' Z' o' z8 g
    [glance]
2 y5 [) A; o7 Q    # ...# c9 U# J" v0 w( x/ k" v
    api_servers = http://stack.flex.net:9292
& a6 Z2 \# _# g
' g% K, ]# x8 b9 K/ n! C' L○ In the [oslo_concurrency] section, configure the lock path:/ c6 C! z# ?9 o
    [oslo_concurrency]
/ X! N/ x$ G! G  j. ~; }% n    # ...
' @6 d: y6 g$ t; P- V, o    lock_path = /var/lib/nova/tmp
( S4 |3 I0 N( ]! t6 h- u$ [* e  l# Z, c6 D9 t) ]- b
○ In the [placement] section, configure the Placement API:9 Q/ U6 V& f. l: J
    [placement]: Z' j  v, m$ U+ w& _* _& d* w+ M! b
    # ...
7 r% H! ?8 f0 O; B    region_name = RegionOne
( b& q7 J7 x: Y. _# e% ]    project_domain_name = Default( o' x! ?; J+ W3 K! h& O" n4 N
    project_name = service, |, U' n% L+ Z( G9 H6 N2 r
    auth_type = password. y6 s& [& G+ C- h7 x8 E
    user_domain_name = Default
& |# v1 w# A( X0 L8 i6 Q    auth_url = http://stack.flex.net:5000/v3. f1 Z& e$ @* z4 z$ O+ {7 F" I/ Z
    username = placement
, K. P* O% c& u2 L, U    password = placement123& M# V4 o( Z2 c% c# Q
Finalize installation3 k( \4 U( h4 J5 Y+ b3 r- J: s9 a9 T
Determine whether your compute node supports hardware acceleration for virtual machines:
5 w; P* x* b2 B
% n9 `" c( ]1 k: ?8 t, h$ egrep -c '(vmx|svm)' /proc/cpuinfo
! {$ Q$ q# X0 A( u
4 J" T/ f! f; f6 I( q9 x; r如果这个命令返回1或大于1的值,你的计算节点支持硬件加速,通常不需要额外的配置,通常如果你的计算节点使用的是Vmware Workstation虚拟机,你可以充许virtuallze Intel VT-x/EPT or AMD-V/RVI这样打开虚拟化设置8 g+ A6 d7 e" N, Y( c8 _. t

5 l& _) J0 [  ]; o. G如果这个命令返回一个0值,你的计算节点不支持硬件加速,并且你必须配置libvirt使用QEMU取代KVM, 编辑文件/etc/nova/nova.conf文件如下:' ?. L. l: t5 W, `& R
[libvirt]$ o: ]) s  |" v+ l" n6 ^! l& U- y
# ...7 {6 F- l4 b# U; S* V- o
virt_type = qemu
) a$ a  f# }, X8 oStart the Compute service including its dependencies and configure them to start automatically when the system boots:
; B4 z% d: e- v9 q: \9 y& M1 a* r
, K4 b: \( \  U1 Y/ K# k# systemctl enable libvirtd.service openstack-nova-compute.service
  e2 T3 t5 r9 @9 m7 q3 u5 Y' a# systemctl start libvirtd.service openstack-nova-compute.service0 @  H% c5 F" }/ u+ x5 M' c
+ h( z) A# Y, l: `3 H4 A  ^
注意:如果nova-compute服务无法启动,请检查/var/log/nova/nova- computer .log。controller:5672上的错误消息AMQP服务器不可访问,这可能表明控制器节点上的防火墙正在阻止对端口5672的访问。将防火墙配置为打开控制器节点上的端口5672并在计算节点上重新启动nova-compute服务。  T6 x) d' R+ y  i, u. q
Add the compute node to the cell database
$ x! h, E- a3 f+ p3 }Source the admin credentials to enable admin-only CLI commands, then confirm there are compute hosts in the database:5 t, y1 l& c- z: H+ H

! s; ?! U9 N- f9 k$ . admin-openrc0 P% U& I+ R5 f5 m7 k* ^) l

6 t3 P. H* }5 f$ openstack compute service list --service nova-compute5 x6 b9 B' f8 R/ ~- S
+----+-------+--------------+------+-------+---------+----------------------------+
0 R+ h+ |$ s  F1 `) N: A| ID | Host  | Binary       | Zone | State | Status  | Updated At                 |0 R/ E' G4 r0 z* b% e) Y% j
+----+-------+--------------+------+-------+---------+----------------------------+
) T4 Y8 M! f7 w! x; S# e" V| 1  | node1 | nova-compute | nova | up    | enabled | 2017-04-14T15:30:44.000000 |- v* l8 [7 M' A5 \3 I, S9 ^5 a
+----+-------+--------------+------+-------+---------+----------------------------+
, Y" h5 u; E4 j4 c* HDiscover compute hosts:
- N* `3 Q1 ^' X9 @- D" q5 i$ n2 r. F0 C" b7 |0 I
# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova4 G! w1 @, `; q6 Y. d

1 P! r$ [1 {4 Y: F6 MFound 2 cell mappings.2 G8 r* _* _! z  i
Skipping cell0 since it does not contain hosts.
/ J3 ~3 V# D* F/ Z0 U6 A3 hGetting compute nodes from cell 'cell1': ad5a5985-a719-4567-98d8-8d148aaae4bc
& Q. b. {/ c+ _6 q+ LFound 1 computes in cell: ad5a5985-a719-4567-98d8-8d148aaae4bc
7 h# ~) i) J! B4 {- `5 |4 \+ s2 iChecking host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3
. `* M& B( ^: A, Q* k8 K2 B& U+ eCreating host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3
/ S. S; z( ?( I5 J0 w$ B" `注意:当你添加新的计算节点,你必须运行nova-manage cell_v2 discover_hosts在控制器上注册新的计算节点,替代方法为你可以在/etc/nova/nova.conf中设置一个适当的间间隔自动发现计算节点:5 p4 H% k' \3 N2 J* d" h4 r
[scheduler]
$ w* ~" U0 x5 L9 i& |) Bdiscover_hosts_in_cells_interval = 300
# H! \2 B2 D, A% ~$ ^Verify operation" f- _1 Y1 E: c
Verify operation of the Compute service.
1 a: F% z( Y/ r6 W0 ZNote: Perform these commands on the controller node.
4 p: O; t0 D1 g
/ s+ T* J# L* v. n% T( |+ r9 U  U% XSource the admin credentials to gain access to admin-only CLI commands:
3 x5 M# o0 q9 o* i! V$ . admin-openrc, R1 m6 ?2 b1 p! v
List service components to verify successful launch and registration of each process:
( Y# p! Q) R( n% x; \
, s  n: E' ?8 ?7 @; i& B) C$ openstack compute service list
( ~7 u. A# K- h" V; t: ~0 F( \* M
0 {0 ?: M5 m' F0 D- x4 i+----+--------------------+------------+----------+---------+-------+----------------------------+
2 A4 U. W9 @& j  i; G| Id | Binary             | Host       | Zone     | Status  | State | Updated At                 |
- f% [% n, V  E. y3 G+----+--------------------+------------+----------+---------+-------+----------------------------+- c! Z% Q* t- d6 |* Y+ H
|  1 | nova-scheduler     | controller | internal | enabled | up    | 2016-02-09T23:11:15.000000 |$ K4 S  f" W( v# E& k& d2 L5 ?7 P
|  2 | nova-conductor     | controller | internal | enabled | up    | 2016-02-09T23:11:16.000000 |
! Z7 p0 L6 T2 S: K|  3 | nova-compute       | compute1   | nova     | enabled | up    | 2016-02-09T23:11:20.000000 |7 n+ f4 W$ ^" }
+----+--------------------+------------+----------+---------+-------+----------------------------+
1 O8 ]: V0 ~# O7 G, O; F& ?$ X8 s; O& o% b8 d
Note: This output should indicate two service components enabled on the controller node and one service component enabled on the compute node.: o, W/ _) z$ ]
List API endpoints in the Identity service to verify connectivity with the Identity service:0 C6 r; h* n1 ^
$ openstack catalog list
5 N4 r8 v+ d" S4 Q/ z& ^+-----------+-----------+---------------------------------------------+
0 E0 ^- `; v& Y- J- [* x| Name      | Type      | Endpoints                                   |" T  D) R* I8 Q, X& B- W+ }* k$ M
+-----------+-----------+---------------------------------------------+% A9 }9 {2 i) U$ A: ^3 m3 V( ?
| placement | placement | RegionOne                                   |
; T4 n+ ]. S- F|           |           |   admin: http://stack.flex.net:8778         |* U8 z$ W; `7 Q0 x- G  u8 M9 W
|           |           | RegionOne                                   |- |  O* w9 l9 ~
|           |           |   internal: http://stack.flex.net:8778      |
$ U% E" U( z4 O; H" a( c|           |           | RegionOne                                   |
0 e* c5 w  G- z" \# s6 a|           |           |   public: http://stack.flex.net:8778        |# _8 C: C" Z1 T( Y2 B% p
|           |           |                                             |: s+ |$ _0 o( D+ j4 N; c! T4 l3 z
| glance    | image     | RegionOne                                   |
1 G# Y* [1 b2 K# T& s2 b! o; s|           |           |   admin: http://stack.flex.net:9292         |$ u8 v0 `" ]) c8 I, ~  h
|           |           | RegionOne                                   |
* D% _2 e; O% l9 h* W/ j3 x$ d|           |           |   public: http://stack.flex.net:9292        |3 e2 R1 [9 N- m
|           |           | RegionOne                                   |! u$ w. ~4 E; S1 B3 H* ?
|           |           |   internal: http://stack.flex.net:9292      |9 h4 k5 s3 N5 ?9 T; u: n3 n4 `
|           |           |                                             |9 m: {: p1 l. H& z1 ]8 _
| nova      | compute   | RegionOne                                   |" V! P  b+ I  d9 d, \
|           |           |   public: http://stack.flex.net:8774/v2.1   |- r( o  \% a* n. {" S/ v
|           |           | RegionOne                                   |8 |. Q0 L! {- D% B
|           |           |   internal: http://stack.flex.net:8774/v2.1 |
6 `) u( N! W5 @$ v|           |           | RegionOne                                   |+ f8 z0 x* t+ ~' g( q! ]
|           |           |   admin: http://stack.flex.net:8774/v2.1    |
9 n7 g+ y. M4 a|           |           |                                             |
! ^9 T2 V0 N8 a; f. x' C| keystone  | identity  | RegionOne                                   |
" n; W9 R( E% Y! p; E|           |           |   public: http://stack.flex.net:5000/v3/    |
6 g6 S1 {) `4 t0 b: n|           |           | RegionOne                                   |- u; {8 F5 P1 E+ k4 |1 W& o* ^$ \
|           |           |   admin: http://stack.flex.net:5000/v3/     |" @7 U. k" B- h4 S, c$ \5 I
|           |           | RegionOne                                   |
# V4 J! R( C9 h  E( P5 A9 H# X* k|           |           |   internal: http://stack.flex.net:5000/v3/  |
. l7 r; s- l. I, y|           |           |                                             |
# {8 f8 y5 a/ J, o1 _( `+-----------+-----------+---------------------------------------------+
2 d3 f4 H2 \4 k" a% T0 z' {, ?List images in the Image service to verify connectivity with the Image service:) ?. ]/ @0 w* S3 ^

7 A2 ]9 i* Z& S$ openstack image list2 {6 Z) F4 P, d$ n& c" C/ T2 w

# P7 s% y# X" K* T' i; L+--------------------------------------+-------------+-------------+, ]; y/ f7 z+ \0 \! W3 G7 C9 E# _
| ID                                   | Name        | Status      |
0 \1 T: a" |. ?+--------------------------------------+-------------+-------------+
9 q; z! Z! C7 P6 W| 9a76d9f9-9620-4f2e-8c69-6c5691fae163 | cirros      | active      |
4 `& e) u( ^# L3 q+ R+--------------------------------------+-------------+-------------+
4 S5 x  m% N: D+ N' S, i# V% o+ YCheck the cells and placement API are working successfully and that other necessary prerequisites are in place:& w& L8 K' d7 P0 y6 J5 A2 t) ]
' h& e! n' t  s  R! [
# nova-status upgrade check
" i0 T5 Y6 |/ Q$ v
9 D1 w, v& I$ E$ H0 ^# }# W( k+--------------------------------------------------------------------+
% u1 z' R0 Q+ u# u) R1 F  t8 U$ z* n| Upgrade Check Results                                              |& M+ q. @4 i2 J0 x7 s
+--------------------------------------------------------------------+
# I$ p/ K$ u# L  U. U0 ^# b| Check: Cells v2                                                    |
9 d3 S3 a+ F! j/ i& f| Result: Success                                                    |7 H$ U0 N4 L/ ]/ J8 h
| Details: None                                                      |0 Q6 x! `3 W4 a& z% n& J
+--------------------------------------------------------------------+6 N4 {; \1 d' j1 {3 m
| Check: Placement API                                               |$ T6 l9 ~' ^$ ~2 g8 |0 d
| Result: Success                                                    |
$ m; D9 l8 P& N6 || Details: None                                                      |
7 x) y& Z& v& U- b6 u/ I+--------------------------------------------------------------------+
. _9 T/ Z, F8 j. a; i, K| Check: Ironic Flavor Migration                                     |
- N3 c( z$ V$ R4 a) h0 p7 ]4 I| Result: Success                                                    |
2 l5 C% \, ]7 I' i; L, R| Details: None                                                      |
2 D* \. u4 u$ m+--------------------------------------------------------------------+
% r" x0 ?8 i  }( i5 {9 \2 i| Check: Request Spec Migration                                      |& z- _+ t7 S+ `/ b
| Result: Success                                                    |7 p# n7 i2 M! F+ t
| Details: None                                                      |
& g' h$ v+ @" z/ m* H) `+--------------------------------------------------------------------+
8 t4 @& d+ ?# k9 H. F| Check: Console Auths                                               |
1 |- \' b: `3 P& F& J& J4 K# Y| Result: Success                                                    |' I! ?8 t: t8 h& d  i
| Details: None                                                      |
/ K5 o3 a$ ^& @+ l9 j6 y& N+--------------------------------------------------------------------+
  E- e. u* I* s" `" Z7 ~+ j+ s
! ]& T1 K3 F; v/ [. V
: w* _% Z0 e# K5 n" c! TOpenStack网络(neutron)允许您创建并将其他OpenStack服务管理的接口设备附加到网络上。可以实现插件来适应不同的网络设备和软件,从而为OpenStack体系结构和部署提供灵活性。( o% Z* y6 n6 m6 C
  它包括以下组成部分:
% M5 M$ ]9 p1 w( d
, s$ }& A% g1 `0 f4 Mneutron-server 2 I( p/ Q3 z; w! _- n) c' ~. _
接受API请求并将其路由到适当的OpenStack网络插件以执行操作。
% v4 t1 i- j! s+ R/ wOpenStack Networking plug-ins and agents 3 k- P: {8 N9 u0 z
插件式的网络端口,创建网络或子网,并提供IP地址。这些插件和代理的差异取决于特定云中使用的供应商和技术。OpenStack网络附带了用于Cisco虚拟和物理交换机、NEC OpenFlow产品、Open vSwitch、Linux桥接和VMware NSX产品的插件和代理。
* P9 k" w( }: O" c2 g! @常见的代理包括L3 (layer 3)、DHCP(动态主机IP寻址)和插件代理。) B; n% p! P! x
Messaging queue
8 t  ^* Z& Z. g4 E$ H1 c大多数OpenStack网络安装都使用它在neutron-server和各种代理之间路由信息。还充当数据库,存储特定插件的网络状态。
7 G& k5 L) o5 y* X7 T7 S* q/ h; Y9 M% Y  I) K% [! c: {
Prerequisites
* P4 }+ ^8 G8 i! [/ a2 P# I: UBefore you configure the OpenStack Networking (neutron) service, you must create a database, service credentials, and API endpoints.: i4 W  Y/ o7 a, @' n

6 l/ P6 |" q( Q7 U: @To create the database, complete these steps:! d% ~) I2 f& l
○ Use the database access client to connect to the database server as the root user:6 s* T$ b) q1 ]* E" x' I
$ mysql -u root -p root123
# h: X0 \0 s5 y4 ]! w' e○ Create the neutron database:
! N7 Z4 {( i# e9 L' a, z* gMariaDB [keystone]> CREATE DATABASE neutron;  a% O- I" Y5 Q7 e1 H
○ Grant proper access to the neutron database, replacing NEUTRON_DBPASS with a suitable password:* R" ]: \( J% y7 |
MariaDB [keystone]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron123';! e$ _' d1 d# x% y' Q; ?
Source the admin credentials to gain access to admin-only CLI commands:" Q( @9 t& h4 Q
$ . admin-openrc
7 ~- ~& H+ I* ^6 M9 f$ F* ~9 U$ ?To create the service credentials, complete these steps:
" n" r" ^. a$ {+ i/ C0 Z) e! A. [' A7 M& I3 B) w
○ Create the neutron user:
% y& d+ ?  s+ s% m9 @$ openstack user create --domain default --password-prompt neutron- o5 t# y. T" A  A4 v
User Password:neutron123; m9 G7 u8 R& s+ O& w
Repeat User Password:neutron123
1 Q" W) Y' |& n. C! w  o. ~$ u- i: U+---------------------+----------------------------------++ g& {" Q* X! E. V
| Field               | Value                            |
0 o# ?: c- Z6 G+ S7 `2 F& s+---------------------+----------------------------------+! C  e" `+ P/ z9 q1 b
| domain_id           | default                          |
) B2 E1 x& e6 v1 g* S) J| enabled             | True                             |
: D4 f6 N  r" y1 ?' L' Z| id                  | fdb0f541e28141719b6a43c8944bf1fb |
7 z4 g$ q4 Y  @7 t4 p| name                | neutron                          |7 i( z) i& m& l4 L% w
| options             | {}                               |
2 v* A. ]9 H: E! U/ ]6 d| password_expires_at | None                             |
, L6 k8 E! S) ~5 H' u+---------------------+----------------------------------+9 W% G0 b. ~) u
○ Add the admin role to the neutron user:0 f# }; X' H+ ~% f
$ openstack role add --project service --user neutron admin
1 Z4 ^7 l( {( S 8 Z8 H. G# k* i0 r0 s
Note: This command provides no output.
4 q$ e3 ^( ~" s; z○ Create the neutron service entity:
/ T5 r+ n% b, w0 _! N$ openstack service create --name neutron --description "OpenStack Networking" network6 t+ |0 E7 l8 m! u0 O0 g

1 B1 t9 ?2 G' [$ J6 e+-------------+----------------------------------+$ W# U( S9 Z, T; r
| Field       | Value                            |
- t7 A* s* D" ?/ ^8 w+-------------+----------------------------------+' R$ u" W1 ~# \. B& ~* m( q
| description | OpenStack Networking             |
- }" f: t" X( W) E  J& W$ T% i9 M5 C| enabled     | True                             |/ t  k7 k2 x; J: {  v
| id          | f71529314dab4a4d8eca427e701d209e |
; E' m+ B) G% H# i, n, \6 ]| name        | neutron                          |& h, Z8 C8 r  v8 V3 P
| type        | network                          |
: k: x  e6 J9 t/ L: a. C+ X+-------------+----------------------------------++ A- [! x" d$ o, y& m
Create the Networking service API endpoints:
1 z# w% _" n8 q
6 x9 _% k+ D9 _/ K" U$ Q#openstack endpoint create --region RegionOne network public http://stack.flex.net:9696
# ^: m) M2 s% d. f  j3 Y+--------------+----------------------------------+
; [1 l8 d) X% V. J| Field        | Value                            |
, z9 ?) b3 T* e+ D+--------------+----------------------------------+$ J$ N; p# @: H' O* m
| enabled      | True                             |
6 ?: d+ U' j( [% P' o| id           | 85d80a6d02fc4b7683f611d7fc1493a3 |) z: p9 H. W3 ?8 {2 P+ W; G
| interface    | public                           |
; X) a3 g! q3 Y3 C, R| region       | RegionOne                        |% h1 N; t- w9 A% l* D# r3 A
| region_id    | RegionOne                        |
+ o" U! f7 A  T  E) c| service_id   | f71529314dab4a4d8eca427e701d209e |
- D0 V* @8 U2 _! z' u7 U| service_name | neutron                          |
/ l7 h7 n5 g! ^9 O  b# }$ P| service_type | network                          |
* A, g" u- ]% E| url          | http://stack.flex.net:9696           |
/ e& a1 P+ U! x$ }3 R( ~5 ~+--------------+----------------------------------+  A% X; P& |+ l! f
#openstack endpoint create --region RegionOne network internal http://stack.flex.net:9696
- w, Q, h- v. [$ A6 X
' Q. b% f; C- B0 e+--------------+----------------------------------+
! r) h. e0 f4 U$ c# A" X| Field | Value |
3 w; i0 Z* z, [: a1 y+--------------+----------------------------------+
6 x# U! v/ @* [) ~1 q1 j" s| enabled | True |
8 |$ f8 T) Q6 ~% O0 p/ E% S| id | 09753b537ac74422a68d2d791cf3714f |- ~0 t, z* T5 b
| interface | internal |7 l, ]/ O) P# K% ~2 P
| region | RegionOne |) v- V% q/ g  Y: m! q9 E) \
| region_id | RegionOne |  x  B, p; s4 R; M5 k8 z9 Q! R
| service_id | f71529314dab4a4d8eca427e701d209e |
" g" S1 \2 e9 H) ^+ h, [| service_name | neutron |$ \1 F3 g# ]! n+ ]: ?, R
| service_type | network |
2 k4 a- x4 v" F! W/ c. y| url | http://stack.flex.net:9696 |/ w) H$ r! Z- J2 V( l; w: n( c) k" d* m
+--------------+----------------------------------+
( J3 C% Z% n3 s. r% ]. @/ U, C6 C  u6 g& |% I1 x# \$ P2 [
#openstack endpoint create --region RegionOne network admin http://stack.flex.net:9696
4 d# m3 ?8 c1 [. t  }2 \0 u4 E1 W: k, a8 w; n2 j0 `
+--------------+----------------------------------+- p" ]! ]' {* ~' Z- r! m8 ~
| Field | Value |
9 o, N, g. z5 n- I! p+--------------+----------------------------------+' {5 H8 ^8 B- M  [" x  Z* D8 b
| enabled | True |( N9 j" S. L1 D
| id | 1ee14289c9374dffb5db92a5c112fc4e |
0 _. `$ P3 }5 c| interface | admin |
% {1 ]3 o/ `! ]* {| region | RegionOne |
6 _! q$ w4 ]' u" O5 X| region_id | RegionOne |  I% X& L! d: z4 o5 p
| service_id | f71529314dab4a4d8eca427e701d209e |& Q. t, m  \- h/ t
| service_name | neutron |$ w3 ]1 Q" S- Y
| service_type | network |
" I+ K1 k5 w# L; f: H4 z& v! U! [| url | http://stack.flex.net:9696 |
5 M- q; K/ E3 o! V4 M+--------------+----------------------------------+
6 g, g! \' {3 _; e8 E+ R
5 W0 z" n7 m6 U2 o* k! E#### Configure networking options
/ O6 \1 V  ?1 e& b$ I2 ?7 w可以使用选项1和选项2表示的两种体系结构中的一种部署网络服务。; r; p# e3 f! e/ C1 u8 ~' Y
0 }. G- J& R; e# q% F5 M( @! \3 X7 F
选项1部署了最简单的体系结构,它只支持将实例附加到provider(external)网络。没有self-service(private)网络、路由器或浮动IP地址。只有管理员或其他特权用户才能管理provider网络。
, T" \0 n4 B: [# L+ G5 {* f7 ]7 r+ K3 e) a9 ]
选项2支持将实例附加到自助服务网络的3层服务来增强选项1。demo或其他无特权用户可以管理自助服务网络,包括在自助服务网络和提供者网络之间提供连接的路由器。此外,浮动IP地址使用来自外部网络(如Internet)的自助服务网络提供到实例的连接。  ?% [- _( f2 P% K. X6 d2 y

$ n) F$ w4 _- O1 I自服务网络通常使用overlay网络。overlay网络协议如vxlan包括额外的头部信息,这些头文件增加了开销,减少了有效负载或用户数据可用的空间。在不了解虚拟网络基础设施的情况下,实例尝试使用默认的1500字节以太网最大传输单元(MTU)发送数据包。网络服务通过DHCP自动向实例提供正确的MTU值。但是,有些云镜像不使用DHCP或忽略DHCP MTU选项,需要使用元数据或脚本进行配置。7 R9 s3 O2 ?+ N9 B9 {+ ~
) B/ U% x" B& D3 H' V# Z# A" h0 M
选择下列网络选项中的一个,或两个全选,参看下面的两个章节。并返回这里再向下继续配置- g$ m1 L8 a1 Z& U+ Q
○ Networking Option 1: Provider networks
! Y' z. n, ], n& q3 s. w○ Networking Option 2: Self-service networks
2 R& f1 d8 @& X/ W
  Z( L( \/ D0 ^: W: ]" g, SConfigure the metadata agent
7 k! d9 O: r# QThe metadata agent provides configuration information such as credentials to instances.
: ?" E/ ^0 l  z6 BEdit the /etc/neutron/metadata_agent.ini file and complete the following actions:
; C$ A& z, e/ ~
( x4 B; a% `# c0 K2 B" _    ○ In the [DEFAULT] section, configure the metadata host and shared secret:" M& a/ _" a) z, I  g, V2 q1 O
        [DEFAULT]
% N( f+ U* J7 p4 n  ?$ x/ y        # ...
+ P& B8 d& S" ?, g  g        nova_metadata_host = stack.flex.net/ D/ q$ v" e: x& G1 e+ Z
        metadata_proxy_shared_secret = 1234
* c- g: o' G( A+ V
% R* L* c( S5 [- j+ m& _% u1 c        Replace METADATA_SECRET with a suitable secret for the metadata proxy.. {: X# E  q5 B+ b) N( ?5 Z
Configure the Compute service to use the Networking service
' e' Q2 y6 n; }7 `2 x2 A! g% a/ KNote: The Nova compute service must be installed to complete this step.
, R( r% {, V& u; g  ?: }1 @9 Q: ]& jEdit the /etc/nova/nova.conf file and perform the following actions:
7 E; Z0 _9 l$ V0 p8 o& E( S1 b* }: W7 i: i: n3 z% K% m
    ○ In the [neutron] section, configure access parameters, enable the metadata proxy, and configure the secret:
7 g: O! q) G# H& P( \        [neutron]2 Y1 z! @% h, r4 E
        # ...
! g5 L. p( F5 `" }* H$ n7 v: X        url = http://stack.flex.net:9696
" x' H3 m3 w! C# P1 i        auth_url = http://stack.flex.net:5000
- w, |! c# V# t        auth_type = password2 N0 ~. X9 B9 a9 ]# L8 x* _
        project_domain_name = default1 r% t$ G) r! o6 [( Z
        user_domain_name = default
- _- z, N' B, d, i1 J        region_name = RegionOne
% B2 V! K' o8 n( n' C/ O        project_name = service
7 S9 m* H8 [/ H( k' n0 A        username = neutron
& ~! ~" z- K3 x) @8 Z/ B" q! o; U        password = neutron123
, @3 n. R; f4 f- `5 O        service_metadata_proxy = true
  L4 S" p! o" z# E        metadata_proxy_shared_secret = 1234. }( t* H" V; ]' A# @  j, y
Finalize installation
. Z8 n" l" k& I( fThe Networking service initialization scripts expect a symbolic link /etc/neutron/plugin.ini pointing to the ML2 plug-in configuration file, /etc/neutron/plugins/ml2/ml2_conf.ini. If this symbolic link does not exist, create it using the following command:
8 ]6 Q& j8 `& Q. V* J1 ?7 \# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
+ Z5 g% o9 o+ M; o4 i; sPopulate the database:  v, @( X7 G3 L4 V$ I' o& J
# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \# h# M5 @$ B. }) M
  --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron" W7 A. g; W* x
注意:由于脚本需要完整的服务器和插件配置文件,数据库填充将在稍后用于网络。 6 `. D; t% q4 P, S% T
Restart the Compute API service:
6 q2 J# B- j6 A$ n# systemctl restart openstack-nova-api.service- Q6 i; c: _; [! b
Start the Networking services and configure them to start when the system boots.2 H# W( }" l: ^( S# e1 e4 ~
For both networking options:
$ g( c" l6 e! ?# |5 M    # systemctl enable neutron-server.service \
, ~( Q% T& h, b6 _      neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
- f7 v! z2 u5 l& [      neutron-metadata-agent.service' h% d5 b3 y  h/ f/ Y: G
    # systemctl start neutron-server.service \
  W& {+ a7 i3 K6 A. a* z& k( \      neutron-linuxbridge-agent.service neutron-dhcp-agent.service \% K1 i( q: W* }# k9 ^
      neutron-metadata-agent.service4 J$ M# k; d7 Z: ?" A
  r, x/ K: S: A2 T0 e) O5 j  {9 F
For networking option 2, also enable and start the layer-3 service:* h9 i& r( O7 G' D0 Y
    # systemctl enable neutron-l3-agent.service2 _9 n$ R/ b5 E' Y
    # systemctl start neutron-l3-agent.service
7 q  w7 Y& s( d  G% n6 w9 A3 q0 q* r: {4 T8 @2 V6 M& j; g5 r% M
2019-09-04 16:46:13
3 k, `. V5 W, W; ?2 j; ?最近测试esxi6.7的vmotion功能,为了熟悉kvm决定在kvm上实现, 系统是ubuntu16.04, 启动一个kvm,发现esxi在迁移时会崩溃,无法进行迁移,查找相关次料,解决方案如下:, k; l/ L: C7 ]. k' D
2 J2 w0 P1 z  }
KVM的安装和使用: a; f3 h* y! p# n7 A* r
首先安装kvm
; G7 w; J, w) `1 e9 b' T* |% h, c# apt install qemu-system-x86 qemu-kvm qemu libvirt-bin virt-manager virtinst bridge-utils cpu-checker virt-viewer
8 X9 L# o! L/ X/ W' A校验kvm是否安装,并检测cpu的VT-x虚拟化有没有开,出现以下信息说明正常) u* m$ Y$ Z4 r9 k5 e
# kvm-ok
+ L4 C7 V1 G8 j, [* i" V5 w) LINFO: /dev/kvm exists
/ S9 f& t1 [' k- x# _% i, hKVM acceleration can be used
/ u' r( @4 z; y; g; P运行virt-host-validate查看你的环境对kvm的技持,如果全部为pass,说明可以* ~* R* }& M% E% Q! h
# virt-host-validate - K5 A3 p: o2 Y" X9 Q6 w
QEMU: Checking for hardware virtualization                                 : PASS6 V% V% v6 L0 [" r
QEMU: Checking if device /dev/kvm exists                                   : PASS
" c& R( v% N$ [  M3 W如果你想使普通用户能够使用kvm,可以添加当前用户到libvirt组中5 O% W. F9 d  B$ S
cat /etc/group | grep libvirt | awk -F':' {'print $1'} | xargs -n1 sudo adduser $USER  5 Z6 V! V: Z5 f0 f
5 `+ [. @2 X$ g9 ^$ G0 K2 Q; ]
# add user to kvm group also
# E+ ~' X; a, k5 h) Q. {; d! ysudo adduser $USER kvm$ a+ s* O7 ]6 ]

# A0 @1 L6 ]! }5 @$ d) x# relogin, then show group membership' j" M! i$ T/ M- }  d: w
exec su -l $USER2 c3 ^* `& z- B
id | grep libvirt- f9 j1 x4 [" d2 x
缺省的,kvm会建立一个虚拟的交换机名字为virbr0, 使用192.168.122.0/24. J4 t  {/ J% K& j. s8 n% ]
# ip addr show virbr0! y5 h9 L2 Z. V
17: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 10007 V1 r* K# W" ^% `- Z: `3 A
link/ether 52:54:00:d2:52:b5 brd ff:ff:ff:ff:ff:ff& g3 M/ `3 x. ~6 |* s' p
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0% J9 ?9 l& }& q) l# h
   valid_lft forever preferred_lft forever
: A8 I9 |) ^8 }2 l8 K6 rvirbr0实际上是一个nat模式,我们可以通过iptables看到实际的情况2 [( d" z3 \  h& k% j
# iptable -t nat -vnL
: X' I( i% h) C$ x* oChain POSTROUTING (policy ACCEPT 146 packets, 11359 bytes)
7 u, [! ]- j- Qpkts bytes target     prot opt in     out     source               destination         7 ]) O( f! G3 L& B; Y3 T& |$ b% t
0     0 RETURN     all  --  *      *       192.168.122.0/24     224.0.0.0/24        7 M" V( \- o/ u0 r% r
0     0 RETURN     all  --  *      *       192.168.122.0/24     255.255.255.255     
) N) C( k: a1 M) T9 ^0     0 MASQUERADE  tcp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
! y, W0 C5 s  J. j  T0     0 MASQUERADE  udp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
% Y& W# @! R1 L" G: O7 w0     0 MASQUERADE  all  --  *      *       192.168.122.0/24    !192.168.122.0/24   
3 G6 F% \; u' a& Y定义存储池,缺省的存储池是/var/lib/libvirt/images, 但你可以另外mount你想要的os磁盘
& v" ~" F9 @, \+ N$ c/ P# virsh pool-list --all
  O5 R& {7 i, J! p& R& i. P Name                 State      Autostart
7 |0 S" c# |/ r' B) i( f* S-------------------------------------------
, `3 E" i( o# ~$ }3 j) I6 P5 Z3 D default              active     yes , h, N8 G& x3 f  \4 n
) l9 u) `* ]' n6 t% Z8 ]! Y4 [
$ virsh pool-define-as kvmpool --type dir --target /data/kvm/pool) z) K' Z4 u: O3 {! |; @' g( l
Pool kvmpool defined& J! ?- m8 N; [7 a/ A
$ virsh pool-list --all/ S0 h9 I# R) A5 f# v
$ virsh pool-start kvmpool- g  S% R# l6 Q+ U9 {$ W1 N
$ virsh pool-autostart kvmpool
6 d: C8 d0 Y3 P; ]+ f& O" o. U* s
1 L) C  |4 a1 G- n/ d; h' T6 G( l$ virsh pool-list --all7 O' _2 X. H* B: h2 F" I
Name                 State      Autostart
/ X0 N3 [9 I" t1 M1 ^8 d-------------------------------------------7 o0 J5 d; W" }. u; @7 K% g
default              active     yes       % J2 x; R, s/ n
kvmpool              active     yes4 b; s' P5 F: p: z6 i& Z  J
布署一个vm在你的kvm上,建立一个1vcpu/1G RAM使用缺省的virbr0 NAT网络和缺省的pool storage
' ^7 c- P" H" ivirt-install --virt-type=kvm --name=ukvm1404 --ram 1024 --vcpus=1 --virt-type=kvm --hvm --cdrom ~/Downloads/mini.iso --network network=default --graphics vnc --disk pool=default,size=20,bus=virtio,format=qcow2 --noautoconsole
& Y3 n+ ^8 J5 t/ {# S5 ?
, B& Y0 }$ D( I- l# open console to VM
' f' A8 H) i9 N! x0 ~virt-viewer ukvm14042 t; s, ]6 w: m7 X
如果你想删除这个vm,可以使用如下命令:
! q. a# h/ {* O+ C/ u, e7 ^) d) xvirsh destroy ukvm1404" t# h& e) t! O: w+ z
virsh undefine ukvm14044 c% V7 [% R3 y# c& D
如你想要一个全部图形化的软件管理kvm,可以使用virt-manager,当你没安装图形介面时你可以使用x协议的ssh客户端,如xshell, 或xming+ssh客户端软件
7 F* ]. M* R0 y; T/ S$ y7 i% Y布署esxi在KVM中  B/ E  Q; P3 |9 p' e
配置VT-x,你同样需要在ubuntu中配置VT% y2 j1 T8 j2 [: a$ B
# vi /etc/modprobe.d/qemu-system-x86.conf 3 N: Z$ k4 S1 h

- ?3 D8 S! H  U/ y, @0 Soptions kvm_intel nested=1 enable_apicv=n
- h! h, k$ D2 u% _9 i& coptions kvm ignore_msrs=1- Q1 ]9 x% @2 w, ^$ T" V8 y
重启系统,执行下列命令,必须返回如下值+ P' f3 u3 l1 Q5 a7 W
# want Y to be returned4 j8 c* y2 o  a! ~) A: X7 p
$ cat /sys/module/kvm/parameters/ignore_msrs3 |) `. i' P9 g6 E: D9 k
8 m& o$ l- L" s+ w+ J9 O! ~& J; F
# want N to be returned
' k" L7 L! [( X  M6 P6 }$ cat /sys/module/kvm_intel/parameters/enable_apicv
* W: h; w# E+ B1 |% b+ p9 v6 M! X: o* j2 n; U3 f
# want Y to be returned
8 ^' o1 q# w% |2 e0 y$ cat /sys/module/kvm_intel/parameters/nested! h  C) K, B; X2 T# N, v( A
建立kvm虚拟机
* G- [1 v' Z; M5 L# virt-install --virt-type=kvm --name=esxi4 \/ ]# d, r6 B+ O2 y
--ram 4096 --vcpus=4 \
* z  l) t7 v( D--virt-type=kvm --hvm \
7 ^8 m  O- w/ L2 K--cdrom /data/iso/VMware-VMvisor-Installer-6.7.0.update03-14320388.x86_64.iso \
5 M% h) ?) u; ]4 T! i; D: |--network network:default,model=e1000 \
8 G; H0 z- w" ?( c+ l; J--graphics vnc --video qxl \# M6 }. l8 K: f% e6 u
--disk pool=default,size=80,sparse=true,bus=ide,format=qcow2 \) B/ [  b- }1 x* I2 O# C$ [  Y: L
--boot cdrom,hd --noautoconsole --force \# L5 p6 D+ K5 a+ Q4 {  @
--cpu host-model-only
$ c2 d: J* v! i! k当然你也可以使用virt-manager来建立虚拟机。
. d5 o& z" a6 J$ B) \在kvm中部署嵌套esxi6.7) f( d7 k8 b; c7 ]) p0 W
2 m, k0 V! v1 m8 p5 a" q9 C  R
重复建立两个虚拟机,建立两个esxi实现动态vmotion迁移,测试和建立步骤省略,经测试vmotion可以正常工作,不会出现崩溃现象。9 F4 w7 }, i6 m! K' J
7 P7 Z- Q& f, ?7 R% U
安装和配置网络组件在controller节点上
1 U  A! z' I. l0 B: b. e. p
: p+ P. W1 X4 ~2 W  B安装包
; U) o3 F* I$ E! p: n# yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables5 N1 P& u; p5 G* l+ E
配置服务器组件
9 Z# z! S, S8 Z7 i网络服务组件配置包括数据,验证机制,消息队列,拓扑改变通知和插件.
* ~6 Y6 X  F) T! x- `3 S0 oEdit the /etc/neutron/neutron.conf file and complete the following actions:5 f2 F; t' K( `. ]' w( i: U
○ In the [database] section, configure database access:, p0 x# M. t2 D2 c
    [database]
, `0 H1 j' T9 H3 t  \- A* F    # ...
7 Z/ i" V$ I) K( u    connection = mysql+pymysql://neutron:neutron123@dbs.flex.net/neutron
' s7 W- r9 j% W( X    注意:注释或移除其它连接选项在[database]区域中$ G$ c$ v6 r1 O/ d$ B- t* v! }
$ G  `3 y3 Z. k; {/ H; e/ h0 z
○ In the [DEFAULT] section, enable the Modular Layer 2 (ML2) plug-in and disable additional plug-ins:" i6 {7 q1 C0 e$ ~9 g2 Q- J
    [DEFAULT]
' y' r( G7 ]# W  m# a; {- V- T    # .../ M+ X7 I% Y3 S; r
    core_plugin = ml2* b6 ^+ ~+ O% w; E# p2 G
    service_plugins =! X$ j7 L, c# k
9 m1 R  c# V+ R" C
○ In the [DEFAULT] section, configure RabbitMQ message queue access:
! @7 X3 e9 L8 W! k; c* a; H    [DEFAULT]
- m4 O6 ?6 K6 J7 _2 T5 G' Z" _) g    # ...
1 `+ E. |/ P9 ^0 t1 O    transport_url = rabbit://openstack:openstack123@dbs.flex.net
1 v5 B% r  H1 v5 J7 ~' z& f3 ?) V* D# x; ]% N  [+ ~
○ In the [DEFAULT] and [keystone_authtoken] sections, configure Identity service access:( Y% |7 B! p' d# K
    [DEFAULT]
( M( e" Z' s) B$ c; M/ _' v! m& }    # ...
5 J4 d- n0 _( k9 C. x    auth_strategy = keystone: t9 {* R7 I7 r+ ]8 M8 U
# S* A$ S' Y' F0 z. P
    [keystone_authtoken]
. C8 h1 \6 t) o    # ...
6 z! L: M/ p1 @9 h$ O9 J2 T    www_authenticate_uri = http://stack.flex.net:5000
' H9 g* R. L% M' b2 r    auth_url = http://stack.flex.net:5000  Q  t& w+ A7 }. ]; P+ c5 s/ R) w
    memcached_servers = dbs.flex.net:11211
; z: V, R' }* d% u7 c    auth_type = password
4 [; ~" \4 m* l3 f4 s7 J" Z    project_domain_name = default
' _& l  Z) D8 R0 N$ f    user_domain_name = default0 C- b% D6 F8 @
    project_name = service
9 B3 ^6 x# I) a, P+ @) G# R/ i    username = neutron
  R3 F1 K- l% K5 b5 m9 n* c& n    password = neutron123
" n. [* @% v! I! K    注意:注释或移除其它连接选项在[keystone_authtoken]区域中
: B* I$ ]6 k/ p/ q- B$ R6 ?8 J* \' M. m  M0 H* M. _6 O" b  b
○ In the [DEFAULT] and [nova] sections, configure Networking to notify Compute of network topology changes:
. |* S( L; Y( f/ z* s! {    [DEFAULT]1 T0 ~: q% z2 Y1 H% P  s9 ?
    # ...
! x5 b5 [% ]! a1 C) h    notify_nova_on_port_status_changes = true, [' b0 k+ ^. ^0 `# Y# b/ G2 e
    notify_nova_on_port_data_changes = true
9 _) k# W7 L( R, C. Q; A! D/ y/ b$ t, v# f7 v5 K5 ~
    [nova]
# Y) k7 ?) j6 @- z, l    auth_url = http://stack.flex.net:5000( H0 h+ H- I+ Y) v
    auth_type = password
; Y4 x5 ?4 Y' S2 L    project_domain_name = default- Z- Z3 `2 x; M/ d
    user_domain_name = default
0 w& r; V# z7 {& y( s; b7 t9 V    region_name = RegionOne
- q' }* q! I9 Q    project_name = service* s5 ^- i; s% ^3 {+ v* V6 p( |' e
    username = nova
, h+ j+ |% Y- j0 T6 v    password = nova123& D% m0 T' F, k' f! I
! |& w! j/ Y" q' m
○ In the [oslo_concurrency] section, configure the lock path:" M% ?+ Y- V, |
    [oslo_concurrency]1 r: i8 O6 @) q  o# w
    # ...( Z- ?2 h# [7 x( q* c: m# {
    lock_path = /var/lib/neutron/tmp
0 \+ Z! N/ c( ]! X4 M配置模块Layer 2 (ML2)插件) a1 H! j4 p2 E; k. n
    实列中使用ML2插件,ML2使用Linux bridge机制建立layer-2(桥接和交换)虚拟网络架构。, w' [7 a; v6 I0 H
    Edit the /etc/neutron/plugins/ml2/ml2_conf.ini file and complete the following actions:  B+ I1 {3 O; ~9 e$ N0 G" P+ H$ _
○ In the [ml2] section, enable flat and VLAN networks:
6 A9 _/ |% B- X* h0 i* k2 P    [ml2]
5 E. u/ `3 t% o5 J9 c6 D    # ...
& D4 B. S# V5 }8 z' y) r6 J# [    type_drivers = flat,vlan! `) ~% c: H* A/ A* T' W
3 X" [8 _9 t5 V# c7 l
○ In the [ml2] section, disable self-service networks:
3 t# e  y" d4 x" ^! E    [ml2]
' Z9 R) C! }0 E, z! z    # ...
- }+ {4 A/ }- |* x$ I8 N3 z    tenant_network_types =
( ]( Z3 T# z( q5 b3 k/ @1 j( G, c! D7 W/ [
○ In the [ml2] section, enable the Linux bridge mechanism:
* y0 E* W/ r" F. }% l5 I- a    [ml2]+ K5 h8 m) ]# @0 M2 \9 Q
    # ...8 Q5 D5 E  s# |( r4 _; b
    mechanism_drivers = linuxbridge
3 b. L' J4 ~0 I9 ?# U7 R/ A6 d    警告:配置ML2插件后, 从type_drivers移除这个选项会导致数据库不一致.
; k9 {- t! j1 r1 S3 `4 }( N8 w! [& r& z4 s8 q# u5 T
○ In the [ml2] section, enable the port security extension driver:9 I0 A* a) V8 d  ^3 P- o
    [ml2]) ]4 u/ G( D/ S" _3 l
    # ...: F0 f; T2 A( o& s- m, E3 z% f- N
    extension_drivers = port_security
' I' J9 D% {% k: Q* y+ r7 n, l% O# N! a4 G8 O
○ In the [ml2_type_flat] section, configure the provider virtual network as a flat network:* y3 O- x$ Z+ Y* i
    [ml2_type_flat]) h& M/ C8 a  j9 p
    # ...9 E2 E# N! ?5 Y) S6 g% t
    flat_networks = provider; P+ r# i2 f: B& p/ U0 @
5 a% H3 W# J: z, e" Y. k
○ In the [securitygroup] section, enable ipset to increase efficiency of security group rules:. ]. s! r( a- Y# L3 o# ?( k" E2 C3 U
    [securitygroup]
1 h; J: q: Y: @2 m' z/ Q4 v' [    # ...& c; j# V% @4 t. U
    enable_ipset = true
; R8 b4 r. ~8 ^4 OConfigure the Linux bridge agent, b2 g9 k+ ~& F& j4 E2 L0 ^$ m. g$ i; r
    The Linux bridge agent builds layer-2 (bridging and switching) virtual networking infrastructure for instances and handles security groups." f6 X  q0 F( B# _/ Z
    Edit the /etc/neutron/plugins/ml2/linuxbridge_agent.ini file and complete the following actions:
6 F8 W* g- V$ [+ Y; ?○ In the [linux_bridge] section, map the provider virtual network to the provider physical network interface:2 X" P2 v8 K% {3 A, ^; E* K
    [linux_bridge]
9 l3 @- m* b# Z1 q- R% v$ E    physical_interface_mappings = provider:eht1* p8 I& d# p$ _) r" i
    使用eth1物理网络接口做为租户的网络连接.2 H' U! u6 {7 K, R- u% \

, l/ U1 t# d9 E) l0 @○ In the [vxlan] section, disable VXLAN overlay networks:
2 l0 O( j2 N' ^: Y6 K1 ~6 l    [vxlan]
8 U  E( {# f/ t    enable_vxlan = false6 W' \) q$ t: e- s
○ In the [securitygroup] section, enable security groups and configure the Linux bridge iptables firewall driver:9 b+ n9 |+ R+ e
    [securitygroup]
" e+ C( W. t* f, c& w    # ...
4 m/ m) S/ s6 H; I/ ^    enable_security_group = true% z2 v/ R5 Z) o3 s
    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver& q4 n, ~9 d% U/ t( k6 Z; Q
3 F! p4 j; m- f: M
○ Ensure your Linux operating system kernel supports network bridge filters by verifying all the following sysctl values are set to 1:
+ z; t' f; v1 \" N# g7 e' b; |! {    net.bridge.bridge-nf-call-iptables# N3 G& @" D$ I  I, j/ |5 V
    net.bridge.bridge-nf-call-ip6tables
0 m9 _0 ^$ l1 [# I/ U$ d+ k5 i1 @* ?  `; m) ^* d8 v! Y- l( m% ~
    #  modprobe br_netfilter
4 ^( v$ g& E/ H" z    #  vi /etc/sysctl.conf
6 E  f8 n% X0 m4 w% G' w, l' m1 T7 s9 y    net.bridge.bridge-nf-call-ip6tables = 1
2 t! m: O( ]  o, p: y    net.bridge.bridge-nf-call-iptables = 1
8 n+ h/ k- P+ n, q: j3 s    # sysctl -p+ B  N2 u- ]8 }6 \) J0 b6 d
    net.bridge.bridge-nf-call-ip6tables = 1  A+ S! Q7 e; @. ?0 x% A6 A) m2 I
    net.bridge.bridge-nf-call-iptables = 1
; D. p7 o2 F+ {/ i/ q1 H; @& E' e; P: U9 ^. l9 w
    为了网络支持桥接, 通常的需要加载br_netfilter内核模块. 但这里可以忽略错误,当你重启neutron时会自动加载./ t) G* C4 J7 @. c7 K. t+ r* r
Configure the DHCP agent  ^3 ?' E9 N+ N: _, B* U" L. f
8 n" E0 a) j( e  E; _  X" G
The DHCP agent provides DHCP services for virtual networks.
& _! f7 o2 \$ t2 I4 B* q2 L) cEdit the /etc/neutron/dhcp_agent.ini file and complete the following actions:
6 \) G; j/ C& E( y2 D. C- I  `○ In the [DEFAULT] section, configure the Linux bridge interface driver, Dnsmasq DHCP driver, and enable isolated metadata so instances on provider networks can access metadata over the network:
  Q5 q8 o% ]9 T7 y* A[DEFAULT]( _: n7 x% Y- a9 R$ f& z
# ...5 a# U$ Z8 \0 k
interface_driver = linuxbridge
- G( I8 E) I4 b/ U0 k3 Pdhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
3 I8 P, _& d; d6 ~  renable_isolated_metadata = true" ^8 _' s1 O: J5 o3 A
2 J6 m% C) x" G7 S8 N
完成后返回网络配置或继续网络选项2  c9 q% m4 U) v6 P- t! l
. X1 C' {) y/ L8 D2 i" ]
2019-09-04 21:02:50
6 X- Q/ F. V9 W( \5 l8 eInstall and configure the Networking components on the controller node.
2 K7 y, M6 b6 j" `# w" {: `* d7 x* E/ Y/ o* \5 n! \8 y) ]. w( M
Install the components$ ~4 \3 p' H, l4 o. Q
# yum install openstack-neutron openstack-neutron-ml2 \6 F% l& I. d8 ?% ~) j. S0 \$ C. O
  openstack-neutron-linuxbridge ebtables9 d8 e0 u+ z3 T$ c! L  V( ?
Configure the server component: E+ m% `% j4 a% U5 ~5 P
) p4 i$ Z/ V9 @: V0 _& f
Edit the /etc/neutron/neutron.conf file and complete the following actions:! c" I' ^- @) A9 V9 D% Y8 r# n) w
○ In the [database] section, configure database access:7 ]9 I& u( o+ A& y- m/ C4 G8 i' q
[database]
5 j( i" Q" Q% B/ j1 K# ...% a6 r& G$ D6 y, Z* ~( V
connection = mysql+pymysql://neutron:neutron123@stack.flex.net/neutron
* t3 b: Q/ ^  x6 b" |注意:注释或移除其它连接选项在[database]区域中  C( I1 S6 ^1 H: A% T; e# ~
○ In the [DEFAULT] section, enable the Modular Layer 2 (ML2) plug-in, router service, and overlapping IP addresses:
  [& v8 M9 [! ^5 d6 H[DEFAULT]. Y! x4 ]$ C% x# r' u6 F! K9 D
' i6 h7 D+ k4 p' w( E* ?
...1 W9 [( f  _" A
core_plugin = ml24 s- f5 t% Q) @+ N3 O
service_plugins = router
3 a' r; ^& T0 T9 p# Lallow_overlapping_ips = true# y! P$ g/ F& d+ S. X2 Z# ]: K! m
○ In the [DEFAULT] section, configure RabbitMQ message queue access:
7 D& D7 ^' O' U6 R[DEFAULT]
4 u; p8 E' d% d0 K, h/ E+ m$ U; I7 R3 z5 i/ l8 \! t5 v
...0 W: r9 ]" x: T5 m1 b$ [9 Q: s
transport_url = rabbit://openstack:openstack123@dbs.flex.net% ?; F# j6 v/ j7 h- Y2 l, Y
○ In the [DEFAULT] and [keystone_authtoken] sections, configure Identity service access:
% v% J2 ]) g+ c[DEFAULT]' t2 K1 J* U+ b' l, U0 i
0 D' T% `; r1 F
...# F& i- N5 e/ `# [
auth_strategy = keystone
0 T8 L8 h( n! M: V2 A3 g6 q3 r7 L/ o  G
[keystone_authtoken]& ~/ p9 q' I, \) ?8 j
# ...
/ N% Y* i. t. f1 c2 g  R7 Uwww_authenticate_uri = http://stack.flex.net:5000- M& @# B) a& o- C0 L$ [
auth_url = http://stack.flex.net:50007 I$ l+ p  M- L9 D7 d4 V% K6 ]
memcached_servers = controller:11211
* |+ T( @& @0 {# Y3 P" Qauth_type = password
; ~% f+ A, r' t1 Xproject_domain_name = default
: {8 z" Z- b8 b% C3 zuser_domain_name = default
4 I. H. ^$ K$ I! Cproject_name = service
8 v& c+ ~$ G& m$ {+ q9 Zusername = neutron
3 K0 Y- ]" h2 qpassword = neutron123! s# |# H; ^5 {% d7 v
注意:注释或移除在[keystone_authtoken]区域中其它选项.
, }1 _3 h+ w/ r7 F○ In the [DEFAULT] and [nova] sections, configure Networking to notify Compute of network topology changes:+ X+ H. x& |7 w* t4 F
[DEFAULT]2 Y2 U) J9 `( N

* L" z% T4 H! S% g...
7 t/ g: e# Q7 e( Y9 {9 Xnotify_nova_on_port_status_changes = true
* T* R" Z( O' ^: e  r5 ?( L/ Xnotify_nova_on_port_data_changes = true# T4 T0 d, a- ]4 ]  u/ u" \
5 ]) D6 k0 `$ O$ N% o
[nova]
* c# `0 i& r, Z, z# ...# R% f9 ]. k9 {# l
auth_url = http://stack.flex.net:50008 x" e: o) F  N$ U# B% L; b
auth_type = password
8 A* I3 s& d8 L- |1 iproject_domain_name = default
: s% R& I, [" U, H: P$ n- {& Cuser_domain_name = default% V( o0 d+ i) e, m( p. s+ L2 e8 o
region_name = RegionOne
% G$ `5 w/ a$ V4 f, \project_name = service; w6 L" G$ K+ @5 G# g
username = nova
" T% l1 C7 ?$ R6 q; npassword = nova123( ?. D. r* G* c! D! \( \
○ In the [oslo_concurrency] section, configure the lock path:
% K5 I9 ]9 I7 C5 ?[oslo_concurrency]- p- J7 ?0 s  }4 @! @  X2 Z1 |

* N2 L! `3 i) a6 w% \) B$ A...+ _# p4 I9 K. v6 [6 _; s
lock_path = /var/lib/neutron/tmp
- u+ z7 W2 S% P& C# ?3. Configure the Modular Layer 2 (ML2) plug-in% P+ J5 v; `, c  Q9 D+ G1 }, ]# I* O
The ML2 plug-in uses the Linux bridge mechanism to build layer-2 (bridging and switching) virtual networking infrastructure for instances.7 M* I0 R7 H! y( P4 q. z
Edit the /etc/neutron/plugins/ml2/ml2_conf.ini file and complete the following actions:! n7 W9 z; o+ V0 h9 C
○ In the [ml2] section, enable flat, VLAN, and VXLAN networks:  V5 Y1 w% l& U4 }# x1 u
[ml2]  S5 Q$ h5 {* @6 p7 V
+ M, g' w5 \% D. e" R4 o  l
...( x* D3 F+ Q5 p$ v3 W
type_drivers = flat,vlan,vxlan
6 d& }0 H/ k3 W○ In the [ml2] section, enable VXLAN self-service networks:( T; n. i% T: V  P  F
[ml2]
( k7 O& U+ z2 n7 j
7 ]9 D& B' Q* ]( ^7 Y  n.../ K7 `- ^( _5 F' ?4 _* V
tenant_network_types = vxlan( Y% o" G8 q) f. v' P! I, B  G
○ In the [ml2] section, enable the Linux bridge and layer-2 population mechanisms:; E* J' @7 P  h% S% z- M1 Z
[ml2]
' K$ d: r" v6 a- Y+ v! c4 e/ }7 }8 W( Z+ e
...
* w' Z4 u- ^  C2 n/ Mmechanism_drivers = linuxbridge,l2population
) Y0 J0 l% p8 T+ c7 D注意:配置ML2插件后, 从type_drivers移除这个选项会导致数据库不一致并且Linux bridge只支持VXLAN overlay network.
' `5 r3 j* `+ F% E; o, f! N○ In the [ml2] section, enable the port security extension driver:
2 w# `$ ?+ o! {3 W: g; c+ i3 B[ml2]. k& m0 n) t* G  f3 Q0 x

# d; s) ~' `4 l, I' B0 ^9 I1 O; {...4 G8 L. I. |9 }: X# d3 H
extension_drivers = port_security
/ i6 v" T2 c/ o' L○ In the [ml2_type_flat] section, configure the provider virtual network as a flat network:
8 {3 u" B0 y5 f; U3 H/ W[ml2_type_flat]6 m4 X& X8 W! [, e) @$ R* q5 H( w

7 I0 ~) K- _9 {  {- a" {/ d8 h- o...0 ~, n0 y% ]  U" M0 ?( y
flat_networks = provider/ {- M6 L8 ]1 a- J  n0 ^3 f
○ In the [ml2_type_vxlan] section, configure the VXLAN network identifier range for self-service networks:+ {* L: [- w+ l2 S& Q8 S% z
[ml2_type_vxlan]! j! _2 D% e) I" S
7 l/ F0 }2 [9 S* T( W
...
/ V2 S2 _. A( A. T; b7 t( d8 qvni_ranges = 1:1000
& k9 k" ]1 N1 e# O  L○ In the [securitygroup] section, enable ipset to increase efficiency of security group rules:
' T) f9 c' l8 Y- _" B1 L0 |' Y# [[securitygroup]( p+ _- E+ S0 y) F( F8 R, |
9 @9 M7 G1 \6 b( \7 q
...4 M: M, m& Z5 X7 S# i
enable_ipset = true6 A) t6 I8 z* J! T  `
4. Configure the Linux bridge agent2 f0 c8 f% d! Z1 x( b2 R2 |' `$ ]
The Linux bridge agent builds layer-2 (bridging and switching) virtual networking infrastructure for instances and handles security groups.
& s8 Z" e# D4 M) J  MEdit the /etc/neutron/plugins/ml2/linuxbridge_agent.ini file and complete the following actions:) i/ R/ N7 o" [
○ In the [linux_bridge] section, map the provider virtual network to the provider physical network interface:
& o# I/ C6 r0 t. D[linux_bridge]3 f; n% R8 S/ u* b
physical_interface_mappings = provider:external:eth1
4 ~0 c' t! @; n# o7 ?$ H8 u5 e! d1 ~5 \! [' p5 C5 ^3 S5 M
Replace PROVIDER_INTERFACE_NAME with the name of the underlying provider physical network interface.
! G% }: A$ E, a7 c, M; d○ In the [vxlan] section, enable VXLAN overlay networks, configure the IP address of the physical network interface that handles overlay networks, and enable layer-2 population:
; L( @% D" W  y[vxlan]
7 S" Q2 P. I& Qenable_vxlan = true
2 M) H9 ?+ |! k' G; J, H( `local_ip = OVERLAY_INTERFACE_IP_ADDRESS
# H! |# ?! x+ u5 ^( V+ t' u" |: ?" D: f+ wl2_population = true' F! [: `/ ~" x: {

4 G  x; N9 z: v0 A8 \% ]Replace OVERLAY_INTERFACE_IP_ADDRESS with the IP address of the underlying physical network interface that handles overlay networks. The example architecture uses the management interface to tunnel traffic to the other nodes. Therefore, replace OVERLAY_INTERFACE_IP_ADDRESS with the management IP address of the controller node. See Host networking for more information.! ~9 J. @6 M6 @0 g* z5 ]
○ In the [securitygroup] section, enable security groups and configure the Linux bridge iptables firewall driver:
/ v+ T; t- C, ~! U) ~6 M[securitygroup]5 ?+ f' n. e+ ~. L, h

: Z4 L, W7 z  T- I...( r$ o- |# B1 a( L) f) G: X8 T5 g; q
enable_security_group = true
( R" q4 D9 _# u( B# {firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver3 w+ f+ e, `1 _& E
○ Ensure your Linux operating system kernel supports network bridge filters by verifying all the following sysctl values are set to 1:
  w. m; ?9 m1 B6 h4 B4 m6 [net.bridge.bridge-nf-call-iptables
, s; l  A# |- c9 E/ e' T4 Gnet.bridge.bridge-nf-call-ip6tables
  m1 Z! J6 M+ H" t! L5 p  O* q7 ~9 l3 p" \, D
To enable networking bridge support, typically the br_netfilter kernel module needs to be loaded. Check your operating system’s documentation for additional details on enabling this module.
) Y* w2 ?3 i# {- T9 g5. Configure the layer-3 agent
; w6 O) t* i3 P3 O, }6 S+ kThe Layer-3 (L3) agent provides routing and NAT services for self-service virtual networks.
! @) ^5 A$ V) c. sEdit the /etc/neutron/l3_agent.ini file and complete the following actions:, }; [4 u5 Q) I: A. ?3 p1 Q  j# J
○ In the [DEFAULT] section, configure the Linux bridge interface driver and external network bridge:
) P, c6 A% W  _. U[DEFAULT]
5 G  w# W; n' s! I; L9 ^
* S3 G. ]: G, E: G2 Q.../ ]  ~5 C8 Z9 v. O9 K% u
interface_driver = linuxbridge  i7 r3 W  P9 \; e4 c# z' n  \
6. Configure the DHCP agent
* V3 F/ t& Z8 i' h3 xThe DHCP agent provides DHCP services for virtual networks.# B/ ?. X0 A' ]- L* s# y4 L  O2 J
Edit the /etc/neutron/dhcp_agent.ini file and complete the following actions:* U9 q9 n4 p! ^7 m
○ In the [DEFAULT] section, configure the Linux bridge interface driver, Dnsmasq DHCP driver, and enable isolated metadata so instances on provider networks can access metadata over the network:) w  K" g1 M; d/ C4 C1 X6 u* `
[DEFAULT]
. X* W, H0 U- M( ~4 T( Q3 N
7 _- ?1 s1 Q( s, @- F...! X6 P. Y9 T7 q! w5 Q& @
interface_driver = linuxbridge
: p: F+ N) _8 E( u) |0 bdhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
3 q" B0 W% V. B- G' L6 m8 senable_isolated_metadata = true
  x% u- ^3 l7 {) K完成后返回网络配置
( p: y3 B) r' z; O
8 k* R/ K: l% @+ s
! F  n9 _/ e2 x8 m5 y; e3 a4 v% P4 D! Z

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-10-8 08:08:40 | 显示全部楼层
2019-09-04 21:25:51
# N! U" D+ x3 x) a7 ^' lInstall the components
1 P# N3 ~" o! K! t- {1 G# yum install openstack-neutron-linuxbridge ebtables ipset4 ]  m5 X4 C) ]
Configure the common component( s* {: w6 ~+ @' ^5 |
    The Networking common component configuration includes the authentication mechanism, message queue, and plug-in.
  Z6 \1 b4 M9 ?1 a' \    Edit the /etc/neutron/neutron.conf file and complete the following actions:/ G/ Z( \- R4 T6 e2 r9 b! j7 ]
○ In the [database] section, comment out any connection options because compute nodes do not directly access the database.* y) M# D& X4 f6 Z4 @% }( O
○ In the [DEFAULT] section, configure RabbitMQ message queue access:
/ K& |3 Y  j" c    [DEFAULT]' C7 u3 y# f, S% ]/ A; B
    # ...
) R4 L$ |5 m) I& E  T/ t    transport_url = rabbit://openstack:openstack123@dbs.flex.net
* j0 E# n, [  O! Y" k2 n5 J) _5 m4 E4 W: g
○ In the [DEFAULT] and [keystone_authtoken] sections, configure Identity service access:
) {, G' ^/ Z; z/ U9 W' e( Z  N    [DEFAULT]4 m5 J! g4 E: A5 r' p# Z0 L) O
    # .... N. N  P# C1 `+ z; Z9 `
    auth_strategy = keystone- Q$ [  N1 U& d" j
6 T; z1 l1 p2 Z" \+ Q. \+ N
    [keystone_authtoken]8 e& R% U& g( \
    # ...
' ?  ^1 _. A+ o" v$ a- s& F' H    www_authenticate_uri = http://stack.flex.net:50000 j, x: d  t2 U8 p# n# @/ t
    auth_url = http://stack.flex.net:5000
  L6 A4 t$ }% B' N' E3 s# M% [. ~& W    memcached_servers = dbs.flex.net:11211
' S" S& T3 B+ T6 _! r7 U    auth_type = password
4 t4 V3 s4 x: }; E* I: M    project_domain_name = default" ~$ t$ c1 b2 k  k
    user_domain_name = default, z' o* [8 V0 w0 G4 w# ~+ @$ C
    project_name = service
0 Y  I- P3 @8 }7 ?    username = neutron" r; C; s3 [3 d
    password = neutron123
. K/ \. E' I4 w; R9 F$ y    Note: Comment out or remove any other options in the [keystone_authtoken] section.
7 F8 h3 R% g2 j6 w( O○ In the [oslo_concurrency] section, configure the lock path:) W/ A+ J9 A/ I6 t2 s
    [oslo_concurrency]* I% q1 H7 j6 c' c/ }% P  l" _
    # ...( Y, J( o0 ^% Z' h
    lock_path = /var/lib/neutron/tmp3 P) g" J% U9 _/ I( }' z
Configure networking options' S" v: G* ]  E! X& b
: m, ~' H/ x. l: P
选择下列网络选项中的一个,或两个全选,参看下面的两个章节。并返回这里再向下继续配置.
9 W/ D0 A) l$ g8 W- e7 }8 I○ Networking Option 1: Provider networks
( G+ r' A) u2 m+ p+ ?○ Networking Option 2: Self-service networks
; E4 o- L+ x+ l, l2 x+ k* o4 h) j: L' L2 V
Configure the Compute service to use the Networking service. ]2 j) F# K; W& k
Edit the /etc/nova/nova.conf file and complete the following actions:
8 m. {7 u' U8 |: W2 @& \○ In the [neutron] section, configure access parameters:, H# Z! h& j9 f( T9 D8 ~
[neutron]) @( v3 F$ e9 N
# ...& v! U. D, k) M( j  D" R
url = http://stack.flex.net:9696
" L- v7 V4 F- g5 j: [7 oauth_url = http://stack.flex.net:5000
5 \  @% o5 Z- [+ f! ~$ \auth_type = password* j/ n+ F7 X9 @* g" K3 O1 d" Q) M
project_domain_name = default( X: E0 g4 [  b! D  c+ J: Q: P
user_domain_name = default& T- d1 S( \8 s! ~% ?
region_name = RegionOne) j: k; h% t- @0 R% R5 q5 _
project_name = service% s3 f3 S6 ~2 ]8 j4 m
username = neutron
0 d5 M2 j! C, F  Z( @+ P, |6 M7 apassword = neutron123
) r  M# q" P( q1 N6 e& PFinalize installation
( l- ?( h4 M# i5 f: U, i○ Restart the Compute service:
0 j! `  n2 a- Y* V" K% m) j' I# systemctl restart openstack-nova-compute.service; T8 I* R" I/ q& \
○ Start the Linux bridge agent and configure it to start when the system boots:: x% [% X* `% Y* w! S7 E4 v
# systemctl enable neutron-linuxbridge-agent.service
- K  U" ?! n* M) R1 n# systemctl start neutron-linuxbridge-agent.service
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 01:01 , Processed in 0.027514 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表