找回密码
 注册
查看: 5360|回复: 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  B: d, c; h' c" }  K1 S6 O) \" U

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-10-8 08:02:25 | 显示全部楼层
安装9 Z  Q( G4 w, K
安装openstack-stein软件源 yum install centos-release-openstack-stein -y
8 u9 N! x0 U+ F+ P+ \0 v6 D安装NTP服务 yum install chrony -y
7 _8 U* m+ g! |+ a' ]/ X安装openstack客户端 yum install python-openstackclient openstack-selinux -y
: \/ l5 _6 n9 l) ^& p$ j安装数据库19 s: A$ P1 S% A3 O. h8 V2 I
安装mariadb-server pyhont2-pymysql; X7 p+ T4 b0 H6 q* O2 ?
yum install mariadb mariadb-server python2-pymysql -y
( X- w' C; c* q: ^: e5 u- I3 W ) K+ U0 r9 P# G% E
复制代码
% d. |: ?; ~. z& K, J配置数据库8 V+ e, ^- ]9 c& j% ^
vi /etc/my.cnf.d/mariadb-server.cnf
# r0 B$ O8 U/ [. `# modify% n. W% g5 O& l  p
[mysqld]
3 G. i, l  w* _  t3 w1 ]+ }! W5 Ebind-address=192.168.122.11
! T( e- c% Q8 V+ a. V% s2 W) m6 ldefault-storage-engine=innodb
: f+ H$ w) h: o7 O0 Uinnodb_file_per_table=on
0 ~5 V1 \+ R0 b  ]- ?  cmax_connections=4096
7 }' G! k3 F' T2 x# G: G: T! W. Z" ocollation-server=utf8_general_ci
" t* E4 I$ H0 ~) u$ L* A8 I; bcharacter-set-server=utf8" s9 E' x7 j/ x! L
复制代码& N: v* Z  R" r8 I
启动服务并执行安全检查! U0 t# X4 Z% H  j8 F* k
systemctl start mariadb 5 {' |4 N5 A9 u: P5 O1 X+ S, w' S
systemctl enable mariadb! z3 y. d$ @0 S/ i+ `! c/ u
mysql_secure_installation
3 C4 g/ L( ^% U0 n8 E复制代码
! a% w6 `( D; D2 B  A: `. O添加开放端口 firewall-cmd --zone=internal --add-port=3306/tcp --permanent
- w9 P  H) Y' F, f1 z2 F安装消息服务rabbit2( e1 ]' v! J; g; @, O: _
安装 yum install rabbitmq-server -y
2 s, t: l8 h2 T. B- Q& g6 q启动服务
8 Z+ _0 T, t. N" Zsystemctl start rabbitmq-server# _/ z$ K" o$ {$ K4 C
systemctl enable rabbitmq-server  w7 U7 o* {; w- Z& I' v
复制代码
- U2 C/ o! q1 |& ]3 R创建消息服务用户 rabbitmqctl add_user rbtmq user_passwd& j% ~2 N8 \& _1 W; W( p% N8 t  x: Q
授权用户读写权限 rabbitmqctl set_permissions rbtmq ".*" ".*" ".*"
; a# o# T8 i: p: g9 h添加开放端口 firewall-cmd --zone=internal --add-port=5672/tcp --permanent
3 }6 K6 O, t" t1 u" t$ D1 `安装认证缓存memcached3
$ N2 d1 s& F  E5 V% f8 d  S安装 yum install memcached python-memcached -y
3 }7 t; p0 G8 l1 t0 b* C配置2 `5 l( F8 K  ~  ^
vi /etc/sysconfig/memecached + W9 M' y2 g4 C. j5 s& C! i% d
## modify* g# {8 V( \5 D  N! j2 O/ R
OPTION="-l 127.0.0.1,::1,ops-ctr"
4 m3 R# q0 Y4 k5 O复制代码
, x$ ^2 X6 z" V- M1 `) L启动服务; \2 T5 B0 F. s: I) E' T
systemctl start memecached  U: [8 l# K, N5 h( s( N, Y2 W
systemctl enable memecached
; o2 X! p- v4 z. K5 N% i% F  F5 R# add firewall rule4 T5 }; i8 O: L
firewall-cmd --zone=internal --add-port=11211 --permanent: T( D" ]8 A  K0 I4 o
复制代码( [5 Z1 {9 D5 v4 I2 G* M' N
安装etcd服务4, }' B+ V/ u; p/ v5 b: B/ B% _
安装 yum install etcd -y
3 g$ x" a9 `" X! l6 q2 X3 ~配置9 Q! Q' e# y. T/ e
vi /etc/etcd/etcd.conf
+ }+ P9 m9 X& ?4 M$ k, n. J# modify0 `* i+ n+ M+ m; I5 c7 U! D9 j# w. z
#[Member]
2 Z4 e- x1 k1 y* [ETCD_DATA_DIR="/var/lib/etcd/default.etcd"$ }! u' H0 C5 n* N: n
ETCD_LISTEN_PEER_URLS="http://192.168.122.11:2380"0 M- @6 z5 l! g/ E
ETCD_LISTEN_CLIENT_URLS="http://192.168.122.11:2379"$ J. m" w" N0 a6 l4 e
ETCD_NAME="controller"
3 b' J/ `6 n8 o. o#[Clustering]1 y( q  ]7 P# n4 P- u) [
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://192.168.122.11:2380"
, N. \! j( p: t: ]$ BETCD_ADVERTISE_CLIENT_URLS="http://192.168.122.11:2379"
0 g% Y+ S2 L" v" B7 tETCD_INITIAL_CLUSTER="controller=http://192.168.122.11:2380". q6 t4 d* Y0 P' g4 C4 m0 T2 {
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster-01"& k9 R0 v9 ^3 W9 M. T
ETCD_INITIAL_CLUSTER_STATE="new"6 G! l% ^2 N0 B- [% x( u2 O4 r/ V, ^% t
复制代码
% J! c4 i8 M) Q7 r启动服务
9 y5 K6 o/ O0 S/ esystemctl start etcd  t( U+ M. M* ?+ G/ ?$ D
systemctl enabl etcd5 T& H+ J7 z3 j9 z: ~
复制代码
3 ^3 r: e6 f  a! r. i( z添加开放端口8 ~/ B) D/ B9 i8 O: T+ m# }9 G
firewall-cmd --zone=internal --add-port=2379/tcp --permanent
, u4 O) H  s1 P3 t1 r* hfirewall-cmd --zone=internal --add-port=2380/tcp --permanent
5 T+ A# M+ k6 @# p* b. l复制代码2 [0 m8 r/ [& g* L5 H* V; D& M& |
安装placement服务10
( n  s+ {* d, @数据库- ~+ X0 T4 z9 n6 V; U6 i
create database placement;* }; d2 X( K% }! ^7 h
grant all on placement.* to 'plcm_db'@'localhost' identified by 'passwd';# W5 j8 _& u3 m* g) U; [3 P* d- ?1 p# U
grant all on placement.* to 'plcm_db'@'%' identified by 'passwd';
. p# @% _# |( |9 U6 J% ]复制代码
2 t) [9 n" c* X! Q+ n! F6 h创建用户
4 |+ Y3 Z5 r# ]openstack user create --domain default \+ w4 b( X2 l0 B0 Y, g
--password-prompt placement) }; l" q0 b% H# W, k
openstackk role add --project service --user placement admin
+ F* }  I5 h: a/ D9 b5 |复制代码8 M. h4 o; _, z5 R+ e
创建服务实体0 D% g$ K( O: e7 @
openstack service --name placement \! s  u: y2 O; e( [0 N9 ^0 |
--description "OpenStack Placement" placement7 ~7 f, b1 r' T# J2 x' T
复制代码# }0 m: w& x6 @7 p# y. r
创建endpoint( z4 w$ s7 E9 Y# E) Q8 Y! w& q# z
openstack endpoint create --region RegionOne \
, y: f$ V' p3 _! bplacement public http://ops-ctr:8778* K4 v2 [( l- _5 P! P
# create internal admin endpoint like public
: @/ d, S  t) D3 m复制代码
/ u8 F; H5 X( E% a6 W: p安装组件 yum install openstack-placement-api -y
3 Z. b: u! ]$ n1 W配置( c- [) k' c5 n. n) d% W
vi /etc/placement/placement.conf7 k8 W# |5 K' \( [1 @9 w* b# ^. ^
[placement_database]
; q0 r! P/ c  `. u" l* A5 iconnection=mysql+pymysql://plcm_db:passwd@ops-ctr/placement
# B' c2 i4 a8 D" Q, H; z[api]  t* C: N! _. r0 F1 A" b
auth_strategy=keystone
- v* p/ G; s. g% [4 s% E[keystone_authtoken]% o9 \4 x' |+ K; k% ?6 ?
auth_url=http://ops-ctr:5000/v3. U/ f% @. c8 \5 c1 \
memcached_servers=ops-ctr:112111 I4 p- T$ z. D3 ]! P
auth_type=password
8 T7 f4 W- f" A" E6 f8 Tproject_domain_name=default
2 r* D" X# N2 }+ V" ~% _user_domain_name=default
/ F2 P+ C8 p' s+ Z) r  dproject_name=service# S6 J% `  l- t# @' O; d5 T" @
username=placement8 T) s! _. g- |$ J4 T
password=passwd
1 k6 B$ e( f; H" d, Y2 _5 r% zvi /etc/httpd/conf.d/00-placement-api.conf0 l5 l) t; u7 C) X. k7 M/ E$ S7 a9 q
# add
; y! @5 N- J+ \<Directory /usr/bin>. U; K+ ^" x! o9 F0 K/ ~
    <IfVersion >= 2.4>- J7 x4 L3 X* V# J
        Require all granted' e+ X7 r# i- J: W+ g' F
    </IfVersion>
! v2 M/ N3 B. ~7 w    <IfVersion < 2.4>
/ M9 P1 V: D6 j* V% [& i! J7 J. a        Order allow,deny
, [3 Y( l7 Z: q5 C; g8 [4 L/ z! g6 T        Allow from all. y" n; W  T9 ^  i
    </IfVersion>
1 \5 N" H, C% K/ b" \2 q</Directory>
+ u) Y, o& @4 A. a( `复制代码7 g6 \; Q% n2 M
同步数据库 /bin/sh -c "placement-manage db sync" placement6 w; O% l9 U  o* X3 C% h
重启httpd服务 systemctl restart httpd2 a* T: z1 |5 v+ |, K
安装openstack服务7 h; c5 i$ v! |& w* }: R7 j
安装认证服务keystone5% x4 x$ R3 s3 W( e! Y
数据库服务. X2 B* d! n  V% Y% _
# create database
- Z, B9 |( j) M' L8 Vcreate database keystone;
: D. A' o& }3 z# set permission8 Z0 I/ Q7 L2 [
grant all on keystone.* to 'kst_db'@'localhost' identified by '';: p6 l* A2 @# S# X# t$ [& b+ E1 W8 o
grant all on keystone.* to 'kst_db'@'%' identified by '';
3 G6 E; h: d. A' z8 M% S复制代码1 z& k0 t# `) ]7 d% v4 a
安装keystone组件 yum install openstack-keystone httpd mod_wsgi -y
, a% t  e0 g0 @8 c: Q7 t. t' j( f; i配置
# e6 v9 }) z& mvi /etc/keystone/keystone.conf
7 w- z9 \6 w: k  F2 L4 l4 |[database]3 \1 G5 o: c7 o# ?
connection=mysql+pymysql://kst_db:passwd@ops-cont/keystone3 `1 T8 |" A7 d& r
[token]% [) N% T6 P' \2 P1 T# G1 ^
provider=fernet/ @' W9 o6 s$ i( V/ V. j
[signing]
# c+ f1 F; o& U8 M& ]enable=true& A$ A5 R' M5 B. l
certfile=/etc/pki/tls/private/pub.pem* P- t, C2 G$ G, f: N$ s2 Q/ ~/ a1 C
keyfile=/etc/pki/tls/private/key.pem  N: W& c! v; D  ~$ p4 a. {
ca_certs=/etc/pki/tls/certs/cert.pem! H  B8 P/ k( r* E3 S
cert_required=true" X5 j5 M! S- M
复制代码" ^2 l# |  N; o( `
同步数据库 /bin/sh -c "keystone-manage db_sync" keystone
7 u7 K9 m) k6 {0 Q7 e1 o6 g初始化fernet
3 u+ _& {* @3 W7 D! c" Lkeystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
$ |* d/ J; `$ k+ u, ckeystone-manage credential_setup --keystone-user keystone --keystone-group=keystone$ e. T, p1 p" r: W( _
复制代码8 [; i6 q0 c/ h; T; n" b: [
创建bootstrap服务4 u5 i! r; i& X8 f0 [: Y# z5 ^' r* o
keystone-manage bootstrap --bootstrap-password passwd \' p, P) x, W: K6 K" v# @' ~! i
--bootstrap-admin-url http://ops-ctr:5000/v3 \
. y. b; @/ V5 j0 a; o$ O* |--bootstrap-internal-url http://ops-ctr:5000/v3 \
: c8 v, s# N" [- ]--bootstrap-public-url http://ops-ctr:5000/v3 \! o: h3 P' s+ u
--bootstrap-region-id RegionOne' o: T. F4 [4 T3 h+ _' Q0 K5 F) `
复制代码
  j6 Q; ?+ U3 V$ v8 f配置httpd服务
; ~$ n7 \+ }' N( y3 w. @2 v: V7 bvi /etc/httpd/conf/httpd.conf' H# w8 @1 X) e: Y
# add
# h( K+ X1 d3 r! Q$ uServerName ops-ctr) E3 a) L- z( `6 s  i  ~
# configure /etc/httpd/conf.d/wsgi-keystone.conf
* Z. n7 _& a) t2 FListen 5000
' o3 ^' A8 J' o. n& T3 M<VirtualHost *:5000>
7 R* ~' S$ P, {# \, R    # SSLEngine on+ I2 b! N, r7 e! I  O
    # SSLCertificateKeyFile /etc/pki/tls/private/key.pem5 D" _/ M! E4 _. K% y# y
    # SSLCertificateFile /etc/pki/tls/private/cert.pem; O* g1 {; Y+ X' U
    WSGIDaemonProcess keystone-public processes=5 threads=1 user=keystone group=keystone display-name=%{GROUP}8 J8 y: N& `4 P4 {) N
    WSGIProcessGroup keystone-public* d# _6 m3 n; i4 E$ q5 ?- x
    WSGIScriptAlias / /usr/bin/keystone-wsgi-public9 q3 R/ W& c: y
    WSGIApplicationGroup %{GLOBAL}# _7 P6 p) x5 A9 F! X
    WSGIPassAuthorization On3 _3 G) ]& P- o: ~3 M0 V! d
    ErrorLogFormat "%{cu}t %M"* t: T0 x! J8 A/ j7 d" ^
    ErrorLog /var/log/apache2/keystone.log
* O: m: X; r/ E8 @( |    CustomLog /var/log/apache2/keystone_access.log combined
' u% I. }) g8 ]
3 C" I' _* q% G    <Directory /usr/bin>
1 N8 f* a: S: @        Require all granted; u) \& b& G- u6 [, \8 E' N
    </Directory>5 n& r1 S! h* q- w0 u
</VirtualHost>
4 u0 v; i( u9 o9 z- X# create link) z2 X# }3 Y; y8 G2 q5 J. J3 z3 N
ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/- R% A& S; \) G. l0 m% y$ c% y
复制代码" J, L* m  ?& G; m, ?6 Q
启用ssl加密链接,参考Apache enable ssl on centos
) t& Y; _  S, M' J5 B! I" i" p4 D: @- d0 u" t# w6 h' `) s4 {
设置环境变量% }5 t4 Y+ A0 e3 O

5 j5 a; r. Y2 Z5 D. v' t& S0 ~$ oexport OS_USERNAME=admin
# y  c2 F6 s/ a# ~" f7 e  Pexport OS_PASSWORD=passwd
, b6 T) f$ E8 N8 i2 Mexport OS_PROJECT_NAME=admin
  P$ c' b8 k, Mexport OS_USER_DOMAIN_NAME=default
: l! c: y" D- Gexport OS_PROJECT_DOMAIN_NAME=default. ?: }' }4 h8 d: S6 a
export OS_AUTH_URL=https://ops-ctr:5000/v3
; |+ F7 u9 B( f; @export OS_IDENTITY_API_VERSION=31 k/ ?# }$ L$ y0 S" C+ }
复制代码
5 f6 U' F+ V7 {创建服务用户、角色、项目和域
5 F) d! z" k% b" T. ?/ d# create domain if need5 b+ e6 M4 T7 `8 w/ g0 Z  _
openstack domain create --description "mystack" mystack
5 D; S, g  L7 q( N% v# create project
! s% c3 u. L3 I6 g1 aopenstack project create --domain default \; s$ o  r  h; G% K" l9 F
--description "Service Project" service
& S% J. p8 q  I5 Popenstack project create --domain default \; D: A4 Z. I% q3 f$ H* i5 k" o( i4 C
--description "Demo Project" demo! T7 H# n+ c7 |5 z! ~9 T% J  D. Q
# create user
* \/ J7 E' r9 Y; {+ Uopenstack user create --domain default \
/ s3 b9 V" x/ R- X/ U% S4 p--password-prompt demo
+ E4 J0 l8 I0 @$ x  d8 M4 _- u# create role* N5 E6 B. R' r" D; ]9 q' t4 S2 F
openstack role create demo
$ Y% K! O+ J5 Z# set role for user! r9 |9 K, a6 c' x* v- P
openstack role add --project service --user demo demo- Z+ D4 [5 R7 h
复制代码
6 C- X  d, p" U4 ]9 G9 [. W验证操作
, j; F$ m% s1 y0 C" T4 v) {) U/ s# unset
0 u$ G# H) h5 Xunset OS_AUTH_URL OS_PASSWORD
- I6 D) ^; a3 Y$ K# request new auth token
; p, n; a6 m& j! R' L1 p# Ropenstack --os-auth-url https://ops-ctr:5000/v3 \! G: a% _* ?- q6 G' U& K
--os-project-domain-name default \6 {1 i2 ^6 a1 H4 y/ V9 e
--os-user-domain-name default \: m: }) b' h% _- w1 k
--os-project-name admin \  J4 X1 g# V" Y
--os-username admin token issue! y6 }/ w9 q* N' e% P2 e; u
openstack --os-auth-url https://ops-ctr:5000/v3 \
) `# p: z. s: h  I9 i; z( T--os-project-domain-name default \! g- d: e# X+ J2 _' K6 ?
--os-user-domain-name default \/ e! g; s' S1 Z2 s# J/ h  Q4 C7 z% ]/ e
--os-project-name demo \, G4 S! P2 g. z2 ~5 t
--os-username demo token issue- F' ?/ d( P1 h/ b
复制代码
! Y! l6 ]' J7 n, I8 N2 |. Q3 v4 k# C分别创建用户admin和demo的环境脚本+ g( N& H* {/ A) g8 G; E- O& f5 b5 K
admin-openrc) m6 V5 f8 Q( n' E8 l8 `+ u
---$ v% X! W# I2 z1 |
export OS_USERNAME=admin8 j) I/ s! d0 d2 w
export OS_PASSWORD=passwd- |1 e: s2 ^5 [
export OS_PROJECT_NAME=admin
+ z. u  x6 p" s/ G3 I3 [export OS_USER_DOMAIN_NAME=default# U& o. g2 V9 k& O3 A+ m
export OS_PROJECT_DOMAIN_NAME=default
5 y& ?; R0 }( D; \export OS_AUTH_URL=http://ops-ctr:5000/v3
! B8 M* S* S3 y. ?3 A5 D  qexport OS_IDENTITY_API_VERSION=3. m" l# y7 q0 o1 s* y$ J' e7 L
export OS_IMAGE_API_VERSION=2$ z, a' _! e- T$ U

4 x# N4 ^& r( y0 fdemo-openrc
1 |0 ]! j0 B' i" w( }---
# U$ c2 u) x' J$ O  v; Z, P+ kexport OS_USERNAME=demo
) i1 p) T# \3 @7 ]5 r/ X+ iexport OS_PASSWORD=passwd) H5 T* ?4 o: O
export OS_PROJECT_NAME=demo
/ z7 M% G6 t9 N5 J2 Mexport OS_USER_DOMAIN_NAME=default( t: d/ r" j! r% Q
export OS_PROJECT_DOMAIN_NAME=default4 w! p7 \8 M( t" M7 [5 l1 s
export OS_AUTH_URL=http://ops-ctr:5000/v3
# M: @# I5 K& }4 |- uexport OS_IDENTITY_API_VERSION=3
/ C6 p! m6 k% W4 Z复制代码; \0 m3 |5 n/ F+ t
安装镜像服务glance6
0 I3 J+ @, @+ F8 @( `数据库
1 o5 A& e  j8 N9 s# ?create database glance;
/ ~# e, H; @# u4 n# set permission to glc_db on glance like keystone
2 ]) |/ L# ]/ \) o复制代码; }$ x: L9 O9 i6 @- x
创建用户
! n: Z1 ^7 Q! S$ t1 ^& s: b# i- Hopenstack user create --domain default \6 U; ^2 j( c+ J! Y+ _* O& l  E
--password-prompt glance+ I5 {2 n. X% z( S
openstack role add --project service --user glance admin
8 Y* [5 P- ?$ Y- _/ O2 b2 r5 w7 v复制代码. k( e$ V' @0 @7 A! Q* U0 N- O
创建服务实体
& E/ t. }3 Q' Z5 e0 t) gopenstack service create \
, \; r0 c" f1 P+ R" _" S" V--name glance \
: U0 x) F! G! U* l9 G2 m2 k--description "OpenStack Image" image% w. P2 ]/ S' k+ D  b
复制代码4 ^2 v- ?* ]$ @) n# M
创建服务endpoint9 O4 U4 }( y7 H. l: a( w
openstack endpoint create --region RegionOne \3 Z7 z$ p' z: u$ J- e- q5 \
image public http://ops-ctr:92922 D. B$ }7 Z: Y/ W
# create admin internal endpoint like public$ [$ [9 g5 ]: r8 e9 ~2 ]8 ~
# add port 9292 by firewall-cmd
# o3 A' V& f0 [2 ~  N1 O复制代码
& M3 q, h1 e0 m! P) k安装glance组件 yum install openstack-glance -y
) }. H' i  [# }  f; q1 o8 Z. U) }配置0 f! b" Y0 Z# c8 V
vi /etc/glance/glance-api.conf+ ?) {) n! G5 ]7 ?! _9 w
[database]
' b+ L9 g7 Q( oconnection=mysql+pymysql://glc_db:passwd@ops-ctr/glance
+ V- @' z4 u* G# l[keystone_authtoken]
7 b6 ~& f  T3 }/ \4 f5 a& Z) hwww_authenticate_uri=http://ops-ctr:5000! W- W1 A/ h2 Q3 u- S5 e- |
auth_url=http://ops-ctr:5000& m- z# p8 P, K9 m: ]# B  D$ E9 z4 E
memcached_servers=ops-ctr:11211
6 F7 v( S0 c) @" W- M8 H8 s$ \9 }auth_type=password: h" j$ q6 @$ N! R
project_domain_name=default: v. J. x: U' a' |4 Z* t
user_domain_name=default
! `8 G4 V$ N  w% F' v: D; Q3 Cproject_name=service
* W) C2 L0 N) R0 N& H0 O/ Vusername=glance- [- c' w0 Q5 o6 W/ h; ~1 S& ^
password=passwd
1 |5 z" @4 `# X[paste_deploy]( s+ x' d# m2 J; o
flavor=keystone
- P6 T& B) S1 n# p1 ]* ]3 B[glance_store]" U3 P8 A+ g4 |7 O/ f, K
stores=file,http2 ^8 {4 c/ T3 D6 W# v7 q
default_store=file
3 o$ D8 B: {. e+ c- Yfilesystem_store_datadir=/var/lib/glance/images/
& i/ k$ y1 l( F. uvi /etc/glance/glance-registry.conf3 |* J/ \4 Z  D- ]- o6 E7 n; P- \0 p6 k
[database]
+ w9 x) c8 j1 s- z6 Oconnection=mysql+pymysql://glc_db:passwd@ops-ctr/glance2 b" o' o6 |! T' h# Z
www_authenticate_uri=http://ops-ctr:5000
  h  G7 s: q6 V+ T9 ?: P9 H, R8 Yauth_url=http://ops-ctr:5000& R( {; J, W" P
memcached_servers=ops-ctr:11211
2 Y0 H5 n' W. h$ nauth_type=password& ?9 V2 E. y8 d) I
project_domain_name=default
- Y1 \3 n2 E8 guser_domain_name=default
+ Y4 G( g0 `; X6 l% Q! J6 ?project_name=service
( P# R3 r; ?8 Qusername=glance
& E/ `: L. h9 A% M7 R  Ipassword=passwd& O! a. |. o9 O/ O5 b, y
[paste_deploy]
% ~/ L/ F9 N" @3 C- R  j3 u1 Lflavor=keystone
5 D/ V( C2 [' x. r复制代码
* D5 K2 t& ~7 q/ V" S同步数据库 glance-manage db_sync glance
' J% A+ A1 f0 i" d- f4 Q) H启动服务
/ g& X) n5 a0 D; c: \4 lsystemctl start openstack-glance-api openstack-glance-registry
" X' C% P) i( _: ?systemctl enable openstack-glance-api openstack-glance-registry. Y1 X$ R3 V3 |1 z$ N2 D6 G5 O
复制代码6 w, o. `4 S1 X, L7 G# N
如果glance-api服务启动失败,尝试修改/var/lib/glance/images和/var/log/glance/api.log的所属用户和组为glance:glance 10. 验证操作( X- i1 F$ Y) W7 Q

! I" O: R/ i( i8 k0 U* x. admin-openrc
7 Q& _# ~$ e: `" |- G1 Z# create image use cirros.img
2 o4 N0 n$ x0 m0 H9 Uopenstack image create "cirros" \
2 |: L, @  C: ?--file /home/user/cirros-0.4.0-x86_64-disk.img \6 {5 \6 \) P6 n( k) x2 r
--disk-format qcow2 \
6 `2 X8 q8 N: _--container-format bare \! g& w4 u0 u9 o$ Z( v
--public
! O, T# Z' h' @# n7 D3 {; W" ~# show image
+ l& p2 ^' ], Y- W: Z% Y3 ~openstack image list) m" P3 ]/ ~) O9 p% i
复制代码
9 Y6 A& F9 h0 [* [- o安装计算服务nova8
: N/ ~2 b7 ^; r' ^5 a控制节点中安装nova服务
4 e$ t. j, y( I! Z数据库: x; K  t% j& f+ \" ]* J
# create database4 b  d* S% v/ V$ P& y7 T5 W+ A
create database nova;
3 a. f: _$ [) v* i: H4 K6 {1 [create database nova_api;! f6 I0 i) c( E0 c' C# g0 _+ ]2 Z
create database nova_cell0;
8 Y# z! w/ N) v& M4 }# set permission like others5 X" n8 @5 K+ D% o+ q
grant all on nova.* to 'nva_db'@'localhost' identified by 'passwd';
) {7 p6 O( i+ t复制代码
' Q( e8 Z) H; M创建用户
! F  s9 i1 [) t  ^% @openstack user create --domain default \
* H% n/ U9 h! u( }5 P+ v--password-prompt nova  N7 C' i4 w: Q# X5 W' J9 M
openstack role add --project service --user nova admin
1 Q6 E2 {/ D3 I! \' Y! E复制代码! Q  d$ f7 A7 Q2 s  y: }2 @8 |
创建服务实体
+ t' F% B8 h- _6 W$ g( `3 yopenstack service create --name nova \) p5 R4 U. X8 z+ j- X
--description "OpenStack Compute" compute  q/ ?1 p- @' \( [1 Z( C' T
复制代码4 ?/ c+ K$ \: L; }
创建endpoint( [$ t0 ^! o& P5 Y
openstack endpoint create --region RegionOne \
( n8 W  _7 u  t; n7 q7 C4 J' dcompute public http://ops-ctr:8774/v2.1
3 c5 n% K) {( U! u* x# create internal admin endpoint like public
) A* q4 T& ~  S& w# add port to firewall
/ l/ m1 C& q" \复制代码
: h+ W+ ~2 [* {2 [安装nova组件 yum install openstack-nova-api openstack-nova-conductor openstack-nova-novncproxy openstack-nova-scheduler openstack-nova-console -y
( O; z, F/ d: b" x6 d( r配置组件3 M7 \! m# m8 g
vi /etc/nova/nova.conf
; A! e% O1 K% K$ |& P/ R[DEFAULT]8 k( j0 X: {% q* G3 L- L% F
enabled_apis=osapi_compute,metadata
  m1 A. n/ U. t+ @& ptransport_url=rabbit://rbtmq:paswd@ops-ctr  _! `; ]" g& R4 Y( u
my_ip=192.168.122.11: I4 z0 v- \" M
use_neutron=true
0 O3 f4 O" p+ Q1 b( Sfirewall_driver=nova.virt.firewall.NoopFirewallDriver' U* [; D- C, O0 T8 H4 N) ?. t5 o
[database]9 w3 A5 ~, t7 x: o5 F% {1 a$ L
connection=mysql+pymysql://nva_db:passwd@ops-ctr/nova
" h6 m  [1 g% Y) A' n[api_database]  E- E9 {) X9 f( t1 l
connection=mysql+pymysql://nva_db:passwd@ops-ctr/nova_api$ j5 Y, U# J/ L' `9 R$ ]' u
[api]; q' m# V" W" {- k! o
auth_strategy=keystone
7 C+ U  u1 |/ N[keystone_authtoken]
+ U1 j" }* o2 U$ Lauth_url=http://ops-ctr:5000/v3
; ^) Q5 o! B3 r+ umemcached_servers=ops-ctr:11211% M' J; V8 f* U4 v) Y* |3 M
auth_type=password
+ m0 D, Y( s! |* Y. c( n$ q. b! Z: Tproject_domain_name=default- F1 l- L; r: |5 g* E0 ~
user_domain_name=default
' y1 }# f  ~" ]+ J( `; j7 f; }project_name=service
( v- J- f5 d0 vusername=nova! P& q* ^/ E% R% Z% r2 x: M
password=passwd
; `: U, u+ u8 C[vnc]
0 b# n4 [% W- c. d" eenabled=true0 h' P: Y4 k) [/ n5 x
server_listen=$my_ip! `0 }5 ~: {& M& r) J/ K
server_proxyclient_address=$my_ip' S* ?& C, m+ N3 G5 X( `6 b
[glance]6 R8 H5 }# E7 [3 b% J
api_servers=http://ops-ctr:9292; C0 [. Q5 N  Z6 M/ _# g
[oslo_concurrency]
$ C0 B* _: @8 t9 }; F- ^lock_path=/var/lib/nova/tmp
1 c& `) }# |$ B0 {[placement]+ D# E. K$ d+ ]
region_name=RegionOne) r; X: C4 f% i6 M6 E* |
auth_url=http://ops-ctr:5000/v38 D! |) g. v* Z
auth_type=password
2 ^& O0 [6 C* [6 l3 |8 Dproject_domain_name=default
; f# o' d1 Y# |( N+ G8 E8 Uuser_domain_name=default/ c+ m" p0 Z  L4 e. S
project_name=service* O5 S9 i' g* A" i
username=placement% @& t. }# `5 h4 e
password=passwd3 D) a0 z( N: V
[scheduler]% M2 z3 v; ~% B$ h& [1 l% v5 U
discover_hosts_in_cells_interval=3005 ?" i) i" P' H! b% j& a
复制代码
  l+ d1 _' G9 F5 Q1 x同步数据库
9 p7 X- S" Q/ ^5 y# }  c1 G/bin/sh -c "nova-manage api_db sync" nova7 ~. G" K2 ?7 c" \. _' k
/bin/sh -c "nova-manage cell_v2 map_cell0" nova( D( x: T7 ?$ _
/bin/sh -c "nova-manage cell_v2 create_cell --name cell1 --verbose" nova
5 \7 S9 d5 m7 G% }/bin/sh -c "nova-manage db sync" nova
3 i2 L! w. J# Q, |% t  q+ [! {5 N# show cells/ _/ b  }4 v; F( l0 h: m
nova-manage cell_v2 list_cells nova+ |4 E: b3 e% r2 c) ^: @
复制代码
, V1 D1 E- M! A+ y  V) v启动服务
/ X8 I9 M) o3 U' F* ?8 G) H1 zsystemctl start openstack-nova-api openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
5 s& N- f; Q6 t  B& N! usystemctl enable openstack-nova-api openstack-nova-consoleauth openstack-nova-scheduler openstack-nova-conductor openstack-nova-novncproxy
2 L8 z! ~3 G" ]2 z# Z+ x复制代码
& ?, _1 G* D+ M$ {) F将计算节点添加到cell数据库1 X0 F6 G7 Y* V  x. }
# show compute service
( @4 ~. O% p$ E" o& P3 q+ r. Fopenstack compute service list ; c- @' S. w( n5 f
# discover compute node
+ w, X; L# W, y/bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
  |8 g  p% Q$ m  g复制代码1 N5 g, b0 B$ }% h
确认操作% P; x1 s1 M: y6 {7 R, \
# show endpoint  Z1 c  C. }. S/ A# p
openstack catalog list
4 j# ~' c4 x. B6 h3 ^' B* {# show image
# p; E! h: w8 h% D$ C& C; bopenstack image list" c, o( B6 y: K% p0 g
nova-status upgrade check
0 K( G  f% d% h; ]8 B复制代码8 L. o. a# O* k" Z/ d
计算节点中安装nova服务9
/ X1 r8 o5 G! A  O* D* [% X安装组件 yum install openstack-nova-compute -y
" d& R" Y. m! T" ]/ B配置) ^7 g( L/ O) j+ o
vi /etc/nova/nova.conf
( W: h. c. w6 o' @" P4 _( y" Q  D: `[DEFAULT]
9 p* |1 v8 D4 e  z8 p' \) j: @enabled_apis=osapi_compute,metadata
4 G; k$ q/ I& p, d! w2 N& i/ c! otransport_url=rabbit://rbtmq:passwd@ops-ctr
0 u  m& u  e4 S1 f/ emy_ip=192.168.122.12
! e3 M/ f' v) H7 }use_neutron=true2 \6 [' R3 d: t, u
firewall_driver=nova.virt.firewall.NoopFirewallDriver1 H: o: X) V+ V$ N, i4 j3 R
[api]& P, R% Y# @: D
auth_strategy-keystone
% \& G* z4 w  x+ }% y( z! K[keystone_authtoken]4 J/ n. b9 ~# b* x8 P2 [& P
auth_url=http://ops-ctr:5000/v3
! o4 G* [- W  ?# Y2 hmemcached_servers=ops-ctr:11211
5 D6 ?7 A; S& F& ?+ o& F* l& sauth_type=password/ {$ l4 K" g" f; g" J0 ~% X! Z
project_domain_name=default7 ^& h, k& W: y; X! F
user_domain_name=default3 V9 b% M. X) {: k' v$ C3 D4 P
project_name=service
- p% I! I# y% V+ Yusername=nova
' E! I! P4 |, @$ P( s( {password=passwd9 K- ~; z# r/ `9 a$ N3 m. Y8 B
[vnc]- ?3 X# T& O* Y) U4 Q  |: ~
enabled=true: C0 e, x! r$ V/ ^" z. E
server_listen=0.0.0.0
# }5 B1 m( {" ^0 gserver_proxyclient_address=$my_ip  r  X! e: z! Y) A
novncproxy_base_url=http://ops-ctr:6080/vnc_auto.html
% `; U% c  \0 v" O, n: q2 ?- ^4 ~1 v[glance]
( M2 R) _4 B) x3 a9 H- A1 eapi_servers=http://ops-ctr:9292
  P' y2 w) m, H+ q[oslo_concurrency]
5 k0 w: m% s* [* Dlock_path=/var/lib/nova/tmp! }! P0 Z! i6 X; v
[placement]; ^8 }4 e- S7 j4 U' Z4 K
region_name=RegionOne8 p# c/ P* n: N) M7 A- D* S
auth_url=http://ops-ctr:5000/v3# q! k# N4 v; I; C% Z
auth_type=password
: k! k" U; e- v$ {, lproject_domain_name=default
% e' ?: v2 p6 t1 x( quser_domain_name=default
1 C+ C0 A9 O7 R7 y# G& S  ^project_name=service
- b, j1 R0 {$ }6 l, m! Musername=placement
* e' y5 K" W2 V) k: wpassword=passwd
3 ]4 G0 O# t: V; r& z8 ~[libvirt]/ J( T7 q. u0 E' N9 ^4 Y4 C: k
virt_type=qemu0 R: M8 f2 R* X4 I: k) I; N
复制代码' ~, f8 x0 A! y4 ]* V" [
启用虚拟化7 P- q1 l, k6 m/ i$ ]9 n
egrep -c '(vmx|svm)' /proc/cpuinfo) T& b) S* \4 @. i$ ~/ P) L2 L5 F- K
结果:0-qemu" X, a- h0 F1 R* O/ G2 k7 b
复制代码
1 G7 x) f6 G9 K; X3 ~启动服务+ k! l. F  k( G, m8 i
systemctl start lilbvirtd openstack-nova-compute2 {9 P, e- n7 e+ d
systemctl enable lilbvirtd openstack-nova-compute
& x+ P8 b6 J- z& _复制代码
) q) c) a: L# O4 k8 k7 m安装网络服务neutron7 x) ~( M3 k- ]7 D& J" v
控制节点, P3 V& e, G, C1 k
数据库
9 U$ E5 G" J+ O+ `8 V$ }create database neutron;
8 l( N- J: t' D2 fgrant all on neutron.* to 'ntr_db'@'localhost' identified by 'passwd';, o* `9 }# M4 J1 M* \+ Z
grant all on neutron.* to 'ntr_db'@'%' identified by 'passwd';
. H: m$ e" S& m: F  k! X8 w) d* Y复制代码8 C  ?) a& z, p, O9 n4 f& k2 C
创建用户* w$ E! c7 R8 |% o4 ?! m1 H
openstack user create --domain default \
" A0 l) E9 J' I3 k! H5 s--password-prompt neutron
/ n+ H  C) K- ~: w9 a# Topenstack role add --project service --user neutron admin
9 ?* G% G* M7 L8 ~复制代码
( d2 J0 a+ g. i7 R& Q创建服务实体和endpoint- \; _, F! x) \# H0 T5 u+ l& \
创建网络0 m) v/ W' k1 `6 w% h% r3 r
私有网络3 _- ?" \, o0 n+ ?& j8 j* W
安装组件 yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linux-bridge ebtables -y
( ^8 s0 D' }* l配置
% c* r) Q- I% u( L- N( ~& ]vi /etc/neutron/neutron.conf
1 |: _- I, {# `' J( }# P# Q+ r: R/ \4 f[DEFAULT]1 }0 [' h7 e, S0 Z0 Z! _
core_plugin=ml20 J; m" W4 ~4 K4 t
service_plugins=router
4 j8 @! X8 c9 A  x( ^' Mallow_overlapping_ips=true
) K& ?! O8 ]1 K! h* ptransport_url=rabbit://rbtmq:passwd@ops-ctr% z9 ^2 @% |3 z
auth_strategy=keystone
. f; d6 H+ X9 q% W; `; r' [: E  Vnotify_nova_on_port_status_changes=true
' a  _# w* @' y! Knotify_nova_on_port_data_changes=true' b( c0 U. g: R
[database]1 T2 L& W9 g2 }3 Q* _" h6 h4 I$ R
connection=mysql+pymysql://ntr_db:passwd@ops-ctr/neutron6 ?3 Y  `- h! c  g
[keystone_authtoken]: f; Y/ [3 V  |8 Y
www_authenticate_uri=http://ops-ctr:5000$ G- M' e. p- R2 l3 L9 G& a
auth_url=http://ops-ctr:5000% E4 e# U% _% {
memcached_servers=ops-ctr:11211
$ g7 {+ K5 S" E: hauth_type=password" d8 W& E! j3 g, s+ n& o$ _5 B
project_domain_name=default2 g2 B! [: o: d
user_domain_name=default; r0 _# Y: L. m' l
project_name=service
# e( {$ P  P" C; iusername=neutron$ P; g8 u7 b5 k; a  t- [) g1 H. C
password=passwd
8 X/ U5 ~$ o* O% [3 I- k3 d[nova]
' z+ y$ g1 ?) m6 S7 uauth_url=http://ops-ctr:5000
* h+ T3 l- x% S9 ?2 p: I8 Hauth_type=password  a( y. Q) Y( b; U+ g' m
project_domain_name=default
+ e: A0 V0 K) O! _user_domain_name=default2 H# u: e, K4 F; A$ z
project_name=service
; E: _! _6 O# N* husername=neutron0 {3 y; W  a, A- D
password=passwd2 E) n8 d' W4 D# p" H! h/ p/ j2 g& G; N
[oslo_concurrency]: O, b, y; ], O+ o6 q) t* L
lock_path=/var/lib/neutron/tmp5 O0 s3 I" G3 O& e; |
vi /etc/neutron/plugins/ml2/ml2_conf.ini
& f2 {5 k$ \9 l: w* G, j! L[ml2]5 c: h2 e. U% ^: T/ W
type_drivers=flat,vlan,vxlan
( l3 {' K7 D' B: m- l  utenant_network_types=vxlan7 v4 g1 k- L# z5 k
mechanism_drivers=linuxbridge,l2population
2 z, A2 X3 ?8 b! J4 U& eextension_drivers=pot_security
5 J: }0 T+ }0 `2 T, L& U. \6 L) G# T[ml2_type_flat]
" {: r8 S  V. S$ O$ @8 v5 O/ Nflat_networks=provider
, H) y" |4 I% w. i( @) @9 B/ ~[ml2_type_vxlan]
8 {- f+ f. k+ G. N  `4 r: _, _vni_ranges=1:1000
, p; ]3 y. B( ~1 a1 I1 ]4 M[securitygroup]; j, q& q; M$ G$ C( p# ~
enable_ipset=true2 y) I& U0 j( N7 Y. g- J* P& J/ G
vi /etc/neutron/plugins/ml2/linuxbridge_agent.ini8 W& C/ J9 @5 ]
[linux_bridge]
' `$ L# A% p7 }1 e6 y  N. ]physical_interface_mappings=provider:eth1
2 B4 O4 C' P8 q/ |- N* X[vxlan]
: f! A7 j0 M# h! P" R, \enable_vxlan=true- f+ O% Q- L0 m* y& ^' d* }
local_ip=192.168.122.11
4 f; \) {' j, ?l2_population=true
: |4 l# L% t( s3 |: w/ i! z3 j[securitygroup]- \7 G; Q: a3 `. ^, S& y% }
enable_security_group=true
, _2 U/ |! e& E! D8 m- nfirewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver) m8 F* a  R3 z9 \9 c) T+ R4 D
vi /etc/neutron/l3_agent.ini
' S8 J. G2 u3 i. d2 j. A4 _[DEFAULT]
6 @) G5 F% z4 e  kinterface_driver=linuxbridge
+ y* Y) ^9 d0 B  }6 ~2 ~2 [vi /etc/neutron/dhcp_agent.ini6 a7 P- Q1 X6 ]& O' R
[DEFAULT]
3 N0 P0 G4 D  ?* @interface_driver=linuxbridge
$ |" `3 `' t* d& vdhcp_driver=neutron.agent.linux.dhcp.Dnsmasq6 A. u  S/ _  e/ g5 P
enable_isolated_metadata=true
6 s5 q" R* J% @; @& ~/ ~复制代码
- Z+ _$ J8 ~% O) f配置元数据# v! t9 h. b( {
vi /etc/neutron/metadata_agent.ini: W/ V& S3 H) w( F9 Q; \
[DEFAULT]. R# `6 s  g% z5 w5 M$ Z
nova_metadata_host=ops-ctr
6 X7 r4 L" x7 L! C6 b+ [2 f3 z3 `metadata_proxy_shared_secret=passwd
: f- M3 s2 n' T2 J- |" ]3 r: Y1 w复制代码- ]7 x* B! W3 Y
配置nova服务4 Z9 M  P8 I) {' E
vi /etc/nova/nova.conf
4 g: h+ H' l' B! r; D; h7 |7 t$ ~  b! {[neutron]8 S& T) y& g3 C9 V+ X0 Q$ k
url=http://ops-ctr:9696
: R6 x6 Z: V' g* Oauth_url=http://ops-ctr:5000- l9 p. ^3 n$ p. B! ~# g, Z5 I
auth_type=password
: [: N: C" d3 E& u0 u  `) cproject_domain_name=default! @! Q/ ~' E; Z
user_domain_name=default/ M" Z4 u. g& ^( H" K  \; _
project_name=service
" f# K  C6 t. k; v# ?* ^' Xusername=neutron8 S+ I% P, X# M# g3 N% m5 u
password=passwd# j0 s$ @% t9 f. I/ E. b5 }
service_metadata_proxy=true
# |" v9 ]* d2 imetadata_proxy_shared_secret=passwd5 B# g2 K/ E, u
复制代码( F2 I0 k  m( ~! B: E. p
同步数据库1 e7 v/ R/ v1 y0 Y! ]& x5 E
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini3 e9 r0 K+ l9 y
/bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
1 A( M+ F: @' J1 H0 [% J--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
. X4 ~, c' f& T* z2 |5 ?; K3 k. x复制代码
" X0 T! Q2 [8 G) T启动服务- m) m  N% O+ l& X
systemctl restart openstack-nova-api
* K& S3 @- x. A7 ~/ Vsystemctl start neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent neutron-l3-agent& [. q' m& {6 y/ g
systemctl enable neutron-server neutron-linuxbridge-agent neutron-dhcp-agent neutron-metadata-agent neutron-l3-agent
3 V7 N+ t1 W/ A- K) e复制代码- ~& j3 w) l1 ^: A$ b
验证操作 openstack network agent list 计算节点有1个服务,控制节点有4个服务
* @% F5 p4 e' a3 F计算节点8 M1 M1 G. C9 p, m& T4 }
安装组件 yum install openstack-neutron-linuxbridge ebtables ipset -y
6 n& G5 }% ~3 s2 n9 T配置
( w; x. e4 |" B0 }- `9 lvi /etc/neutron/neutron.conf
% D  g( }4 }" n: L. z7 v6 ^  D' E[DEFAULT]4 ]% z# E& o9 D* |/ Z. M6 p
transport_url=rabbit://rbtmq:passwd@ops-ctr
( h( u$ A. |+ t/ ]6 J8 Eauth_strategy=keystone
  d' O2 t) _8 c$ D[keystone_authtoken]
/ v& _7 W7 G; G3 P3 \www_authenticate_uri=http://ops-ctr:5000- l! G: }& T3 v# B3 H1 D( i% [
auth_url=http://ops-ctr:5000* J1 J! g1 y  j+ {! _" ~
memcached_servers=ops-ctr:11211/ c  i: [, j, j
auth_type=password
! Q6 e; Z  x" K& l9 n% _4 sproject_domain_name=default7 ]$ D% b7 [' X  w" o
user_domain_name=default# @7 N/ L4 U$ M" _" w5 {
project_name=service+ U. O1 D+ c/ K
username=neutron
  s+ {& o) k, r: u- y, j( y2 opassword=passwd! S" `+ y6 k6 U
[oslo_concurrency]
: P5 V3 w- t6 [& ^lock_path=/var/lib/neutron/tmp) y5 V" _% I. H
vi /etc/nova/nova.conf
+ ?, q+ i+ {' e, T8 o[neutron]
6 h4 ^7 {; a6 Z$ o$ ^url=http://ops-ctr:96968 Q+ U, k/ S/ t5 j0 w
auth_url=http://ops-ctr:5000
  x! l$ y) o2 cauth_type=password
" U2 M8 M4 c* d/ M" c4 A! ]& x  Kproject_domain_name=default
) u7 E4 S+ `: b' wuser_domain_name=default
2 P. b7 C6 ~+ Q, A+ wproject_name=service7 y2 x/ d" |& W9 y# y
username=neutron/ |% s7 T8 _. J" f5 ]- C. Z
password=passwd
9 X, m( `0 ~; G# m  Mvi /etc/neutron/plugins/ml2/linuxbridge_agent.ini
! t0 {' @1 c4 X$ Y# L# Z[linux_bridge]
8 B% B( S+ `5 w9 Y6 c9 T/ e( S  Lphysical_interface_mappings=provider:eth1( ?6 [5 ~' y% i5 a# K
[vxlan]9 A( [, M+ M9 a" X8 R) {0 ^9 x
enable_vxlan=true
3 _3 T; l" f/ D: e8 xlocal_ip=192.168.122.12( I  p( Y: z) q0 g4 D# |
l2_population=true, a) `! f( L. w1 a+ k( r) _
[securitygroup]% T$ s, a3 C! q
enable_security_group=true
  t& i/ t* \0 X* F, S* Lfirewall_driver=neutron.agent.linux.iptables_firewall.IptablesFirewallDriver" |% _/ t, P: J1 A

/ Q( x0 R4 a5 r: D+ Y: d复制代码! r! x5 ~. X3 F. ~$ w, }
启动服务
2 c0 Q4 S; ]- U1 ksystemctl restart openstack-nova-compute8 g' \8 K& T$ n8 R! I) L% F
systemctl start neutron-linuxbridge-agent
# ~0 X( I7 l9 h$ x- Csystemctl enable neutron-linuxbridge-agent
0 f6 K! y" V2 v) o1 |  E$ f复制代码
9 C7 t) ?& p( \1 q; n% K" r9 i: B安装UI服务horizon12  q) _: f& _. J8 a$ J
安装组件 yum install openstack-dashboard -y  K, t: E% F7 R0 a. I& ^
配置/ F, }, i3 |. M6 L
vi /etc/openstack-dashboard/local_settings
$ S, O- u+ V0 J' U' z6 L+ [3 Z% MOPENSTACK_HOST="ops-ctr'2 q( @. f- t6 {% U; i3 [
ALLOW_HOSTS=['*', ]
( Y8 M; s. E- FSESSION_ENGINE='django.contrib.sessions.backends.cache'
5 h+ G9 I5 N" ?# v* GCACHE={
; Y/ x6 `0 e% ?  a  n0 g2 D. Y    'default':{
% l& f+ _. Y1 G        'BACKEND':'django.core.cache.backends.memcached.MemcachedCache',  D2 \% w0 {, Q4 _* y7 U
        'LOCALTION':'ops-ctr:11211',
7 f4 v/ `% x- V" X    }
% {8 u& `5 A9 _}- N0 ]8 y* ], I( a* c2 L+ l
OPENSTACK_KEYSTONE_URL="http://%s:5000/v3 % OPENSTACK_HOST"* W! d$ Q) l/ k6 r& F8 U+ x0 R
OPENSTACK_KEYSTONE_MULTIDOMAIN_SUPPORT=True! a0 e* U7 ^$ a
# True要使用大写,用小写会报错: _+ \# N- f  M6 Z2 |
OPENSTACK_VERSIONS={
4 @  F7 A) J5 ?& y' ~" a& ]    "identity":3,& K2 w* u- C3 k8 D0 d7 S) Q
    "image":2,
; _  D, m: `% M    "volume":3,0 q) `- E) `! o* I/ j5 D
}
/ F6 W" f0 n( A1 h% H7 ~1 ]OPENSTACK_KEYSTONE_DEFAULT_DOMAIN="default") g0 H7 P3 f) g$ N# l
OPENSTACK_KEYSTONE_DEFAULT_ROLE="demo"
4 F  S* H  s2 [/ S6 t! @% a2 QTIME_ZONE="Asia/Shanghai"" W3 W8 }6 N9 E  I, y  z3 Z
vi /etc/httpd/conf.d/openstack-dashboard.conf; E  X; c, _( Z" ~2 _
# add) _) W2 X6 v" h  X$ Y: A6 X
WSGIApplicationGroup %{GLOBAL}- C- R8 _1 L% W! @) W* A% l
复制代码
4 u$ j/ f/ v  z; v1 Q重启服务
2 f! N9 L9 w) j! ksystemctl restart httpd memcached. x9 R& x  B5 \1 o
复制代码
* r+ |& b6 Y( i, |. y  b- A! V8 s* Y添加一个存储节点
/ }3 b! }% @2 m, D0 ]' L8 ~! N3 x控制节点13
+ V  u) C! w! Y# s1 c数据库2 ~2 p! F  l: ]2 l# |7 d$ o# a
create database cinder;7 ^6 u' a  D8 \- s3 m# v
grant all on cinder.* to 'cid_db'@'localhost' identified by 'passwd';' B0 b  k) Z, R5 S, r/ \3 F# D' G
复制代码* j# b/ j% E7 S  Z2 P% N
创建用户、角色、endpoint和2个服务:/ l1 \; s6 F) W( X' W
cinderv2,cinderv3,类型分别是volumev2,volumev3
4 z8 O2 [8 I& a1 b: ]+ E$ }v2 endpoint地址http://ops-ctr:8776/v2/%(project_id)s# o! z" S! j3 t2 Y1 c
v3 endpoint地址http://ops-ctr:8776/v3/%(project_id)s& V  |: e; H3 L1 L
安装组件 yum install openstack-cinder -y1 `. E8 o9 x- L% T+ P
配置% T" I. x5 f6 D* D4 Z9 h5 e3 q
vi /etc/cinder/cinder.conf  y7 @0 I' d' J$ K5 \1 T3 r
[DEFAULT]& i, z1 k/ x( e9 V- {, W
transport_url=rabbit://rbtmq:passwd@ops-ctr7 E+ s* @7 B( T4 T% `% L
auth_strategy=keystone
* I) q$ o1 T$ N8 e( b" F4 Ymy_ip=192.168.122.110 L" g2 _& N  ~: x" m+ Q/ S- k
[database]
( k2 _6 d* u4 Gconnection=mysql+pymysql://cid_db:passwd@ops-ctr/cinder
4 H2 A1 T9 _" m' B  v9 t) s[keystone_authtoken]
& a" q8 j3 S3 J9 Bwww_authenticate_uri=http://ops-ctr:5000. B2 I, |# {' |1 J
auth_url=http://ops-ctr:5000/ M" C' t4 L" a# f, Q
memcached_servers=ops-ctr:11211. ~' }9 @7 U2 |) Y% F3 q  B
auth_type=password1 d8 d: z, p" l3 t' V
project_domain_name=default
0 X9 i7 E2 f2 }" m+ b4 cuser_domain_name=default/ |2 j1 Q. ]( z  s0 R
project_name=service7 A0 w7 R6 V" x& _* j, n
username=cinder& o: k0 h  k+ k9 }: w  V% S
password=passwd6 p, `$ }& M8 L8 A0 Z0 T8 P+ t! G' `
[oslo_concurrency]/ q; G4 f3 k7 I  D2 s
lock_path=/var/lib/cinder/tmp: i" Z% F3 w3 k9 Z2 ^* K
复制代码; Q# B- |/ e4 S8 ~) H
同步数据库 /bin/sh -c "cinder-manage db sync" cinder3 r" m, S1 F1 G
配置计算服务使用块存储4 r$ K4 @. p, y# _; u+ t/ Z
vi /etc/nova/nova.conf- Y' O* U+ v/ D( P" q. m, H, x" @' l
# add9 d8 Q2 J7 f8 T, y# n
[cinder]
( H7 y$ E9 r) P9 H. q8 [os_region_name=RegionOne, u5 X' h3 v8 P6 O9 `; M
复制代码
# R9 J2 K5 k' u3 \, D启动服务
9 ?! |% D5 k  q' k$ c; {! Rsystemctl restart openstack-nova-api* ?9 w2 U% S7 o- i# u/ N
systemctl start openstack-cinder-api openstack-cinder-scheduler( A; O3 V0 s8 s( Q  P/ \- R" z! q9 _
systemctl enable openstack-cinder-api openstack-cinder-scheduler* V  S0 c! z( f- e
复制代码  H' ~& a0 K$ U) v8 |1 I
检查操作 openstack volume service list
1 C' I9 u) i2 Q4 ]0 i4 w存储节点
  q& _+ C; v; U1 D( U安装组件 yum install lvm2 device-mapper-persistent-data -y/ P- \& a0 `. j! a% l7 h
创建逻辑分区 pvcreate /dev/vdb
0 Z3 W9 n8 @/ x* W7 a! }创建逻辑卷组 vgcreate cinder /dev/vdb* y0 J9 N- ^5 n6 V9 H* m! _0 Q! O
添加过滤器8 [, y( a: P0 e
vi /etc/lvm/lvm.conf
0 K9 a1 E  P4 gfilter=["a/dev/vda/","a/dev/vdb/","r/.*/"]% X; E, L7 B9 y
复制代码
& e5 J1 s7 [+ \0 p! E: Q4 O安装cinder组件 yum install openstack-cinder targetcli python-keystone -y& |9 J5 v; N- D, o: h% ^, ?6 P% G& a
配置
1 _" u" [) U& u" H' F2 {7 zvi /etc/cinder/cinder.conf
$ {: O: U3 P% E+ N" l[DEFAULT]5 E' u9 R" T. U7 e1 T2 l
transport_url=rabbit://rbtmq:passwd@ops-ctr6 U. O, ~4 g, i) f2 u$ `; U1 |( m
auth_strategy=keytone
9 R; w/ q0 R5 v0 e' Umy_ip=192.168.122.13
( `2 ?! \; D' W) N% Zenabled_backends=lvm) u' f$ h- Q& B1 y
glance_api_servers=http://ops-ctr:9292
" }3 x. b2 `( ?) w[database]. P5 J# @1 {# P
connection=mysql+pymysql://cid_db:passwd@ops-ctr/cinder
% [( Y& I8 `8 @% j3 r7 H[keystone_authtoken]
* g9 H! @" u) S, |: n/ z1 Z- gwww_authenticate_uri=http://ops-ctr:5000( h+ J. g+ R# y
auth_url=http://ops-ctr:5000
5 X) e/ T% S$ k2 l- U+ N1 vmemcached_servers=ops-ctr:11211
4 X1 X. [& L# E4 i+ w0 y  Vauth_type=password. H) L4 i% b+ x' }. p
project_domain_name=default
  N) o# P/ e; g& duser_domain_name=default+ \2 f8 [, r7 j2 K/ `( o# i
project_name=service
/ {7 X; H5 e, s/ @username=cinder6 G! n) Z5 G% |8 s: ~! M
password=passwd; S( L+ A/ R- |& @
[lvm]
2 u/ u& Q) U# \. S* K+ ~0 b9 o! xvolume_driver=cinder.volume.drivers.lvm.LVMVolumeDriver8 K# ^& f3 H! i. M2 {
volume_group=cinder) g3 I* U0 X4 n$ B
target_protocol=iscsi- n7 ~* l, q  [4 X* a. X, k
target_helper=lioadm4 H: y7 w4 x) K  o: e6 f  X8 k) N7 |
[oslo_concurrency]
5 u) ?/ z4 v3 m+ T4 m5 t; flock_path=/var/lib/cinder/tmp( }) P6 `! H3 I- g4 ~7 D
复制代码0 E8 k. L$ W* U. w4 A0 \
启动服务2 x9 F  C$ o2 v* y1 P' A
systemctl start openstack-cinder-volume target
8 J4 d$ |0 A6 csystemctl enable openstack-cinder-volume target* n, ]$ v5 L- c
复制代码
% s* B% e( G! G, i0 {' v: A+ C创建实例
+ K: a) z4 [1 s创建公有网络15
3 r+ c. m7 n9 O9 k1 u7 N/ c! d创建网络
1 f, ~/ p% g) l. admin-openrc
4 f& j4 T9 I$ G# 使用provider创建1个flat类型的网络,名称为provider
1 s6 ~  C. V# S' ~5 k% q% [& \openstack network create \
1 L  W& f; F' p9 T) ^& ?+ l--share --external \
6 @3 C- C2 R& [. e% |1 H--provider-physical-network provider \9 m" ~0 V; {$ [2 ?) t
--provider-network-type flat provider
1 O2 m+ ^/ B0 C( D4 l1 t复制代码) P$ D7 A2 h0 D: x+ n! D
创建子网
' S, f' j) v% R" c9 E. i% a0 U使用创建的provider网络,创建1个192.168.0.200-240范围的子网5 w. u: }' L5 D( L+ j- ^
openstack subnet create \, O" {% x2 }  o- }0 s$ j- _7 c; s
--network provider \! d/ e  v' u; l, n8 N8 w$ f
--allocation-pool start=192.168.0.200,end=192.168.0.240 \+ z0 J' b, k- X  z9 c" h
--dns-nameserver 192.168.0.1 \# H( I) g- N2 H4 v2 f
--gateway 192.168.0.1 \9 Z; J" i/ h2 u/ \, L
--subnet-range 192.168.0.0/24 provider
/ T( e3 y+ {3 o/ N复制代码. h8 ^: ~) K8 y# U2 v
创建私有网络16" U  O/ n, ~: _% J( r; B$ Z
创建网络
4 c; z# Z# t3 }. demo-openrc0 ~+ [1 a" K( [$ o3 n$ ~& U. d
2 s& W2 c  L6 W$ P# y: Z/ w
openstack network create selfservice- O2 e$ Y. C, h3 t2 v& f/ U
复制代码% I3 [  Q3 J) F5 Y+ O3 f
创建子网
$ @+ Y9 H# C& B3 eopenstack subnet create \, ~5 b4 L9 f1 Q' d
--network selfservice \- n) P+ {4 Y. I) g8 v
--dns-nameserver 192.168.0.1 \. ]; j) g' `; B. a/ o9 Q% j' P5 P' @! a
--gateway 192.168.100.1 \
1 |' x- t; f/ K" ~% c) K% \4 u--subnet-range 192.168.100.0/24 selfservice
  a/ _" ]: t- C0 x复制代码
1 _* D; M9 W! |  H创建路由 openstack router create self-router+ k; i5 g" Z. l0 r4 g
将selfservice网络添加到路由中 openstack router add subnet self-router selservice* w! Q! a4 c% }7 C5 r) z/ o: G
在路由中设置公网网关 openstack router set self-router --external-gateway provider
. o$ j9 d, G2 N! X# K检查操作
4 [5 |  ]- O: j7 `. admin-openrc- v& I/ L$ J8 ~
ip netns4 B- v5 x9 B5 t- b
openstack port list --router self-router5 K7 W% t8 Q/ F  C. L
复制代码
" d7 |6 L: f% a创建实例4 ]9 g6 N: W+ C; ~+ e
创建最小规格的主机,内存64M,硬盘1G,名称m1.nano openstack flavor create --id 0 --vcpus 1 --ram 64 --disk 1 m1.nano
: P) f. T! l& D# r添加密钥对 openstack keypair create --public-key ~/.ssh/id_rsa.pub mykey
" J9 ]+ M6 J7 O: ]/ R; w2 m添加安全规则到default安全组中
* V8 f- P- L$ e$ \/ Q) I2 S# allow ping/ G- C* P4 h$ d0 ^2 m: \) Y
openstack security group rule create --proto icmp default
- j0 {) B& U8 s  u; O+ p1 {0 T: R# allow ssh
/ D3 m/ K( t9 d+ l3 k& N: |  ~openstack security group rule create --proto tcp --dst-port 22 default% T2 s( m7 \8 E4 Y, V- S6 @
复制代码
, C- W$ f# t% \" S* r创建主机
7 M8 \9 Z+ }$ d私网主机17" z( O1 y& d' S# W( j& d' h
. demo-openrc1 S  }1 Z! w+ n/ o! v' G, Y
openstack server create --flavor m1.nano \( g+ u3 n# \* {
--image cirros \
9 N8 F( Q& R: I, _--nic net-id=c34add94-6f4d-4312-92f9-ac4ad426bce7 \7 G) G8 r4 b  S
--security-group default \
. s! g/ q+ S( q- _  O/ \+ T6 s--key-name mykey self-host2 O) X1 t( K; a: r
复制代码. N& ?/ C0 n* }$ Y- ^
查看创建的主机 openstack server list
" q+ J1 f# @  a) [9 e0 x4 n2 o虚拟终端访问主机 openstack console url show self-host
0 Y. ?9 `1 m2 w4 r+ A! z3 o远程访问主机
) `2 D/ z9 v7 x% q  q$ l# create float ip6 \3 l9 }0 p1 c5 l+ ?0 ~
openstack floating ip create provider* O6 U/ X. R, m% s6 w$ g
# associate floating ip with self-host. K& |* z+ o" A. p" u; N2 o. n
openstack server add floating ip self-host 192.168.0.234$ @: N& p% m1 a0 V8 ?0 h5 ^
# show server list
# b: y3 b* w# h# i4 o' @+ D2 Zopenstack server list
0 U: \4 j: Z$ r: l  _

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-10-8 08:05:22 | 显示全部楼层
目地:& w9 {5 K' Y3 Q: H
• 最小化安装openstack stein最新版本
$ Q# Z3 _: |& G0 s3 d- |! y• 安装完成后各组件正常运行2 k. {) g; z- y- |$ F" J
• 测试成功建立实列并运行
# n  R( x# B- W! ?• 通过运行实列测试基本的网络功能
* W7 U1 v2 E& ^$ ]步骤:/ o  c# d. y, g( z8 L
1. 安装前的环境准备- ^* |8 F9 P' ?( d# }3 T- C( }2 T
2. 安装keystone' ?9 G( s  ^. x- B& H9 @" z- ~% v
3. 安装glance镜像服务
, y. }+ u" W# H4 a4. 安装placement
" o8 b9 M" w& N' h2 |6 M5. 安装Nova on controller
9 K7 @) y( A+ F$ a8 L5 L  l6. 安装Nova on compute node2 i7 ~4 J3 v3 U1 V, b9 \
7. 安装Neutron on controller node
- u0 p) e) Z' l0 [* ?7 \0 N/ Y8. 安装Neutron on compute node
7 `( a6 c9 O: g( t  `+ b9. 安装dashboard6 [7 _: v8 O8 j# t8 |( P
10. 验证测试
$ v8 E# x. B7 |4 i2 y/ v安装前的环境准备
' l% i5 h* q- ]  {- W& ]7 N安装的准备工作很重要,因为openstack服务非常多,服务之间的依赖关系紧密,合理的规划不会导至安装出现问题,否则会出现各种的问题。
/ p) I  r+ V1 h3 c/ g; n4 l+ o
: V5 [5 Y$ |% E1 N. I/ l准备环境
" D9 @+ @8 m: z8 s% C所有的服务器时间必须一致,我们设置时间服务同步,这里可以是外部的源,也可以是自已的时间源服务器,我用一台chrony服务器做为时间服务器, 同进也兼做dns解析和yum源. T& l2 p& d6 t; b
#yum install chrony
% G+ a3 Q0 c4 k1 R6 v" y#systemctl start chronyd
5 t# m4 c+ Y* V( M/ M#cat /etc/chrony.conf 5 ]  O* F/ d- K
server 192.168.205.7 iburst
0 B' R4 c' M/ d#systemctl status chronyd3 c8 P. p/ L7 c; H2 V8 d6 T2 [
#chronyc sources -v  #检查chrony时间是否同步,看到^*为同步,否则没有同步7 R0 N& s3 U% y. }1 E% W
修改hosts文件,并将hosts文件复制到三台服务器,如果用了dns,这步不是必须,但不要配主机名。
' D3 k" m3 k' ]0 M. V#cat /etc/hosts
9 N; l8 [  I* i3 W  H192.168.205.167 controller1
; R7 f) B* f8 y' @- d0 l192.168.205.147 master& p- W& o- G5 F0 ^8 N
192.168.205.187 node1! m- e8 R- `/ E! J' I7 L; H  j
使用DNS域名解析的规划0 K1 F) e$ S9 P, L, E  W' R
域名:flex.net$ Q1 |  S5 o6 L
name server 192.168.205.7
( s0 f. [1 O4 m' aA stack.flex.net 192.168.205.167   controller1
; N: e' A7 h0 }* P& P3 k( e: MA dbs.flex.net  192.168.205.147     database, memcached, rabbitMQ
& I, Q* s# O0 q- E# Q9 |3 v0 B同进DNS也做为转发服务器为yum提像安装软件
! o- H4 b1 Z. x9 `' |编辑网卡每台有三个网卡, 分为管理网络,租户网络和外网,管理网络的dns指向192.168.205.7( ]) D# f2 P! C/ C0 |) ~
eth0为管理和API的网络$ K' J1 V& o8 J6 C
#cat ifcfg-eth0
2 r8 p$ X7 H9 ~1 fNAME="eth0"4 h! O6 p7 X" n% ^1 f- r
DEVICE="eth0"9 O( L8 j; o3 G% `1 l
ONBOOT=yes) ~. T' t1 c+ {" m2 ]( h6 \4 L! B4 h/ Z
BOOTPROTO=static
/ O' V6 ]: C. _5 [IPADDR=192.168.205.x2 a' j1 q2 N/ f7 k
NETMASK=255.255.255.0, S- y/ a1 _( n2 p/ g4 l& l2 m
TYPE=Ethernet( k" o2 d# d9 M
eth1为租户tenant网络使用,不配IP,设置成none, U9 U. S/ Z8 q% k, O2 ?: c# F. O6 {
#cat ifcfg-eth11 u+ o7 I1 k" `) N7 K+ J  I
NAME="eth1"
" @7 m4 t; A0 N" J/ VDEVICE="eth1"
8 P, N& L+ A4 PONBOOT=yes
+ l6 h! e8 c3 _4 j- KBOOTPROTO=none
6 }9 U: f* K/ p. L3 z  Heth2为外网安装yum源使用,使用nat方式,同时将dns设置为内网的dns: 192.168.205.7& y  C1 Q0 F% z( w# a7 P
#cat ifcfg-eth2
0 @* w  w* o( PNAME="eth2"( D: ]& _2 K) w6 ]* I
DEVICE="eth2", F7 v& S* b2 z
ONBOOT=yes( ~. S6 V2 V( h6 T
BOOTPROTO=static
1 x3 H9 O) v( j1 E% H8 }) k* C- _" wIPADDR=172.18.18.x- ~* S" |& q6 p0 X: M, Q; j
NETMASK=255.255.255.0
! G8 B& [0 T) Y# g; m/ I! y- c. lGATEWAY=172.18.18.2
& {7 ~2 Z* @- d% GDNS1=192.168.205.7
% b9 x; e# u2 y( Z0 h7 m注:不要修改HWADDR和UUID
) S7 s0 P5 y. v; s+ d安装源,首先启用extras packges,我使用原cenos安装时自带的源, 也可以启用aliyun或tinghua的extras源
8 ]4 t! Y! O' x- O4 Z$ M, K  t$ q: v6 }9 m7 Z
#ls* x# t0 B& x7 M$ e% B7 k8 E
backup   CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo( I7 }( B* R+ {+ [' y. T
backup1  CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo
2 b* j0 ?! D! Q! \! c- s#yum list Centos-release-OpenStack*
1 R) [( u. P( H- ^: i: D* Z. q/ f. j; Y1 s. l& R# j$ @
Available Packages
, y3 J4 p+ I' |centos-release-openstack-stein.noarch                     1-1.el7.centos                     extras0 b0 |; D  u' T' k( l5 t
centos-release-openstack-ocata.noarch                     1-2.el7                            extras
" @2 E+ U0 P! S6 {) rcentos-release-openstack-pike.x86_64                      1-1.el7                            extras
' ?* H) v' b$ U! Q: a5 f4 dcentos-release-openstack-queens.noarch                    1-2.el7.centos                     extras ) f1 j' ~; G5 k# }1 k$ J

# f& b2 [; u1 c0 I/ D3 f2 _注:安装时我们要禁用epel源, W7 @; s# F# H9 S- g
我们通过yum 方式去直接下载安装最新的stein源' c6 Z  o. q! I' m9 }$ l
#yum install centos-release-openstack-stein8 G$ O7 n$ }5 ^& k
安装完成后我们看到目录中多了一些源
% x/ K# r1 l8 F6 k/ R; I3 D1 }
) A6 M8 e& B" U  m1 V( r9 g#ls5 ~$ p" a: g9 Q0 t
backup                     CentOS-Debuginfo.repo        CentOS-QEMU-EV.repo
. t7 c+ F& K3 ^" ibackup1                    CentOS-fasttrack.repo        CentOS-Sources.repo, V6 a. F$ R+ ]- ]9 f, e
CentOS-Base.repo           CentOS-Media.repo            CentOS-Storage-common.repo* v. J8 ?* L' @  P: h3 [! T" _6 a
CentOS-Ceph-Nautilus.repo  CentOS-NFS-Ganesha-28.repo   CentOS-Vault.repo
6 R$ u& n$ R$ q9 B/ x/ w9 c& Q8 b" u" [9 d% F+ N* n2 _, f- p4 ^- c5 C
#cat CentOS-OpenStack-stein.repo ' y& r5 [7 s% n8 D
CentOS-OpenStack-stein.repo
2 L5 L3 u3 d% J0 h
% A( n2 Y- @* _( {/ O% V) z更新包在所有的节点
! S2 H3 {5 F5 G$ n5 `/ L# yum upgrade
) s; A/ Z) p7 ~2 m* z6 I& |所有的节点上安装openstack客户端5 `1 u1 w# Z( X+ ^# {; j0 ^* \1 T
# yum install python-openstackclient: u: A8 _1 E$ a4 }2 M
安装数据库
. r5 l: `1 r2 d) b5 `2 C1 m$ ~安装数据库及python组件2 s+ ]% s' h% C' q2 C. Z
# yum install mariadb mariadb-server python2-PyMySQL) `8 y0 L# O8 ~" C% f& k
建立数据库的配置文件并写入下列配置- K: Q! Y7 d& {* X  ~0 J; h! A
#  vi /etc/my.cnf.d/openstack.cnf5 }# |+ {1 V3 Y  x; r" ]3 i
[mysqld]
' C% b( T# ?: E* a+ N, d6 k2 {# }bind-address = 192.168.205.147( v  z6 e9 l5 @- m
default-storage-engine = innodb4 e* K. r0 b/ [- K: o% f
innodb_file_per_table = on3 B6 k% a9 [% }  v3 f4 O
max_connections = 4096+ m0 l* E4 A- C0 L& J
collation-server = utf8_general_ci- {* f: w: A/ ?8 @1 [
character-set-server = utf8& M4 u) t5 A' t
允许系统引导时自动启动服务并启动服务; K$ d5 D: y4 B# l5 E
# systemctl enable mariadb.service; k" A+ W/ O- N* p  E% e
# systemctl start mariadb.service
& [5 Z: b2 e) h: Y* V运行mysql_secure_installation脚本,特别是root的口令,为root配一个合适的口令,为了演示,我们设为root, 密码root123
! q# W8 m- @. z/ J6 {4 W$ T. e' H+ O# mysql_secure_installation5 E3 h+ n4 A. L& w- K
安装消息队列在mysql上
, c' H! `1 C3 @Openstack的服务之间使用消息队列协调操作和状态信息,消息队列通常地运行在controller上, openstack支持几种消息队列如:rabbitMQ, Qpid, ZeroMQ. 大多的发行版都支持这些特定的消息队列,本实验我们用RabbitMQ因为大多发行版都支持它,本列中,我们的消息队列运行在dababase中
  u& l; W* j* U6 ^/ y
7 ^# F% e/ E6 X" I安装包- p3 |) {4 `& Q6 S
# yum install rabbitmq-server
# I, [: o. _. W* u6 A# |4 p7 d9 }2 I- i允许系统引导时自动启动服务并启动服务
) c6 A( L1 s& n5 ~& K( a# systemctl enable rabbitmq-server.service  e  c* y" G* Z6 V  w6 _
# systemctl start rabbitmq-server.service
# G. n- P& ^( C$ Q/ p7 W8 l3 s添加一个openstack用户
4 J; `4 A! y& d' N3 F, A" @) O) e# rabbitmqctl add_user openstack openstack123
$ P4 {5 G( x: h' Y4 U. H- x  T充许openstack用户具有write, and read访问权限
' q1 |0 z8 m4 S  H- A# rabbitmqctl set_permissions openstack ".*" ".*" ".*"
8 [7 U3 d  R- G! N# V7 D注:在vhost "/" ...中给用户 "openstack" 授权
+ I1 v7 |8 f2 K3 h3 J/ M) {安装和配置Memcached
2 p2 m# @% |, o; M$ b身份识别服务验证机制使用Memcached缓存令牌,Memcached通常运行在controller上,对于生产部署,我们建议启用防火墙、身份验证和加密的组合来保护它。2 J+ ?! l  t+ X( z

% d; ?" X5 ]( y. Z安装包, b' Q/ t0 R$ B9 l/ P
# yum install memcached python-memcached( }* L1 I9 t1 S! \# s; H
编辑文件/etc/sysconfig/memcached并修改配置文件服务使用管理IP,充许其它节点通过管理IP访问到Memcached
/ P4 N( ]9 M/ I1 v4 ~6 k; V8 s' w#vi /etc/sysconfi/memcached+ X3 i6 C3 n% s4 _! d
OPTIONS="-l 127.0.0.1,::1,master" #如果你装在数据库服务器上,那么就改数据库服务器的名字, 因为hosts中已经做解析
0 K8 _, Q3 S5 O! z& i# Z允许系统引导时自动启动服务并启动服务
# M: E- ~5 G& n, l2 I3 P3 l: u1 T# systemctl enable memcached.service
& [+ o0 W3 U2 q, t4 g! f/ M( s3 ?% V# systemctl start memcached.service* U% g9 k. T' f1 E% p

0 x: [9 y3 ?/ _" q3 o& x* b  E, g3 E& W; D5 _- o# r
 Openstack身份验证服务提供一个单点集成的管理认证,授权和服务目录,当用户交互时身份验证服务通常的是第一个服务, 一旦通过认证,同样,其它openstack服务利用身份验证服务确保用户是谁并发现部署中其它服务的位置,身份识别服务同样也可以使用外部的用户管理系统(如LDAP).
$ f* F- ]3 s( @, r3 h* ~5 y, A: R, W  使用服务目录,身份认证服务管理的用户和服务可以定位其它的服务,顾名思义,服务目录是OpenStack部署中可用服务的集合。每个服务可以有一个或多个端点,每个端点可以是三种类型之一: admin、internal或public。在生产环境中,由于安全原因,不同的端点类型可能位于暴露给不同类型用户的不同网络上。例如,public API网络可以从Internet上看到,这样客户就可以管理他们的云。Admin API网络可能仅限于管理云基础设施的组织中的操作人员。Internal API网络可能仅限于包含OpenStack服务的主机。
) m7 X' g3 F( }5 x, ?' t6 h; o  同时为了实现可扩展性openstack同样支持多区域,为简单起见,本列中对所有端点类型和默认的RegionOne区域使用管理网络。在标识服务中创建的区域、服务和端点组成了部署的服务目录。部署中的每个OpenStack服务都需要一个服务入口和一个相应的的端点存储在标识服务中。这都可以在安装和配置身份认证服务之后完成。
5 |4 p+ N7 q# t9 C# ~* T1 H# M  身份认证服务包含下列组件:
! C# I- B$ D, ^+ V6 E5 I
/ Q# C( J$ o. ?& v8 K3 b4 F0 j5 MServer
# Y0 p8 D. I$ B+ q一个集中的使用RESTful 接口提供认证和授权服务.' d+ y6 d- O, V' L) j9 z
Drivers
! r) `, V% P) ^3 W3 Q6 P驱动程序或服务后端集成到集中的服务器。它们用于访问OpenStack外部存储库中的标识信息,并且可能已经存在于部署OpenStack的基础设施中(例如,SQL数据库或LDAP服务器).6 L: z; n1 @$ o$ d4 A0 I  o
Modules
' H# t) z$ v6 ]- v; n8 ]8 L中间件模块运行在使用标识服务的OpenStack组件的地址空间中。这些模块拦截服务请求,提取用户凭证,并将其发送到中央服务器进行授权。中间件模块和OpenStack组件之间的集成使用Python Web服务器网关接口。% J8 {2 s1 R6 t7 z
准备工作
5 ~' p4 v2 y* u! y' }* I连接到数据库,可以在本机也可以使用mysql客户端连接
( t# W1 d8 }4 @3 j$ mysql -u root -proot123( l# D, p2 q9 f# I
建立keystone数据库
& i" W7 r9 ]) {, I0 ~$ W" p% JMariaDB [(none)]> CREATE DATABASE keystone;
# X" ]  ~: q/ v9 |4 o5 [  d2 k授予相应的权限给keystone数据库,密码统一为用户名后加123/ D: {  T3 `7 b1 J; Y1 A5 g
MariaDB [(none)]> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone123';
! x2 c; |$ _' Z- s% d安装和配置组件) Q# C$ \1 z' X* L1 c
安装包
& g2 \9 P$ b: B- }# yum install openstack-keystone httpd mod_wsgi' E9 ~% ^' ~; m- K9 n; r7 N: k
编辑文件/etc/keystone/keystone.conf并加入如下配置
2 ?- |3 k1 z0 b# w" v/ d# Y4 _6 K5 E# vi /etc/keystone/keystone.conf
, f$ ~( i* T3 R8 n* g7 F; d9 [4 @[database]
' |! s2 O; h) P4 M7 v8 b# ...
3 T# ^! G& m7 M2 Q/ q* v6 Rconnection = mysql+pymysql://keystone:keystone123@dbs.flex.net/keystone
! I) A* i  {9 r' U7 w# m2 OIn the [token] section, configure the Fernet token provider:
5 ]3 a! J! l, B$ T0 v( m1 d[token]) `7 ?0 b6 b, T  y( x" s7 O5 a
# ...) Z& y' q# N* v  a. d# b. x
provider = fernet
. N" [) q& U. c/ F7 m; Z( F构建数据库
; s' _3 o% D8 A# su -s /bin/sh -c "keystone-manage db_sync" keystone6 F/ W$ G" ^/ {+ x8 y9 J7 J
初始化Fernet键库
" [- i  t8 e# W2 e# keystone-manage fernet_setup --keystone-user keystone --keystone-group keystone
! O+ a8 L% ]( \, M8 W2 \. a( _# keystone-manage credential_setup --keystone-user keystone --keystone-group keystone7 y4 r: d# P' f2 @* \, }- ?
引导标识服务3 A: D% @* ?/ I
# keystone-manage bootstrap --bootstrap-password admin123 \
/ F( l) J2 @% I$ T3 O% R0 m3 \  --bootstrap-admin-url http://stack.flex.net:5000/v3/ \9 t0 H" `! H! }
  --bootstrap-internal-url http://stack.flex.net:5000/v3/ \
0 f: Q& i" o4 H  --bootstrap-public-url http://stack.flex.net:5000/v3/ \- r$ _3 a+ Y) [0 [3 H. y* T
  --bootstrap-region-id RegionOne
+ b, s& X4 e% C5 X! J' {) p3 ~如果这步出错,如你写错了域名或端口等,会无法创建下面的domain, projects, users and roles, 重新配置是不能解决的,它不会覆盖前面的配置,解决办法是如下:2 H: a* D$ [( L
    ○ 在mysql中删除endpoint配置,重新配置:
& T$ s; V3 n. F7 k' n: R+ _% w    MariaDB [keystone]> select * from endpoint;4 [0 l% z) g- q& N  w
    +-------------+--------------------+-----------+----------+--------------------------------+-------+---------+-----------+! m, h) B1 f8 d( s
    | id          | legacy_endpoint_id | interface |service_id| url                            | extra | enabled | region_id |
+ M' R6 x% g: p8 p. b# x) [    +-------------+--------------------+-----------+----------+--------------------------------+-------+---------+-----------+: z3 w$ D: F3 t7 f; F6 o+ H
    | 0b6dd3a784… | NULL               | internal  | ad298…   | http://192.168.137.5:35357/v3/ | {}    |       1 | RegionOne |
! Q6 H" [. ^" k& w7 t+ k, E    | 4f7fdb8fc6… | NULL               | public    | ad298…   | http://192.168.137.5:5000/v3/  | {}    |       1 | RegionOne |9 m/ A6 d) Q3 K
    | 8451f154c7… | NULL               | admin     | ad298…   | http://192.168.137.5:35357/v3/ | {}    |       1 | RegionOne |
' m! C7 \6 {& ?( u9 z; j5 k2 C    +-------------+--------------------+-----------+----------+--------------------------------+-------+---------+-----------+
$ N  J* Q3 _: d5 t/ ^; Z6 C6 u    3 rows in set (0.15 sec)) ]3 h' T* y5 t3 k9 J
    MariaDB [keystone]> delete from endpoint where url like '%137.5%';    #配错的url或主机
) b1 R% e& |* ^5 S    Query OK, 3 rows affected (0.02 sec)
+ _3 u- l5 O3 x. Q% e    MariaDB [keystone]> commit;
  D5 a& i8 n# P    ○ 处理完成后,重新配置上面的步骤4 f$ {( ~+ \, _
配置Apache Server0 I/ U, [$ ?% f! z$ Z  J
修改文件/etc/httpd/conf/httpd.conf配置server name为控制节点服务器的名称8 i$ l" N( n% t9 H9 R
ServerName controller1
+ y' S, k! f. B" w6 `  J" U在/etc/httpd/conf.d下建立一个软链接文件指向/usr/share/keystone/wsgi-keystone.conf
- k. l8 K5 s( `- e" \0 |8 H# ln -s /usr/share/keystone/wsgi-keystone.conf /etc/httpd/conf.d/
" r3 x, D! C: s' C, }! |) }$ e完成安装4 s3 b) V+ I7 D- W! s' y
允许系统引导时自动启动服务并启动apache服务* }3 f7 a8 G, G; V
# systemctl enable httpd.service
2 U+ J2 k' T7 F9 {# systemctl start httpd.service
) `. m1 r/ k' A9 v- S配置管理帐号admin,可以将这个文件写成一个脚本的方式,并source脚本
. H; b4 l  E9 L4 e0 A. }
9 z0 |+ l4 F) ]6 A6 M) _# cat admin-openrc
/ x( t7 A4 y8 {, Jexport OS_USERNAME=admin
, @* _' f# x7 M& Z  d( v9 v# Texport OS_PASSWORD=admin123
! D: A! M, K% Sexport OS_PROJECT_NAME=admin
9 M* A; e" \2 b' k( y7 U& ]6 J: wexport OS_USER_DOMAIN_NAME=Default4 e& K2 _9 ]5 Y- f5 Y) o$ }6 `
export OS_PROJECT_DOMAIN_NAME=Default* ~+ F( U9 z1 i% Z* s
export OS_AUTH_URL=http://stack.flex.net:5000/v3
7 L7 ]/ \$ N' |9 i  Wexport OS_IDENTITY_API_VERSION=3, u# g+ t9 e" j: o

0 _2 P: X4 Z* P$ k# k# source admin-openrc: `: g1 y8 P" S% ?; `
建立域,项目,用户和角色
7 F% t2 o/ s  i+ r; L身份验证服务为每个OpenStack服务提供用户的授权服务, 身份验证服务使用域、项目、用户和角色的组合," x% ~0 y  E6 U$ u, @% h( U
0 y+ t+ y" I! s
同时这个“default” 域已经存在,在keystone-manage bootstrap步骤中已经创建, 我们建立一个新的域名子为example
  K8 c" X/ e6 e3 Y9 \" e' }( N#openstack domain create --description "An Example Domain" example, j8 P8 J8 Z! Q  Z
+-------------+----------------------------------+
: u- ]$ V) ]4 B; j- F" w3 J| Field       | Value                            |
9 i$ D) N7 p/ M8 R+-------------+----------------------------------+6 I3 R. N( v3 k& u
| description | An Example Domain                |/ F% ^, N$ A7 c0 b. i
| enabled     | True                             |' k1 j2 _' j" F: z4 d
| id          | f2a3ddcdc32c411ba5d9e480c25ce8b9 |, f9 L5 o/ k) x) o' U
| name        | example                          |
' X2 T' ]/ C: Z) _| tags        | []                               |
7 w! b" ^' H" e# F+-------------+----------------------------------+
- [* h% e7 K- [" ]3 X) w7 J6 b如果配置错误或名字写错了,怎么改呢方法如下:4 \+ q( m/ }$ A4 b# ?  c
    ○ 先要禁用写错的域名% y. @* E' e; F& @$ [) p4 i# F
    #openstack domain set --disable exampl6 _) c$ I4 P" p" @1 v
    ○ 然后删除错误的域名/ z( n1 a8 A+ E- P, P
    #openstack domain delete exampl 9 O- O4 o+ y$ [- u5 @9 Z& R
建立一个项目,该项目为每个服务都创建包含一个唯一的用户! E3 t6 A/ A4 Q1 O9 y) k
# openstack project create --domain default --description "Service Project" service
7 t. |+ e9 I5 N+-------------+----------------------------------+
" f6 U" h' K! S; p7 d! A1 M| Field       | Value                            |
/ \1 }; t; \7 e$ Q" y$ N2 U  H: k6 d+-------------+----------------------------------+
$ T) M, ?6 t, w| description | Service Project                  |
% |+ h8 L( J* g! y| domain_id   | default                          |. G. |% x5 }! ^: z
| enabled     | True                             |5 h$ Y. p0 m/ i+ ]4 b2 m7 H4 d
| id          | 3e33e6c8e1d14b7b9bbf64edcafb1023 |
2 @- k1 g- E; b" G# `# f) J7 M| is_domain   | False                            |. A1 X% A: m3 A" u0 {
| name        | service                          |3 h+ ?3 T* C3 U) H8 ]& e
| parent_id   | default                          |
3 K/ l8 Q6 \5 y0 [# s| tags        | []                               |
& \1 |9 ^) U  n2 z* J% \+ n+-------------+----------------------------------+
9 r3 e. F% A+ \. i( X* n. I常规(非管理员)的任务应该使用非特权的项目和用户,这个列子中,我们建立一个myproject项目和myuser用户
! |1 X' I) h5 g( R
* W9 c1 i+ R5 [- _    ○ 建立项目名为myproject5 ]8 |$ y/ c0 M7 E: J/ P
    #openstack project create --domain default --description "Demo Project" myproject( ^/ S" w! L  |+ `% ^! d* p
    +-------------+----------------------------------+
& |/ F2 b: _' j+ l! R: @    | Field       | Value                            |) P, Z! m6 |% S8 L# x$ }
    +-------------+----------------------------------+% x2 x4 p- i0 O9 J" H/ u
    | description | Demo Project                     |- ~  F# ?0 s+ B
    | domain_id   | default                          |
) R5 v( h( w  `6 G  N* r    | enabled     | True                             |7 H3 J/ ^0 U/ Q6 ]+ b# g* U7 L% t
    | id          | c9fc9f23c899402aa10eaabf0c71fff5 |4 t2 D; _; t3 q  A& b
    | is_domain   | False                            |/ x1 B5 Q' W1 l
    | name        | myproject                        |
0 r, G5 i% o; G. G% m% ]    | parent_id   | default                          |
4 c; f% W. [( o1 b    | tags        | []                               |
+ ^4 t0 S9 V8 n    +-------------+----------------------------------+
5 ]8 D0 l* f+ `7 e1 |- q    注意:不要重复此步骤在建立这项目的用户时
! G6 ?. U/ u# m3 H( ?    ○ 建立myuser用户3 e+ Z) c  @  s. `0 l( |4 _8 u  K! }
    #openstack user create --domain default --password-prompt myuser* p7 u# p2 k3 @0 f* `6 F7 N% y1 e" W
    User Password:myuser1231 ?7 f$ b  }$ ~- y8 L
    Repeat User Password:myuser123
- L3 ?7 g6 a, l- k% W    +---------------------+----------------------------------+' k8 ~8 k5 {8 U, P7 H' b, V
    | Field               | Value                            |
0 `8 R0 H( [6 f- c( c) C    +---------------------+----------------------------------+
7 k* `& }& D/ c2 u5 e' a5 \    | domain_id           | default                          |) z/ j0 n) H( K9 c% l
    | enabled             | True                             |" r8 c; W* t) S; }7 s( O. q
    | id                  | 81949d6833a04e61b79fe3a8a49cd5a5 |& N: I2 B! D* a; E# z, F6 Z& H
    | name                | myuser                           |
, U- _6 V" i' o4 ?* }- o    | options             | {}                               |
: d, E7 m% ]. @, J7 t) b! T! `    | password_expires_at | None                             |# i" t. [" ^$ @, x, R! j$ r! b
    +---------------------+----------------------------------+- U3 a8 W( W3 ]* j. @
    ○ 建立一个myrole角色
; s2 o( K3 G+ h8 Y$ ~: o    #openstack role create myrole2 b5 t) [  T$ _( E
    +-------------+----------------------------------+
! X3 y) I' K  D) B) T) m1 X    | Field       | Value                            |9 _" j- b/ P" Z% V; }5 b; A1 W; v
    +-------------+----------------------------------+
& `2 Y+ |- d6 }7 H    | description | None                             |
! L% A& x2 J# v) b' v: @; W    | domain_id   | None                             |/ p* T: G( w2 u" P
    | id          | b49d96c43eaa43cfa9519614f0b84942 |" b2 X) k% d3 y; W0 c
    | name        | myrole                           |: B6 `6 x0 M4 D/ c- Y
    +-------------+----------------------------------++ _0 e& d' k% d' G  g& _/ b: X
    ○ 添加myrole角色到myproject项目和myuser用户# r  `* v4 W8 D3 k" B3 m
    # openstack role add --project myproject --user myuser myrole
' a3 n3 h7 e1 ~1 x5 @+ S, n1 u. Q! `/ o
注意:你可以重复上面的步骤建立更多的项目和用户。
. |9 M8 e! p8 c$ K2 m& |# r( S校验操作
* z  w% D$ `$ k/ Y# Q& k9 q- S; }在安装其它服务之前校验身份验证服务是否正常安装,执行下列命令在controller节点上。
, W1 H% A- e* I& R$ g) B3 ]
. e( e2 g3 ?, p' w. }临时取消OS_AUTH_URL和OS_PASSWORD环境变量:7 o1 U" g! }' J5 o, T5 S
$ unset OS_AUTH_URL OS_PASSWORD
1 c* Q2 ^$ M: E4 {; P. k5 {* `使用admin用户请求验证的token:
- k; ~) d; ?0 f5 X; P) l5 W9 \* e2 K. ]# openstack --os-auth-url http://stack.flex.net:5000/v3 \8 G2 I. a) B$ k- I5 w5 v
--os-project-domain-name Default --os-user-domain-name Default \
2 w4 E2 l. X5 z: M9 u& ^5 X9 l3 O7 z" a--os-project-name admin --os-username admin token issue
$ _, E5 O: L9 L4 X" k9 J; k% UPassword: admin123
) H! c2 f1 u/ b. N3 s' _9 |+------------+--------------------------------------------------------------+
6 c( i( J! y+ ~; P( ?| Field      | Value                                                        |       +------------+--------------------------------------------------------------+
2 ^% A8 H9 k- u; w| expires    | 2019-08-22T05:32:10+0000                                     |   6 U$ p. Y1 G' J" W& w' P& h
| id         | gAAAAABdXhrKNMqos25-DjAmaD5yu1dy_-PPtmch7YOgObHg25d2V0pEO… …|9 P& L) L9 h# R6 m
| project_id | 67139b2bd6c64e1c88136955dbef56a0                             |                         | user_id    | 681e9f941cb249e4a5058414057c7866                             |    +------------+--------------------------------------------------------------+. V0 w- O* ~5 [: |
使用myuser用户请求验证的token:
" q  d( }+ @2 Q' n+ h# openstack --os-auth-url http://stack.flex.net:5000/v3 \  G# n0 h8 \6 ]* |
--os-project-domain-name Default --os-user-domain-name Default \0 [3 {( j/ T% c! Y2 }
--os-project-name myproject --os-username myuser token issue
8 \8 P; g9 j# X/ q# U) p+ {( G5 R/ GPassword: myuser1235 g& f, A4 V, r1 c1 J2 b/ L
+------------+-------------------------------------------------------------+3 |  [5 ]( ^, O: ^
| Field      | Value                                                       |
: _# g( |5 d9 I+------------+-------------------------------------------------------------+3 k  Z" }  r5 b, `* E; U! q
| expires    | 2019-08-22T05:34:30+0000                                    |2 O$ b' ]. |! ?1 A6 n9 d# N
| id         | gAAAAABdXhtWYuSN8TlpDjFkNFtr_eElchimIc2YUHBWmImjX5ZpZm3……. |
0 Y% `" Z- G9 c: y# ?) }+ F| project_id | c9fc9f23c899402aa10eaabf0c71fff5                            |
/ K+ E. P& _7 j" n  l| user_id    | 81949d6833a04e61b79fe3a8a49cd5a5                            |9 B( m( _! y0 z9 |9 ^
+------------+-------------------------------------------------------------+, k$ r( ~# p5 b+ q2 w6 [6 ~* R
建立openstack客户端环境脚本4 g! N3 B8 i. E' E" D" }
建立脚本
9 b. ^; M; q+ D0 Q) w* Z! V+ A# x$ K: ~
. [5 D0 V* P1 c! m为管理和演示项目以及用户创建客户机环境脚本。本指南的后续部分将引用这些脚本,以便为客户机操作加载适当的凭据。
2 B$ U+ [6 w* p; R. g    1. 建立和编辑文件admin-openrc添加如下内容:
, [% U" e4 j7 P. B    # cat admin-openrc
% [4 O* j/ A* f( K# d4 G    export OS_USERNAME=admin
* m2 Y3 x  {7 N# n0 P, U5 ^6 B    export OS_PASSWORD=admin123- }( v$ n( c9 N/ f
    export OS_PROJECT_NAME=admin  H* ~+ N: ]* \9 v
    export OS_USER_DOMAIN_NAME=Default! N( K) d" E: ]. |
    export OS_PROJECT_DOMAIN_NAME=Default0 F1 _! ~' ]+ M& _7 e1 F
    export OS_AUTH_URL=http://stack.flex.net:5000/v3$ p7 U) Q  Z, V* k  G
    export OS_IDENTITY_API_VERSION=3$ n' N! _& N, E: t! v8 J
    export OS_IMAGE_API_VERSION=2* T. O' C1 L3 z% V5 T" `5 l6 q7 k. L6 t

4 K. h" g& q: V" A3 r    2. 建立和编辑文件demo-openrc添加如下内容:4 I- S2 P7 f% c8 \# C& s
    # cat demo-openrc
5 L9 P( L: M7 W# E' ?# Q+ o: f# x    export OS_PROJECT_DOMAIN_NAME=Default  W9 S6 ?/ q3 u; G' a" B( e
    export OS_USER_DOMAIN_NAME=Default
4 E1 a0 w5 y; N8 K- P    export OS_PROJECT_NAME=myproject
2 ^( a2 b2 y7 G2 w: l8 R    export OS_USERNAME=myuser
# j2 ?5 Q5 p. C- \1 A- M    export OS_PASSWORD=myuser123
% j9 [0 V; }" G    export OS_AUTH_URL=http://stack.flex.net:5000/v3                                                  
: J/ Q  Q2 C8 K! v    export OS_IDENTITY_API_VERSION=3
9 p0 V0 @' ?3 `9 Z    export OS_IMAGE_API_VERSION=21 V1 l/ y; ~, t  Z
使用脚本6 Q  `# j  _. R/ K
要将客户机作为特定的项目和用户运行, 只需在运行它们之前加载相关的客户机环境脚本。例如:
0 v" c" W8 Y1 [- ]1 v/ D* Q4 g    1. 加域admin-openrc文件构建身份验证服务,admin项目和用户凭据的环境变量:
9 p8 s. |& N( q8 E* g: |, y" }/ h    $ . admin-openrc9 e7 U6 e9 Z% [% V$ e! \# ?
    2. 请求授权的token:
; A) _7 |1 k0 X! s7 M    $ openstack token issue
% s9 g# Y3 D% W# ]    +------------+--------------------------------------------------------------------------------+7 k: t) v# g9 W; D
    | Field      | Value                                                                          |
  V6 T2 h, p7 l    +------------+--------------------------------------------------------------------------------+5 u' b% c) o7 E, C
    | expires    | 2019-08-22T05:41:10+0000                                                       |
7 F" \# V& V4 T7 O    | id         | gAAAAABdXhzmr94abDAnVgAtAlHIOqK_1OTs2nckP98hTfWLCSdliXvE13OGERiAlPy2SbATpj-39… |! B9 R8 S9 u1 z. Q' N8 T
    | project_id | 67139b2bd6c64e1c88136955dbef56a0                                               |  N7 N# T7 e) L# U) L% N4 J1 X
    | user_id    | 681e9f941cb249e4a5058414057c7866                                               |4 U- o9 X. U9 Q) {7 L
    +------------+--------------------------------------------------------------------------------+
) x% g8 o8 [6 T! e; O6 r  x6 @
3 h5 F) Z- K& O8 p9 r; ]6 v4 U$ c' J4 Z1 M
镜像服务使用户能够发现、注册和检索虚拟机镜像。它提供了一个REST API,使您能够查询虚拟机镱像元数据并检索实际镱像。您可以将镜像服务提供的虚拟机镜像存储在各种位置,从简单的文件系统到对象存储系统(如OpenStack对象存储)。
6 {/ R0 @: V+ q  OpenStack镜像服务是基础设施即服务(IaaS)的核心。它接受对磁盘或服务器镜像的API请求,以及来自最终用户或OpenStack计算组件的元数据定义。它还支持在各种存储库类型上存储磁盘或服务器镜像,包括OpenStack对象存储。6 f4 k4 P9 D- J. q
  为了支持缓存,OpenStack镜像服务上运行了许多周期性进程。复制服务通过集群确保一致性和可用性。其他周期性过程包括审核员、更新人员和收割者。 . ~5 }; b' n! q. S. R' f
  OpenStack镜像服务包括以下组件:
( v6 `! U! s8 U) B9 ~: E0 B  k) c# ?. |, T4 `1 _, f7 L
glance-api : n  o5 s# k, ?' P( q
接受用于镜像发现、检索和存储的API调用。8 K  `$ l6 _1 |9 c
glance-registry
3 R0 s4 c, P7 v# U0 X" `存储、处理和检索关于镜像的元数据。元数据包括大小和类型等项。/ o: j2 W5 Z1 Z* a5 L
Database + A! q  |1 N- E! y0 h! M( Y
存储镜像元数据,您可以根据自己的喜好选择数据库。大多数部署使用MySQL或SQLite。7 l+ O5 u& G" M
Storage repository for image files
4 I1 b$ t$ `. m& V: s支持各种存储库类型,包括普通文件系统(或安装在gles -api控制器节点上的任何文件系统)、对象存储、RADOS块设备、VMware数据存储和HTTP。注意,有些存储库只支持只读使用。1 ^# P+ q5 @& t( r; y
Metadata definition service
: K0 C! U, V0 ]0 o( K; I2 E一个通用API,提供商、管理员、服务和用户定义自己的元数据。此元数据可用于不同类型的资源,如images、artifacts、volumes、flavor和aggregates。定义包括新属性的键、描述、约束以及可以与之关联的资源类型。' @: m7 {) C. y
安装前准备工作
' M* o4 f- P3 b安装镜像服务之前, 我们必须建立数据库,服务凭据,API端点.& h: U! F6 l, B; V5 T) x2 t( m1 Q

- L" L) k% I& U7 @. y5 @建立数据库完成如下步骤:) e9 ~" c& U0 p7 B% ]7 l  U' Z
○ 连接到数据库,可以在本机也可以使用mysql客户端连接:
1 d$ e& ]) u6 j! y, ^    $ mysql -u root -proot123
; v: k2 z' w  U4 \  |○ 建立glance数据库:8 a) B4 f$ c8 z/ @2 |' S, Z; s
    MariaDB [(none)]> CREATE DATABASE glance;! U$ f1 Q6 Z$ x) W  S
○ 授予相应的权限给glance数据库,密码统一为用户名后加123:& u" Y: L! M1 ?
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance123';
9 W3 V) U+ u9 s9 n0 ]( ?1 M加载admin的访问凭据,执行管理命令:
  q9 u, {1 o9 S& r) Z$ . admin-openrc
3 o0 P1 d9 [! V" o) k建立服务的凭据,完成下列步骤:
# C4 Q! j) W: {5 D0 J; z+ y4 \+ G3 g% q8 K  K, h
○ 建立glance用户:, V" z' U3 l) p8 x# Z
    # openstack user create --domain default --password-prompt glance' S" ^0 b9 u1 ]) k4 o& H+ \
    User Password: glance123
( w2 j0 _, `- I* w/ x4 B6 k    Repeat User Password:glance123
# c" n) g# k6 \    +---------------------+----------------------------------+
7 D+ [2 X/ k! \  x    | Field               | Value                            |/ D" A1 X" y' r% l6 H( Q
    +---------------------+----------------------------------++ c1 f! P9 v% p5 @. f9 f
    | domain_id           | default                          |
1 `/ J3 Y! A4 V. u. C, s& o    | enabled             | True                             |2 u3 G" t% \2 U0 v8 A% j4 I' F  `
    | id                  | 288f544d71f04eefb7389bd8af685b3b |
+ T; A2 _2 e$ ]3 V8 Z, O3 }    | name                | glance                           |) c! Z1 B( t2 X' B, f7 _- X
    | options             | {}                               |
+ S6 |- w: }# C- I7 R9 J" H    | password_expires_at | None                             |5 n, L/ r6 \( Q/ s% `
    +---------------------+----------------------------------+: a0 z& P1 J) N0 o/ [, `) `# M4 r6 T
8 }2 N+ G! j: j! |& \+ x
○ 添加管理员角色给glance用户和service project:! r' G2 m2 q! |( J/ l, F5 `
    # openstack role add --project service --user glance admin
9 ?" o7 _2 \8 M' l+ y( z+ j0 O6 a    注意:此输出无信息
; K) t' w, r  U
: c6 T( y* L0 Z8 C7 Q4 T7 }○ 建立glance服务实体
) ?4 C! ]4 }3 V4 r4 s, O+ S    # openstack service create --name glance --description "OpenStack Image" image, _" W8 X0 q( u# y2 Y! }
    +-------------+----------------------------------+
  j# l6 @# l3 m2 _    | Field       | Value                            |
, A4 F( {' q# d/ `+ e- Y9 z9 |    +-------------+----------------------------------+5 N  `# _# C+ N; x+ @( H# P; @
    | description | OpenStack Image                  |
7 `5 G9 @1 N1 s2 {    | enabled     | True                             |8 x5 b/ e0 f/ a4 m  ~$ b- Q& @' N
    | id          | 4dba7578eae342d88c131e1c90768518 |
. B7 M8 s% c  H* n" o# D    | name        | glance                           |# i- @2 {1 H0 e
    | type        | image                            |
$ K" R- Q3 F% V( A) C9 z' ]    +-------------+----------------------------------+
4 w0 u4 L) _) I. ~1 n. ^) X; ^+ P* k  F- H3 s! V% t1 M$ P
○ 建立镜像服务API端点:
7 k& z  E2 {& c: G    # openstack endpoint create --region RegionOne image public http://stack.flex.net:9292
! R  j; B; ^. C, ?4 e+ i    +--------------+----------------------------------+& g) Z: I4 H$ ^4 Y
    | Field        | Value                            |- N( V) `' }: w5 K  I) E
    +--------------+----------------------------------+
0 P1 ]5 h& h( c! o    | enabled      | True                             |
# B# {" R% j* y' M: m  L    | id           | 340be3625e9b4239a6415d034e98aace |: h1 r* G  s5 R. v$ T
    | interface    | public                           |
% z3 {2 X- q7 s) K% [5 q4 x4 C0 k    | region       | RegionOne                        |
$ X. I7 [+ \. F* B$ w    | region_id    | RegionOne                        |8 h( r/ Q9 @% a
    | service_id   | 8c2c7f1b9b49ea9e63757b5533e6d2 |
* y; a: F# U+ L9 Q& g, `    | service_name | glance                           |2 U# l! I8 K; u
    | service_type | image                            |
3 ]. W0 y1 R& [7 {7 I    | url          | http://controller:9292           |& |1 h4 x' G! @  Z# C! e
    +--------------+----------------------------------+& [! D0 l  A0 U1 F
     # openstack endpoint create --region RegionOne image internal http://stack.flex.net:9292
4 E# O& x2 s) a$ `
/ X" p0 P, Q* V9 k& F& L' I    +--------------+----------------------------------+
, W7 s8 X: f' J( N    | Field        | Value                            |
4 `" j0 i2 [8 w# O    +--------------+----------------------------------+
: v4 Z3 G( e% A6 E1 ]: s% g5 w    | enabled      | True                             |+ ?1 X/ \1 f. I% I$ Z2 G9 k
    | id           | a6e4b153c2ae4c919eccfdbb7dceb5d2 |
1 U- t* u3 T' N& u- m; _! [: C% D    | interface    | internal                         |' W3 s5 v) P* k9 D
    | region       | RegionOne                        |
9 e& W8 e; B6 O) a    | region_id    | RegionOne                        |
, p/ A% v1 w) V" P  n2 r- B5 g: [    | service_id   | 8c2c7f1b9b49ea9e63757b5533e6d2 |
! ]& {) H6 a* ]0 `8 N( d# U    | service_name | glance                           |2 }" S2 z' `: D: n5 K
    | service_type | image                            |. f6 Y% z, W9 q  m" j
    | url          | http://controller:9292           |
( c, I+ q- R$ e% J' E5 M7 B    +--------------+----------------------------------+
% ^' d" d1 b8 U8 g$ ]) @, k3 y
" v7 r! C3 a- |     # openstack endpoint create --region RegionOne image admin http://stack.flex.net:9292! ~# Y8 }( B4 Y
    +--------------+----------------------------------+! s( U7 G* w) e3 \$ e
    | Field        | Value                            |& K2 J2 ~7 W+ n9 r1 l9 d7 ~0 j* `! B
    +--------------+----------------------------------+
5 o& W6 [4 T, |' S1 B9 [( _3 `    | enabled      | True                             |
- `, ]- g# N% ~" V* n    | id           | 0c37ed58103f4300a84ff125a539032d |
1 A6 H- A* t' _/ I' a# \    | interface    | admin                            |6 Z# U* M! @+ y% j7 G' Y. A
    | region       | RegionOne                        |9 s" J! w8 E( X# k* D
    | region_id    | RegionOne                        |
& I+ s! T: n4 e- M0 x4 o    | service_id   | 8c2c7f1b949ea9e63757b5533e6d2 |. F, O# U, ?- j* K+ X+ _: H- l
    | service_name | glance                           |
; q0 M3 _) O' M9 F! k    | service_type | image                            |1 |3 d6 r: }' _8 m' A4 l- g
    | url          | http://controller:9292           |% X# q2 d2 v8 I% C5 c
    +--------------+----------------------------------+$ ^, e9 o: R! d4 B
安装配置组件
4 M# ?5 Y3 N8 g7 ?9 g. D9 ^安装包:
2 W- X9 m" [( N! y# yum install openstack-glance4 a2 Y3 X% t' L% w5 I) x6 @1 `9 \
vi编辑/etc/glance/glance-api.conf并且完成下列修改:0 i! I) S, m3 M% z
2 t3 B4 B' f! B7 s9 U) `
    ○ 在[database]区域, 配置数据库访问:; G$ [& Q7 ^- d2 y
        [database]
; L) {! w' c0 R1 U        # ...
! e5 R. ?% Z, F9 B        connection = mysql+pymysql://glance:glance123@dbs.flex.net/glance
- {! P# a. ~' k$ V% Z    ○ 在[keystone_authtoken]和[paste_deploy]区域, 配置身份认证服务访问:
; i7 Y4 _0 I% |2 r% b7 I        [keystone_authtoken]
8 _* Y# V5 g; C# b: U  }2 V        # ...: @1 O+ P# p2 ~+ y- N
        www_authenticate_uri = http://stack.flex.net:5000
: O1 N$ r3 ?# q  G        auth_url = http://stack.flex.net:5000
, {5 U+ M5 Z8 @% H4 c5 x, b        memcached_servers = dbs.flex.net:11211( y* Z. T* Z- {
        auth_type = password0 g; p" Z3 Q' o  f) T
        project_domain_name = Default
) X8 G4 v3 d( N+ Z) ^        user_domain_name = Default. V: f- {; R9 S: w" W* @
        project_name = service
/ O. P0 s( h: C* C0 b# a6 R        username = glance9 h# k7 k0 L2 {2 D$ v
        password = glance123
: s7 v8 w4 p( }5 I
  o  N& B5 S" ?" {# l9 r. q        [paste_deploy]5 m: C1 {8 N5 y3 f2 d9 \* U
        # ..., _% Y: p. n2 |- l" S. o
        flavor = keystone4 b5 s, ^2 C+ Q& T9 Q9 C1 N, @
        注意: 注释或移除在掉在[keystone_authtoken]区域中的其它的选项.
& I* L5 X2 X: R8 ~$ ]( G; d# L
( ]9 E- q9 y% y4 v2 Y        ○ 在[glance_store]区域, 配置本地文件存储和镜像文件的位置:) y! Z  M9 l7 |
        [glance_store]( W; F' y' ^: z# A2 Z: _8 c+ I
        # ...
$ W4 [# m. o1 A        stores = file,http, n( V; O- E) d
        default_store = file
+ W4 A4 k; s3 d( c        filesystem_store_datadir = /var/lib/glance/images/
! {5 ^& ?2 E, f7 U编辑/etc/glance/glance-registry.conf并且完成下列修改:
  _/ M, p5 R3 u
  H/ U& G1 j% r* |; w5 m○ In the [database] section, configure database access:8 ?9 A! L' z4 X4 y( D' K- m
    [database]2 ^! j/ p0 l+ @: F" |3 [
    # ...0 f3 Q& R) ~) g8 r7 S' \; ^
    connection = mysql+pymysql://glance:glance123@dbs.flex.net/glance
& c) q* u9 r- B
( _( n5 `# x" ^! t$ O4 E9 n$ B○ In the [keystone_authtoken] and [paste_deploy] sections, configure Identity service access:, H, E4 A3 K3 A& F4 {
    [keystone_authtoken], ~& y( }5 a2 H: g: C
    # ...
- E8 E4 l  h" A+ g( z/ T2 q& H/ n# n    www_authenticate_uri = http://stack.flex.net:5000
# e6 H: I, _' l! W: H, c    auth_url = http://stack.flex.net:50001 N# s# a. |5 v6 A1 I7 M0 C- ?
    memcached_servers = dbs.flex.net:11211
- |, a/ @8 }1 w4 b1 |2 i$ T    auth_type = password
/ |/ o/ C5 M* H5 L: |8 ^+ D    project_domain_name = Default# a( ^" }% Y: s( O, _6 J" s
    user_domain_name = Default8 E( e- a6 h) a& _6 I# p$ Q  @
    project_name = service
4 ?& y. F- R# q) k' [- K. K& B    username = glance. z: R0 g0 Z6 C9 f3 A* [6 w; v
    password = glance123; Z8 ?/ s6 T; ~

* W& |" e; ?6 R5 K) O6 J( L4 M; X2 }    [paste_deploy]! Q' A$ M. L. b& e9 C( C- d4 J% j
    # ...3 v/ G7 U; ]7 C( S. l
    flavor = keystone* H) N3 T5 D! ]7 P+ J
# }: D, D( ?2 K9 u1 S5 u3 r9 b
    注意: 注释或移除在掉在[keystone_authtoken]区域中的其它的选项.
( x$ ^2 u% m5 ~$ }构建境像服务数据库:
% @& b& ^: R+ V- k+ o. q( M# su -s /bin/sh -c "glance-manage db_sync" glance- J6 L% @" J4 R$ u! u  H
完成安装
( c: U$ l$ `: Z( t% F5 V允许系统引导时自动启动服务并启动服务:: E4 r# d: q! Q) \1 D

. C0 x3 h* `; w( a, t# systemctl enable openstack-glance-api.service \4 @4 x$ g$ `# u
  openstack-glance-registry.service/ Z( F2 m' R5 K+ ]" V6 b
# systemctl start openstack-glance-api.service \3 J9 a: a/ z1 I  f! c
  openstack-glance-registry.service
6 ], P9 E* z) X- }( o校验操作
0 X5 z, a; u& V使用cirros做为镜像服务校验操作,这是一个很小的linux镜像,帮助我们测试openstack环境,执行下列的命令在controller节点上.
% m" Q6 c' N; z7 t7 u% `& x3 q/ C2 @* W5 A  T4 l* ?
加载admin的访问凭据,执行管理员命令:, w7 e& q$ @* j: c/ x
$ . admin-openrc
% y0 o( E! U, ~& J下载cirros镜像:1 u/ T; l/ V5 @6 w3 ^) i" \3 B
$ wget http://download.cirros-cloud.net ... 4.0-x86_64-disk.img. i) F5 r5 y. O* t2 _" N3 q/ c
上传镜像使用qcow2磁盘格式,bare 格式和公开权限访问:4 @3 e, x9 M" a. E& M8 S
% W& m$ v6 h" Q
$ openstack image create "cirros" \. O" W  e( }/ k* z5 T6 e
  --file cirros-0.4.0-x86_64-disk.img \
* r' X% \3 b+ q4 d) Q  --disk-format qcow2 --container-format bare \
2 m; v9 z& r) d( p) _7 Y  --public0 A. D6 f- @& s9 v' g
' t5 J: {% G7 @' C9 e* e" r
+------------------+------------------------------------------------------+
9 a( a% Z! g7 {! M| Field            | Value                                                |0 K+ O- P( Z  J9 l/ i6 L& O
+------------------+------------------------------------------------------+* B  Y9 R- H/ i0 b
| checksum         | 133eae9fb1c98f45894a4e60d8736619                     |
! c- f4 ]6 i9 s| container_format | bare                                                 |
& s7 g8 F: x7 k- S! f$ B% p| created_at       | 2015-03-26T16:52:10Z                                 |/ i: {% B! b, l- o* j/ {% F
| disk_format      | qcow2                                                |
# G; _. u" _# x" [/ z& \| file             | /v2/images/cc5c6982-4910-471e-b864-1098015901b5/file |6 @! x+ v' w7 Q) o
| id               | cc5c6982-4910-471e-b864-1098015901b5                 |
5 K  F& E. z& ^" q| min_disk         | 0                                                    |' L3 \" d3 o; P9 ~$ b5 B: q
| min_ram          | 0                                                    |
+ M2 }) e- W7 Z9 B' U$ U: D| name             | cirros                                               |& @! @, m. F2 N# o8 T9 [* d
| owner            | ae7a98326b9c455588edd2656d723b9d                     |
- h8 c! x! U& t& R8 v) Z| protected        | False                                                |7 r! O5 R1 y  X% N4 m% m
| schema           | /v2/schemas/image                                    |+ k3 m. c; [1 b; M- N
| size             | 13200896                                             |
$ K* V( ^# T: j  W/ \8 ]| status           | active                                               |
0 H, P9 e$ B: E# G5 D/ ]% p5 t/ }| tags             |                                                      |, I# D6 j/ c) |: p
| updated_at       | 2015-03-26T16:52:10Z                                 |
( k: w3 K, ?5 G/ z, W1 }| virtual_size     | None                                                 |) N* o) q. s5 Z. @; t
| visibility       | public                                               |
+ C0 n, }0 t, q5 _: j5 i+------------------+------------------------------------------------------+
8 b" ?- U6 f" f2 T确认上传的镜像和ID:6 n, m% B1 T! `3 ?. ~

; j6 F2 f; F4 @9 k5 p2 @- l$ openstack image list
) ^1 F; w+ ?+ t) z) }# V; S$ G8 j  s/ \
+--------------------------------------+--------+--------+
; @0 i1 ]+ J7 W| ID                                   | Name   | Status |( D! B7 W( |2 R
+--------------------------------------+--------+--------+! ~" B* m$ S4 }, x
| 38047887-61a7-41ea-9b49-27987d5e8bb9 | cirros | active |3 A. X( a2 e0 Q% `* T; J% `
+--------------------------------------+--------+--------+

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-10-8 08:05:49 | 显示全部楼层
placement服务提供一个HTTP API,用于跟踪资源提供者清单和使用情况。placement作为数据模型上的web服务进行操作。安装包括创建必要的数据库以及安装和配置web服务。这是一个简单的过程,但是要将placement与OpenStack云的其余部分集成起来,有相当多的步骤。
; L% N  W9 w; j! b  其他一些OpenStack服务(尤其是nova)需要安装placement,因此应该在其他服务之前安装placement,而在Identity (keystone)之后安装placement。
0 t2 I6 y7 m/ O' i9 q- d) J" d0 h! {
安装准备
" U: l3 f# t: A. e安装配置placement服务之前,建库等。* \& L- K7 m7 @3 I: H
6 w) c2 s% P6 c" p3 E
建立数据库6 r' W" M: z4 w- L, _% F

; L# }2 W% n9 B2 E4 T6 L1. 完成下列建库操作:
' q; J: v+ N+ r: {    ○ 使用root用户登录:
4 b7 y* B: I/ G5 @        $ mysql -u root -p root123
: L+ O: o# c9 M) ?! o) r: i    ○ 建立placement database:3 ]: u4 `2 K2 I: L+ c
        MariaDB [(none)]> CREATE DATABASE placement;
0 J+ E; Q" C8 L! z    ○ Grant proper access to the database:# H- H# I$ C6 ~' c' X1 {- {7 M
        MariaDB [(none)]> GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%'  IDENTIFIED BY 'placement123';
- E2 }( O+ ~/ d/ h' n' R2 z( i/ R: c
2. Configure User and Endpoints5 z: Y( P8 k, e* A5 p- B8 g9 _
    1. Source the admin credentials to gain access to admin-only CLI commands:& b' Y- |  a3 \5 O/ X
        $ . admin-openrc
; D4 ]! q( \1 E4 p1 _8 c& C    2. Create a Placement service user using your chosen PLACEMENT_PASS:* \8 V' O7 ]1 B& {& T! L- j4 D
        $ openstack user create --domain default --password-prompt placement
3 J0 c: h$ T% |* t
% m  c( o8 M& ?( X/ I! K        User Password:placement123$ y) u& V1 Q; M+ e) O' |
        Repeat User Password:placement1237 s# p0 `+ y! H: E! w3 \+ e
        +---------------------+----------------------------------+/ A1 C' I  a2 ]2 U" h+ n
        | Field               | Value                            |
0 f  i* A5 X. W$ Z* D        +---------------------+----------------------------------+, j. N2 {3 A, x$ g
        | domain_id           | default                          |
; e7 `3 _+ Y. F% G        | enabled             | True                             |
. n9 v/ ?. M9 j& N" P% |% R        | id                  | fa742015a6494a949f67629884fc7ec8 |7 m% |# t9 T2 c6 g& f; J
        | name                | placement                        |
, F/ b( I8 @: p2 r' }        | options             | {}                               |
3 A. z' x6 `: ~5 Y0 m! X  Z# z; A1 I        | password_expires_at | None                             |1 B+ N& c" n2 R/ S5 A7 q
        +---------------------+----------------------------------+* E6 l- d' {8 \- b
    3. Add the Placement user to the service project with the admin role:
8 U7 _# B  k% t9 H- P        $ openstack role add --project service --user placement admin
+ E9 `+ K, N2 S/ @5 K   a( [0 c* `! J% D7 \* @% f
    4. Create the Placement API entry in the service catalog:
, M5 e, [* N( m  r9 q' c        $ openstack service create --name placement \0 w, c+ Z  C9 d$ _
          --description "Placement API" placement+ ]3 l9 Y' s) W0 e: y! Q1 s
8 S) ]% s5 Q4 f6 i
        +-------------+----------------------------------+
8 P& K( C: f- v( U  `* J4 `& T        | Field       | Value                            |" ?. r% K+ N) k$ W! X
        +-------------+----------------------------------+" N3 I; k9 Z$ x0 ~, U+ M3 m
        | description | Placement API                    |2 f+ Y' @% l( W6 \! W
        | enabled     | True                             |
' L( K) ?$ t3 A1 L( G0 R        | id          | 2d1a27022e6e4185b86adac4444c495f |* [' [2 ~. E9 r! }3 _' X) F' j
        | name        | placement                        |
. U4 y( v* I+ h# h# l        | type        | placement                        |, _- b$ R" e, m+ h. O. U0 P- U
        +-------------+----------------------------------+
5 K) j; P4 Q3 |3 }' t: N    5. Create the Placement API service endpoints:' w8 X) \& o, T# k
        注意:域名为你规划好url, 必须能够解析.
' W% t& x, \8 D* O        $ openstack endpoint create --region RegionOne placement public http://stack.flex.net:8778
; u8 q, w* k4 Q+ ?6 D" y' r        +--------------+----------------------------------+0 v# B' S* Y6 c& l0 L. P  n
        | Field        | Value                            |5 T7 ?% g7 Z9 R2 x7 w
        +--------------+----------------------------------+% E2 p8 m4 E& V# \, `; n% o
        | enabled      | True                             |
6 b- d' a; m3 V! _; w% h        | id           | 2b1b2637908b4137a9c2e0470487cbc0 |
: ]& Q4 D/ j0 S7 q5 ~" s$ D( o        | interface    | public                           |( h# y3 c$ F9 R) @2 u0 M! v$ u( s
        | region       | RegionOne                        |
  u. E6 S1 y. Q" I9 v        | region_id    | RegionOne                        |2 `- Z( m0 n8 x7 w1 o
        | service_id   | 2d1a27022e6e4185b86adac4444c495f |
$ L2 [- |4 X; D4 @9 s0 [        | service_name | placement                        |6 w" @5 n* d+ g, Y3 f& @- @% x# `
        | service_type | placement                        |9 A8 Y6 I7 b4 ?5 s* ~7 H
        | url          | http://controller:8778           |
& a- S/ @4 A! ~7 p( X8 N) L        +--------------+----------------------------------+6 {, U1 b/ I9 f1 \* H, E

5 w8 J  U6 U/ R8 C8 \) B        $ openstack endpoint create --region RegionOne placement internal http://stack.flex.net:8778
. l, L8 ?) Y5 d* S6 i2 |2 U: t        +--------------+----------------------------------+
8 v% [# p7 J7 r2 M* U1 \% m+ A        | Field        | Value                            |( C8 ^  l7 g, ?
        +--------------+----------------------------------+
- q' m* y  O. Z3 T4 a  [        | enabled      | True                             |0 U! N* A. J' K2 e
        | id           | 02bcda9a150a4bd7993ff4879df971ab |
2 K$ N* c& Q' ?: h: x  G; i" ]0 Q        | interface    | internal                         |5 r' a" d' C1 c4 _% e  ?
        | region       | RegionOne                        |
! c9 F( K* L6 R1 L        | region_id    | RegionOne                        |
0 l6 u' @, R5 ^7 u) T+ _/ o        | service_id   | 2d1a27022e6e4185b86adac4444c495f |2 k" W. C- M# F) I) p, x
        | service_name | placement                        |! Z4 b6 ?( b' g$ P3 H, |) ]
        | service_type | placement                        |* C2 U9 y: ~" X. V: ^/ }
        | url          | http://controller:8778           |8 s! ^# Y: _8 @  E0 W+ i2 f
        +--------------+----------------------------------+2 J* J' W0 e0 K" ?+ P# D
3 d) T( W, i; u$ x+ A, O+ i; F
        $ openstack endpoint create --region RegionOne placement admin http://stack.flex.net:8778' M! r$ T" M& {6 o4 s9 u
        +--------------+----------------------------------+5 R9 F; j5 a! I# a( d* n$ D* |  f
        | Field        | Value                            |7 Y& H3 [5 v9 t
        +--------------+----------------------------------+  k# M& U* h! m6 @/ ?
        | enabled      | True                             |
0 x; e3 j9 S0 f( o: \- H- @0 T        | id           | 3d71177b9e0f406f98cbff198d74b182 |; M! s* u3 C( z0 L8 Y4 Y2 x1 r
        | interface    | admin                            |
7 `' j& K6 U  x' ?6 Y2 o2 ]8 h        | region       | RegionOne                        |( {/ }! d) q  L: N( `4 N% D* T
        | region_id    | RegionOne                        |
- m, v  p9 Q( }( P1 p% P        | service_id   | 2d1a27022e6e4185b86adac4444c495f |
; _+ T  j  i/ G( M$ n        | service_name | placement                        |" v5 O( Q# B1 Q  x  g
        | service_type | placement                        |
0 o" {" i0 M; w% ]% P        | url          | http://controller:8778           |9 ~1 A& b8 q& X! d! _# S( b  E
        +--------------+----------------------------------+( [! T* a: ?. y# T. r  F
安装配置组件3 S6 V1 P3 Y0 n$ i
Install the packages:7 i4 W' j5 Z. _- t
# yum install openstack-placement-api6 C2 s/ m0 Y5 w6 M
Edit the /etc/placement/placement.conf file and complete the following actions:) l& N# L5 Q0 u; q: W  c

1 t/ f: ^+ o6 Q0 w! p3 e, ?+ Z, x" n○ In the [placement_database] section, configure database access:4 i% q2 Q4 T7 ]! P* d( ^0 ]
    [placement_database]
9 o' q* k& B3 F" q    # ...  |# y* N: C0 w; z6 I
    connection = mysql+pymysql://placement:placement123@dbs.flex.net/placement
( c7 d& J2 `# T8 H  Y: j- y○ In the [api] and [keystone_authtoken] sections, configure Identity service access:
$ y0 e8 T) S8 }; Q5 O' E$ ^& y- B& ~. e    [api]
5 `! R6 U, u- |- f    # ...5 @" j7 ~9 [! |9 i) g5 j
    auth_strategy = keystone% d. X- Y6 t& z- _7 T
( w! D5 S5 `: N' o% b
    [keystone_authtoken]
+ s% @& x0 B0 w7 F1 j    # ...
$ o' {) b3 w8 X. r. P4 v4 h    auth_url = http://stack.flex.net:5000/v39 |, T& j1 c4 u: ~( o8 y" \7 Y
    memcached_servers = dbs.flex.net:11211
5 q! x  b; m9 i0 K    auth_type = password
3 v9 P; W; _* F9 ]! l3 m    project_domain_name = default0 O' ~6 _- `& i
    user_domain_name = default
% @( G* R4 `/ D6 ]$ Z, o! t- R8 |    project_name = service  T( u1 j4 X( O2 y( K& g  c
    username = placement
5 D" `( _0 F- }& Z, o    password = placement123
1 o! d. @$ k4 I
1 @4 t5 k+ P9 u    注意: 注释或移除在掉在[keystone_authtoken]区域中的其它的选项
4 v3 U/ T+ [8 B7 S) YPopulate the placement database:
2 J7 o; A/ m% n6 Y/ z. L# su -s /bin/sh -c "placement-manage db sync" placement
# t1 I) P$ f2 O完成完装
* V  k! _+ l5 x, o; n( N○ Restart the httpd service:
) k2 y, ?+ o! z- P' @) U- d5 I8 W+ j    # systemctl restart httpd8 C" J# ~4 I( \6 i
校验安装
: J% i# |( f& s你需要admin的权限验证
" v3 z- F7 [- V" H" N% ]8 F
% Q- ^- l: h: ]3 ]* ^加载admin的访问凭据,执行管理员命令:
$ Z: j' O1 ~6 o: ~" O5 f+ u$ . admin-openrc& U, Z. w3 a3 n! R  \
执行状态检查命令:9 }  I/ h) e! w* W2 R3 x9 h
$ placement-status upgrade check
. @  k# u' \) b% ?) t( {, U+----------------------------------+
. {4 G& ]( y0 v1 w| Upgrade Check Results            |
2 F4 c8 S) R( N3 w& j* Y- O+----------------------------------+
) r0 ^# d" G- [' F; e* V| Check: Missing Root Provider IDs |& N. |# I5 C8 @' e9 K
| Result: Success                  |
2 p/ O. T  _- `0 {- ]) p| Details: None                    |' F# h) o8 u4 ?$ q6 v& t
+----------------------------------++ d/ k( E  h6 Q' |
| Check: Incomplete Consumers      |
3 D! b) ?" h: Q/ ~, C, T| Result: Success                  |
$ C7 X( S1 G1 R9 e" E7 Y) h5 ]| Details: None                    |
% y, H) t6 n+ V3 t+ i/ u* Q' u+----------------------------------+
4 J: b8 Y: l" g, Q3 |运行对placement API的命令(这个步骤我没有成功,但不影响):
. s' ~' O- {7 B1 {
7 e# X  _/ q, f0 Z3 x○ Install the osc-placement plugin:
) ]% K! O* o* P9 `8 X3 u  X    $ pip install osc-placement7 k0 \1 f+ F& {/ T
○ List available resource classes and traits:0 Q/ Y" E0 E# J! I
    $ openstack --os-placement-api-version 1.2 resource class list --sort-column name
1 ~+ N1 Z+ A6 F3 \/ b& m( l  S    +----------------------------+& g) I0 j: X0 ?* V) j
    | name                       |- v. \, j; x6 J- L# c
    +----------------------------+* {3 D" q8 Y7 Y2 K/ }/ @7 k) r
    | DISK_GB                    |
! N! F1 }- `2 E6 C' V    | IPV4_ADDRESS               |
) ^) a2 v9 i. x& M! m    | ...                        |. b, P/ M6 U+ t" Y
9 T' ?8 O0 |% {1 ~7 h
    $ openstack --os-placement-api-version 1.6 trait list --sort-column name" q, m( N1 w) o1 h9 E; H
    +---------------------------------------+
. k0 @( n0 B1 d( I5 T* U1 a8 z" ?    | name                                  |
1 b# ?' Y! e" o' k    +---------------------------------------+
) k" j7 J% W/ p    | COMPUTE_DEVICE_TAGGING                |
/ e: q3 s9 b% s7 ]6 N    | COMPUTE_NET_ATTACH_INTERFACE          |
8 z5 v5 l! X& y& U; g    | ...                                   |

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-10-8 08:08:13 | 显示全部楼层
用OpenStack计算来托管和管理云计算系统。OpenStack计算是基础设施即服务(IaaS)系统的重要组成部分。主要模块是用Python实现的。
; h  n. h, u# a9 l4 S  OpenStack计算与OpenStack标识进行交互,用于身份验证,用于资源目录跟踪和选择的OpenStack放置,用于磁盘和服务器映像的OpenStack映像服务,以及用于用户和管理界面的OpenStack仪表板。图像访问受到项目和用户的限制;每个项目的配额是有限的(例如,实例的数量)。OpenStack计算可以在标准硬件上水平伸缩,并下载映像来启动实例。
5 s- q0 w  _, }( x7 P5 e# m  OpenStack计算包括以下组件:
! f4 T2 B* F4 _1 M2 t  C( v; L1 q5 w4 @" w9 C) |
nova-api service
; q) |6 |+ L4 W7 w2 k接受并响应最终用户compute API调用。该服务支持OpenStack计算API。它执行一些策略并启动大多数编排活动,例如运行一个实例。
: A5 ^3 h0 V- @; Knova-api-metadata service   L6 E8 D! ~$ J: z0 c
接受来自实例的元数据请求。在使用nova-network安装以多主机模式运行时,通常使用nova-api-metadata服务。
! [  x: k% ]- q& r6 l# inova-compute service
: z, I# K/ f: M- ~4 W一个工作守护进程,它通过管理程序api创建和终止虚拟机实例。例如:2 ?) a: f) h2 W" T6 {
XenAPI for XenServer/XCP. j: Y7 \; w9 x, l3 U1 \% |
libvirt for KVM or QEMU2 y' S! N2 b* R' l% Q- Y8 K
VMwareAPI for VMware ; S8 Y" r5 A7 {$ I0 J0 P: z
处理相当复杂。基本上,守护进程接受队列中的操作并执行一系列系统命令,比如启动一个KVM实例并更新它在数据库中的状态.
- f" c  Z- e% Q; i( b. ]- |& Knova-scheduler service 9 F4 S6 Y- b4 R& L8 i
从队列中获取一个虚拟机实例请求,并确定它运行在哪个计算服务器主机上。
: |$ S& y* p" E! ]2 c% M7 Wnova-conductor module
/ i. ]" i6 [7 R. B6 ?协调nova-compute服务和数据库之间的交互。它消除了nova-compute服务对云数据库的直接访问。nova-conductor模块水平伸缩。但是,不要在运行nova-compute服务的节点上部署它。: D8 m6 X2 f5 H- p7 ^" F/ F
nova-consoleauth daemon 8 i: m+ ^7 t) N& y
为控制台代理提供的用户授权令牌。参见nova-novncproxy和nova-xvpvncproxy。要使控制台代理工作,必须运行此服务。您可以对集群配置中的单个nova-consoleauth服务运行这两种类型的代理。
# s% `' h9 o: l4 Rnova-novncproxy daemon 8 s% A# ]2 O! J9 U
提供一个代理,用于通过VNC连接访问正在运行的实例。支持基于浏览器的novnc客户端。+ T- y, D# `: U) ~1 r: a
nova-spicehtml5proxy daemon
" S+ [5 ]9 d3 K提供一个代理,用于通过SPICE连接访问正在运行的实例。支持基于浏览器的HTML5客户端。
4 z' l% F' c8 a- f- J" rnova-xvpvncproxy daemon
+ r9 n6 q7 `2 N; e# W4 O' B提供一个代理,用于通过VNC连接访问正在运行的实例。支持特定于openstack的Java客户机。& L- ~+ _+ \/ R* t. s
The queue
5 N3 z, X0 W2 ?- c+ @5 {  F用于在守护进程之间传递消息的中心集线器。通常用RabbitMQ实现,也可以用另一个AMQP消息队列实现
3 X  @, \9 n9 }4 r' mSQL database " G( h( q  n5 i+ n- k+ H/ I& m# ^
存储云基础设施的大多数构建时和运行时状态,包括:
2 w6 L' i! l6 z: O& F. _% EAvailable instance types
3 |- p7 j% [0 X+ b, B! _. ~7 \Instances in use
& X2 A/ z/ `4 E. R& Y8 wAvailable networks) m0 `' j: C$ ~* N$ S. s
Projects- c" _" T, Z( s/ v, q9 Q; T* r
理论上,OpenStack计算可以支持SQLAlchemy支持的任何数据库。用于测试和开发工作的公共数据库是SQLite3、MySQL、MariaDB和PostgreSQL。% q4 @' w7 V, Y! E

3 j0 b# |, U' P* c准备工作% `' x  [6 v- @" n7 }
安装之前我们需要先建库,帐号和api endpoint.- D( D- A* S4 i' q8 w. e9 E

. ?, b# R* h& m: d& \; L% L% Q在数据库服务器上执行如下步骤:6 K9 C/ o! t+ K
○ 使用root连接数据库服务器:7 v: F" M. H+ x, o4 F9 i% g0 C
    $ mysql -u root -p root123
0 P! J$ D3 e0 i, k  V7 {5 _○ 建立nova_api、nova和nova_cell0数据库:+ q  Y8 E; X& `
    MariaDB [(none)]> CREATE DATABASE nova_api;
# t! g  s- w; s* P, q: y  g    MariaDB [(none)]> CREATE DATABASE nova;8 L4 `; ~' T- K' r! W8 ?! J; d2 w
    MariaDB [(none)]> CREATE DATABASE nova_cell0;
1 |: l9 V- Y7 Q○ 赋予帐号nova对库的操作权限:/ {+ ~7 r. x% B2 F& l% y; T: ^6 ?
    MariaDB [(none)]>   GRANT ALL PRIVILEGES ON nova_api.* TO 'nova'@'%' IDENTIFIED BY 'nova123';: h  P1 x) T( v" n
    MariaDB [(none)]>   GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'nova123';
8 l* Y$ k" r$ i( o3 L8 F/ t# p    MariaDB [(none)]>   GRANT ALL PRIVILEGES ON nova_cell0.* TO 'nova'@'%' IDENTIFIED BY 'nova123'
% `5 c2 n$ B8 s. W: F- N加载admin的访问凭据,执行管理员命令:& \( g0 l* n/ Q, c/ f
$ . admin-openrc
1 \4 t/ P" a6 m( `  h. G% n建立计算服务的凭据:$ a: J8 V( D1 N

4 Z; Z; y4 A9 F7 y% I% F! w○ 建立nova用户:
+ W. ]5 |- u  a  v+ d    $ openstack user create --domain default --password-prompt nova
. V, {5 m1 u3 N3 r. f: L% w2 L* b' G% V- m
    User Password:nova123% `7 @3 {( s" H; e- t: t
    Repeat User Password:nova123
0 _7 |" f+ o1 M' `4 C6 `3 ?! n    +---------------------+----------------------------------+0 ^; j% v9 p8 @7 w  G, O0 ~. k
    | Field               | Value                            |9 t: x, S+ d' u$ L7 l& s
    +---------------------+----------------------------------+/ g8 P% m* q  l' Z/ o
    | domain_id           | default                          |
* u0 G3 H8 ?, L    | enabled             | True                             |
8 ]7 G" b" ~$ O- X0 ~; U    | id                  | 8a7dbf5279404537b1c7b86c033620fe |  N/ S# @9 `  r7 M( q# @3 V3 I$ y* l
    | name                | nova                             |3 C  y! q1 O; ?4 S' A
    | options             | {}                               |$ d! [; F% A3 G5 |7 _) ~
    | password_expires_at | None                             |/ n, X% M' e- j" u9 Z$ b* p
    +---------------------+----------------------------------+% l% f0 _7 F' ?" A* |
○ 给用户nova添加admin角色:
) b4 J" m5 E3 s5 r9 M/ j    $ openstack role add --project service --user nova admin8 |; O2 H. |! `: {2 ]* I, T

+ w5 K0 ?. l- ^2 [# r! w3 O/ ]    注意:这个命令没有输出
) P; n0 E1 ~7 E* k" x○ 建立nova服务实体:- `1 Y/ v/ ~! H) u- h- }. _
    $ openstack service create --name nova --description "OpenStack Compute" compute
/ L7 ^8 ~+ x' c: h5 U% F* l+ l+ n1 o0 r1 d+ ?; o% A8 u
    +-------------+----------------------------------+
3 ^# |; A6 L+ O# r    | Field       | Value                            |6 g0 p5 B. V# |$ ^% e2 t! }
    +-------------+----------------------------------+
" `) e5 {7 N/ O) ~    | description | OpenStack Compute                |
% n. p! x) x, O    | enabled     | True                             |
# c; ~; C, `; L* g6 E    | id          | 060d59eac51b4594815603d75a00aba2 |
5 J% Y# @1 y+ \" m9 s/ I( q    | name        | nova                             |
) h0 Y/ u$ G' i6 g0 \/ ^- `    | type        | compute                          |$ u! A1 D7 U3 k, p8 g7 P% G
    +-------------+----------------------------------+$ }5 a4 E- Y+ W- Y4 L( t
Create the Compute API service endpoints:& Y0 Q2 h/ O* t

  d; d1 E  A) `. G1 F: g' v' t* T$ openstack endpoint create --region RegionOne compute public http://stack.flex.net:8774/v2.1: j  G1 T- l# C6 i7 R
: Z" ?) K% H; h6 s
+--------------+-------------------------------------------+2 Z) ?% s5 g- Y4 R7 ^2 v
| Field        | Value                                     |
& p8 v/ s% f1 u/ Y5 C( ]+--------------+-------------------------------------------+) G7 w! ^# n6 m
| enabled      | True                                      |0 M* D- Z7 A$ b( A/ z
| id           | 3c1caa473bfe4390a11e7177894bcc7b          |  [* L% k% C5 [& ?* \
| interface    | public                                    |' n4 ]7 c/ O4 q! p! R
| region       | RegionOne                                 |
3 P( `+ G. t! W4 s* X| region_id    | RegionOne                                 |: z3 X1 w$ m  y/ z' a7 @* \" c  t6 f
| service_id   | 060d59eac51b4594815603d75a00aba2          |
: B; {) a5 x+ || service_name | nova                                      |9 [( c2 O3 A8 y7 G
| service_type | compute                                   |
4 }1 a: I+ i; t9 k! s$ ~; m; n$ D2 u| url          | http://stack.flex.net:8774/v2.1               |
$ J+ U4 M8 q& f3 a+--------------+-------------------------------------------+  I: k; `1 P( e! h8 k
' n& O# D# M7 J" c4 D# L0 L- D
$openstack endpoint create --region RegionOne compute internal http://stack.flex.net:8774/v2.1
! v& S: @  V% o$ |( |) V: T& d) c* B! }6 m& V
+--------------+-------------------------------------------+  t! I6 e0 w& @" z, z2 E8 Y
| Field        | Value                                     |
/ b8 h' }5 @* A; |+--------------+-------------------------------------------+
  U) h) A$ ^7 T( N| enabled      | True                                      |
$ ~2 j# U8 ?/ Z6 Y  C| id           | e3c918de680746a586eac1f2d9bc10ab          |) K, e1 Y' C* M
| interface    | internal                                  |
) B: e- d  t! a| region       | RegionOne                                 |( h6 {5 a1 ?( L. W
| region_id    | RegionOne                                 |! _7 T5 Q8 r8 I" i% x
| service_id   | 060d59eac51b4594815603d75a00aba2          |* i  g/ k) @) f3 n9 O1 C2 S
| service_name | nova                                      |) \4 p" r3 g) w) j5 d' R0 k
| service_type | compute                                   |% T, P* H6 {- p  L
| url          | http://stack.flex.net:8774/v2.1               |
. W: Q$ g! t+ L5 M; v9 S: I+--------------+-------------------------------------------+( ]8 \( v4 C, q& r6 ?) c

. z4 L  S  a  H! I$ openstack endpoint create --region RegionOne compute admin http://stack.flex.net:8774/v2.1
6 X4 ]" H8 r& h, y  @  D' K9 C) Y# E+ l, @& i
+--------------+-------------------------------------------+$ E( ?  U3 Y  \. `
| Field        | Value                                     |" a- ]5 z# L8 ^9 J. _- D* c1 m
+--------------+-------------------------------------------+( [8 {2 m$ g+ {: h# C- \
| enabled      | True                                      |; I* q& [" ~8 u) C/ ]
| id           | 38f7af91666a47cfb97b4dc790b94424          |. `+ Y5 l: Y- h  P
| interface    | admin                                     |6 V) S9 `0 I, G
| region       | RegionOne                                 |- H2 w  w0 ^* m0 ?# L
| region_id    | RegionOne                                 |. J+ a! e$ W4 T
| service_id   | 060d59eac51b4594815603d75a00aba2          |2 G8 M: i4 m+ u+ n, X% B
| service_name | nova                                      |
% Y- [' n" l% E- v. g0 ~; E& l, V| service_type | compute                                   |
8 k( y& H: ?& E& q! R- E9 [4 e| url          | http://stack.flex.net:8774/v2.1               |- b9 Q8 h  ~2 k; O% ]/ \& N# u, l
+--------------+-------------------------------------------+
; ?0 C( v1 l; b安装配置组件2 F5 Q2 m& z* w( U1 c3 O
安装包:9 l% p- `4 {8 W- B& X$ j; k
# yum install openstack-nova-api openstack-nova-conductor \
2 K' [7 r: v9 X# V  openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler& X' M. e& F. _2 ~
编辑/etc/nova/nova.conf文件完成下列需求:
( H$ g& [" @2 v) {3 }0 J: Q4 Z+ I9 m  y
○ 在[DEFAULT]区域, 充计compute和元数据API:
. h) @  N# r3 p3 N    [DEFAULT]: y+ m6 T9 t1 y$ ?
    # ...
) P- U0 o' r9 {9 A. Z& p- L    enabled_apis = osapi_compute,metadata
% k- W! i' j; |' I1 G0 A8 N# {7 B( N1 j) t
○ 在[api_database] 和 [database] sections,配置数据库的访问:* p- ~0 _) J3 W8 Z- r$ A
    [api_database]" M$ c: v# w: Y
    # ...
0 C% ~# s% G1 o' ^" x    connection = mysql+pymysql://nova:nova123@dbs.flex.net/nova_api
, p( T) G# G& g) }, T9 N2 j( Y; ~/ T4 e/ H% U
    [database]
5 _: I- |7 g2 h$ j& A1 ]* \% L    # ...4 o6 \* `7 j" U7 C3 q) _3 w
    connection = mysql+pymysql://nova:nova123@dbs.flex.net/nova2 `3 P' T7 K/ `

/ e( _  X  P& {# U○ 在[DEFAULT]区域, 配置RabbitMQ消息队列访问:7 u$ X6 |3 Q0 ?/ N
    [DEFAULT]$ F. b$ ]* J! {" H1 v1 a
    # ...
/ D9 D+ U6 ~/ y. }    transport_url = rabbit://openstack:openstack123@dbs.flex.net
  J9 w& l; J$ G0 G; E; |; L* }; N' ]: F) j1 J
○ 在[api]和[keystone_authtoken]区域, 配置访问认证服务:
0 a; d/ {$ T7 M4 a- c/ t: T+ A    [api]
& w6 a; `$ t4 w4 U0 ~    # ...% K, O4 k+ X2 A- {1 H
    auth_strategy = keystone
8 Z/ R8 j2 H& T' i4 ~
4 j% b& E* f8 N" }, U& m    [keystone_authtoken]6 w, a7 c% R2 n1 S4 y  L; X
    # ...
! i& v" A3 V: a2 _) t( ^; ]    auth_url = http://stack.flex.net:5000/v30 z# M3 ]2 N6 S6 M0 B
    memcached_servers = dbs.flext.net:112117 ?& H. D; S0 [7 r3 k: d; v
    auth_type = password
, b5 Y1 p$ `+ k( f# B    project_domain_name = Default2 Y0 g9 _" {7 a, Z  j1 w
    user_domain_name = Default/ p& K9 C$ [* ~/ b( g
    project_name = service7 k: y9 R( _: k- E5 r: R; M
    username = nova
$ z0 A: x# a: x    password = nova123, R5 F" U" V& m, m& o
     
& J% y4 c7 g$ \# c6 M5 k    注意: 注释或移除在掉在[keystone_authtoken]区域中的其它的选项.
4 f4 W: Y4 A) [* \$ B6 m
/ S% l/ w! g  L0 p- U○ 在[DEFAULT]区域, 配置管理接口的IP:7 i( C8 k2 A* K' n1 W$ _" ?( B
    [DEFAULT], U0 o) c" Z" @3 w
    # ...$ c) ^5 Z" z' {' x
    my_ip = 192.168.207.2  #此处为控制节点的管理IP地址" o7 Z% h. C. W  y; ?
○ 在[DEFAULT]区域, 充许支持的网络:
5 _( W: _* S" c% f    [DEFAULT]
- s5 W5 D( ~* u( P; D: R0 p3 A6 r6 ?    # ...4 t' ?- W+ S: A. D
    use_neutron = true' Q$ \& K: i: ^) Z
    firewall_driver = nova.virt.firewall.NoopFirewallDriver
. B0 R$ U; Z! D* I: Q
8 ^4 ~  V1 l2 ]# o, i! |    缺省的,计算节点使用一内部的防火墙驱动,因为网络服务包含了一个防火墙驱动,你必须禁用防火墙驱动并使用nova.virt.firewall.NoopFirewallDriver firewall driver
  Z' d% I" s, ]& o& a: h○ 在[vnc]区域, 使用管理接口的IP做为vnc代理使用:
6 S/ S7 ^& K6 h9 D8 @  j- m, C    [vnc]" z  r) u7 _* Z' m; M: \
    enabled = true
  O3 T, l$ U9 p" l0 e* T1 V4 Q+ c    # ...
$ }; A7 u! [/ C7 k! u# h2 L    server_listen = $my_ip
+ y) w9 ]/ s$ W, U7 z0 c, q    server_proxyclient_address = $my_ip$ e6 {2 ?2 y3 q8 {: z+ t' K" y& }2 `

: G& A) H- x+ l$ O4 b○ 在[glance]区域, 配置镜像服务api的位置:# i; h& n. w; C- U9 Z6 y% z4 X4 i
    [glance]
; j6 B' o. u' U9 Y- Q    # ...; q8 Q2 [, ~9 y& [
    api_servers=http://stack.flex.net:9292: I$ d" a6 \: t# l8 |( I
2 D9 _9 Y# o8 `( ]# w5 f3 L
○ 在[oslo_concurrency]区域, 配置锁定的路径:
& ^/ \' _4 {, n& M; s# a# d, R( T    [oslo_concurrency]$ w: ~: _/ ?" `, N  ^" g
    # ..." B! |4 e8 i6 O
    lock_path = /var/lib/nova/tmp
& H  @9 z4 V$ u& F, D' Y% N2 O5 h1 V. ~. Y
○ 在[placement]区域, 配置访问placement服务:
8 E8 p6 p1 Z) `# v  K0 A/ r3 J    [placement]
/ ~* u) C! }) U9 e! u, p    # ...
# ~1 p& N7 {0 J; ?! A    region_name = RegionOne
- E" {2 L4 Z* _! N! {; a    project_domain_name = Default
4 B. X$ ^0 }  I$ L: n9 m    project_name = service
/ Y. z  q+ p* V. I; {1 {- z    auth_type = password
( E+ z  c* d/ q9 n  V+ X* R    user_domain_name = Default
3 s# P  g2 N# L6 Q    auth_url = http://stack.flex.net:5000/v3* G9 i& k# Q: G$ U' b( b' C  n
    username = placement+ E" O& v; }8 ^' }. |
    password = placement123
/ B, J7 c4 c+ X) q; R0 s4 O' h0 H
! O+ A% ?  l- ]  G, U2 I    注意: 注释或移除在掉在[placement]区域中的其它的选项; L" k8 D% I9 @2 k5 V7 c

. Z! M6 h9 V! h& e1 d○ 由于一个bug, 你必须充许访问placement API, 添加下列的配置到/etc/httpd/conf.d/00-nova-placement-api.conf:
2 p9 V: u, b6 d( L  b3 S' O& d    <Directory /usr/bin>$ z* U1 |2 ?9 Z8 M& `9 Q4 z
       <IfVersion >= 2.4>
  l: L" N0 J7 A# P! e          Require all granted+ x0 r# Y: ?$ k8 e' x) a
       </IfVersion>, y4 `% I# U' U
       <IfVersion < 2.4>
: |) Z) Z7 d+ W' Q/ s: F          Order allow,deny: N' g4 j0 i* b; ~( {3 k: F; X
          Allow from all
/ E1 V3 d& V6 v6 W: g. E       </IfVersion>
: {8 b1 D" L9 W; ~0 [% }7 G  ]    </Directory>% F7 p- f, V. A3 n

3 L! }5 E, Z3 }" W+ H) t○ Restart the httpd service:
8 l9 q  A/ w0 g4 C/ M8 Q/ ?; N    # systemctl restart httpd: U% u6 r- M# t, s8 O1 k4 _
Populate the nova-api database:
( Z+ }% n. D& @8 l, J# su -s /bin/sh -c "nova-manage api_db sync" nova
/ @" L+ [$ @2 f, wRegister the cell0 database:  Q' C2 Q( e2 U8 A, C" e  @' w
# su -s /bin/sh -c "nova-manage cell_v2 map_cell0" nova
" \) B8 ^9 X; A* nCreate the cell1 cell:
; K4 t, g7 ]: B+ ~# su -s /bin/sh -c "nova-manage cell_v2 create_cell --name=cell1 --verbose" nova3 L, Q/ K8 X+ y; {8 ~
109e1d4b-536a-40d0-83c6-5f121b82b6506 n+ Z* s+ Q3 @* F9 P6 J
Populate the nova database:
4 v3 o- j8 U8 n# su -s /bin/sh -c "nova-manage db sync" nova8 q8 ^0 a$ k& c: e- t/ S* q! _
Verify nova cell0 and cell1 are registered correctly:1 q* i' t1 X1 E: c: c
# su -s /bin/sh -c "nova-manage cell_v2 list_cells" nova9 c8 D  _- r& B4 h6 N7 |5 s
+-------+--------------------------------------+1 F! C% E* s7 N$ _
| Name  | UUID                                 |
6 c1 v! C% v3 K' W8 K+-------+--------------------------------------+
, ?; q5 u* J+ N6 H* y| cell1 | 109e1d4b-536a-40d0-83c6-5f121b82b650 |
! ^) E6 S& z' l3 W" W| cell0 | 00000000-0000-0000-0000-000000000000 |8 f- t9 O3 h; p( [
+-------+--------------------------------------+
# t  G3 Q0 N* `2 {安成安装# u5 i  u5 W; f3 P* I7 W) W
○ 允许系统引导时自动启动服务并启动服务:& ~: K* ]* d4 `8 |: _+ P5 D
  # systemctl enable openstack-nova-api.service  \
. Q* K, Z7 u5 v% A& Z/ q   openstack-nova-scheduler.service \
1 @. j! z  L! J: p   openstack-nova-conductor.service \( L( D* q8 x, a* W
   openstack-nova-novncproxy.service
( t# d. A+ D% O( v3 m  # systemctl start openstack-nova-api.service \1 D) c- \3 }( u1 w& Q; @0 Q
   openstack-nova-scheduler.service \
0 E2 _. F  J* T  W7 x# v  C   openstack-nova-conductor.service \3 _6 @- T3 u0 E$ s0 A2 [
   openstack-nova-novncproxy.service
" k4 ]& i% I8 n: y' v! p! Q  Q: n4 g" u+ A8 N$ R7 c
Install and configure components
( X0 L. u6 b% J$ {! nInstall the packages:
9 |4 t' e) Z8 c6 b7 T# yum install openstack-nova-compute
  S# O3 t0 p+ z; r4 \2 Y1 `/ WEdit the /etc/nova/nova.conf file and complete the following actions:
- P2 c/ T/ `& k/ p7 _- K* a2 I6 G. r, K- v% p' V( S
○ In the [DEFAULT] section, enable only the compute and metadata APIs:
' Y/ S! I5 D* r5 H    [DEFAULT]; R! T, ], N3 Z, @6 N
    # ...
$ F# I8 H; k# H, X1 F    enabled_apis = osapi_compute,metadata, w* W1 y# a; ~! J  C
' ]( h- ?; W7 k4 W" b* V5 n
○ In the [DEFAULT] section, configure RabbitMQ message queue access:3 B0 U- `& U( M/ J. n1 G
    [DEFAULT]  C1 J# w6 B7 E9 B0 k2 T: [
    # …
9 ^$ O# H. a2 ~( M    transport_url=rabbit://openstack:openstack123@dbs.flex.net! O5 E& V  p, F$ Y; Z/ o, D' s
; c4 G- I2 b- {( n' y  x( Q+ ^- K
○ In the [api] and [keystone_authtoken] sections, configure Identity service access::; i) Q+ r7 Z$ a
    [api]" Q: c% T8 J* z  A9 Q
    # ...3 s$ t( C# n1 S- ~! C+ E
    auth_strategy = keystone
+ Q3 W7 y" S: ~1 l  Q& Q# x8 S" e% r) G; W  e
    [keystone_authtoken]2 b( z% J2 d4 |; B  d& T* e
    # ...
; o. ?& x( `! F9 F    auth_url = http://stack.flex.net:5000/v3( G6 S9 g! l5 w( v; M+ S
    memcached_servers = dbs.flex.net:11211' h0 r; a9 i1 `+ d. p. T
    auth_type = password+ z8 K/ z+ ?* y0 U2 c* F! G' u" R
    project_domain_name = Default
) z, |, ^& b* c, _  y3 {3 v    user_domain_name = Default
2 r8 U. ]) h& a" M# B    project_name = service
6 [: r$ q+ ~1 l0 q    username = nova
- t5 Z; i4 Y$ @    password = nova123/ c- t- |6 [$ K; d1 S  V
    注意: 注释或移除在掉在[keystone_authtoken]区域中的其它的选项' I) n1 K0 ^7 {$ G6 R
' b5 Z. i5 M; c. F' L
○ In the [DEFAULT] section, configure the my_ip option:. C5 }+ z# V+ |
    [DEFAULT]
/ Y! c3 w, d6 N! C+ s) k  Q    # ..., [& _7 t- t9 h9 Z- j9 S' L6 i
    my_ip = 192.168.205.187
- _( N# Z2 ~& F注意:使用管理接口的IP在你的计算节点上.
# h3 O( p# j3 h( [5 M9 C% F/ @& A7 F: E: N# P* j. q1 `/ Q
○ In the [DEFAULT] section, enable support for the Networking service:
- }% b  ?; Z$ b, L4 U; s, I    [DEFAULT]6 E  T1 s+ n/ N) s2 k6 Q% S) h. b4 E
    # ...
7 z9 [: Q; L# t0 _    use_neutron = true
8 Q4 Y) v; S, Q; E( c: P    firewall_driver = nova.virt.firewall.NoopFirewallDriver
! S. g6 w+ b$ F注意:缺省的,计算节点使用一内部的防火墙驱动,因为网络服务包含了一个防火墙驱动,你必须禁用防火墙驱动并使用nova.virt.firewall.NoopFirewallDriver firewall driver6 _! [3 q# d3 L( R

6 W4 C5 U/ N4 _" ]$ N5 O○ In the [vnc] section, enable and configure remote console access:& x2 x5 `, B$ R) `8 S& c
    [vnc]
. h# _, l+ a+ I/ i6 r4 T2 m    # ...$ h, y) \* a5 f3 M0 j2 U
    enabled = true# K5 B* E6 O* a: ^
    server_listen = 0.0.0.0
& p: c# F6 T4 |    server_proxyclient_address = $my_ip2 m; C$ k# n. F; l' y
    novncproxy_base_url = http://stack.flex.net:6080/vnc_auto.html
/ q2 M7 U3 K0 R* f0 g1 a2 i. K# u- G" V0 |9 |, u5 K! q% F, {
    服务器组件监听所有IP地址,代理组件只监听计算节点的管理接口IP地址。基本URL指示可以使用web浏览器访问此计算节点上实例的远程控制台的位置。6 @% x9 {& m" S  N2 S
注意:如果要访问远程控制台的web浏览器驻留在无法解析控制器主机名的主机上,则必须使用控制器节点的管理接口IP地址替换控制器。& `/ p+ G& o. e& _7 f; f
: K: c. @3 I! L0 ^; Z4 v
○ In the [glance] section, configure the location of the Image service API:
3 y. k3 Q! f/ F) ]    [glance]+ ?- a: d; T- B
    # ...
0 m1 M: o# W) `; Y% p( ^( o/ b    api_servers = http://stack.flex.net:92925 m2 G- P2 M' v; n/ N0 h

$ s# K, W: n# p0 P2 V9 T. F○ In the [oslo_concurrency] section, configure the lock path:9 \# X5 |* f! [. r- R/ l) C
    [oslo_concurrency]
& @$ Y" a4 V+ Z3 n0 V# G    # ...1 ]7 J2 R4 Q* O: h3 R9 N
    lock_path = /var/lib/nova/tmp3 Z: P) C( M) h( {* v. E# G7 |* C
- v+ w1 Y$ I; E+ `
○ In the [placement] section, configure the Placement API:: W) `" q6 ]( i3 B; Z5 p2 }* @
    [placement]8 F4 d" L6 s5 v. i. H+ }0 t6 l# ~
    # ...
7 _; }' [5 ^8 s4 C    region_name = RegionOne. t& \/ k6 y3 Z$ G
    project_domain_name = Default
) r4 ^: R+ Y  {# c& B$ ~    project_name = service  s1 _( ?- [6 p& D3 \4 v; @7 k2 E
    auth_type = password% X1 V! b/ D4 P8 y4 H
    user_domain_name = Default
+ }0 Q4 C' `3 t" ]6 {, f: x7 U6 @    auth_url = http://stack.flex.net:5000/v3. \7 H4 d& I) `( B3 f
    username = placement# \: N; V7 `) m! f- F
    password = placement123; W3 l( C) z7 H/ ?
Finalize installation" d. R- M( p* v/ [7 P; x/ n) v# W
Determine whether your compute node supports hardware acceleration for virtual machines:
, ^4 `+ t0 A( p3 t
/ C0 e" i+ r' c5 d$ egrep -c '(vmx|svm)' /proc/cpuinfo
8 |* W+ c8 ?6 V- J
  K  I. y* e/ X如果这个命令返回1或大于1的值,你的计算节点支持硬件加速,通常不需要额外的配置,通常如果你的计算节点使用的是Vmware Workstation虚拟机,你可以充许virtuallze Intel VT-x/EPT or AMD-V/RVI这样打开虚拟化设置) l* O7 B2 M  b* V; N+ v* G

# k* U8 ]( ~0 K$ o% o+ w" c如果这个命令返回一个0值,你的计算节点不支持硬件加速,并且你必须配置libvirt使用QEMU取代KVM, 编辑文件/etc/nova/nova.conf文件如下:
: q. Z2 ]+ x- U. ~[libvirt]
7 o- w, _# z* a/ o$ j& J' @1 E# ...
$ @) \6 ~/ w" H' ]* h1 m8 Fvirt_type = qemu
. T. Y9 d! w1 p8 q0 a# F% n0 wStart the Compute service including its dependencies and configure them to start automatically when the system boots:8 b7 v6 x. _) `

7 T% V3 w# e" U7 }' J7 v. i$ e! ?# systemctl enable libvirtd.service openstack-nova-compute.service8 c: O1 d. Q7 U  S% @& _0 V& i! u
# systemctl start libvirtd.service openstack-nova-compute.service
; d1 n+ F  \4 b8 t- H) K; }
/ D8 b1 Y. |4 z+ L1 p注意:如果nova-compute服务无法启动,请检查/var/log/nova/nova- computer .log。controller:5672上的错误消息AMQP服务器不可访问,这可能表明控制器节点上的防火墙正在阻止对端口5672的访问。将防火墙配置为打开控制器节点上的端口5672并在计算节点上重新启动nova-compute服务。1 R8 G, H) C+ y* J
Add the compute node to the cell database
! H  a) J1 e# f9 @+ @" MSource the admin credentials to enable admin-only CLI commands, then confirm there are compute hosts in the database:- l: q% `! D7 p' b; \; E

8 D) X" I# Y  k' @$ . admin-openrc) j. z$ c/ A5 s; {7 _9 V

/ g3 A0 w# }: q* t3 j1 ^$ openstack compute service list --service nova-compute# S& b3 ^8 a6 X1 D' n0 t
+----+-------+--------------+------+-------+---------+----------------------------+( g4 a( m( ]: Y3 A
| ID | Host  | Binary       | Zone | State | Status  | Updated At                 |
- [+ p7 ^- b9 o$ {0 u+----+-------+--------------+------+-------+---------+----------------------------+: z. `$ f: N5 t. X
| 1  | node1 | nova-compute | nova | up    | enabled | 2017-04-14T15:30:44.000000 |
! K! o% w* I' Q; I4 ]+----+-------+--------------+------+-------+---------+----------------------------+
* z5 `# ?% x' z$ |- ]8 GDiscover compute hosts:8 ?- o" e( c9 o

% [  m3 y4 t' D/ x: n( Z3 Q+ S' P# su -s /bin/sh -c "nova-manage cell_v2 discover_hosts --verbose" nova
  T+ S' }9 f) `8 H4 w" k- O# [+ v  w# `( x
Found 2 cell mappings.3 Y% X4 o2 f7 d
Skipping cell0 since it does not contain hosts.. `9 \" C5 p* ^/ y/ L0 k/ X
Getting compute nodes from cell 'cell1': ad5a5985-a719-4567-98d8-8d148aaae4bc
' r) A: L. d0 PFound 1 computes in cell: ad5a5985-a719-4567-98d8-8d148aaae4bc8 B9 F0 O& S2 e- V/ E' V, n3 ]) O
Checking host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3
3 @! e$ j# h, |( w9 m& gCreating host mapping for compute host 'compute': fe58ddc1-1d65-4f87-9456-bc040dc106b3& ?8 J! w0 T4 v- y# E, s8 i( b
注意:当你添加新的计算节点,你必须运行nova-manage cell_v2 discover_hosts在控制器上注册新的计算节点,替代方法为你可以在/etc/nova/nova.conf中设置一个适当的间间隔自动发现计算节点:* Q& E, m9 S2 ^' T, m8 C; d0 ?& d
[scheduler]
$ V6 G( S( S- ~+ y: K2 `3 Ediscover_hosts_in_cells_interval = 300$ b* F' r2 A5 c4 D& ~* v, h* r' s
Verify operation9 e( R$ Q2 J. U# u, {
Verify operation of the Compute service.* B, g% R8 I3 p# ]
Note: Perform these commands on the controller node.
+ {# K7 ~+ w( {
1 E% D: l. Y; ?  G1 S% K5 M1 l6 iSource the admin credentials to gain access to admin-only CLI commands:
2 B6 O( z( t* [7 e6 V6 I/ l" J9 |$ . admin-openrc
3 J/ @$ a2 A) f. NList service components to verify successful launch and registration of each process:; G2 a, o, ^- B! C

0 a6 a+ O& K; M5 U" A, {$ openstack compute service list
$ S6 ]; L5 P( }1 o
8 {% _6 y# l: Q( _3 G% f5 T- u+----+--------------------+------------+----------+---------+-------+----------------------------+4 }, D2 _% j  S
| Id | Binary             | Host       | Zone     | Status  | State | Updated At                 |% t0 P$ v/ Q# y8 u& m
+----+--------------------+------------+----------+---------+-------+----------------------------+
2 N$ O1 o2 m. o|  1 | nova-scheduler     | controller | internal | enabled | up    | 2016-02-09T23:11:15.000000 |
( e$ `. I& H  U/ Z, h* z6 W|  2 | nova-conductor     | controller | internal | enabled | up    | 2016-02-09T23:11:16.000000 |( A% X' o% ?2 d( B5 r* w8 Q8 ?8 T
|  3 | nova-compute       | compute1   | nova     | enabled | up    | 2016-02-09T23:11:20.000000 |; R% Z: |9 p1 y, l
+----+--------------------+------------+----------+---------+-------+----------------------------+
( d, E% R" i3 S4 n* U8 }9 h# j1 r* X
Note: This output should indicate two service components enabled on the controller node and one service component enabled on the compute node./ b1 U" p  l' q% P, N
List API endpoints in the Identity service to verify connectivity with the Identity service:
+ L% J  k1 o" C0 d$ openstack catalog list  J( C9 V: R  E" ?
+-----------+-----------+---------------------------------------------++ W& P+ y" f; |+ J7 w% w- ~  t
| Name      | Type      | Endpoints                                   |
7 s. Q% Z) \9 p# w6 K! X+-----------+-----------+---------------------------------------------+6 f1 P5 ~7 ^& H% ?8 q* }
| placement | placement | RegionOne                                   |
; w) T! U8 D- l5 }2 R6 E& ?|           |           |   admin: http://stack.flex.net:8778         |+ x3 H: N% o4 c% A" l' M
|           |           | RegionOne                                   |2 n5 X; n$ b2 K5 u$ S
|           |           |   internal: http://stack.flex.net:8778      |
1 ?5 o- v2 ~  c* q& H0 Y|           |           | RegionOne                                   |
6 ^$ E# N* i$ Z0 z|           |           |   public: http://stack.flex.net:8778        |$ a9 \0 _4 D- B# ?; b0 U
|           |           |                                             |( {7 q1 D( ?- P7 R& G; a. z) \
| glance    | image     | RegionOne                                   |
( _7 d, k2 l' S: y|           |           |   admin: http://stack.flex.net:9292         |) ?! N+ P3 c. W( }! A7 T$ h+ [+ U
|           |           | RegionOne                                   |* V, h. W. e( a& H& @8 S1 p# ^+ ?
|           |           |   public: http://stack.flex.net:9292        |
9 `( I0 ~' u/ `$ @3 y* M) f% ^. O|           |           | RegionOne                                   |1 h4 ~* [- h" x& c) n! S) v
|           |           |   internal: http://stack.flex.net:9292      |
! n7 A# u; x+ ?, W|           |           |                                             |
4 s% _$ d6 e$ s+ |' k  ~) h| nova      | compute   | RegionOne                                   |
8 L( T! G  v' M  }/ R|           |           |   public: http://stack.flex.net:8774/v2.1   |
' {# X( s# ^1 s. C* t4 N% q6 X|           |           | RegionOne                                   |
* z1 o/ ^( C* Z|           |           |   internal: http://stack.flex.net:8774/v2.1 |  n& i, P4 V! _
|           |           | RegionOne                                   |
- `* {* n- D# C9 U|           |           |   admin: http://stack.flex.net:8774/v2.1    |* A: d0 B- u/ i: r) T
|           |           |                                             |7 M. x. f3 ]( w3 Y0 L6 \( v) M
| keystone  | identity  | RegionOne                                   |
$ h/ W, C& i! u- Z# R3 C* E|           |           |   public: http://stack.flex.net:5000/v3/    |
# T1 m6 n- w; @3 _; Z0 B8 p4 E|           |           | RegionOne                                   |! q: v2 F5 ~  U6 w/ g
|           |           |   admin: http://stack.flex.net:5000/v3/     |
2 Y* K& k6 l" f5 P8 ~" K|           |           | RegionOne                                   |
8 V4 _2 R" Z  K) S- N/ w( B+ I|           |           |   internal: http://stack.flex.net:5000/v3/  |4 ]3 ?# e% ^0 ~9 ?) v5 C$ E
|           |           |                                             |
; X8 \3 A, q" u7 s+-----------+-----------+---------------------------------------------+7 |. T: ~5 Y  B
List images in the Image service to verify connectivity with the Image service:
+ B- K  i1 D( W' x" h1 Y4 b" g' `2 ~" b  O0 l; V1 Z3 `+ K
$ openstack image list
) w( f( g$ f0 a5 a" j
0 Q; k+ x/ u2 W) D+--------------------------------------+-------------+-------------+
' g1 I$ D- E) l; b+ d0 j  E' V| ID                                   | Name        | Status      |/ S' |) P3 s0 D" Z! P  ]
+--------------------------------------+-------------+-------------+5 [  z2 O  N% v4 H" j4 [2 T
| 9a76d9f9-9620-4f2e-8c69-6c5691fae163 | cirros      | active      |
7 V: b) ^) v- y1 t+--------------------------------------+-------------+-------------+/ R, w" b5 y3 a- a/ ?5 P$ U; k) t* g2 a
Check the cells and placement API are working successfully and that other necessary prerequisites are in place:7 B6 q6 h* L' Q; d0 m. s' a

) T7 R8 f8 b1 s7 p: Z) P# nova-status upgrade check
' D- z, R( N" O3 U- m; y0 t: G. c3 w" u7 W
+--------------------------------------------------------------------+' C, s1 U3 L: g5 u( z# R
| Upgrade Check Results                                              |& F* O- H5 s5 O+ T
+--------------------------------------------------------------------+: B' `- g+ i& j5 ]
| Check: Cells v2                                                    |
4 U2 c& o7 t5 u& Y' w& w( x  I- a' ?9 _" || Result: Success                                                    |
2 J9 D' g+ B1 v: b| Details: None                                                      |
7 Z4 L/ u) g  `+--------------------------------------------------------------------+2 Y8 b6 ^7 Z2 ~9 Q5 L
| Check: Placement API                                               |
. s, n7 d$ u; ~' y, s+ ?& r5 @| Result: Success                                                    |, w) D- F; {: Y" z- l
| Details: None                                                      |
4 B/ b" C& }, w0 p* Y! |+--------------------------------------------------------------------+2 u+ v; f, X9 N" J* ^) F4 t
| Check: Ironic Flavor Migration                                     |
" G6 y# {& @8 v& g( T" O| Result: Success                                                    |; n8 r. w: f. m; b
| Details: None                                                      |. p7 d$ t/ D! k
+--------------------------------------------------------------------+0 g; ^9 i4 |! _1 s3 v6 j2 T
| Check: Request Spec Migration                                      |  R2 r: _  C" O7 [
| Result: Success                                                    |2 V  c9 G9 t* v1 {  {& q
| Details: None                                                      |0 S, m. D/ k2 e1 j8 v) u8 h
+--------------------------------------------------------------------+
# W9 u1 j; ]* m| Check: Console Auths                                               |
+ a: t& ]. f! |$ ]. n/ ~1 l! Y| Result: Success                                                    |$ K$ |# I: |& R$ y( `
| Details: None                                                      |' U' W: o" e* U! Z$ ~; @- O" D
+--------------------------------------------------------------------+
5 b+ U3 b% u3 S2 ^# X- p2 j4 s7 n, j% S6 S3 \

- j! R: x* Z# B. y& S' d% `4 [& _7 ]OpenStack网络(neutron)允许您创建并将其他OpenStack服务管理的接口设备附加到网络上。可以实现插件来适应不同的网络设备和软件,从而为OpenStack体系结构和部署提供灵活性。
+ m; ~2 o7 g. z  [% h8 R  它包括以下组成部分:: q" ~" {: b- E- [* {( S) I

4 O, |3 U/ ~7 u3 aneutron-server 3 Q2 p& [- j2 \, P# g+ O4 O: @
接受API请求并将其路由到适当的OpenStack网络插件以执行操作。
7 S& l6 m) t3 MOpenStack Networking plug-ins and agents 1 E: g, j& m) `
插件式的网络端口,创建网络或子网,并提供IP地址。这些插件和代理的差异取决于特定云中使用的供应商和技术。OpenStack网络附带了用于Cisco虚拟和物理交换机、NEC OpenFlow产品、Open vSwitch、Linux桥接和VMware NSX产品的插件和代理。8 Z& f. {2 p* @0 h) {) y
常见的代理包括L3 (layer 3)、DHCP(动态主机IP寻址)和插件代理。. o7 w/ p: i( w( G  ~# ^
Messaging queue 5 m% A3 o5 r; e+ J. ^0 y1 v
大多数OpenStack网络安装都使用它在neutron-server和各种代理之间路由信息。还充当数据库,存储特定插件的网络状态。
6 u( @& v% S* ?0 S7 {1 W& n4 H. a; y) V7 B, C
Prerequisites
( y- q1 B* Q& {) W8 x  ?" N* eBefore you configure the OpenStack Networking (neutron) service, you must create a database, service credentials, and API endpoints.
. \! d# J5 Z+ v$ L! }0 z
" R3 S% K- s/ ~. B* b  ETo create the database, complete these steps:% @9 ?- {. n% K6 J$ y! G
○ Use the database access client to connect to the database server as the root user:
8 K9 k( u' Q% m5 z$ mysql -u root -p root123
5 `& B# o' S& M7 U/ w: S1 }○ Create the neutron database:/ [/ H: h3 d" Q6 H
MariaDB [keystone]> CREATE DATABASE neutron;
- [/ Q' R% ^* R. O' e) ^○ Grant proper access to the neutron database, replacing NEUTRON_DBPASS with a suitable password:
9 T8 u" o2 y6 O0 a+ M; qMariaDB [keystone]> GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY 'neutron123';5 c/ ^. {) c% Y# C
Source the admin credentials to gain access to admin-only CLI commands:
( z2 s* O0 B+ N1 t. ^- P( R$ . admin-openrc' o+ C) z* y! d. J
To create the service credentials, complete these steps:
. P7 ]) d7 G; g; x% R
7 @. V& g0 Q& H: P2 e7 T○ Create the neutron user:
5 x( W1 J  @3 r4 P$ openstack user create --domain default --password-prompt neutron8 m2 z# I' Y, g/ W- u0 q) ]( ~% A
User Password:neutron123# ^, ?; G# c  u6 R3 e- t% C6 `
Repeat User Password:neutron123
+ S. W& x9 }5 [, h; N) g+---------------------+----------------------------------+' Q) G' n% O  z$ }5 y$ {
| Field               | Value                            |
- j, m) i2 j; N" K) ]+---------------------+----------------------------------+% S+ h) h( ]. l. j/ F
| domain_id           | default                          |2 a3 _% K6 _5 {$ u% r. {3 ^8 P3 s
| enabled             | True                             |# u; X1 I/ F$ V# e  ^$ \- e
| id                  | fdb0f541e28141719b6a43c8944bf1fb |
6 X1 i; Y$ A/ n  V1 \& j+ T& V5 N| name                | neutron                          |8 _/ P8 [# U$ V2 q
| options             | {}                               |3 j& g+ H5 d, {+ ]
| password_expires_at | None                             |1 k9 s+ g" ~. h+ j) m
+---------------------+----------------------------------+
2 Y: e) B+ \5 X! w1 @0 z○ Add the admin role to the neutron user:7 w- n" b* V. J4 i1 L* q( Y
$ openstack role add --project service --user neutron admin
5 @) [0 K$ V7 P! q4 O : }; m2 S7 i5 R
Note: This command provides no output.
" W+ u' ^, b) e' [" i* B6 u% y: t○ Create the neutron service entity:) P" y% O. w. _  G4 W4 ~
$ openstack service create --name neutron --description "OpenStack Networking" network
5 b. ^' W" U$ C6 X: G5 D* B5 e1 R/ ?+ I. l& R
+-------------+----------------------------------+4 e! s5 m* `2 u- f) L
| Field       | Value                            |8 I/ R2 N6 }  d" X) t/ u9 \
+-------------+----------------------------------+/ Z8 j$ a8 M" V- W4 c
| description | OpenStack Networking             |& a$ [  }" K$ ~! I
| enabled     | True                             |4 ?& d9 d7 v" q5 j) U
| id          | f71529314dab4a4d8eca427e701d209e |( k$ _$ [7 B9 F- k2 `' \7 a4 Q
| name        | neutron                          |4 _; d9 n+ [9 O* r2 e2 B
| type        | network                          |
4 z/ D4 o' v; f5 G5 |+-------------+----------------------------------+9 n2 D7 P) ~; `: @% @6 u
Create the Networking service API endpoints:: U: F; k, Y% X2 q

$ k* F* x* h8 e: e. W; E1 d/ e#openstack endpoint create --region RegionOne network public http://stack.flex.net:9696
& N% c( Y3 O9 ~+--------------+----------------------------------+0 i: k/ O2 Y6 G4 o) ^. f3 j0 K' ]6 P
| Field        | Value                            |
3 Q# U  X8 s; F  C3 T9 I+--------------+----------------------------------+
" P7 ^% c: V! D/ z0 j| enabled      | True                             |& t+ x; L" y: U
| id           | 85d80a6d02fc4b7683f611d7fc1493a3 |# J! k0 p! `) G
| interface    | public                           |% i6 K3 C4 |7 U+ ?! o  J1 V
| region       | RegionOne                        |7 Z3 r; w, i; x
| region_id    | RegionOne                        |: [  c* s, _6 B  y$ V
| service_id   | f71529314dab4a4d8eca427e701d209e |
5 o- I. T% {% @9 Q- J| service_name | neutron                          |/ m2 x# Q; v% K  m" n% U4 ~- w% `
| service_type | network                          |
9 H  _  t9 P( N| url          | http://stack.flex.net:9696           |
. i: X. I6 H  q- E  n+--------------+----------------------------------+; g- T9 ~4 D' O& E; t
#openstack endpoint create --region RegionOne network internal http://stack.flex.net:9696) t+ O% M& w4 H; s1 f9 ?, @

& [% ]- m3 P' K& _% ]  H+--------------+----------------------------------+
( g0 `; V% X. d! ?| Field | Value |- Z) }" \$ ^4 I  l: w& Z- I
+--------------+----------------------------------+
! t; G' D  _2 n# L% F% m| enabled | True |9 F4 f* S: n. I+ K( G7 u( Q
| id | 09753b537ac74422a68d2d791cf3714f |
1 n/ A6 D3 e0 ?) T: k" f| interface | internal |
/ V3 w) Y/ v: r5 I. ~, F; L2 Z| region | RegionOne |
8 @7 k5 S9 i) K# w: R, P| region_id | RegionOne |, A6 C, G- W- q  c8 P. B+ \, L
| service_id | f71529314dab4a4d8eca427e701d209e |9 K) u3 M: Q) M' o
| service_name | neutron |
+ ^0 ?/ W8 ?+ i| service_type | network |
; I; I9 u5 F2 ?| url | http://stack.flex.net:9696 |
0 R- i8 [3 s/ [/ [- p' P* e" L5 H8 [" V+--------------+----------------------------------+
5 v* R2 A  |, E& K+ ?' N8 @) `$ w/ ]
2 z0 d) e% r6 s" r# x: ]#openstack endpoint create --region RegionOne network admin http://stack.flex.net:9696
7 s+ C! J& _% O2 s; E9 A. ]5 o) [, z- m( n4 g
+--------------+----------------------------------+- {7 r2 O. r5 d/ c3 s1 @1 @
| Field | Value |
, Y9 T" n" M1 l- J4 a8 ^& i+--------------+----------------------------------+
/ y$ D  f5 @" g* Y| enabled | True |
/ ?) r) c9 K9 d' C/ f8 s% ^* N5 f| id | 1ee14289c9374dffb5db92a5c112fc4e |8 z5 }& u& A3 Q8 K0 f
| interface | admin |2 U. o, r; @$ U" |
| region | RegionOne |
$ h2 j) K/ K, ?, O) Y( Y9 || region_id | RegionOne |
, B; j* z4 X: H) B6 ^. z9 K7 @( L| service_id | f71529314dab4a4d8eca427e701d209e |# i/ q. R; G- q0 o# u2 @1 ^9 N
| service_name | neutron |& J; b5 @" E9 O0 V4 g, r) A3 F5 x
| service_type | network |8 b2 e2 \- D8 D1 g2 t
| url | http://stack.flex.net:9696 |' d' E4 T2 ~" F
+--------------+----------------------------------+
: n% n% t* j$ ~3 Q( l8 L) m0 `  x. h/ Z$ e
#### Configure networking options* {+ T3 y, v, u3 i, Z
可以使用选项1和选项2表示的两种体系结构中的一种部署网络服务。
4 `" A1 N0 K  _
+ v1 d$ y3 [+ W" X) v; O选项1部署了最简单的体系结构,它只支持将实例附加到provider(external)网络。没有self-service(private)网络、路由器或浮动IP地址。只有管理员或其他特权用户才能管理provider网络。
( h+ _) U* S2 `+ u) @4 s+ R! s" Z. A" I8 l7 ^/ p' ~  H" Y
选项2支持将实例附加到自助服务网络的3层服务来增强选项1。demo或其他无特权用户可以管理自助服务网络,包括在自助服务网络和提供者网络之间提供连接的路由器。此外,浮动IP地址使用来自外部网络(如Internet)的自助服务网络提供到实例的连接。+ L) j8 l* o5 }, M; f' C' k
' x( L. B, e/ n+ H7 s# o
自服务网络通常使用overlay网络。overlay网络协议如vxlan包括额外的头部信息,这些头文件增加了开销,减少了有效负载或用户数据可用的空间。在不了解虚拟网络基础设施的情况下,实例尝试使用默认的1500字节以太网最大传输单元(MTU)发送数据包。网络服务通过DHCP自动向实例提供正确的MTU值。但是,有些云镜像不使用DHCP或忽略DHCP MTU选项,需要使用元数据或脚本进行配置。: O. S/ Y) d2 s( h0 j, i
' f& {6 H+ i6 E+ h: V
选择下列网络选项中的一个,或两个全选,参看下面的两个章节。并返回这里再向下继续配置
0 p4 n  c: b# Y○ Networking Option 1: Provider networks" T8 B3 }5 S/ J, i- R9 Z7 P
○ Networking Option 2: Self-service networks
% m# v; @  N7 g; W3 L* ~2 K. H% M$ ^% ^7 [
Configure the metadata agent) r* u0 y* r$ r9 U4 l
The metadata agent provides configuration information such as credentials to instances.  H& y. b# i6 G4 R+ I+ X$ J
Edit the /etc/neutron/metadata_agent.ini file and complete the following actions:
/ c, {; k  U# Q8 o2 y5 p& t2 }$ Y9 d. G
    ○ In the [DEFAULT] section, configure the metadata host and shared secret:
, _) \/ p' {" g7 C+ M  I; n' M) t        [DEFAULT]9 l- q  p" _8 D  U8 i+ J: o: R
        # ...
/ d" i; k2 `* ]        nova_metadata_host = stack.flex.net
3 L! Y7 _4 `3 i) R        metadata_proxy_shared_secret = 1234 , i7 Y; H5 x8 s8 a/ r

# I5 r- p' |) \  p        Replace METADATA_SECRET with a suitable secret for the metadata proxy.. w' D& I6 w% J8 M
Configure the Compute service to use the Networking service/ P, i" ~" |6 _- e, b# Q0 g8 y8 m5 r
Note: The Nova compute service must be installed to complete this step.
, w0 K6 _$ a$ r4 \/ pEdit the /etc/nova/nova.conf file and perform the following actions:
* p( V2 {$ Y# \8 C* E, h6 K: w' ?; F; z2 B* I( Z% e8 o
    ○ In the [neutron] section, configure access parameters, enable the metadata proxy, and configure the secret:
! K; Q2 q7 [* V  j        [neutron]
8 Z4 p, M7 W9 t9 _+ _* P        # ...
1 Q% R5 `6 J2 X% P        url = http://stack.flex.net:9696- |0 k1 T- U( w
        auth_url = http://stack.flex.net:5000, r* x4 J" V6 @( u+ `7 p. [
        auth_type = password
8 @7 O5 _9 i& o2 A7 R/ C        project_domain_name = default7 F% Z& n5 Q# @& h- ~/ m% t
        user_domain_name = default
. {2 W. x3 r4 G5 C  `        region_name = RegionOne
8 ~2 j; T" {5 h7 P1 x) ]8 j        project_name = service7 }. W$ e% a5 |7 U/ \7 o
        username = neutron
; P  [) E# a1 f% c+ P6 i        password = neutron123$ U4 |2 k5 p- `! e  q
        service_metadata_proxy = true
% [2 X7 h$ _( s+ R        metadata_proxy_shared_secret = 1234
7 v5 |$ E+ J3 v& S# G/ RFinalize installation
2 o2 v. L3 }  F8 T' nThe 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:, f# H$ k0 S* I% w2 W
# ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini4 k) o  J% x6 V8 L& t+ e' B2 F
Populate the database:. a7 C% C+ A! O0 F
# su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \4 y0 y8 F7 ]" }) C2 S' t" K
  --config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
6 F( _& n& E5 _9 u( y) @/ u; g$ h注意:由于脚本需要完整的服务器和插件配置文件,数据库填充将在稍后用于网络。
& ]$ l. Y; S& Q& e, |. [) ZRestart the Compute API service:
/ s0 c: F, z7 C9 t1 ]7 S4 z# systemctl restart openstack-nova-api.service1 C7 |  n; a4 O# p
Start the Networking services and configure them to start when the system boots.
4 F5 X# P$ C& c6 S: XFor both networking options:
9 g$ e4 W8 D6 y$ d/ P/ E    # systemctl enable neutron-server.service \
5 _! i! ~* r3 N; |( i      neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
" b7 Q& u0 Q$ p- g- k      neutron-metadata-agent.service
5 D$ ^2 |: r6 O. S" `8 M    # systemctl start neutron-server.service \  D9 @, U  C* B* _/ o" t  ^
      neutron-linuxbridge-agent.service neutron-dhcp-agent.service \
7 u. K, U' \6 \6 I& ^      neutron-metadata-agent.service+ U1 [+ H2 h2 Y& C' p9 {
1 I  S' |+ `" a0 x- |7 N3 X' G
For networking option 2, also enable and start the layer-3 service:$ x9 ]% G! W- V& x0 B' U+ A4 l/ E
    # systemctl enable neutron-l3-agent.service
1 Q$ q- x5 Y. v3 |  P  j    # systemctl start neutron-l3-agent.service
! m! D, p; a, M( s7 r0 t! _5 I% u$ [, y, O" Q5 J: c& X
2019-09-04 16:46:13; d- @/ E0 W7 m7 A6 n
最近测试esxi6.7的vmotion功能,为了熟悉kvm决定在kvm上实现, 系统是ubuntu16.04, 启动一个kvm,发现esxi在迁移时会崩溃,无法进行迁移,查找相关次料,解决方案如下:
4 {# |. V1 w$ B
) j7 Q9 i1 `1 p8 d; h0 PKVM的安装和使用
* t; v. x0 N  A* ?& i$ T首先安装kvm0 f3 s" U, @% \* x' s. ]. d+ v
# apt install qemu-system-x86 qemu-kvm qemu libvirt-bin virt-manager virtinst bridge-utils cpu-checker virt-viewer
9 K9 b4 y. v  ]- u% u  Z0 p校验kvm是否安装,并检测cpu的VT-x虚拟化有没有开,出现以下信息说明正常5 G$ j  Q8 r3 R# {9 T6 k
# kvm-ok) Z) W4 c+ S0 v, z
INFO: /dev/kvm exists
+ ~1 L$ n! b. p7 Q; ]5 yKVM acceleration can be used5 n- s1 R% j& X, N' F
运行virt-host-validate查看你的环境对kvm的技持,如果全部为pass,说明可以
' G" l& N- n7 t' T# Q1 ~# virt-host-validate 6 i% V1 p9 Q* c' H7 Q
QEMU: Checking for hardware virtualization                                 : PASS5 V, Z. M7 W1 A0 r; [/ r
QEMU: Checking if device /dev/kvm exists                                   : PASS
5 V6 g0 b5 G9 F2 M如果你想使普通用户能够使用kvm,可以添加当前用户到libvirt组中
2 Y5 [0 ^9 H  F  a& R- u5 A7 a; m: Qcat /etc/group | grep libvirt | awk -F':' {'print $1'} | xargs -n1 sudo adduser $USER  
. _8 L6 J/ g2 A2 O6 v5 ^' w: T6 H% I; N% p& t  j$ p# o/ w% O
# add user to kvm group also
) [& V" ]( V$ y& G: `. U4 Asudo adduser $USER kvm
* p5 b, k# l7 d+ w) d9 T4 D9 v
" e' N- G' m+ B3 x6 a5 o# X4 X, p* x# relogin, then show group membership
) ^$ x3 p0 s% \4 ~) I) M7 G4 fexec su -l $USER
, R  |, [# c% l8 m/ l& Tid | grep libvirt
% W8 C7 a- R1 `, p$ M/ A% Z缺省的,kvm会建立一个虚拟的交换机名字为virbr0, 使用192.168.122.0/24
9 [, ?; i5 Q- j* {$ K9 j& K# ip addr show virbr02 K$ Q/ ]$ a4 @9 a+ b4 T4 d
17: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000" H, i, d( k: }0 D# o
link/ether 52:54:00:d2:52:b5 brd ff:ff:ff:ff:ff:ff
2 F$ d& d. _! k& c: c: dinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
( F+ w( G5 ~8 {6 Z! M8 c   valid_lft forever preferred_lft forever
/ R+ B3 _+ |% ]( fvirbr0实际上是一个nat模式,我们可以通过iptables看到实际的情况
) d# g& {+ W: }9 B; H# iptable -t nat -vnL
4 H  T4 y( m9 E9 _! c: U0 MChain POSTROUTING (policy ACCEPT 146 packets, 11359 bytes)
* ?  A) V( h8 D( Jpkts bytes target     prot opt in     out     source               destination         
+ a0 j9 P% D6 y: G# J0     0 RETURN     all  --  *      *       192.168.122.0/24     224.0.0.0/24        " b/ I  ?, Q  d) d5 x) z( U4 M
0     0 RETURN     all  --  *      *       192.168.122.0/24     255.255.255.255     ( ~: I( _+ V) w4 ?3 T) C2 c$ ^
0     0 MASQUERADE  tcp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535
7 t3 t4 K9 }. a: K3 c0     0 MASQUERADE  udp  --  *      *       192.168.122.0/24    !192.168.122.0/24     masq ports: 1024-65535( h9 i+ z; [" {
0     0 MASQUERADE  all  --  *      *       192.168.122.0/24    !192.168.122.0/24   
: B/ E9 l0 D+ q8 [+ a定义存储池,缺省的存储池是/var/lib/libvirt/images, 但你可以另外mount你想要的os磁盘
5 ~  i% o" K; h9 s! P# virsh pool-list --all
) @% E5 d9 m6 U( Q) g Name                 State      Autostart $ a9 u" }& f. T9 @
-------------------------------------------
' p( V- d% F( `* |6 G$ O* F default              active     yes 2 y! L( i4 ?* I
- V5 `" a& {; P; }$ X
$ virsh pool-define-as kvmpool --type dir --target /data/kvm/pool# @5 c! Y7 V! x
Pool kvmpool defined
. F1 l" H. ]* f1 I( Q7 u4 h$ virsh pool-list --all
. v& Z& r8 M/ n4 f$ virsh pool-start kvmpool' L0 x' t' c7 ~6 [8 u4 d9 f2 D
$ virsh pool-autostart kvmpool6 I+ v9 T3 d+ U: f# X& O0 {: y  ^9 ]

( [& J+ n" Z6 p. K) s4 N' M$ virsh pool-list --all- c0 Q9 w& U2 {% H* [! E1 p
Name                 State      Autostart ( {8 e6 Q% H( |" P. i6 N
-------------------------------------------
" H7 X3 J  Q" t6 O% ?6 t default              active     yes       " n+ [6 q9 q1 i/ k* ~
kvmpool              active     yes$ Z1 s. R# O9 b8 o
布署一个vm在你的kvm上,建立一个1vcpu/1G RAM使用缺省的virbr0 NAT网络和缺省的pool storage
1 C' o) a4 k/ q3 v4 c" Dvirt-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
) T' O7 Q. Z/ ~; j: p& D  Y  w
+ J4 i) c7 L6 E: F; Y/ O# open console to VM' }+ q0 C# E# y# Y1 i# o/ V
virt-viewer ukvm1404
! W' t) Y' [* |" \3 _  `如果你想删除这个vm,可以使用如下命令:
/ R5 M, R/ Y6 Avirsh destroy ukvm1404% T5 E! ~0 [! S+ v8 |
virsh undefine ukvm1404; _# v9 |) ]8 @1 u& f
如你想要一个全部图形化的软件管理kvm,可以使用virt-manager,当你没安装图形介面时你可以使用x协议的ssh客户端,如xshell, 或xming+ssh客户端软件0 m( h" a# ^# a1 O" C: t
布署esxi在KVM中
% K) _* U/ R7 u2 R8 b* v5 ^1 [% g配置VT-x,你同样需要在ubuntu中配置VT1 K6 f' ~2 L: I9 X9 \( X
# vi /etc/modprobe.d/qemu-system-x86.conf 4 p  c5 v& f9 g* Z  V

+ W* ]4 |9 a1 Y. o# h# i0 koptions kvm_intel nested=1 enable_apicv=n3 [. X2 g- }  S% \
options kvm ignore_msrs=1
9 d6 ~+ s/ A$ o; C# J- L+ s. S; \重启系统,执行下列命令,必须返回如下值' l& ?+ G) D" e! U
# want Y to be returned
2 e; B- G" p0 Q) F$ cat /sys/module/kvm/parameters/ignore_msrs
: {5 K3 C# |' ^- A. V# t
7 P! Q, i& G) b8 S# want N to be returned! C2 Y( o( g$ J
$ cat /sys/module/kvm_intel/parameters/enable_apicv+ H2 a. }3 h! ~) X, b( Z  a! u

9 l; U4 X6 c9 e# want Y to be returned
9 ?+ `* w6 R5 @9 r% [; b. E" P% q$ cat /sys/module/kvm_intel/parameters/nested
. G% c" }: R1 M2 d: p3 s建立kvm虚拟机) t8 D7 S% j9 R8 ^
# virt-install --virt-type=kvm --name=esxi4 \' D. b( W: G# ?5 W
--ram 4096 --vcpus=4 \8 l9 \) s1 d" C5 u+ F
--virt-type=kvm --hvm \2 i9 K; _. `& t* E
--cdrom /data/iso/VMware-VMvisor-Installer-6.7.0.update03-14320388.x86_64.iso \
7 r. {5 b. S2 G' {--network network:default,model=e1000 \! {/ ]7 w! V. N$ C
--graphics vnc --video qxl \9 N* {) m; P- I: |$ x
--disk pool=default,size=80,sparse=true,bus=ide,format=qcow2 \
$ U& ^" ]$ M8 g$ ]& V5 M% k7 N--boot cdrom,hd --noautoconsole --force \
, m, E" c3 }8 B3 [/ t9 \--cpu host-model-only
5 Q0 W0 D2 L3 Q. H9 x2 D当然你也可以使用virt-manager来建立虚拟机。% _! A: q9 Q8 q6 x* }9 `
在kvm中部署嵌套esxi6.72 ^* i* m: k" _5 j

6 g* Q: o: R' ]% R重复建立两个虚拟机,建立两个esxi实现动态vmotion迁移,测试和建立步骤省略,经测试vmotion可以正常工作,不会出现崩溃现象。
3 G  S8 M! v; F( x8 o/ F3 m* w) ?/ t. K5 K$ v' \
安装和配置网络组件在controller节点上' ]1 y% B2 o. \9 L/ Y; S8 h4 i- j  \

. P$ v0 C( K& _' w( q* c安装包
) Q4 {' E3 ]' B0 }2 k# yum install openstack-neutron openstack-neutron-ml2 openstack-neutron-linuxbridge ebtables
) ?( f  b+ j2 s! D/ [- h9 B) z配置服务器组件! `$ o; q2 z( G/ m0 K" t: J
网络服务组件配置包括数据,验证机制,消息队列,拓扑改变通知和插件.
" e( d* b, v5 I7 C' ?# A) x1 lEdit the /etc/neutron/neutron.conf file and complete the following actions:0 t& ^! ?: j- C  }% ]4 H; ^
○ In the [database] section, configure database access:
) R3 u; o1 _* D# H    [database]
) p8 v- ?( h( x    # ...2 ]! |9 W. T. {
    connection = mysql+pymysql://neutron:neutron123@dbs.flex.net/neutron5 M5 n3 s+ U; x1 r5 c; L) v
    注意:注释或移除其它连接选项在[database]区域中: J" J& q1 |3 W( N

: O( L; ]7 {4 O4 n. P○ In the [DEFAULT] section, enable the Modular Layer 2 (ML2) plug-in and disable additional plug-ins:
- b/ O$ H/ f  t  c    [DEFAULT], n) ^8 F& W4 x) |/ }- u' _
    # ...
& J6 x$ X8 O3 d# F! ]  b    core_plugin = ml2( l. }3 C: ~' p# t
    service_plugins =4 v9 H6 y% N( m0 A
+ v0 S: G4 r1 A3 Z0 ~2 z
○ In the [DEFAULT] section, configure RabbitMQ message queue access:
2 p% R5 J' [4 p7 K# E    [DEFAULT]
$ w/ o0 Z5 P+ D0 E! j! q$ M    # ...
2 L/ E4 D( r9 W5 q0 j2 C    transport_url = rabbit://openstack:openstack123@dbs.flex.net2 W  f6 E. Y2 @

9 U3 N, K3 f& j3 v( d○ In the [DEFAULT] and [keystone_authtoken] sections, configure Identity service access:
9 l* R5 F. p* K# t- x2 H! p    [DEFAULT]
) o! O& A9 a( ?    # ..., L5 c1 l* S1 r; f3 n1 `3 Y$ A
    auth_strategy = keystone. r6 d  E3 H6 _& \9 m6 D3 `+ z
" W9 b! x/ \3 r2 a
    [keystone_authtoken]
# _) V7 y( K6 ~, Z6 o    # ...4 H6 \5 O1 N% r6 `' p' p  H8 B% F: C& n
    www_authenticate_uri = http://stack.flex.net:5000$ O4 t# A" }' o2 h0 f7 S
    auth_url = http://stack.flex.net:50002 G& z( z# E2 M
    memcached_servers = dbs.flex.net:11211* k2 Q$ o! p: [) h% F9 v
    auth_type = password  }* }' {* [1 B- g
    project_domain_name = default4 n6 m, B3 C" k! a
    user_domain_name = default  ^  H0 e% g3 e( T! s
    project_name = service
* j8 a' f3 ~3 E, p# S  M+ q, ]6 P9 ^    username = neutron4 c' {; O6 }5 J# x1 G4 O
    password = neutron123
9 H6 [4 c) s8 W7 v* _8 K* N9 ~  y    注意:注释或移除其它连接选项在[keystone_authtoken]区域中
; h% S9 d' i0 u* k4 o6 H! a& J- e4 b3 `3 q* J# q6 a% P( {; o; N% E' L
○ In the [DEFAULT] and [nova] sections, configure Networking to notify Compute of network topology changes:; }9 m0 ^! c, O9 o
    [DEFAULT]0 S8 r' O( y  l# ]; G4 e
    # ...! e/ a3 G: F7 Q0 w3 B+ _* @' O5 _4 ]
    notify_nova_on_port_status_changes = true
$ v% B. x; H+ ^$ [) Q    notify_nova_on_port_data_changes = true7 U' \  r8 c( w3 y
* L8 T% v6 y5 G& [' I& |
    [nova]$ b. h) X: A) ]0 L+ I( z7 F
    auth_url = http://stack.flex.net:50005 k1 b6 a* p2 m3 k- Y
    auth_type = password0 @- J' K+ R9 x. A% Z: T6 O
    project_domain_name = default
* r  T$ b$ |( H. S  ~2 L    user_domain_name = default
4 Z& ^/ r/ G. Q5 z5 o; X    region_name = RegionOne, B% h, {4 t$ Y, {0 j
    project_name = service3 n2 W5 d4 y. U# }1 l
    username = nova
7 E+ D- ?6 Q! e! B" a% b    password = nova123
5 q* t. b. B8 F. K4 f7 e
( E. I* n+ l5 [2 w9 z, A○ In the [oslo_concurrency] section, configure the lock path:6 R7 C" V! P  I4 P0 \9 I3 z
    [oslo_concurrency]
8 X, e7 u$ X( C: o7 L. F; G    # ...
" u3 r# O: }  X4 y, }: F: C: [' W2 E    lock_path = /var/lib/neutron/tmp% L) G9 g: o. C' f
配置模块Layer 2 (ML2)插件- Z7 W0 k+ k8 s" x4 A0 b4 U
    实列中使用ML2插件,ML2使用Linux bridge机制建立layer-2(桥接和交换)虚拟网络架构。
% A$ D6 K; F* i7 n# n    Edit the /etc/neutron/plugins/ml2/ml2_conf.ini file and complete the following actions:( Y. y" n- u) W4 l! N- h  I
○ In the [ml2] section, enable flat and VLAN networks:
8 _5 T7 {+ x% |9 |    [ml2]! k3 |& Q" ~+ e5 t$ y
    # ...
& ?1 \! b) T. q% _- ?    type_drivers = flat,vlan9 l9 P2 B5 Y! o6 b5 S
, J6 ]1 H8 {( h' v8 c" ^6 x
○ In the [ml2] section, disable self-service networks:
" R: A; ?* F; y+ W    [ml2]
3 ?' C6 c" B6 r: G1 `, |" d9 v5 y% I: O    # ...
3 X+ [3 f) x0 F: t    tenant_network_types =
, k, p+ A# l7 P4 R. w! h  r" g& s2 ^: x% T
○ In the [ml2] section, enable the Linux bridge mechanism:8 S: w( ?3 Z2 P5 u5 ?
    [ml2]
4 c9 j% ~1 ?0 s2 d4 a    # ...- W5 w# }; }+ B2 p; H
    mechanism_drivers = linuxbridge
0 [8 E5 p9 t! _    警告:配置ML2插件后, 从type_drivers移除这个选项会导致数据库不一致.- s* S. W' @2 ^' l, J& l% g
% U8 ]8 b% s+ I6 T/ Y2 r, X- \
○ In the [ml2] section, enable the port security extension driver:
) g  v* N9 t6 H% G5 g5 v# Q    [ml2]
1 r. F' z7 d& R  p; s& i: Y    # ...% g, G3 A7 k1 h$ @: U' P: P9 o  P" l
    extension_drivers = port_security
! Q) q% u2 A1 A3 l$ n9 |# P! [8 E% e/ f+ c
○ In the [ml2_type_flat] section, configure the provider virtual network as a flat network:6 m- T( K' @+ M/ g4 h. B
    [ml2_type_flat]
9 s. K: |6 ]& I4 b& c. E0 ?    # ...
' K9 m* [, x, q& Z! O% T5 m    flat_networks = provider7 H2 Q3 Z* B2 I; A6 R. q4 C0 g

) Z+ z2 o- C5 u8 H0 R○ In the [securitygroup] section, enable ipset to increase efficiency of security group rules:, k+ F" Q' B* B! I9 K% _
    [securitygroup]! S# i, y9 b& o& B
    # ...
; \  w0 T8 Q+ R6 m    enable_ipset = true- |: _$ E# }+ b! r2 t9 v. u
Configure the Linux bridge agent) Y2 L- Y" B' }/ x" ]4 u3 D
    The Linux bridge agent builds layer-2 (bridging and switching) virtual networking infrastructure for instances and handles security groups.- u8 f' x" {. G4 t
    Edit the /etc/neutron/plugins/ml2/linuxbridge_agent.ini file and complete the following actions:
7 J# f+ _& I! [  Q○ In the [linux_bridge] section, map the provider virtual network to the provider physical network interface:+ C$ Y2 z% H" U; ?# j  J
    [linux_bridge]
7 q" I) U) @6 X# Q+ b7 ?' I6 x0 k    physical_interface_mappings = provider:eht1, U; v) x; o5 ^6 @- o* s) Z4 Z
    使用eth1物理网络接口做为租户的网络连接.
) [5 w+ N8 D- K# Q0 s0 K
# K" d  o! R' Y- o( ]○ In the [vxlan] section, disable VXLAN overlay networks:. D4 r5 R) T. K/ U
    [vxlan]
" r" h! s  m& f" H9 \' O9 A    enable_vxlan = false
- `  ?  P& t( X3 f$ I+ ^/ D" w7 L○ In the [securitygroup] section, enable security groups and configure the Linux bridge iptables firewall driver:
- Q0 t# o) T% [5 L7 `( @# o8 u    [securitygroup]
/ T/ {2 c) w+ C2 L    # ...- m! x5 ?8 g1 |5 x( }3 O
    enable_security_group = true
$ v8 q- {' R' S. O8 I$ Q* U8 @    firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver; \+ `% {* C4 T1 y& V+ k% q

. ]2 h" Z. `. K6 q1 d$ N: J* @4 s○ Ensure your Linux operating system kernel supports network bridge filters by verifying all the following sysctl values are set to 1:
& u+ l8 T! x% L2 q    net.bridge.bridge-nf-call-iptables. _/ G! b8 z( |' G  g# r
    net.bridge.bridge-nf-call-ip6tables
8 {- s& D0 S4 V8 {2 B2 q; Q4 j( s4 ~0 A' h$ f% {; k
    #  modprobe br_netfilter
2 a9 P5 [6 P9 J: {7 z6 |% O    #  vi /etc/sysctl.conf( C" k  R. \" `/ U: D5 [' B) T
    net.bridge.bridge-nf-call-ip6tables = 1& ~. \" o  v8 \. o6 o' p
    net.bridge.bridge-nf-call-iptables = 1 ( h! K4 l8 _+ d3 t& y
    # sysctl -p* w% [2 _  l4 m" w; M' @
    net.bridge.bridge-nf-call-ip6tables = 1
( y  o0 m8 ]9 N$ E& ?% z    net.bridge.bridge-nf-call-iptables = 1* U1 ^+ x4 L) @" H$ l2 d
+ m6 P0 V5 X6 R# L; q
    为了网络支持桥接, 通常的需要加载br_netfilter内核模块. 但这里可以忽略错误,当你重启neutron时会自动加载.) h& w3 g5 ~% {9 W5 T$ t0 X
Configure the DHCP agent
" J# |" ], a; a: d7 [3 |
) b5 j- d! ]# ]' gThe DHCP agent provides DHCP services for virtual networks.
( v+ t& K! M$ ]+ K7 hEdit the /etc/neutron/dhcp_agent.ini file and complete the following actions:+ \1 w8 L: X  ?# a/ S! D3 J
○ 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:
8 b2 _8 C' k( @  Y! \' L[DEFAULT]
0 J6 w# m' y6 v# ...
9 ?0 T+ w4 G, z/ B# r& e3 ]( t; Cinterface_driver = linuxbridge' s$ z& _3 n; f& w" @7 ?
dhcp_driver = neutron.agent.linux.dhcp.Dnsmasq0 N! X% `% A/ L6 ?6 _4 n8 ^5 E, S
enable_isolated_metadata = true
; P, S% \9 b: D6 E8 u8 x
" R- [0 ~$ ?5 S, `% K3 v5 R完成后返回网络配置或继续网络选项2/ s: [3 U3 k3 Z7 b

2 r) ]# @( `+ n) r5 W2 {! K2019-09-04 21:02:50
: h+ V- s5 p# y. @  k2 c5 M% rInstall and configure the Networking components on the controller node.% F8 g2 H$ Z7 ^; Y

2 o5 Y* Q. h' S4 O# w( oInstall the components
, a" v1 r/ z5 O4 z* C# yum install openstack-neutron openstack-neutron-ml2 \; l9 x% Y  l5 S* [  p9 }3 `
  openstack-neutron-linuxbridge ebtables
2 P& M/ Z8 u  l& F* X/ yConfigure the server component$ `  f. M' G: N& }. |
. M; a* m; b+ p
Edit the /etc/neutron/neutron.conf file and complete the following actions:
+ T3 x- F' V1 c○ In the [database] section, configure database access:1 C% l7 R7 s$ {
[database]
" Z+ x5 A- @: d4 e# ...% x% |: N' ^- S7 d7 Z
connection = mysql+pymysql://neutron:neutron123@stack.flex.net/neutron
- A# I+ D- d# L7 ?6 p1 a$ U注意:注释或移除其它连接选项在[database]区域中
) }, G6 V( }( K. l○ In the [DEFAULT] section, enable the Modular Layer 2 (ML2) plug-in, router service, and overlapping IP addresses:
" s3 |( U' w' j[DEFAULT]
) Q9 \4 g5 i( h5 ~; s4 }" s
% \  j, l; p" R) j* z...
2 J: P: m8 v0 R/ g+ _# t0 Zcore_plugin = ml28 M1 g# i0 u$ E* U( z
service_plugins = router# \/ r9 k& d7 t
allow_overlapping_ips = true
' p0 w) F0 t0 O7 C- B/ v○ In the [DEFAULT] section, configure RabbitMQ message queue access:
- _" }% ]7 F7 i" t[DEFAULT]: K+ m) v2 M! Q& t8 M: d
& u) |3 d5 @; j/ g- d7 y5 v. T, s
...# J; b! y; {) v/ D5 g: A
transport_url = rabbit://openstack:openstack123@dbs.flex.net
' ?% v- O* f# |) Q  W○ In the [DEFAULT] and [keystone_authtoken] sections, configure Identity service access:+ h% n' c* z, B1 R: b# r+ c
[DEFAULT]( t5 x3 c  Z# `) _0 F

+ _5 R9 d- F3 ?) S( ?: i4 Z...* @/ ]3 `5 g0 b) Z
auth_strategy = keystone) ], J5 R0 ?  f4 X5 e
+ \! ]% e* [2 ^1 y/ m5 i
[keystone_authtoken]
5 Y. V6 W1 k7 u# o" L# ...: P% J0 k7 d& b. E- u; P% h
www_authenticate_uri = http://stack.flex.net:5000
6 [+ z. i; u2 Q% V; }auth_url = http://stack.flex.net:5000" a; W2 {8 m* g+ O& ^% B
memcached_servers = controller:11211  h7 _0 ~6 i- b9 x* e. `: A( |
auth_type = password4 ^" B: Y" d' u0 s. p5 p, R
project_domain_name = default- C/ \0 t2 e; u5 j2 B$ U
user_domain_name = default
' ~% s- R4 @7 N' @, vproject_name = service
, M% G' ~' y( Z( }7 L5 ?0 Husername = neutron
1 \% K% h  r" V0 b3 ~9 apassword = neutron123
7 y# G8 O: |! q9 |2 Z/ p注意:注释或移除在[keystone_authtoken]区域中其它选项.7 ~+ n0 F4 ]7 u! `% B# K7 i% K# Z
○ In the [DEFAULT] and [nova] sections, configure Networking to notify Compute of network topology changes:
: z; T& o! [3 @[DEFAULT]
; _0 p! [- T/ X0 \# y
6 ]4 }0 y* W1 F3 M, c% p0 {: S# L...$ F/ E* ?1 S4 d8 w6 n8 P4 p0 H
notify_nova_on_port_status_changes = true
- e. h2 W% ^8 c9 V( Ynotify_nova_on_port_data_changes = true* S2 N( \; s: ]
; N! J/ q; n5 {! `$ m2 X+ r
[nova]; B6 `( L+ Y8 }/ C, x' X6 q
# ...7 ^- s! G# e: H8 r) k# K/ y
auth_url = http://stack.flex.net:50005 m- G  h, V/ r0 w4 e/ u6 c
auth_type = password. f0 k' k3 Q) L* \  m
project_domain_name = default
6 q# y; I! K6 \4 Huser_domain_name = default$ M; N* d$ ^2 @) J! e8 ]
region_name = RegionOne# m! E# l% b& T! T1 q4 @$ I
project_name = service
9 U1 h9 J* |( O7 l  m& ^6 dusername = nova
% m; T% I+ M2 s* g7 c  }password = nova123
7 T% r% u; R" D- _1 G" X○ In the [oslo_concurrency] section, configure the lock path:
, Y9 J  ^: @4 z. F/ @6 k2 E[oslo_concurrency]
& U' B, H. i3 V* r* B/ M: p) S& W
* b1 a3 |+ m- c9 u.../ O# N3 c! h. _; u
lock_path = /var/lib/neutron/tmp/ P" f) a, b) q
3. Configure the Modular Layer 2 (ML2) plug-in3 C0 A; R  ~/ Q) `; n- r7 }% ^& C; y
The ML2 plug-in uses the Linux bridge mechanism to build layer-2 (bridging and switching) virtual networking infrastructure for instances.
: N# b3 `) T, H5 H0 qEdit the /etc/neutron/plugins/ml2/ml2_conf.ini file and complete the following actions:$ @2 p( p# N, n
○ In the [ml2] section, enable flat, VLAN, and VXLAN networks:
2 `* v; N' X0 X! G[ml2]3 |+ B0 w% E( X9 C% l! d$ K! v

) E' V; S# {' y* \% u/ a...% D! s  p+ h( B1 t, s
type_drivers = flat,vlan,vxlan
0 I: g/ K' t% p# l7 I9 F' |$ I+ ^○ In the [ml2] section, enable VXLAN self-service networks:* ?( }" r+ p. }8 ~) A3 T+ L" i+ e
[ml2]
- p$ ~! X9 u7 E) y7 Q
3 K% \& P$ p0 |+ A...
" b2 {- G4 T# y) otenant_network_types = vxlan
  `: K; i" G) x5 Q○ In the [ml2] section, enable the Linux bridge and layer-2 population mechanisms:/ M7 Q5 Z0 ~; P& K- o- l1 U
[ml2]4 D4 t& M- C& j# S# C: ?

+ m8 G# q" q5 x: ]...
" q/ J  p$ [# ^/ o& y: q/ ^  Kmechanism_drivers = linuxbridge,l2population
; \: L! a8 Y/ H2 Z0 X0 X4 o9 N/ \注意:配置ML2插件后, 从type_drivers移除这个选项会导致数据库不一致并且Linux bridge只支持VXLAN overlay network.
" x% \/ O7 k$ B. ^' X$ G○ In the [ml2] section, enable the port security extension driver:
5 i1 _8 e; G: c9 \2 U; O' T[ml2]
3 }* n" l4 P& b( D4 u
1 M: |& U; j$ Z...  s  }. r, h0 b
extension_drivers = port_security( S0 a' g2 R/ w# i' ]3 z9 r
○ In the [ml2_type_flat] section, configure the provider virtual network as a flat network:
2 h' l( Y! M% s6 c1 S7 q, ~6 z/ O[ml2_type_flat]* C$ ?+ ?& r* e2 }3 J( \0 O

# r, y+ i" {: Y& P1 D0 N5 ~...
! l0 p3 T' W) h/ ?2 F+ Q! d8 ^4 ]' Pflat_networks = provider
" f% e  k, J! R. B: o& D; a○ In the [ml2_type_vxlan] section, configure the VXLAN network identifier range for self-service networks:( q# Y" C/ \% w' }
[ml2_type_vxlan]
; n, d& ]: i! i, Q6 N. d, f- k
+ m: }5 h/ r, F6 {( U$ X...
- s# w- }$ c) h' yvni_ranges = 1:1000
# a- ~/ @( h  n4 d9 n# F4 o6 w○ In the [securitygroup] section, enable ipset to increase efficiency of security group rules:
" S6 a# e) r& K+ f8 y[securitygroup]6 G& v# k3 ^2 `  u

+ m- t0 z. O. h6 ^  n* P...
: J2 {. K( A! k2 U# o2 n. d7 H! oenable_ipset = true
; Z5 F% z8 j# g: y' Y) A$ w& g4. Configure the Linux bridge agent
* Z0 ]- ?1 L/ r! T+ t( d' EThe Linux bridge agent builds layer-2 (bridging and switching) virtual networking infrastructure for instances and handles security groups.  K& N0 h5 Y8 p% l( q7 s5 a; Q
Edit the /etc/neutron/plugins/ml2/linuxbridge_agent.ini file and complete the following actions:* @  Q2 b1 N: B
○ In the [linux_bridge] section, map the provider virtual network to the provider physical network interface:
; C# k' p9 @. ~[linux_bridge]- K9 i$ H- ]& O( E# ~3 `2 l
physical_interface_mappings = provider:external:eth1
  s9 y; Z; i: B& C
6 w* j" j0 n- A+ |8 _) y! `' T3 hReplace PROVIDER_INTERFACE_NAME with the name of the underlying provider physical network interface." A7 J' A. z; ^3 B! n0 X  h, f
○ 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:3 R% A, N6 A6 f; u% {
[vxlan]
, P% ?) u" ^" \) penable_vxlan = true6 d: }  Q4 e7 I
local_ip = OVERLAY_INTERFACE_IP_ADDRESS/ o7 F5 e! d9 p# W9 f1 v
l2_population = true
* _& s: J0 A2 ]2 E$ V$ t! x3 n. J
8 t: y+ N: u$ S1 z# CReplace 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 N* r$ A' U6 U* p5 J○ In the [securitygroup] section, enable security groups and configure the Linux bridge iptables firewall driver:2 t8 T$ \! q$ l
[securitygroup], }% f  B% ?' J; Y# d+ f
  o# n$ x' [  R% ^
...
7 R3 R% r# x% T1 m1 S" O. K! Uenable_security_group = true, u9 x; H% Z1 e7 Q
firewall_driver = neutron.agent.linux.iptables_firewall.IptablesFirewallDriver
( y" p( w* p0 l, ?○ Ensure your Linux operating system kernel supports network bridge filters by verifying all the following sysctl values are set to 1:* F+ |  s( P2 q$ `3 U; P. Z9 e
net.bridge.bridge-nf-call-iptables. I) ^4 c# ~9 J5 D
net.bridge.bridge-nf-call-ip6tables
( q0 ~$ F0 z$ a% v, C
7 e( M3 Z7 I9 `/ F8 c" b+ d% o4 P. ^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.
/ o  T2 T& a4 G. ~* {+ V5. Configure the layer-3 agent
* K( ]( _+ E: K9 P9 MThe Layer-3 (L3) agent provides routing and NAT services for self-service virtual networks.
6 v* J7 Y+ m9 H  |  r6 M! YEdit the /etc/neutron/l3_agent.ini file and complete the following actions:2 D& O' ~, t& d  y$ q
○ In the [DEFAULT] section, configure the Linux bridge interface driver and external network bridge:
. _6 D5 W' k9 t$ F. s! ~1 d[DEFAULT]
0 w- {+ m& l& ]5 F9 k* A) B/ J+ e" A2 J/ \9 I
...  G8 d' Z' C& [/ S8 m; h
interface_driver = linuxbridge- o9 v4 C+ Q! u: S4 c. T
6. Configure the DHCP agent- a% W- m, L/ V9 q! P6 n6 v1 I5 L* b
The DHCP agent provides DHCP services for virtual networks.+ p% w4 G" z! p* r
Edit the /etc/neutron/dhcp_agent.ini file and complete the following actions:* \7 Q% S1 N, B8 a1 X
○ 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:8 b% x( k: T* A. A$ n( m
[DEFAULT]
0 \; m' z& q! y2 ?7 r$ i8 c3 u2 `" l4 P* L. ]& M5 k$ ~
...- \. |8 D. _$ Q) o4 D3 h5 \1 z9 f
interface_driver = linuxbridge
! n* s: K+ j4 l' V) ?9 kdhcp_driver = neutron.agent.linux.dhcp.Dnsmasq
7 |) w) `- z9 I& ~% i# ]# S& |4 eenable_isolated_metadata = true
- s# E% S8 S" L) [完成后返回网络配置
7 C$ j9 W7 ~9 h2 x. Y7 B6 M! n9 P/ H& X& J! I+ D# {$ P; W- q
5 m; d! j' t0 f9 |9 I9 Z! F: ^: I2 R

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2019-10-8 08:08:40 | 显示全部楼层
2019-09-04 21:25:512 Q2 k* m* Y8 l, s2 ?; ^# K
Install the components
# W2 b- ?. x  d* W# yum install openstack-neutron-linuxbridge ebtables ipset' S0 k: u3 S- v# g
Configure the common component* `* M6 J& ~. U# t: e: U. }
    The Networking common component configuration includes the authentication mechanism, message queue, and plug-in.
) p) t- W0 n8 h, c2 i' X    Edit the /etc/neutron/neutron.conf file and complete the following actions:  A/ |# u8 j- s6 l/ A5 }
○ In the [database] section, comment out any connection options because compute nodes do not directly access the database.( s! s" y1 e4 _8 e& }4 q! J
○ In the [DEFAULT] section, configure RabbitMQ message queue access:
/ i, u7 t) f9 E; X; N    [DEFAULT]; K) C- g: d$ ]) a
    # ...
+ u9 r5 M4 ]3 L5 _. b. ~' c    transport_url = rabbit://openstack:openstack123@dbs.flex.net/ w' V0 V2 ^# p# J" d
, W% U1 ?* K& d2 S) A$ I( ]
○ In the [DEFAULT] and [keystone_authtoken] sections, configure Identity service access:
, G1 O( c' A' D" M+ r+ l# e    [DEFAULT]
, q4 H% p1 X2 f: _$ h- }; O    # ..., B0 _4 f- {; E4 r3 a
    auth_strategy = keystone% f% n2 P1 T0 l: B# P

: P9 q5 b# R; A    [keystone_authtoken]2 D6 F+ v* }) M! \' M1 w
    # ...- E4 V$ @& B) H" ]8 s7 E% Q3 I. q
    www_authenticate_uri = http://stack.flex.net:5000
) |) ?0 p, I2 c    auth_url = http://stack.flex.net:5000
5 P0 g. S9 a1 {2 r  s    memcached_servers = dbs.flex.net:11211
% w  E( h0 R. E* p5 k. g# x5 Z    auth_type = password
  P" ]( x2 k- o, n+ _    project_domain_name = default7 [. j! |# D% }& G- ~
    user_domain_name = default
0 b6 l* A3 A, `0 Q# y    project_name = service; t( a+ A" g: L* a' A' c0 n
    username = neutron
/ v0 U9 [3 d/ b& O) I    password = neutron123
0 v! M- J( X) g3 m    Note: Comment out or remove any other options in the [keystone_authtoken] section.. s  ?# u$ u* g* L
○ In the [oslo_concurrency] section, configure the lock path:: ^1 f, o% S8 E1 j' J
    [oslo_concurrency]
0 K: K; X. s4 E" `7 U    # ...# X* J: x7 v  i$ J; |& b$ @
    lock_path = /var/lib/neutron/tmp, o5 f9 h! g8 u* Y
Configure networking options
: [* \4 K/ Q) C6 O, b* Q. K0 k5 H+ p9 ^' [9 n4 K3 W
选择下列网络选项中的一个,或两个全选,参看下面的两个章节。并返回这里再向下继续配置.3 H) L- ^3 Q3 l% G+ }
○ Networking Option 1: Provider networks
& i: G" C, D1 W8 _' }○ Networking Option 2: Self-service networks& F- Z4 g$ q8 a! K0 R
+ s9 G- U  C" s9 @
Configure the Compute service to use the Networking service" c- D, a% w  ~+ s7 F0 z0 C  h
Edit the /etc/nova/nova.conf file and complete the following actions:, ]# a- M$ g" x8 l
○ In the [neutron] section, configure access parameters:. x: ?! P3 C8 p
[neutron]
  h& m3 U: t$ Y8 [# ...
; W9 `# E8 o: kurl = http://stack.flex.net:9696; [1 ?; A, f( r/ }# b. b4 B
auth_url = http://stack.flex.net:50004 p# I7 _( \- n6 r  b2 z" @4 h
auth_type = password
/ W- n! c0 t1 V  X: K! ^project_domain_name = default
3 C% a5 k$ b$ g0 fuser_domain_name = default& b: n! v* E, ~
region_name = RegionOne
* m, ^$ u% p" A3 w! P9 e8 S6 Sproject_name = service: M$ K+ S% {7 [3 F( N0 K9 m
username = neutron
( r) G6 p0 Z* e$ hpassword = neutron123) V( i( S7 \6 r6 n
Finalize installation+ s& n- O3 I7 E6 x0 z1 n) {. o
○ Restart the Compute service:# A4 F$ F4 ]+ G1 e
# systemctl restart openstack-nova-compute.service$ P& G! Z9 b$ z8 Z& H0 z7 J: k
○ Start the Linux bridge agent and configure it to start when the system boots:- [+ e$ d6 K1 s% A4 v. l' C& j
# systemctl enable neutron-linuxbridge-agent.service
& E* a) F# B( j- G# systemctl start neutron-linuxbridge-agent.service
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 00:58 , Processed in 0.027794 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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